summaryrefslogtreecommitdiff
path: root/debian
diff options
context:
space:
mode:
authordoko <doko@6ca36cf4-e1d1-0310-8c6f-e303bb2178ca>2014-07-16 15:18:20 +0000
committerdoko <doko@6ca36cf4-e1d1-0310-8c6f-e303bb2178ca>2014-07-16 15:18:20 +0000
commite09b1cd47d2b0c2e09588d8d203747241869cf54 (patch)
treefcc0c36fd434d1341366344f1583ceb4e8a2aea0 /debian
parent292b278a007cfc07728b98ec0933008d4ab87ac4 (diff)
downloadgcc-49-e09b1cd47d2b0c2e09588d8d203747241869cf54.tar.gz
* GCC 4.9.1 release.
* Update GDC form the 4.9 branch (20140712). git-svn-id: svn://svn.debian.org/svn/gcccvs/branches/sid/gcc-4.9@7507 6ca36cf4-e1d1-0310-8c6f-e303bb2178ca
Diffstat (limited to 'debian')
-rw-r--r--debian/changelog7
-rw-r--r--debian/patches/gcc-base-version.diff4
-rw-r--r--debian/patches/gdc-4.9.diff56
-rw-r--r--debian/patches/gdc-frontend-posix.diff4
-rw-r--r--debian/patches/svn-doc-updates.diff45
-rw-r--r--debian/patches/svn-updates.diff59500
-rw-r--r--debian/rules.d/binary-cxx.mk3
-rw-r--r--debian/rules.patch2
8 files changed, 70 insertions, 59551 deletions
diff --git a/debian/changelog b/debian/changelog
index 9b480aa..9ba6ad1 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+gcc-4.9 (4.9.1-1) unstable; urgency=medium
+
+ * GCC 4.9.1 release.
+ * Update GDC form the 4.9 branch (20140712).
+
+ -- Matthias Klose <doko@debian.org> Wed, 16 Jul 2014 17:15:14 +0200
+
gcc-4.9 (4.9.0-11) unstable; urgency=medium
* GCC 4.9.1 release candidate 1.
diff --git a/debian/patches/gcc-base-version.diff b/debian/patches/gcc-base-version.diff
index 3ee47a2..f680b83 100644
--- a/debian/patches/gcc-base-version.diff
+++ b/debian/patches/gcc-base-version.diff
@@ -5,14 +5,14 @@ Index: b/src/gcc/BASE-VER
--- a/src/gcc/BASE-VER
+++ b/src/gcc/BASE-VER
@@ -1 +1 @@
--4.9.0
+-4.9.1
+4.9
Index: b/src/gcc/FULL-VER
===================================================================
--- /dev/null
+++ b/src/gcc/FULL-VER
@@ -0,0 +1 @@
-+4.9.0
++4.9.1
Index: b/src/gcc/Makefile.in
===================================================================
--- a/src/gcc/Makefile.in
diff --git a/debian/patches/gdc-4.9.diff b/debian/patches/gdc-4.9.diff
index d571f98..dad1c02 100644
--- a/debian/patches/gdc-4.9.diff
+++ b/debian/patches/gdc-4.9.diff
@@ -5,7 +5,7 @@ Index: b/src/gcc/config/rs6000/rs6000.c
===================================================================
--- a/src/gcc/config/rs6000/rs6000.c
+++ b/src/gcc/config/rs6000/rs6000.c
-@@ -24899,7 +24899,8 @@ rs6000_output_function_epilogue (FILE *f
+@@ -24935,7 +24935,8 @@ rs6000_output_function_epilogue (FILE *f
either, so for now use 0. */
if (! strcmp (language_string, "GNU C")
|| ! strcmp (language_string, "GNU GIMPLE")
@@ -19,7 +19,23 @@ Index: b/src/gcc/dwarf2out.c
===================================================================
--- a/src/gcc/dwarf2out.c
+++ b/src/gcc/dwarf2out.c
-@@ -19295,6 +19295,8 @@ gen_compile_unit_die (const char *filena
+@@ -4616,6 +4616,15 @@ is_ada (void)
+ return lang == DW_LANG_Ada95 || lang == DW_LANG_Ada83;
+ }
+
++/* Return TRUE if the language is D. */
++static inline bool
++is_dlang (void)
++{
++ unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
++
++ return lang == DW_LANG_D;
++}
++
+ /* Remove the specified attribute if present. */
+
+ static void
+@@ -19295,6 +19304,8 @@ gen_compile_unit_die (const char *filena
language = DW_LANG_C89;
if (strcmp (language_string, "GNU C++") == 0)
language = DW_LANG_C_plus_plus;
@@ -28,6 +44,42 @@ Index: b/src/gcc/dwarf2out.c
else if (strcmp (language_string, "GNU F77") == 0)
language = DW_LANG_Fortran77;
else if (strcmp (language_string, "GNU Pascal") == 0)
+@@ -20236,7 +20247,7 @@ declare_in_namespace (tree thing, dw_die
+
+ if (ns_context != context_die)
+ {
+- if (is_fortran ())
++ if (is_fortran () || is_dlang ())
+ return ns_context;
+ if (DECL_P (thing))
+ gen_decl_die (thing, NULL, ns_context);
+@@ -20259,7 +20270,7 @@ gen_namespace_die (tree decl, dw_die_ref
+ {
+ /* Output a real namespace or module. */
+ context_die = setup_namespace_context (decl, comp_unit_die ());
+- namespace_die = new_die (is_fortran ()
++ namespace_die = new_die (is_fortran () || is_dlang ()
+ ? DW_TAG_module : DW_TAG_namespace,
+ context_die, decl);
+ /* For Fortran modules defined in different CU don't add src coords. */
+@@ -20316,7 +20327,7 @@ gen_decl_die (tree decl, tree origin, dw
+ break;
+
+ case CONST_DECL:
+- if (!is_fortran () && !is_ada ())
++ if (!is_fortran () && !is_ada () && !is_dlang ())
+ {
+ /* The individual enumerators of an enum type get output when we output
+ the Dwarf representation of the relevant enum type itself. */
+@@ -20786,7 +20797,7 @@ dwarf2out_decl (tree decl)
+ case CONST_DECL:
+ if (debug_info_level <= DINFO_LEVEL_TERSE)
+ return;
+- if (!is_fortran () && !is_ada ())
++ if (!is_fortran () && !is_ada () && !is_dlang ())
+ return;
+ if (TREE_STATIC (decl) && decl_function_context (decl))
+ context_die = lookup_decl_die (DECL_CONTEXT (decl));
Index: b/src/gcc/gcc.c
===================================================================
--- a/src/gcc/gcc.c
diff --git a/debian/patches/gdc-frontend-posix.diff b/debian/patches/gdc-frontend-posix.diff
index 71cfe16..3c70021 100644
--- a/debian/patches/gdc-frontend-posix.diff
+++ b/debian/patches/gdc-frontend-posix.diff
@@ -1,12 +1,14 @@
# DP: Fix build of the D frontend on the Hurd and KFreeBSD.
+Index: b/src/gcc/d/dfrontend/object.h
+===================================================================
--- a/src/gcc/d/dfrontend/object.h
+++ b/src/gcc/d/dfrontend/object.h
@@ -10,7 +10,7 @@
#ifndef OBJECT_H
#define OBJECT_H
--#define POSIX (linux || __APPLE__ || __FreeBSD__ || __OpenBSD__ || __sun)
+-#define POSIX (__linux__ || __APPLE__ || __FreeBSD__ || __OpenBSD__ || __sun)
+#define POSIX (__linux__ || __GLIBC__ || __gnu_hurd__ || __APPLE__ || __FreeBSD__ || __OpenBSD__ || __sun)
#if __DMC__
diff --git a/debian/patches/svn-doc-updates.diff b/debian/patches/svn-doc-updates.diff
index 001be64..03ba44a 100644
--- a/debian/patches/svn-doc-updates.diff
+++ b/debian/patches/svn-doc-updates.diff
@@ -1,49 +1,6 @@
# DP: updates from the 4.9 branch upto 20140423 (documentation).
-svn diff svn://gcc.gnu.org/svn/gcc/tags/gcc_4_9_0_release svn://gcc.gnu.org/svn/gcc/branches/gcc-4_9-branch \
+svn diff svn://gcc.gnu.org/svn/gcc/tags/gcc_4_9_1_release svn://gcc.gnu.org/svn/gcc/branches/gcc-4_9-branch \
| sed -r 's,^--- (\S+)\t(\S+)(.*)$,--- a/src/\1\t\2,;s,^\+\+\+ (\S+)\t(\S+)(.*)$,+++ b/src/\1\t\2,' \
| awk '/^Index:.*\.texi/ {skip=0; print; next} /^Index:/ {skip=1; next} skip==0'
-Index: gcc/doc/invoke.texi
-===================================================================
---- a/src/gcc/doc/invoke.texi (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/doc/invoke.texi (.../branches/gcc-4_9-branch)
-@@ -825,7 +825,8 @@
- @gccoptlist{-meb -mel -mno-crt0}
-
- @emph{MSP430 Options}
--@gccoptlist{-msim -masm-hex -mmcu= -mcpu= -mlarge -msmall -mrelax}
-+@gccoptlist{-msim -masm-hex -mmcu= -mcpu= -mlarge -msmall -mrelax @gol
-+-mhwmult=}
-
- @emph{NDS32 Options}
- @gccoptlist{-mbig-endian -mlittle-endian @gol
-@@ -18214,6 +18215,28 @@
- linker to perform certain optimizations that cannot be done until
- the final link.
-
-+@item mhwmult=
-+@opindex mhwmult=
-+Describes the type of hardware multiply supported by the target.
-+Accepted values are @code{none} for no hardware multiply, @code{16bit}
-+for the original 16-bit-only multiply supported by early MCUs.
-+@code{32bit} for the 16/32-bit multiply supported by later MCUs and
-+@code{f5series} for the 16/32-bit multiply supported by F5-series MCUs.
-+A value of @code{auto} can also be given. This tells GCC to deduce
-+the hardware multiply support based upon the MCU name provided by the
-+@option{-mmcu} option. If no @option{-mmcu} option is specified then
-+@code{32bit} hardware multiply support is assumed. @code{auto} is the
-+default setting.
-+
-+Hardware multiplies are normally performed by calling a library
-+routine. This saves space in the generated code. When compiling at
-+@code{-O3} or higher however the hardware multiplier is invoked
-+inline. This makes for bigger, but faster code.
-+
-+The hardware multiply routines disable interrupts whilst running and
-+restore the previous interrupt state when they finish. This makes
-+them safe to use inside interrupt handlers as well as in normal code.
-+
- @end table
-
- @node NDS32 Options
diff --git a/debian/patches/svn-updates.diff b/debian/patches/svn-updates.diff
index a658f5b..c95af02 100644
--- a/debian/patches/svn-updates.diff
+++ b/debian/patches/svn-updates.diff
@@ -8,59505 +8,7 @@ Sat Jul 12 11:02:22 UTC 2014 (revision 212479)
EOF
}
-LANG=C svn diff svn://gcc.gnu.org/svn/gcc/tags/gcc_4_9_0_release svn://gcc.gnu.org/svn/gcc/branches/gcc-4_9-branch \
+LANG=C svn diff svn://gcc.gnu.org/svn/gcc/tags/gcc_4_9_1_release svn://gcc.gnu.org/svn/gcc/branches/gcc-4_9-branch \
| sed -r 's,^--- (\S+)\t(\S+)(.*)$,--- a/src/\1\t\2,;s,^\+\+\+ (\S+)\t(\S+)(.*)$,+++ b/src/\1\t\2,' \
| awk '/^Index:.*\.(class|texi)/ {skip=1; next} /^Index:/ { skip=0 } skip==0'
-Index: libitm/clearcap.map
-===================================================================
---- a/src/libitm/clearcap.map (.../tags/gcc_4_9_0_release)
-+++ b/src/libitm/clearcap.map (.../branches/gcc-4_9-branch)
-@@ -1,14 +0,0 @@
--# Clear hardware capabilities emitted by Sun as: calls to the x86_avx.c
--# functions are only emitted with -mavx.
--#
--# The v1 mapfile syntax has no support for clearing specific capabilities,
--# so clear everything.
--#
--hwcap_1 = V0x0 OVERRIDE;
--#
--# If we can assume mapfile v2 syntax, we can specificially clear AVX.
--#
--#$mapfile_version 2
--#CAPABILITY {
--# HW -= AVX;
--#};
-Index: libitm/configure
-===================================================================
---- a/src/libitm/configure (.../tags/gcc_4_9_0_release)
-+++ b/src/libitm/configure (.../branches/gcc-4_9-branch)
-@@ -16739,10 +16739,10 @@
-
-
- ac_save_LDFLAGS="$LDFLAGS"
-- LDFLAGS="$LFLAGS -Wl,-M,$srcdir/clearcap.map"
-+ LDFLAGS="$LFLAGS -mclear-hwcap"
-
-- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld that supports -Wl,-M,mapfile" >&5
--$as_echo_n "checking for ld that supports -Wl,-M,mapfile... " >&6; }
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -mclear-hwcap" >&5
-+$as_echo_n "checking for -mclear-hwcap... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
-
-@@ -16762,7 +16762,7 @@
- rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- if test "$ac_hwcap_ldflags" = "yes"; then
-- HWCAP_LDFLAGS="-Wl,-M,$srcdir/clearcap.map $HWCAP_LDFLAGS"
-+ HWCAP_LDFLAGS="-mclear-hwcap $HWCAP_LDFLAGS"
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_hwcap_ldflags" >&5
- $as_echo "$ac_hwcap_ldflags" >&6; }
-Index: libitm/ChangeLog
-===================================================================
---- a/src/libitm/ChangeLog (.../tags/gcc_4_9_0_release)
-+++ b/src/libitm/ChangeLog (.../branches/gcc-4_9-branch)
-@@ -1,3 +1,10 @@
-+2014-05-28 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
-+
-+ * acinclude.m4 (LIBITM_CHECK_LINKER_HWCAP): Check for
-+ -mclear-hwcap instead.
-+ * configure: Regenerate.
-+ * clearcap.map: Remove.
-+
- 2014-04-22 Release Manager
-
- * GCC 4.9.0 released.
-Index: libitm/acinclude.m4
-===================================================================
---- a/src/libitm/acinclude.m4 (.../tags/gcc_4_9_0_release)
-+++ b/src/libitm/acinclude.m4 (.../branches/gcc-4_9-branch)
-@@ -301,10 +301,10 @@
-
- dnl
- dnl Check if the linker used supports linker maps to clear hardware
--dnl capabilities. This is only supported by Sun ld at the moment.
-+dnl capabilities. This is only supported on Solaris at the moment.
- dnl
- dnl Defines:
--dnl HWCAP_LDFLAGS='-Wl,-M,clearcap.map' if possible
-+dnl HWCAP_LDFLAGS=-mclear-hwcap if possible
- dnl LD (as a side effect of testing)
- dnl
- AC_DEFUN([LIBITM_CHECK_LINKER_HWCAP], [
-@@ -312,12 +312,12 @@
- AC_REQUIRE([AC_PROG_LD])
-
- ac_save_LDFLAGS="$LDFLAGS"
-- LDFLAGS="$LFLAGS -Wl,-M,$srcdir/clearcap.map"
-+ LDFLAGS="$LFLAGS -mclear-hwcap"
-
-- AC_MSG_CHECKING([for ld that supports -Wl,-M,mapfile])
-+ AC_MSG_CHECKING([for -mclear-hwcap])
- AC_TRY_LINK([], [return 0;], [ac_hwcap_ldflags=yes],[ac_hwcap_ldflags=no])
- if test "$ac_hwcap_ldflags" = "yes"; then
-- HWCAP_LDFLAGS="-Wl,-M,$srcdir/clearcap.map $HWCAP_LDFLAGS"
-+ HWCAP_LDFLAGS="-mclear-hwcap $HWCAP_LDFLAGS"
- fi
- AC_MSG_RESULT($ac_hwcap_ldflags)
-
-Index: libgomp/omp_lib.f90.in
-===================================================================
---- a/src/libgomp/omp_lib.f90.in (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/omp_lib.f90.in (.../branches/gcc-4_9-branch)
-@@ -42,7 +42,7 @@
- module omp_lib
- use omp_lib_kinds
- implicit none
-- integer, parameter :: openmp_version = 201107
-+ integer, parameter :: openmp_version = 201307
-
- interface
- subroutine omp_init_lock (svar)
-Index: libgomp/ChangeLog
-===================================================================
---- a/src/libgomp/ChangeLog (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/ChangeLog (.../branches/gcc-4_9-branch)
-@@ -1,3 +1,153 @@
-+2014-06-30 Jakub Jelinek <jakub@redhat.com>
-+
-+ Backported from mainline
-+ 2014-06-25 Jakub Jelinek <jakub@redhat.com>
-+
-+ * testsuite/libgomp.fortran/simd5.f90: New test.
-+ * testsuite/libgomp.fortran/simd6.f90: New test.
-+ * testsuite/libgomp.fortran/simd7.f90: New test.
-+
-+ 2014-06-24 Jakub Jelinek <jakub@redhat.com>
-+
-+ * testsuite/libgomp.fortran/aligned1.f03: New test.
-+ * testsuite/libgomp.fortran/nestedfn5.f90: New test.
-+ * testsuite/libgomp.fortran/target7.f90: Surround loop spawning
-+ tasks with !$omp parallel !$omp single.
-+ * testsuite/libgomp.fortran/target8.f90: New test.
-+ * testsuite/libgomp.fortran/udr4.f90 (foo UDR, bar UDR): Adjust
-+ not to use trim in the combiner, instead call elemental function.
-+ (fn): New elemental function.
-+ * testsuite/libgomp.fortran/udr6.f90 (do_add, dp_add, dp_init):
-+ Make elemental.
-+ * testsuite/libgomp.fortran/udr7.f90 (omp_priv, omp_orig, omp_out,
-+ omp_in): Likewise.
-+ * testsuite/libgomp.fortran/udr12.f90: New test.
-+ * testsuite/libgomp.fortran/udr13.f90: New test.
-+ * testsuite/libgomp.fortran/udr14.f90: New test.
-+ * testsuite/libgomp.fortran/udr15.f90: New test.
-+
-+ 2014-06-18 Jakub Jelinek <jakub@redhat.com>
-+
-+ * omp_lib.f90.in (openmp_version): Set to 201307.
-+ * omp_lib.h.in (openmp_version): Likewise.
-+ * testsuite/libgomp.c/target-8.c: New test.
-+ * testsuite/libgomp.fortran/declare-simd-1.f90: Add notinbranch
-+ and inbranch clauses.
-+ * testsuite/libgomp.fortran/depend-3.f90: New test.
-+ * testsuite/libgomp.fortran/openmp_version-1.f: Adjust for new
-+ openmp_version.
-+ * testsuite/libgomp.fortran/openmp_version-2.f90: Likewise.
-+ * testsuite/libgomp.fortran/target1.f90: New test.
-+ * testsuite/libgomp.fortran/target2.f90: New test.
-+ * testsuite/libgomp.fortran/target3.f90: New test.
-+ * testsuite/libgomp.fortran/target4.f90: New test.
-+ * testsuite/libgomp.fortran/target5.f90: New test.
-+ * testsuite/libgomp.fortran/target6.f90: New test.
-+ * testsuite/libgomp.fortran/target7.f90: New test.
-+
-+ 2014-06-10 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR fortran/60928
-+ * testsuite/libgomp.fortran/allocatable9.f90: New test.
-+ * testsuite/libgomp.fortran/allocatable10.f90: New test.
-+ * testsuite/libgomp.fortran/allocatable11.f90: New test.
-+ * testsuite/libgomp.fortran/allocatable12.f90: New test.
-+ * testsuite/libgomp.fortran/alloc-comp-1.f90: New test.
-+ * testsuite/libgomp.fortran/alloc-comp-2.f90: New test.
-+ * testsuite/libgomp.fortran/alloc-comp-3.f90: New test.
-+ * testsuite/libgomp.fortran/associate1.f90: New test.
-+ * testsuite/libgomp.fortran/associate2.f90: New test.
-+ * testsuite/libgomp.fortran/procptr1.f90: New test.
-+
-+ 2014-06-06 Jakub Jelinek <jakub@redhat.com>
-+
-+ * testsuite/libgomp.fortran/simd1.f90: New test.
-+ * testsuite/libgomp.fortran/udr1.f90: New test.
-+ * testsuite/libgomp.fortran/udr2.f90: New test.
-+ * testsuite/libgomp.fortran/udr3.f90: New test.
-+ * testsuite/libgomp.fortran/udr4.f90: New test.
-+ * testsuite/libgomp.fortran/udr5.f90: New test.
-+ * testsuite/libgomp.fortran/udr6.f90: New test.
-+ * testsuite/libgomp.fortran/udr7.f90: New test.
-+ * testsuite/libgomp.fortran/udr8.f90: New test.
-+ * testsuite/libgomp.fortran/udr9.f90: New test.
-+ * testsuite/libgomp.fortran/udr10.f90: New test.
-+ * testsuite/libgomp.fortran/udr11.f90: New test.
-+
-+ 2014-05-27 Uros Bizjak <ubizjak@gmail.com>
-+
-+ * testsuite/libgomp.fortran/declare-simd-1.f90: Require
-+ vect_simd_clones effective target.
-+ * testsuite/libgomp.fortran/declare-simd-2.f90: Ditto.
-+
-+ 2014-05-11 Jakub Jelinek <jakub@redhat.com>
-+
-+ * testsuite/libgomp.fortran/cancel-do-1.f90: New test.
-+ * testsuite/libgomp.fortran/cancel-do-2.f90: New test.
-+ * testsuite/libgomp.fortran/cancel-parallel-1.f90: New test.
-+ * testsuite/libgomp.fortran/cancel-parallel-3.f90: New test.
-+ * testsuite/libgomp.fortran/cancel-sections-1.f90: New test.
-+ * testsuite/libgomp.fortran/cancel-taskgroup-2.f90: New test.
-+ * testsuite/libgomp.fortran/declare-simd-1.f90: New test.
-+ * testsuite/libgomp.fortran/declare-simd-2.f90: New test.
-+ * testsuite/libgomp.fortran/declare-simd-3.f90: New test.
-+ * testsuite/libgomp.fortran/depend-1.f90: New test.
-+ * testsuite/libgomp.fortran/depend-2.f90: New test.
-+ * testsuite/libgomp.fortran/omp_atomic5.f90: New test.
-+ * testsuite/libgomp.fortran/simd1.f90: New test.
-+ * testsuite/libgomp.fortran/simd2.f90: New test.
-+ * testsuite/libgomp.fortran/simd3.f90: New test.
-+ * testsuite/libgomp.fortran/simd4.f90: New test.
-+ * testsuite/libgomp.fortran/taskgroup1.f90: New test.
-+
-+2014-06-24 Jakub Jelinek <jakub@redhat.com>
-+
-+ * testsuite/libgomp.c/for-2.c: Define SC to static for
-+ #pragma omp for simd testing.
-+ * testsuite/libgomp.c/for-2.h (SC): Define if not defined.
-+ (N(f5), N(f6), N(f7), N(f8), N(f10), N(f12), N(f14)): Use
-+ SC macro.
-+ * testsuite/libgomp.c/simd-14.c: New test.
-+ * testsuite/libgomp.c/simd-15.c: New test.
-+ * testsuite/libgomp.c/simd-16.c: New test.
-+ * testsuite/libgomp.c/simd-17.c: New test.
-+ * testsuite/libgomp.c++/for-10.C: Define SC to static for
-+ #pragma omp for simd testing.
-+ * testsuite/libgomp.c++/simd10.C: New test.
-+ * testsuite/libgomp.c++/simd11.C: New test.
-+ * testsuite/libgomp.c++/simd12.C: New test.
-+ * testsuite/libgomp.c++/simd13.C: New test.
-+
-+2014-05-21 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR middle-end/61252
-+ * testsuite/libgomp.c++/simd-9.C: New test.
-+
-+2014-05-18 Uros Bizjak <ubizjak@gmail.com>
-+
-+ * libgomp.texi (Runitme Library Routines): Remove multiple @menu.
-+ (Environment Variables) Move OMP_PROC_BIND and OMP_STACKSIZE node
-+ texts according to their @menu entry positions.
-+
-+2014-05-02 Jakub Jelinek <jakub@redhat.com>
-+
-+ * testsuite/libgomp.c/simd-10.c: New test.
-+ * testsuite/libgomp.c/simd-11.c: New test.
-+ * testsuite/libgomp.c/simd-12.c: New test.
-+ * testsuite/libgomp.c/simd-13.c: New test.
-+
-+2014-04-24 Jakub Jelinek <jakub@redhat.com>
-+
-+ * testsuite/libgomp.c++/atomic-14.C: Allow seq_cst and
-+ atomic type clauses in any order and optional comma in between.
-+ * testsuite/libgomp.c++/atomic-15.C: Likewise.
-+ * testsuite/libgomp.c/atomic-17.c: Likewise.
-+
-+ * testsuite/libgomp.c/simd-7.c: New test.
-+ * testsuite/libgomp.c/simd-8.c: New test.
-+ * testsuite/libgomp.c/simd-9.c: New test.
-+ * testsuite/libgomp.c/loop-16.c: New test.
-+
- 2014-04-22 Release Manager
-
- * GCC 4.9.0 released.
-Index: libgomp/testsuite/libgomp.c++/simd10.C
-===================================================================
---- a/src/libgomp/testsuite/libgomp.c++/simd10.C (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.c++/simd10.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,6 @@
-+// { dg-do run }
-+// { dg-options "-O2" }
-+// { dg-additional-options "-msse2" { target sse2_runtime } }
-+// { dg-additional-options "-mavx" { target avx_runtime } }
-+
-+#include "../libgomp.c/simd-14.c"
-Index: libgomp/testsuite/libgomp.c++/atomic-15.C
-===================================================================
---- a/src/libgomp/testsuite/libgomp.c++/atomic-15.C (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.c++/atomic-15.C (.../branches/gcc-4_9-branch)
-@@ -14,13 +14,13 @@
- v = x;
- if (v != 3)
- abort ();
-- #pragma omp atomic update seq_cst
-+ #pragma omp atomic seq_cst update
- x = 3 * 2 * 1 + x;
-- #pragma omp atomic read seq_cst
-+ #pragma omp atomic read, seq_cst
- v = x;
- if (v != 9)
- abort ();
-- #pragma omp atomic capture seq_cst
-+ #pragma omp atomic seq_cst, capture
- v = x = x | 16;
- if (v != 25)
- abort ();
-@@ -28,15 +28,15 @@
- v = x = x + 14 * 2 / 4;
- if (v != 32)
- abort ();
-- #pragma omp atomic capture seq_cst
-+ #pragma omp atomic seq_cst capture
- v = x = 5 | x;
- if (v != 37)
- abort ();
-- #pragma omp atomic capture seq_cst
-+ #pragma omp atomic capture, seq_cst
- v = x = 40 + 12 - 2 - 7 - x;
- if (v != 6)
- abort ();
-- #pragma omp atomic read seq_cst
-+ #pragma omp atomic seq_cst read
- v = x;
- if (v != 6)
- abort ();
-@@ -44,7 +44,7 @@
- { v = x; x = 3 + x; }
- if (v != 6)
- abort ();
-- #pragma omp atomic capture seq_cst
-+ #pragma omp atomic seq_cst capture
- { v = x; x = -1 * -1 * -1 * -1 - x; }
- if (v != 9)
- abort ();
-@@ -52,11 +52,11 @@
- v = x;
- if (v != -8)
- abort ();
-- #pragma omp atomic capture seq_cst
-+ #pragma omp atomic capture, seq_cst
- { x = 2 * 2 - x; v = x; }
- if (v != 12)
- abort ();
-- #pragma omp atomic capture seq_cst
-+ #pragma omp atomic seq_cst capture
- { x = 7 & x; v = x; }
- if (v != 4)
- abort ();
-@@ -64,7 +64,7 @@
- { v = x; x = 6; }
- if (v != 4)
- abort ();
-- #pragma omp atomic read seq_cst
-+ #pragma omp atomic read, seq_cst
- v = x;
- if (v != 6)
- abort ();
-@@ -72,11 +72,11 @@
- { v = x; x = 7 * 8 + 23; }
- if (v != 6)
- abort ();
-- #pragma omp atomic read seq_cst
-+ #pragma omp atomic seq_cst, read
- v = x;
- if (v != 79)
- abort ();
-- #pragma omp atomic capture seq_cst
-+ #pragma omp atomic capture , seq_cst
- { v = x; x = 23 + 6 * 4; }
- if (v != 79)
- abort ();
-@@ -84,7 +84,7 @@
- v = x;
- if (v != 47)
- abort ();
-- #pragma omp atomic capture seq_cst
-+ #pragma omp atomic seq_cst capture
- { v = x; x = l ? 17 : 12; }
- if (v != 47)
- abort ();
-Index: libgomp/testsuite/libgomp.c++/simd11.C
-===================================================================
---- a/src/libgomp/testsuite/libgomp.c++/simd11.C (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.c++/simd11.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,6 @@
-+// { dg-do run }
-+// { dg-options "-O2" }
-+// { dg-additional-options "-msse2" { target sse2_runtime } }
-+// { dg-additional-options "-mavx" { target avx_runtime } }
-+
-+#include "../libgomp.c/simd-15.c"
-Index: libgomp/testsuite/libgomp.c++/simd12.C
-===================================================================
---- a/src/libgomp/testsuite/libgomp.c++/simd12.C (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.c++/simd12.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,6 @@
-+// { dg-do run }
-+// { dg-options "-O2" }
-+// { dg-additional-options "-msse2" { target sse2_runtime } }
-+// { dg-additional-options "-mavx" { target avx_runtime } }
-+
-+#include "../libgomp.c/simd-16.c"
-Index: libgomp/testsuite/libgomp.c++/for-10.C
-===================================================================
---- a/src/libgomp/testsuite/libgomp.c++/for-10.C (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.c++/for-10.C (.../branches/gcc-4_9-branch)
-@@ -19,11 +19,14 @@
- #undef F
- #undef G
-
-+#undef SC
-+#define SC static
- #define F for simd
- #define G f_simd
- #include "../libgomp.c/for-1.h"
- #undef F
- #undef G
-+#undef SC
-
- int
- main ()
-Index: libgomp/testsuite/libgomp.c++/atomic-14.C
-===================================================================
---- a/src/libgomp/testsuite/libgomp.c++/atomic-14.C (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.c++/atomic-14.C (.../branches/gcc-4_9-branch)
-@@ -13,13 +13,13 @@
- v = x;
- if (v != 3)
- abort ();
-- #pragma omp atomic update seq_cst
-+ #pragma omp atomic seq_cst update
- x = 3 * 2 * 1 + x;
-- #pragma omp atomic read seq_cst
-+ #pragma omp atomic read, seq_cst
- v = x;
- if (v != 9)
- abort ();
-- #pragma omp atomic capture seq_cst
-+ #pragma omp atomic seq_cst, capture
- v = x = x | 16;
- if (v != 25)
- abort ();
-@@ -27,15 +27,15 @@
- v = x = x + 14 * 2 / 4;
- if (v != 32)
- abort ();
-- #pragma omp atomic capture seq_cst
-+ #pragma omp atomic seq_cst capture
- v = x = 5 | x;
- if (v != 37)
- abort ();
-- #pragma omp atomic capture seq_cst
-+ #pragma omp atomic capture, seq_cst
- v = x = 40 + 12 - 2 - 7 - x;
- if (v != 6)
- abort ();
-- #pragma omp atomic read seq_cst
-+ #pragma omp atomic seq_cst read
- v = x;
- if (v != 6)
- abort ();
-@@ -43,7 +43,7 @@
- { v = x; x = 3 + x; }
- if (v != 6)
- abort ();
-- #pragma omp atomic capture seq_cst
-+ #pragma omp atomic seq_cst capture
- { v = x; x = -1 * -1 * -1 * -1 - x; }
- if (v != 9)
- abort ();
-@@ -51,11 +51,11 @@
- v = x;
- if (v != -8)
- abort ();
-- #pragma omp atomic capture seq_cst
-+ #pragma omp atomic capture, seq_cst
- { x = 2 * 2 - x; v = x; }
- if (v != 12)
- abort ();
-- #pragma omp atomic capture seq_cst
-+ #pragma omp atomic seq_cst capture
- { x = 7 & x; v = x; }
- if (v != 4)
- abort ();
-@@ -63,7 +63,7 @@
- { v = x; x = 6; }
- if (v != 4)
- abort ();
-- #pragma omp atomic read seq_cst
-+ #pragma omp atomic read, seq_cst
- v = x;
- if (v != 6)
- abort ();
-@@ -71,11 +71,11 @@
- { v = x; x = 7 * 8 + 23; }
- if (v != 6)
- abort ();
-- #pragma omp atomic read seq_cst
-+ #pragma omp atomic seq_cst, read
- v = x;
- if (v != 79)
- abort ();
-- #pragma omp atomic capture seq_cst
-+ #pragma omp atomic capture , seq_cst
- { v = x; x = 23 + 6 * 4; }
- if (v != 79)
- abort ();
-@@ -83,7 +83,7 @@
- v = x;
- if (v != 47)
- abort ();
-- #pragma omp atomic capture seq_cst
-+ #pragma omp atomic seq_cst capture
- { v = x; x = l ? 17 : 12; }
- if (v != 47)
- abort ();
-Index: libgomp/testsuite/libgomp.c++/simd13.C
-===================================================================
---- a/src/libgomp/testsuite/libgomp.c++/simd13.C (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.c++/simd13.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,6 @@
-+// { dg-do run }
-+// { dg-options "-O2" }
-+// { dg-additional-options "-msse2" { target sse2_runtime } }
-+// { dg-additional-options "-mavx" { target avx_runtime } }
-+
-+#include "../libgomp.c/simd-17.c"
-Index: libgomp/testsuite/libgomp.c++/simd-9.C
-===================================================================
---- a/src/libgomp/testsuite/libgomp.c++/simd-9.C (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.c++/simd-9.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,52 @@
-+// { dg-do run }
-+// { dg-options "-O2" }
-+// { dg-additional-options "-msse2" { target sse2_runtime } }
-+// { dg-additional-options "-mavx" { target avx_runtime } }
-+
-+extern "C" void abort ();
-+int a[1024] __attribute__((aligned (32))) = { 1 };
-+#pragma omp declare reduction (foo:int:omp_out += omp_in) \
-+ initializer (omp_priv = 0)
-+
-+__attribute__((noinline, noclone)) void
-+foo (int &u, int &v)
-+{
-+ int i;
-+ #pragma omp simd aligned(a : 32) reduction(foo:u) reduction(+:v)
-+ for (i = 0; i < 1024; i++)
-+ {
-+ int x = a[i];
-+ u += x;
-+ v += x;
-+ }
-+}
-+
-+__attribute__((noinline, noclone)) void
-+bar (int &u, int &v)
-+{
-+ int i;
-+ #pragma omp simd aligned(a : 32) reduction(foo:u) reduction(+:v) \
-+ safelen(1)
-+ for (i = 0; i < 1024; i++)
-+ {
-+ int x = a[i];
-+ u += x;
-+ v += x;
-+ }
-+}
-+
-+int
-+main ()
-+{
-+ int i;
-+ for (i = 0; i < 1024; i++)
-+ a[i] = (i & 31) + (i / 128);
-+ int u = 0, v = 0;
-+ foo (u, v);
-+ if (u != 19456 || v != 19456)
-+ abort ();
-+ u = 0; v = 0;
-+ bar (u, v);
-+ if (u != 19456 || v != 19456)
-+ abort ();
-+}
-Index: libgomp/testsuite/libgomp.fortran/udr8.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/udr8.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/udr8.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,46 @@
-+! { dg-do run }
-+
-+module udr8m1
-+ integer, parameter :: a = 6
-+ integer :: b
-+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in)
-+!$omp declare reduction (.add. : integer : &
-+!$omp & omp_out = omp_out .add. iand (omp_in, -4)) &
-+!$omp & initializer (omp_priv = 3)
-+ interface operator (.add.)
-+ module procedure f1
-+ end interface
-+contains
-+ integer function f1 (x, y)
-+ integer, intent (in) :: x, y
-+ f1 = x + y
-+ end function f1
-+end module udr8m1
-+module udr8m2
-+ use udr8m1
-+ type dt
-+ integer :: x
-+ end type
-+!$omp declare reduction (+ : dt : omp_out = omp_out + omp_in) &
-+!$omp & initializer (omp_priv = dt (0))
-+ interface operator (+)
-+ module procedure f2
-+ end interface
-+contains
-+ type(dt) function f2 (x, y)
-+ type(dt), intent (in) :: x, y
-+ f2%x = x%x + y%x
-+ end function f2
-+end module udr8m2
-+ use udr8m2
-+ integer :: i, j
-+ type(dt) :: d
-+ j = 3
-+ d%x = 0
-+!$omp parallel do reduction (.add.: j) reduction (+ : d)
-+ do i = 1, 100
-+ j = j.add.iand (i, -4)
-+ d = d + dt(i)
-+ end do
-+ if (d%x /= 5050 .or. j /= 4903) call abort
-+end
-Index: libgomp/testsuite/libgomp.fortran/taskgroup1.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/taskgroup1.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/taskgroup1.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,80 @@
-+ integer :: v(16), i
-+ do i = 1, 16
-+ v(i) = i
-+ end do
-+
-+ !$omp parallel num_threads (4)
-+ !$omp single
-+ !$omp taskgroup
-+ do i = 1, 16, 2
-+ !$omp task
-+ !$omp task
-+ v(i) = v(i) + 1
-+ !$omp end task
-+ !$omp task
-+ v(i + 1) = v(i + 1) + 1
-+ !$omp end task
-+ !$omp end task
-+ end do
-+ !$omp end taskgroup
-+ do i = 1, 16
-+ if (v(i).ne.(i + 1)) call abort
-+ end do
-+ !$omp taskgroup
-+ do i = 1, 16, 2
-+ !$omp task
-+ !$omp task
-+ v(i) = v(i) + 1
-+ !$omp endtask
-+ !$omp task
-+ v(i + 1) = v(i + 1) + 1
-+ !$omp endtask
-+ !$omp taskwait
-+ !$omp endtask
-+ end do
-+ !$omp endtaskgroup
-+ do i = 1, 16
-+ if (v(i).ne.(i + 2)) call abort
-+ end do
-+ !$omp taskgroup
-+ do i = 1, 16, 2
-+ !$omp task
-+ !$omp task
-+ v(i) = v(i) + 1
-+ !$omp end task
-+ v(i + 1) = v(i + 1) + 1
-+ !$omp end task
-+ end do
-+ !$omp taskwait
-+ do i = 1, 16, 2
-+ !$omp task
-+ v(i + 1) = v(i + 1) + 1
-+ !$omp end task
-+ end do
-+ !$omp end taskgroup
-+ do i = 1, 16, 2
-+ if (v(i).ne.(i + 3)) call abort
-+ if (v(i + 1).ne.(i + 5)) call abort
-+ end do
-+ !$omp taskgroup
-+ do i = 1, 16, 2
-+ !$omp taskgroup
-+ !$omp task
-+ v(i) = v(i) + 1
-+ !$omp end task
-+ !$omp task
-+ v(i + 1) = v(i + 1) + 1
-+ !$omp end task
-+ !$omp end taskgroup
-+ if (v(i).ne.(i + 4).or.v(i + 1).ne.(i + 6)) call abort
-+ !$omp task
-+ v(i) = v(i) + 1
-+ !$omp end task
-+ end do
-+ !$omp end taskgroup
-+ do i = 1, 16
-+ if (v(i).ne.(i + 5)) call abort
-+ end do
-+ !$omp end single
-+ !$omp end parallel
-+end
-Index: libgomp/testsuite/libgomp.fortran/target2.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/target2.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/target2.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,96 @@
-+! { dg-do run }
-+! { dg-options "-fopenmp -ffree-line-length-160" }
-+
-+module target2
-+contains
-+ subroutine foo (a, b, c, d, e, f, g, n, q)
-+ integer :: n, q
-+ integer :: a, b(3:n), c(5:), d(2:*), e(:,:)
-+ integer, pointer :: f, g(:)
-+ integer :: h, i(3:n)
-+ integer, pointer :: j, k(:)
-+ logical :: r
-+ allocate (j, k(4:n))
-+ h = 14
-+ i = 15
-+ j = 16
-+ k = 17
-+ !$omp target map (to: a, b, c, d(2:n+1), e, f, g, h, i, j, k, n) map (from: r)
-+ r = a /= 7
-+ r = r .or. (any (b /= 8)) .or. (lbound (b, 1) /= 3) .or. (ubound (b, 1) /= n)
-+ r = r .or. (any (c /= 9)) .or. (lbound (c, 1) /= 5) .or. (ubound (c, 1) /= n + 4)
-+ r = r .or. (any (d(2:n+1) /= 10)) .or. (lbound (d, 1) /= 2)
-+ r = r .or. (any (e /= 11)) .or. (lbound (e, 1) /= 1) .or. (ubound (e, 1) /= 2)
-+ r = r .or. (lbound (e, 2) /= 1) .or. (ubound (e, 2) /= 2)
-+ r = r .or. (f /= 12)
-+ r = r .or. (any (g /= 13)) .or. (lbound (g, 1) /= 3) .or. (ubound (g, 1) /= n)
-+ r = r .or. (h /= 14)
-+ r = r .or. (any (i /= 15)) .or. (lbound (i, 1) /= 3) .or. (ubound (i, 1) /= n)
-+ r = r .or. (j /= 16)
-+ r = r .or. (any (k /= 17)) .or. (lbound (k, 1) /= 4) .or. (ubound (k, 1) /= n)
-+ !$omp end target
-+ if (r) call abort
-+ !$omp target map (to: b(3:n), c(5:n+4), d(2:n+1), e(1:,:2), g(3:n), i(3:n), k(4:n), n) map (from: r)
-+ r = (any (b /= 8)) .or. (lbound (b, 1) /= 3) .or. (ubound (b, 1) /= n)
-+ r = r .or. (any (c /= 9)) .or. (lbound (c, 1) /= 5) .or. (ubound (c, 1) /= n + 4)
-+ r = r .or. (any (d(2:n+1) /= 10)) .or. (lbound (d, 1) /= 2)
-+ r = r .or. (any (e /= 11)) .or. (lbound (e, 1) /= 1) .or. (ubound (e, 1) /= 2)
-+ r = r .or. (lbound (e, 2) /= 1) .or. (ubound (e, 2) /= 2)
-+ r = r .or. (any (g /= 13)) .or. (lbound (g, 1) /= 3) .or. (ubound (g, 1) /= n)
-+ r = r .or. (any (i /= 15)) .or. (lbound (i, 1) /= 3) .or. (ubound (i, 1) /= n)
-+ r = r .or. (any (k /= 17)) .or. (lbound (k, 1) /= 4) .or. (ubound (k, 1) /= n)
-+ !$omp end target
-+ if (r) call abort
-+ !$omp target map (to: b(5:n-2), c(7:n), d(4:n-2), e(1:,2:), g(5:n-3), i(6:n-4), k(5:n-5), n) map (from: r)
-+ r = (any (b(5:n-2) /= 8)) .or. (lbound (b, 1) /= 3) .or. (ubound (b, 1) /= n)
-+ r = r .or. (any (c(7:n) /= 9)) .or. (lbound (c, 1) /= 5) .or. (ubound (c, 1) /= n + 4)
-+ r = r .or. (any (d(4:n-2) /= 10)) .or. (lbound (d, 1) /= 2)
-+ r = r .or. (any (e(1:,2:) /= 11)) .or. (lbound (e, 1) /= 1) .or. (ubound (e, 1) /= 2)
-+ r = r .or. (lbound (e, 2) /= 1) .or. (ubound (e, 2) /= 2)
-+ r = r .or. (any (g(5:n-3) /= 13)) .or. (lbound (g, 1) /= 3) .or. (ubound (g, 1) /= n)
-+ r = r .or. (any (i(6:n-4) /= 15)) .or. (lbound (i, 1) /= 3) .or. (ubound (i, 1) /= n)
-+ r = r .or. (any (k(5:n-5) /= 17)) .or. (lbound (k, 1) /= 4) .or. (ubound (k, 1) /= n)
-+ !$omp end target
-+ !$omp target map (to: b(q+5:n-2+q), c(q+7:q+n), d(q+4:q+n-2), e(1:q+2,2:q+2), g(5+q:n-3+q), &
-+ !$omp & i(6+q:n-4+q), k(5+q:n-5+q), n) map (from: r)
-+ r = (any (b(5:n-2) /= 8)) .or. (lbound (b, 1) /= 3) .or. (ubound (b, 1) /= n)
-+ r = r .or. (any (c(7:n) /= 9)) .or. (lbound (c, 1) /= 5) .or. (ubound (c, 1) /= n + 4)
-+ r = r .or. (any (d(4:n-2) /= 10)) .or. (lbound (d, 1) /= 2)
-+ r = r .or. (any (e(1:,2:) /= 11)) .or. (lbound (e, 1) /= 1) .or. (ubound (e, 1) /= 2)
-+ r = r .or. (lbound (e, 2) /= 1) .or. (ubound (e, 2) /= 2)
-+ r = r .or. (any (g(5:n-3) /= 13)) .or. (lbound (g, 1) /= 3) .or. (ubound (g, 1) /= n)
-+ r = r .or. (any (i(6:n-4) /= 15)) .or. (lbound (i, 1) /= 3) .or. (ubound (i, 1) /= n)
-+ r = r .or. (any (k(5:n-5) /= 17)) .or. (lbound (k, 1) /= 4) .or. (ubound (k, 1) /= n)
-+ !$omp end target
-+ if (r) call abort
-+ !$omp target map (to: d(2:n+1), n)
-+ r = a /= 7
-+ r = r .or. (any (b /= 8)) .or. (lbound (b, 1) /= 3) .or. (ubound (b, 1) /= n)
-+ r = r .or. (any (c /= 9)) .or. (lbound (c, 1) /= 5) .or. (ubound (c, 1) /= n + 4)
-+ r = r .or. (any (d(2:n+1) /= 10)) .or. (lbound (d, 1) /= 2)
-+ r = r .or. (any (e /= 11)) .or. (lbound (e, 1) /= 1) .or. (ubound (e, 1) /= 2)
-+ r = r .or. (lbound (e, 2) /= 1) .or. (ubound (e, 2) /= 2)
-+ r = r .or. (f /= 12)
-+ r = r .or. (any (g /= 13)) .or. (lbound (g, 1) /= 3) .or. (ubound (g, 1) /= n)
-+ r = r .or. (h /= 14)
-+ r = r .or. (any (i /= 15)) .or. (lbound (i, 1) /= 3) .or. (ubound (i, 1) /= n)
-+ r = r .or. (j /= 16)
-+ r = r .or. (any (k /= 17)) .or. (lbound (k, 1) /= 4) .or. (ubound (k, 1) /= n)
-+ !$omp end target
-+ if (r) call abort
-+ end subroutine foo
-+end module target2
-+ use target2, only : foo
-+ integer, parameter :: n = 15, q = 0
-+ integer :: a, b(2:n-1), c(n), d(n), e(3:4, 3:4)
-+ integer, pointer :: f, g(:)
-+ allocate (f, g(3:n))
-+ a = 7
-+ b = 8
-+ c = 9
-+ d = 10
-+ e = 11
-+ f = 12
-+ g = 13
-+ call foo (a, b, c, d, e, f, g, n, q)
-+end
-Index: libgomp/testsuite/libgomp.fortran/target4.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/target4.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/target4.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,48 @@
-+! { dg-do run }
-+
-+module target4
-+contains
-+ subroutine foo (a,m,n)
-+ integer :: m,n,i,j
-+ double precision :: a(m, n), t
-+ !$omp target data map(a) map(to: m, n)
-+ do i=1,n
-+ t = 0.0d0
-+ !$omp target
-+ !$omp parallel do reduction(+:t)
-+ do j=1,m
-+ t = t + a(j,i) * a(j,i)
-+ end do
-+ !$omp end target
-+ t = 2.0d0 * t
-+ !$omp target
-+ !$omp parallel do
-+ do j=1,m
-+ a(j,i) = a(j,i) * t
-+ end do
-+ !$omp end target
-+ end do
-+ !$omp end target data
-+ end subroutine foo
-+end module target4
-+ use target4, only : foo
-+ integer :: i, j
-+ double precision :: a(8, 9), res(8, 9)
-+ do i = 1, 8
-+ do j = 1, 9
-+ a(i, j) = i + j
-+ end do
-+ end do
-+ call foo (a, 8, 9)
-+ res = reshape ((/ 1136.0d0, 1704.0d0, 2272.0d0, 2840.0d0, 3408.0d0, 3976.0d0, &
-+& 4544.0d0, 5112.0d0, 2280.0d0, 3040.0d0, 3800.0d0, 4560.0d0, 5320.0d0, 6080.0d0, &
-+& 6840.0d0, 7600.0d0, 3936.0d0, 4920.0d0, 5904.0d0, 6888.0d0, 7872.0d0, 8856.0d0, &
-+& 9840.0d0, 10824.0d0, 6200.0d0, 7440.0d0, 8680.0d0, 9920.0d0, 11160.0d0, 12400.0d0, &
-+& 13640.0d0, 14880.0d0, 9168.0d0, 10696.0d0, 12224.0d0, 13752.0d0, 15280.0d0, 16808.0d0, &
-+& 18336.0d0, 19864.0d0, 12936.0d0, 14784.0d0, 16632.0d0, 18480.0d0, 20328.0d0, 22176.0d0, &
-+& 24024.0d0, 25872.0d0, 17600.0d0, 19800.0d0, 22000.0d0, 24200.0d0, 26400.0d0, 28600.0d0, &
-+& 30800.0d0, 33000.0d0, 23256.0d0, 25840.0d0, 28424.0d0, 31008.0d0, 33592.0d0, 36176.0d0, &
-+& 38760.0d0, 41344.0d0, 30000.0d0, 33000.0d0, 36000.0d0, 39000.0d0, 42000.0d0, 45000.0d0, &
-+& 48000.0d0, 51000.0d0 /), (/ 8, 9 /))
-+ if (any (a /= res)) call abort
-+end
-Index: libgomp/testsuite/libgomp.fortran/target6.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/target6.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/target6.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,50 @@
-+! { dg-do run }
-+
-+module target6
-+contains
-+ subroutine foo (p, v, w, n)
-+ double precision, pointer :: p(:), v(:), w(:)
-+ double precision :: q(n)
-+ integer :: i, n
-+ !$omp target data if (n > 256) map (to: v(1:n), w(:n)) map (from: p(1:n), q)
-+ !$omp target if (n > 256)
-+ !$omp parallel do simd
-+ do i = 1, n
-+ p(i) = v(i) * w(i)
-+ q(i) = p(i)
-+ end do
-+ !$omp end target
-+ !$omp target update if (n > 256) from (p)
-+ do i = 1, n
-+ if (p(i) /= i * iand (i, 63)) call abort
-+ v(i) = v(i) + 1
-+ end do
-+ !$omp target update if (n > 256) to (v(1:n))
-+ !$omp target if (n > 256)
-+ !$omp parallel do simd
-+ do i = 1, n
-+ p(i) = v(i) * w(i)
-+ end do
-+ !$omp end target
-+ !$omp end target data
-+ do i = 1, n
-+ if (q(i) /= (v(i) - 1) * w(i)) call abort
-+ if (p(i) /= q(i) + w(i)) call abort
-+ end do
-+ end subroutine
-+end module target6
-+ use target6, only : foo
-+ integer :: n, i
-+ double precision, pointer :: p(:), v(:), w(:)
-+ n = 10000
-+ allocate (p(n), v(n), w(n))
-+ do i = 1, n
-+ v(i) = i
-+ w(i) = iand (i, 63)
-+ end do
-+ call foo (p, v, w, n)
-+ do i = 1, n
-+ if (p(i) /= (i + 1) * iand (i, 63)) call abort
-+ end do
-+ deallocate (p, v, w)
-+end
-Index: libgomp/testsuite/libgomp.fortran/cancel-parallel-1.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/cancel-parallel-1.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/cancel-parallel-1.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,10 @@
-+! { dg-do run }
-+! { dg-set-target-env-var OMP_CANCELLATION "true" }
-+
-+ use omp_lib
-+
-+ !$omp parallel num_threads(32)
-+ !$omp cancel parallel
-+ if (omp_get_cancellation ()) call abort
-+ !$omp end parallel
-+end
-Index: libgomp/testsuite/libgomp.fortran/target8.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/target8.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/target8.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,33 @@
-+! { dg-do run }
-+
-+ integer, parameter :: n = 1000
-+ integer, parameter :: c = 100
-+ integer :: i, j
-+ real :: a(n)
-+ do i = 1, n
-+ a(i) = i
-+ end do
-+ !$omp parallel
-+ !$omp single
-+ do i = 1, n, c
-+ !$omp task shared(a)
-+ !$omp target map(a(i:i+c-1))
-+ !$omp parallel do
-+ do j = i, i + c - 1
-+ a(j) = foo (a(j))
-+ end do
-+ !$omp end target
-+ !$omp end task
-+ end do
-+ !$omp end single
-+ !$omp end parallel
-+ do i = 1, n
-+ if (a(i) /= i + 1) call abort
-+ end do
-+contains
-+ real function foo (x)
-+ !$omp declare target
-+ real, intent(in) :: x
-+ foo = x + 1
-+ end function foo
-+end
-Index: libgomp/testsuite/libgomp.fortran/cancel-parallel-3.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/cancel-parallel-3.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/cancel-parallel-3.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,38 @@
-+! { dg-do run }
-+! { dg-options "-fno-inline -fno-ipa-sra -fno-ipa-cp -fno-ipa-cp-clone" }
-+! { dg-set-target-env-var OMP_CANCELLATION "true" }
-+
-+ use omp_lib
-+ integer :: x, i, j
-+ common /x/ x
-+
-+ call omp_set_dynamic (.false.)
-+ call omp_set_schedule (omp_sched_static, 1)
-+ !$omp parallel num_threads(16) private (i, j)
-+ call do_some_work
-+ !$omp barrier
-+ if (omp_get_thread_num ().eq.1) then
-+ call sleep (2)
-+ !$omp cancellation point parallel
-+ end if
-+ do j = 3, 16
-+ !$omp do schedule(runtime)
-+ do i = 0, j - 1
-+ call do_some_work
-+ end do
-+ !$omp enddo nowait
-+ end do
-+ if (omp_get_thread_num ().eq.0) then
-+ call sleep (1)
-+ !$omp cancel parallel
-+ end if
-+ !$omp end parallel
-+contains
-+ subroutine do_some_work
-+ integer :: x
-+ common /x/ x
-+ !$omp atomic
-+ x = x + 1
-+ !$omp end atomic
-+ endsubroutine do_some_work
-+end
-Index: libgomp/testsuite/libgomp.fortran/declare-simd-1.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/declare-simd-1.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/declare-simd-1.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,95 @@
-+! { dg-do run { target vect_simd_clones } }
-+! { dg-options "-fno-inline" }
-+! { dg-additional-options "-msse2" { target sse2_runtime } }
-+! { dg-additional-options "-mavx" { target avx_runtime } }
-+
-+module declare_simd_1_mod
-+ contains
-+ real function foo (a, b, c)
-+ !$omp declare simd (foo) simdlen (4) uniform (a) linear (b : 5) &
-+ !$omp & notinbranch
-+ double precision, value :: a
-+ real, value :: c
-+ !$omp declare simd (foo)
-+ integer, value :: b
-+ foo = a + b * c
-+ end function foo
-+end module declare_simd_1_mod
-+ use declare_simd_1_mod
-+ interface
-+ function bar (a, b, c)
-+ !$omp declare simd (bar)
-+ integer, value :: b
-+ real, value :: c
-+ real :: bar
-+ !$omp declare simd (bar) simdlen (4) linear (b : 2)
-+ !$omp declare simd (bar) simdlen (16) inbranch
-+ double precision, value :: a
-+ end function bar
-+ end interface
-+ integer :: i
-+ double precision :: a(128)
-+ real :: b(128), d(128)
-+ data d /171., 414., 745., 1164., 1671., 2266., 2949., 3720., 4579., &
-+ & 5526., 6561., 7684., 8895., 10194., 11581., 13056., 14619., &
-+ & 16270., 18009., 19836., 21751., 23754., 25845., 28024., &
-+ & 30291., 32646., 35089., 37620., 40239., 42946., 45741., &
-+ & 48624., 51595., 54654., 57801., 61036., 64359., 67770., &
-+ & 71269., 74856., 78531., 82294., 86145., 90084., 94111., &
-+ & 98226., 102429., 106720., 111099., 115566., 120121., 124764., &
-+ & 129495., 134314., 139221., 144216., 149299., 154470., 159729., &
-+ & 165076., 170511., 176034., 181645., 187344., 193131., 199006., &
-+ & 204969., 211020., 217159., 223386., 229701., 236104., 242595., &
-+ & 249174., 255841., 262596., 269439., 276370., 283389., 290496., &
-+ & 297691., 304974., 312345., 319804., 327351., 334986., 342709., &
-+ & 350520., 358419., 366406., 374481., 382644., 390895., 399234., &
-+ & 407661., 416176., 424779., 433470., 442249., 451116., 460071., &
-+ & 469114., 478245., 487464., 496771., 506166., 515649., 525220., &
-+ & 534879., 544626., 554461., 564384., 574395., 584494., 594681., &
-+ & 604956., 615319., 625770., 636309., 646936., 657651., 668454., &
-+ & 679345., 690324., 701391., 712546., 723789., 735120./
-+ !$omp simd
-+ do i = 1, 128
-+ a(i) = 7.0 * i + 16.0
-+ b(i) = 5.0 * i + 12.0
-+ end do
-+ !$omp simd
-+ do i = 1, 128
-+ b(i) = foo (a(i), 3, b(i))
-+ end do
-+ !$omp simd
-+ do i = 1, 128
-+ b(i) = bar (a(i), 2 * i, b(i))
-+ end do
-+ if (any (b.ne.d)) call abort
-+ !$omp simd
-+ do i = 1, 128
-+ b(i) = i * 2.0
-+ end do
-+ !$omp simd
-+ do i = 1, 128
-+ b(i) = baz (7.0_8, 2, b(i))
-+ end do
-+ do i = 1, 128
-+ if (b(i).ne.(7.0 + 4.0 * i)) call abort
-+ end do
-+contains
-+ function baz (x, y, z)
-+ !$omp declare simd (baz) simdlen (8) uniform (x, y)
-+ !$omp declare simd (baz)
-+ integer, value :: y
-+ real, value :: z
-+ real :: baz
-+ double precision, value :: x
-+ baz = x + y * z
-+ end function baz
-+end
-+function bar (a, b, c)
-+ integer, value :: b
-+ real, value :: c
-+ real :: bar
-+ double precision, value :: a
-+ !$omp declare simd (bar)
-+ !$omp declare simd (bar) simdlen (4) linear (b : 2)
-+ bar = a + b * c
-+end function bar
-Index: libgomp/testsuite/libgomp.fortran/openmp_version-1.f
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/openmp_version-1.f (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/openmp_version-1.f (.../branches/gcc-4_9-branch)
-@@ -4,6 +4,6 @@
- implicit none
- include "omp_lib.h"
-
-- if (openmp_version .ne. 201107) call abort;
-+ if (openmp_version .ne. 201307) call abort;
-
- end program main
-Index: libgomp/testsuite/libgomp.fortran/declare-simd-3.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/declare-simd-3.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/declare-simd-3.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,22 @@
-+! Don't compile this anywhere, it is just auxiliary
-+! file compiled together with declare-simd-2.f90
-+! to verify inter-CU module handling of omp declare simd.
-+! { dg-do compile { target { lp64 && { ! lp64 } } } }
-+
-+subroutine bar
-+ use declare_simd_2_mod
-+ real :: b(128)
-+ integer :: i
-+
-+ !$omp simd
-+ do i = 1, 128
-+ b(i) = i * 2.0
-+ end do
-+ !$omp simd
-+ do i = 1, 128
-+ b(i) = foo (7.0_8, 5 * i, b(i))
-+ end do
-+ do i = 1, 128
-+ if (b(i).ne.(7.0 + 10.0 * i * i)) call abort
-+ end do
-+end subroutine bar
-Index: libgomp/testsuite/libgomp.fortran/udr10.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/udr10.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/udr10.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,32 @@
-+! { dg-do run }
-+
-+module udr10m
-+ type dt
-+ integer :: x = 0
-+ end type
-+!$omp declare reduction(.add.:dt:omp_out=omp_out.add.omp_in)
-+!$omp declare reduction(+:dt:omp_out=omp_out+omp_in)
-+ interface operator(+)
-+ module procedure addme
-+ end interface
-+ interface operator(.add.)
-+ module procedure addme
-+ end interface
-+contains
-+ type(dt) function addme (x, y)
-+ type (dt), intent (in) :: x, y
-+ addme%x = x%x + y%x
-+ end function addme
-+end module udr10m
-+program udr10
-+ use udr10m, only : operator(.localadd.) => operator(.add.), &
-+& operator(+), dl => dt
-+ type(dl) :: j, k
-+ integer :: i
-+!$omp parallel do reduction(+:j) reduction(.localadd.:k)
-+ do i = 1, 100
-+ j = j .localadd. dl(i)
-+ k = k + dl(i * 2)
-+ end do
-+ if (j%x /= 5050 .or. k%x /= 10100) call abort
-+end
-Index: libgomp/testsuite/libgomp.fortran/associate2.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/associate2.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/associate2.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,46 @@
-+! { dg-do run }
-+
-+program associate2
-+ type dl
-+ integer :: i
-+ end type
-+ type dt
-+ integer :: i
-+ real :: a(3, 3)
-+ type(dl) :: c(3, 3)
-+ end type
-+ integer :: v(4), i, j, k, l
-+ type (dt) :: a(3, 3)
-+ v = 15
-+ forall (k = 1:3, l = 1:3) a(k, l)%a(:,:) = 4.5
-+ a(2,1)%a(1,2) = 3.5
-+ i = 2
-+ j = 1
-+ associate(u => v, b => a(i, j)%a)
-+!$omp parallel private(v, a) default(none)
-+ v = -1
-+ forall (k = 1:3, l = 1:3) a(k, l)%a(:,:) = 2.5
-+ if (v(3) /= -1 .or. u(3) /= 15) call abort
-+ if (a(2,1)%a(1,2) /= 2.5 .or. b(1,2) /= 3.5) call abort
-+ associate(u => v, b => a(2, 1)%a)
-+ if (u(3) /= -1 .or. b(1,2) /= 2.5) call abort
-+ end associate
-+ if (u(3) /= 15 .or. b(1,2) /= 3.5) call abort
-+!$omp end parallel
-+ end associate
-+ forall (k = 1:3, l = 1:3) a(k, l)%c(:,:)%i = 7
-+ a(1,2)%c(2,1)%i = 9
-+ i = 1
-+ j = 2
-+ associate(d => a(i, j)%c(2,:)%i)
-+!$omp parallel private(a) default(none)
-+ forall (k = 1:3, l = 1:3) a(k, l)%c(:,:)%i = 15
-+ if (a(1,2)%c(2,1)%i /= 15 .or. d(1) /= 9) call abort
-+ if (a(1,2)%c(2,2)%i /= 15 .or. d(2) /= 7) call abort
-+ associate(d => a(2,1)%c(2,:)%i)
-+ if (d(1) /= 15 .or. d(2) /= 15) call abort
-+ end associate
-+ if (d(1) /= 9 .or. d(2) /= 7) call abort
-+!$omp end parallel
-+ end associate
-+end program
-Index: libgomp/testsuite/libgomp.fortran/udr12.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/udr12.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/udr12.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,76 @@
-+! { dg-do run }
-+
-+ interface
-+ elemental subroutine sub1 (x, y)
-+ integer, intent(in) :: y
-+ integer, intent(out) :: x
-+ end subroutine
-+ elemental function fn2 (x)
-+ integer, intent(in) :: x
-+ integer :: fn2
-+ end function
-+ end interface
-+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
-+!$omp declare reduction (bar : integer : omp_out = fn1 (omp_out, omp_in)) &
-+!$omp & initializer (sub1 (omp_priv, omp_orig))
-+!$omp declare reduction (baz : integer : sub2 (omp_out, omp_in)) &
-+!$omp initializer (omp_priv = fn2 (omp_orig))
-+ interface
-+ elemental function fn1 (x, y)
-+ integer, intent(in) :: x, y
-+ integer :: fn1
-+ end function
-+ elemental subroutine sub2 (x, y)
-+ integer, intent(in) :: y
-+ integer, intent(inout) :: x
-+ end subroutine
-+ end interface
-+ integer :: a(10), b, r
-+ a(:) = 0
-+ b = 0
-+ r = 0
-+!$omp parallel reduction (foo : a, b) reduction (+: r)
-+ a = a + 2
-+ b = b + 3
-+ r = r + 1
-+!$omp end parallel
-+ if (any (a /= 2 * r) .or. b /= 3 * r) call abort
-+ a(:) = 0
-+ b = 0
-+ r = 0
-+!$omp parallel reduction (bar : a, b) reduction (+: r)
-+ a = a + 2
-+ b = b + 3
-+ r = r + 1
-+!$omp end parallel
-+ if (any (a /= 4 * r) .or. b /= 6 * r) call abort
-+ a(:) = 0
-+ b = 0
-+ r = 0
-+!$omp parallel reduction (baz : a, b) reduction (+: r)
-+ a = a + 2
-+ b = b + 3
-+ r = r + 1
-+!$omp end parallel
-+ if (any (a /= 2 * r) .or. b /= 3 * r) call abort
-+end
-+elemental function fn1 (x, y)
-+ integer, intent(in) :: x, y
-+ integer :: fn1
-+ fn1 = x + 2 * y
-+end function
-+elemental subroutine sub1 (x, y)
-+ integer, intent(in) :: y
-+ integer, intent(out) :: x
-+ x = 0
-+end subroutine
-+elemental function fn2 (x)
-+ integer, intent(in) :: x
-+ integer :: fn2
-+ fn2 = x
-+end function
-+elemental subroutine sub2 (x, y)
-+ integer, intent(inout) :: x
-+ integer, intent(in) :: y
-+ x = x + y
-+end subroutine
-Index: libgomp/testsuite/libgomp.fortran/udr14.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/udr14.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/udr14.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,50 @@
-+! { dg-do run }
-+
-+ type dt
-+ integer :: g
-+ integer, allocatable :: h(:)
-+ end type
-+!$omp declare reduction (baz : dt : bar (omp_out, omp_in)) &
-+!$omp & initializer (foo (omp_priv, omp_orig))
-+ integer :: r
-+ type (dt), allocatable :: a(:)
-+ allocate (a(7:8))
-+ a(:)%g = 0
-+ a(7)%h = (/ 0, 0, 0 /)
-+ r = 0
-+!$omp parallel reduction(+:r) reduction (baz:a)
-+ if (.not.allocated (a)) call abort
-+ if (lbound (a, 1) /= 7 .or. ubound (a, 1) /= 8) call abort
-+ if (.not.allocated (a(7)%h)) call abort
-+ if (allocated (a(8)%h)) call abort
-+ if (lbound (a(7)%h, 1) /= 1 .or. ubound (a(7)%h, 1) /= 3) call abort
-+ a(:)%g = a(:)%g + 2
-+ a(7)%h = a(7)%h + 3
-+ r = r + 1
-+!$omp end parallel
-+ if (.not.allocated (a)) call abort
-+ if (lbound (a, 1) /= 7 .or. ubound (a, 1) /= 8) call abort
-+ if (.not.allocated (a(7)%h)) call abort
-+ if (allocated (a(8)%h)) call abort
-+ if (lbound (a(7)%h, 1) /= 1 .or. ubound (a(7)%h, 1) /= 3) call abort
-+ if (any (a(:)%g /= 2 * r) .or. any (a(7)%h(:) /= 3 * r)) call abort
-+contains
-+ subroutine foo (x, y)
-+ type (dt), allocatable :: x(:), y(:)
-+ if (allocated (x) .neqv. allocated (y)) call abort
-+ if (lbound (x, 1) /= lbound (y, 1)) call abort
-+ if (ubound (x, 1) /= ubound (y, 1)) call abort
-+ if (allocated (x(7)%h) .neqv. allocated (y(7)%h)) call abort
-+ if (allocated (x(8)%h) .neqv. allocated (y(8)%h)) call abort
-+ if (lbound (x(7)%h, 1) /= lbound (y(7)%h, 1)) call abort
-+ if (ubound (x(7)%h, 1) /= ubound (y(7)%h, 1)) call abort
-+ x(7)%g = 0
-+ x(7)%h = 0
-+ x(8)%g = 0
-+ end subroutine
-+ subroutine bar (x, y)
-+ type (dt), allocatable :: x(:), y(:)
-+ x(:)%g = x(:)%g + y(:)%g
-+ x(7)%h(:) = x(7)%h(:) + y(7)%h(:)
-+ end subroutine
-+end
-Index: libgomp/testsuite/libgomp.fortran/procptr1.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/procptr1.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/procptr1.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,42 @@
-+! { dg-do run }
-+ interface
-+ integer function foo ()
-+ end function
-+ integer function bar ()
-+ end function
-+ integer function baz ()
-+ end function
-+ end interface
-+ procedure(foo), pointer :: ptr
-+ integer :: i
-+ ptr => foo
-+!$omp parallel shared (ptr)
-+ if (ptr () /= 1) call abort
-+!$omp end parallel
-+ ptr => bar
-+!$omp parallel firstprivate (ptr)
-+ if (ptr () /= 2) call abort
-+!$omp end parallel
-+!$omp parallel sections lastprivate (ptr)
-+!$omp section
-+ ptr => foo
-+ if (ptr () /= 1) call abort
-+!$omp section
-+ ptr => bar
-+ if (ptr () /= 2) call abort
-+!$omp section
-+ ptr => baz
-+ if (ptr () /= 3) call abort
-+!$omp end parallel sections
-+ if (ptr () /= 3) call abort
-+ if (.not.associated (ptr, baz)) call abort
-+end
-+integer function foo ()
-+ foo = 1
-+end function
-+integer function bar ()
-+ bar = 2
-+end function
-+integer function baz ()
-+ baz = 3
-+end function
-Index: libgomp/testsuite/libgomp.fortran/aligned1.f03
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/aligned1.f03 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/aligned1.f03 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,133 @@
-+! { dg-do run }
-+! { dg-options "-fopenmp -fcray-pointer" }
-+
-+ use iso_c_binding, only : c_ptr, c_ptrdiff_t, c_loc
-+ interface
-+ subroutine foo (x, y, z, w)
-+ use iso_c_binding, only : c_ptr
-+ real, pointer :: x(:), y(:), w(:)
-+ type(c_ptr) :: z
-+ end subroutine
-+ subroutine bar (x, y, z, w)
-+ use iso_c_binding, only : c_ptr
-+ real, pointer :: x(:), y(:), w(:)
-+ type(c_ptr) :: z
-+ end subroutine
-+ subroutine baz (x, c)
-+ real, pointer :: x(:)
-+ real, allocatable :: c(:)
-+ end subroutine
-+ end interface
-+ type dt
-+ real, allocatable :: a(:)
-+ end type
-+ type (dt) :: b(64)
-+ real, target :: a(4096+63)
-+ real, pointer :: p(:), q(:), r(:), s(:)
-+ real, allocatable :: c(:)
-+ integer(c_ptrdiff_t) :: o
-+ integer :: i
-+ o = 64 - mod (loc (a), 64)
-+ if (o == 64) o = 0
-+ o = o / sizeof(0.0)
-+ p => a(o + 1:o + 1024)
-+ q => a(o + 1025:o + 2048)
-+ r => a(o + 2049:o + 3072)
-+ s => a(o + 3073:o + 4096)
-+ do i = 1, 1024
-+ p(i) = i
-+ q(i) = i
-+ r(i) = i
-+ s(i) = i
-+ end do
-+ call foo (p, q, c_loc (r(1)), s)
-+ do i = 1, 1024
-+ if (p(i) /= i * i + 3 * i + 2) call abort
-+ p(i) = i
-+ end do
-+ call bar (p, q, c_loc (r(1)), s)
-+ do i = 1, 1024
-+ if (p(i) /= i * i + 3 * i + 2) call abort
-+ end do
-+ ! Attempt to create 64-byte aligned allocatable
-+ do i = 1, 64
-+ allocate (c(1023 + i))
-+ if (iand (loc (c(1)), 63) == 0) exit
-+ deallocate (c)
-+ allocate (b(i)%a(1023 + i))
-+ allocate (c(1023 + i))
-+ if (iand (loc (c(1)), 63) == 0) exit
-+ deallocate (c)
-+ end do
-+ if (allocated (c)) then
-+ do i = 1, 1024
-+ c(i) = 2 * i
-+ end do
-+ call baz (p, c)
-+ do i = 1, 1024
-+ if (p(i) /= i * i + 5 * i + 2) call abort
-+ end do
-+ end if
-+end
-+subroutine foo (x, y, z, w)
-+ use iso_c_binding, only : c_ptr, c_f_pointer
-+ real, pointer :: x(:), y(:), w(:), p(:)
-+ type(c_ptr) :: z
-+ integer :: i
-+ real :: pt(1024)
-+ pointer (ip, pt)
-+ ip = loc (w)
-+!$omp simd aligned (x, y : 64)
-+ do i = 1, 1024
-+ x(i) = x(i) * y(i) + 2.0
-+ end do
-+!$omp simd aligned (x, z : 64) private (p)
-+ do i = 1, 1024
-+ call c_f_pointer (z, p, shape=[1024])
-+ x(i) = x(i) + p(i)
-+ end do
-+!$omp simd aligned (x, ip : 64)
-+ do i = 1, 1024
-+ x(i) = x(i) + 2 * pt(i)
-+ end do
-+!$omp end simd
-+end subroutine
-+subroutine bar (x, y, z, w)
-+ use iso_c_binding, only : c_ptr, c_f_pointer
-+ real, pointer :: x(:), y(:), w(:), a(:), b(:)
-+ type(c_ptr) :: z, c
-+ integer :: i
-+ real :: pt(1024)
-+ pointer (ip, pt)
-+ ip = loc (w)
-+ a => x
-+ b => y
-+ c = z
-+!$omp simd aligned (a, b : 64)
-+ do i = 1, 1024
-+ a(i) = a(i) * b(i) + 2.0
-+ end do
-+!$omp simd aligned (a, c : 64)
-+ do i = 1, 1024
-+ block
-+ real, pointer :: p(:)
-+ call c_f_pointer (c, p, shape=[1024])
-+ a(i) = a(i) + p(i)
-+ end block
-+ end do
-+!$omp simd aligned (a, ip : 64)
-+ do i = 1, 1024
-+ a(i) = a(i) + 2 * pt(i)
-+ end do
-+!$omp end simd
-+end subroutine
-+subroutine baz (x, c)
-+ real, pointer :: x(:)
-+ real, allocatable :: c(:)
-+ integer :: i
-+!$omp simd aligned (x, c : 64)
-+ do i = 1, 1024
-+ x(i) = x(i) + c(i)
-+ end do
-+!$omp end simd
-+end subroutine baz
-Index: libgomp/testsuite/libgomp.fortran/cancel-do-2.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/cancel-do-2.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/cancel-do-2.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,90 @@
-+! { dg-do run }
-+! { dg-options "-fno-inline -fno-ipa-sra -fno-ipa-cp -fno-ipa-cp-clone" }
-+! { dg-set-target-env-var OMP_CANCELLATION "true" }
-+
-+ use omp_lib
-+ integer :: i
-+ logical :: x(5)
-+
-+ x(:) = .false.
-+ x(1) = .true.
-+ x(3) = .true.
-+ if (omp_get_cancellation ()) call foo (x)
-+contains
-+ subroutine foo (x)
-+ use omp_lib
-+ logical :: x(5)
-+ integer :: v, w, i
-+
-+ v = 0
-+ w = 0
-+ !$omp parallel num_threads (32) shared (v, w)
-+ !$omp do
-+ do i = 0, 999
-+ !$omp cancel do if (x(1))
-+ call abort
-+ end do
-+ !$omp do
-+ do i = 0, 999
-+ !$omp cancel do if (x(2))
-+ !$omp atomic
-+ v = v + 1
-+ !$omp endatomic
-+ enddo
-+ !$omp do
-+ do i = 0, 999
-+ !$omp cancel do if (x(3))
-+ !$omp atomic
-+ w = w + 8
-+ !$omp end atomic
-+ end do
-+ !$omp do
-+ do i = 0, 999
-+ !$omp cancel do if (x(4))
-+ !$omp atomic
-+ v = v + 2
-+ !$omp end atomic
-+ end do
-+ !$omp end do
-+ !$omp end parallel
-+ if (v.ne.3000.or.w.ne.0) call abort
-+ !$omp parallel num_threads (32) shared (v, w)
-+ ! None of these cancel directives should actually cancel anything,
-+ ! but the compiler shouldn't know that and thus should use cancellable
-+ ! barriers at the end of all the workshares.
-+ !$omp cancel parallel if (omp_get_thread_num ().eq.1.and.x(5))
-+ !$omp do
-+ do i = 0, 999
-+ !$omp cancel do if (x(1))
-+ call abort
-+ end do
-+ !$omp cancel parallel if (omp_get_thread_num ().eq.2.and.x(5))
-+ !$omp do
-+ do i = 0, 999
-+ !$omp cancel do if (x(2))
-+ !$omp atomic
-+ v = v + 1
-+ !$omp endatomic
-+ enddo
-+ !$omp cancel parallel if (omp_get_thread_num ().eq.3.and.x(5))
-+ !$omp do
-+ do i = 0, 999
-+ !$omp cancel do if (x(3))
-+ !$omp atomic
-+ w = w + 8
-+ !$omp end atomic
-+ end do
-+ !$omp cancel parallel if (omp_get_thread_num ().eq.4.and.x(5))
-+ !$omp do
-+ do i = 0, 999
-+ !$omp cancel do if (x(4))
-+ !$omp atomic
-+ v = v + 2
-+ !$omp end atomic
-+ end do
-+ !$omp end do
-+ !$omp cancel parallel if (omp_get_thread_num ().eq.5.and.x(5))
-+ !$omp end parallel
-+ if (v.ne.6000.or.w.ne.0) call abort
-+ end subroutine
-+end
-Index: libgomp/testsuite/libgomp.fortran/alloc-comp-2.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/alloc-comp-2.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/alloc-comp-2.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,367 @@
-+! { dg-do run }
-+! Don't cycle by default through all options, just test -O0 and -O2,
-+! as this is quite large test.
-+! { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } }
-+
-+module m
-+ type dl
-+ integer :: a, b
-+ integer, allocatable :: c(:,:)
-+ integer :: d, e
-+ integer, allocatable :: f
-+ end type
-+ type dt
-+ integer :: g
-+ type (dl), allocatable :: h(:)
-+ integer :: i
-+ type (dl) :: j(2, 2)
-+ type (dl), allocatable :: k
-+ end type
-+contains
-+ subroutine ver_dl (obj, val, c, cl1, cu1, cl2, cu2, f)
-+ type (dl), intent (in) :: obj
-+ integer, intent (in) :: val, cl1, cu1, cl2, cu2
-+ logical, intent (in) :: c, f
-+ if ((c .neqv. allocated (obj%c)) .or. (f .neqv. allocated (obj%f))) call abort
-+ if (c) then
-+ if (lbound (obj%c, 1) /= cl1 .or. ubound (obj%c, 1) /= cu1) call abort
-+ if (lbound (obj%c, 2) /= cl2 .or. ubound (obj%c, 2) /= cu2) call abort
-+ end if
-+ if (val /= 0) then
-+ if (obj%a /= val .or. obj%b /= val) call abort
-+ if (obj%d /= val .or. obj%e /= val) call abort
-+ if (c) then
-+ if (any (obj%c /= val)) call abort
-+ end if
-+ if (f) then
-+ if (obj%f /= val) call abort
-+ end if
-+ end if
-+ end subroutine ver_dl
-+ subroutine ver_dt (obj, val, h, hl, hu, k, c, cl1, cu1, cl2, cu2, f)
-+ type (dt), intent (in) :: obj
-+ integer, intent (in) :: val, hl, hu, cl1, cu1, cl2, cu2
-+ logical, intent (in) :: h, k, c, f
-+ integer :: i, j
-+ if ((h .neqv. allocated (obj%h)) .or. (k .neqv. allocated (obj%k))) call abort
-+ if (h) then
-+ if (lbound (obj%h, 1) /= hl .or. ubound (obj%h, 1) /= hu) call abort
-+ do i = hl, hu
-+ call ver_dl (obj%h(i), val, c, cl1, cu1, cl2, cu2, f)
-+ end do
-+ end if
-+ do i = 1, 2
-+ do j = 1, 2
-+ call ver_dl (obj%j(i, j), val, c, cl1, cu1, cl2, cu2, f)
-+ end do
-+ end do
-+ if (k) call ver_dl (obj%k, val, c, cl1, cu1, cl2, cu2, f)
-+ if (val /= 0) then
-+ if (obj%g /= val .or. obj%i /= val) call abort
-+ end if
-+ end subroutine ver_dt
-+ subroutine alloc_dl (obj, val, c, cl1, cu1, cl2, cu2, f)
-+ type (dl), intent (inout) :: obj
-+ integer, intent (in) :: val, cl1, cu1, cl2, cu2
-+ logical, intent (in) :: c, f
-+ if (val /= 0) then
-+ obj%a = val
-+ obj%b = val
-+ obj%d = val
-+ obj%e = val
-+ end if
-+ if (allocated (obj%c)) deallocate (obj%c)
-+ if (c) then
-+ allocate (obj%c(cl1:cu1, cl2:cu2))
-+ if (val /= 0) obj%c = val
-+ end if
-+ if (f) then
-+ if (.not.allocated (obj%f)) allocate (obj%f)
-+ if (val /= 0) obj%f = val
-+ else
-+ if (allocated (obj%f)) deallocate (obj%f)
-+ end if
-+ end subroutine alloc_dl
-+ subroutine alloc_dt (obj, val, h, hl, hu, k, c, cl1, cu1, cl2, cu2, f)
-+ type (dt), intent (inout) :: obj
-+ integer, intent (in) :: val, hl, hu, cl1, cu1, cl2, cu2
-+ logical, intent (in) :: h, k, c, f
-+ integer :: i, j
-+ if (val /= 0) then
-+ obj%g = val
-+ obj%i = val
-+ end if
-+ if (allocated (obj%h)) deallocate (obj%h)
-+ if (h) then
-+ allocate (obj%h(hl:hu))
-+ do i = hl, hu
-+ call alloc_dl (obj%h(i), val, c, cl1, cu1, cl2, cu2, f)
-+ end do
-+ end if
-+ do i = 1, 2
-+ do j = 1, 2
-+ call alloc_dl (obj%j(i, j), val, c, cl1, cu1, cl2, cu2, f)
-+ end do
-+ end do
-+ if (k) then
-+ if (.not.allocated (obj%k)) allocate (obj%k)
-+ call alloc_dl (obj%k, val, c, cl1, cu1, cl2, cu2, f)
-+ else
-+ if (allocated (obj%k)) deallocate (obj%k)
-+ end if
-+ end subroutine alloc_dt
-+end module m
-+ use m
-+ type (dt), allocatable :: y
-+ call foo (y)
-+contains
-+ subroutine foo (y)
-+ use m
-+ type (dt), allocatable :: x, y, z(:,:)
-+ logical, parameter :: F = .false.
-+ logical, parameter :: T = .true.
-+ logical :: l
-+!$omp parallel private (x, y, z)
-+ if (allocated (x) .or. allocated (y) .or. allocated (z)) call abort
-+!$omp end parallel
-+!$omp parallel firstprivate (x, y, z)
-+ if (allocated (x) .or. allocated (y) .or. allocated (z)) call abort
-+!$omp end parallel
-+ l = F
-+!$omp parallel sections lastprivate (x, y, z) firstprivate (l)
-+!$omp section
-+ if (.not. l) then
-+ if (allocated (x) .or. allocated (y) .or. allocated (z)) call abort
-+ end if
-+!$omp section
-+ if (.not. l) then
-+ if (allocated (x) .or. allocated (y) .or. allocated (z)) call abort
-+ end if
-+ allocate (x, y, z(-3:-3,2:3))
-+ call alloc_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call alloc_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call alloc_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call alloc_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+!$omp section
-+!$omp end parallel sections
-+ if (.not.allocated (x) .or. .not.allocated (y)) call abort
-+ if (.not.allocated (z)) call abort
-+ if (lbound (z, 1) /= -3 .or. ubound (z, 1) /= -3) call abort
-+ if (lbound (z, 2) /= 2 .or. ubound (z, 2) /= 3) call abort
-+ call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call alloc_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (y, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (y, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+!$omp parallel private (x, y, z)
-+ call ver_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (y, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (y, 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
-+ call ver_dt (y, 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
-+ call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (z(-3,3), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
-+ call ver_dt (z(-3,3), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
-+!$omp end parallel
-+ call ver_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (y, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (y, 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
-+ call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (z(-3,3), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
-+!$omp parallel private (x, y, z)
-+ call ver_dt (x, 0, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (y, 0, T, 3, 4, F, T, 1, 1, 2, 4, T)
-+ deallocate (x%h, x%k)
-+ deallocate (y%h)
-+ allocate (y%k)
-+ call ver_dt (z(-3,2), 0, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (z(-3,3), 0, T, 3, 4, F, T, 1, 1, 2, 4, T)
-+ deallocate (z(-3,2)%h, z(-3,2)%k)
-+ deallocate (z(-3,3)%h)
-+ allocate (z(-3,3)%k)
-+!$omp end parallel
-+ call alloc_dt (x, 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
-+ call alloc_dt (y, 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
-+ call alloc_dt (z(-3,2), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
-+ call alloc_dt (z(-3,3), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
-+!$omp parallel firstprivate (x, y, z)
-+ call ver_dt (x, 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
-+ call alloc_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (y, 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
-+ call alloc_dt (y, 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
-+ call ver_dt (y, 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
-+ call ver_dt (z(-3,2), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
-+ call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (z(-3,3), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
-+ call alloc_dt (z(-3,3), 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
-+ call ver_dt (z(-3,3), 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
-+!$omp end parallel
-+ call ver_dt (x, 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
-+ call alloc_dt (x, 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (y, 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
-+ call alloc_dt (y, 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (z(-3,2), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
-+ call alloc_dt (z(-3,2), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (z(-3,3), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
-+ call alloc_dt (z(-3,3), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+!$omp parallel firstprivate (x, y, z)
-+ call ver_dt (x, 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (y, 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (y, 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
-+ call ver_dt (y, 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
-+ call ver_dt (z(-3,2), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (z(-3,3), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (z(-3,3), 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
-+ call ver_dt (z(-3,3), 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
-+!$omp end parallel
-+ call ver_dt (x, 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (y, 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (y, 18, T, 0, 1, T, T, 0, 1, 0, 1, T)
-+ call ver_dt (z(-3,2), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (z(-3,3), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (z(-3,3), 18, T, 0, 1, T, T, 0, 1, 0, 1, T)
-+ l = F
-+!$omp parallel sections lastprivate (x, y, z) firstprivate (l)
-+!$omp section
-+ if (l) then
-+ call ver_dt (x, 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (y, 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ call ver_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ else
-+ call ver_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (y, 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
-+ call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (z(-3,3), 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
-+ end if
-+ l = T
-+ call alloc_dt (x, 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
-+ call ver_dt (x, 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
-+ call alloc_dt (y, 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
-+ call ver_dt (y, 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
-+ call alloc_dt (z(-3,2), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
-+ call ver_dt (z(-3,2), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
-+ call alloc_dt (z(-3,3), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
-+ call ver_dt (z(-3,3), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
-+!$omp section
-+ if (l) then
-+ call ver_dt (x, 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
-+ call ver_dt (y, 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
-+ call ver_dt (z(-3,2), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
-+ call ver_dt (z(-3,3), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
-+ else
-+ call ver_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (y, 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
-+ call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (z(-3,3), 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
-+ end if
-+ l = T
-+ call alloc_dt (x, 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (x, 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call alloc_dt (y, 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ call ver_dt (y, 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ call alloc_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call alloc_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ call ver_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+!$omp section
-+!$omp end parallel sections
-+ call ver_dt (x, 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (y, 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ call ver_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+!$omp parallel sections lastprivate (x, y, z) firstprivate (l)
-+!$omp section
-+ if (l) then
-+ call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ else
-+ call ver_dt (x, 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (y, 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ call ver_dt (z(-3,2), 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (z(-3,3), 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ end if
-+ l = T
-+ call alloc_dt (x, 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call ver_dt (x, 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call alloc_dt (y, 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+ call ver_dt (y, 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+ call alloc_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call ver_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call alloc_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+ call ver_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+!$omp section
-+ if (l) then
-+ call ver_dt (x, 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call ver_dt (y, 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+ call ver_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call ver_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+ else
-+ call ver_dt (x, 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (y, 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ call ver_dt (z(-3,2), 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (z(-3,3), 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ end if
-+ l = T
-+ call alloc_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call alloc_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call alloc_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call alloc_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+!$omp section
-+!$omp end parallel sections
-+ call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+!$omp parallel private (x, y, z)
-+ call ver_dt (x, 0, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (y, 0, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call ver_dt (z(-3,2), 0, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (z(-3,3), 0, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+!$omp single
-+ call alloc_dt (x, 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call alloc_dt (y, 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+ call alloc_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call alloc_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+!$omp end single copyprivate (x, y, z)
-+ call ver_dt (x, 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call ver_dt (y, 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+ call ver_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call ver_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+!$omp end parallel
-+ call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ end subroutine foo
-+end
-Index: libgomp/testsuite/libgomp.fortran/depend-1.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/depend-1.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/depend-1.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,203 @@
-+! { dg-do run }
-+
-+ call dep ()
-+ call dep2 ()
-+ call dep3 ()
-+ call firstpriv ()
-+ call antidep ()
-+ call antidep2 ()
-+ call antidep3 ()
-+ call outdep ()
-+ call concurrent ()
-+ call concurrent2 ()
-+ call concurrent3 ()
-+contains
-+ subroutine dep
-+ integer :: x
-+ x = 1
-+ !$omp parallel
-+ !$omp single
-+ !$omp task shared (x) depend(out: x)
-+ x = 2
-+ !$omp end task
-+ !$omp task shared (x) depend(in: x)
-+ if (x.ne.2) call abort
-+ !$omp end task
-+ !$omp end single
-+ !$omp end parallel
-+ end subroutine dep
-+
-+ subroutine dep2
-+ integer :: x
-+ !$omp parallel
-+ !$omp single private (x)
-+ x = 1
-+ !$omp task shared (x) depend(out: x)
-+ x = 2
-+ !$omp end task
-+ !$omp task shared (x) depend(in: x)
-+ if (x.ne.2) call abort
-+ !$omp end task
-+ !$omp taskwait
-+ !$omp end single
-+ !$omp end parallel
-+ end subroutine dep2
-+
-+ subroutine dep3
-+ integer :: x
-+ !$omp parallel private (x)
-+ x = 1
-+ !$omp single
-+ !$omp task shared (x) depend(out: x)
-+ x = 2
-+ !$omp endtask
-+ !$omp task shared (x) depend(in: x)
-+ if (x.ne.2) call abort
-+ !$omp endtask
-+ !$omp endsingle
-+ !$omp endparallel
-+ end subroutine dep3
-+
-+ subroutine firstpriv
-+ integer :: x
-+ !$omp parallel private (x)
-+ !$omp single
-+ x = 1
-+ !$omp task depend(out: x)
-+ x = 2
-+ !$omp end task
-+ !$omp task depend(in: x)
-+ if (x.ne.1) call abort
-+ !$omp end task
-+ !$omp end single
-+ !$omp end parallel
-+ end subroutine firstpriv
-+
-+ subroutine antidep
-+ integer :: x
-+ x = 1
-+ !$omp parallel
-+ !$omp single
-+ !$omp task shared(x) depend(in: x)
-+ if (x.ne.1) call abort
-+ !$omp end task
-+ !$omp task shared(x) depend(out: x)
-+ x = 2
-+ !$omp end task
-+ !$omp end single
-+ !$omp end parallel
-+ end subroutine antidep
-+
-+ subroutine antidep2
-+ integer :: x
-+ !$omp parallel private (x)
-+ !$omp single
-+ x = 1
-+ !$omp taskgroup
-+ !$omp task shared(x) depend(in: x)
-+ if (x.ne.1) call abort
-+ !$omp end task
-+ !$omp task shared(x) depend(out: x)
-+ x = 2
-+ !$omp end task
-+ !$omp end taskgroup
-+ !$omp end single
-+ !$omp end parallel
-+ end subroutine antidep2
-+
-+ subroutine antidep3
-+ integer :: x
-+ !$omp parallel
-+ x = 1
-+ !$omp single
-+ !$omp task shared(x) depend(in: x)
-+ if (x.ne.1) call abort
-+ !$omp end task
-+ !$omp task shared(x) depend(out: x)
-+ x = 2
-+ !$omp end task
-+ !$omp end single
-+ !$omp end parallel
-+ end subroutine antidep3
-+
-+ subroutine outdep
-+ integer :: x
-+ !$omp parallel private (x)
-+ !$omp single
-+ x = 0
-+ !$omp task shared(x) depend(out: x)
-+ x = 1
-+ !$omp end task
-+ !$omp task shared(x) depend(out: x)
-+ x = 2
-+ !$omp end task
-+ !$omp taskwait
-+ if (x.ne.2) call abort
-+ !$omp end single
-+ !$omp end parallel
-+ end subroutine outdep
-+
-+ subroutine concurrent
-+ integer :: x
-+ x = 1
-+ !$omp parallel
-+ !$omp single
-+ !$omp task shared (x) depend(out: x)
-+ x = 2
-+ !$omp end task
-+ !$omp task shared (x) depend(in: x)
-+ if (x.ne.2) call abort
-+ !$omp end task
-+ !$omp task shared (x) depend(in: x)
-+ if (x.ne.2) call abort
-+ !$omp end task
-+ !$omp task shared (x) depend(in: x)
-+ if (x.ne.2) call abort
-+ !$omp end task
-+ !$omp end single
-+ !$omp end parallel
-+ end subroutine concurrent
-+
-+ subroutine concurrent2
-+ integer :: x
-+ !$omp parallel private (x)
-+ !$omp single
-+ x = 1
-+ !$omp task shared (x) depend(out: x)
-+ x = 2;
-+ !$omp end task
-+ !$omp task shared (x) depend(in: x)
-+ if (x.ne.2) call abort
-+ !$omp end task
-+ !$omp task shared (x) depend(in: x)
-+ if (x.ne.2) call abort
-+ !$omp end task
-+ !$omp task shared (x) depend(in: x)
-+ if (x.ne.2) call abort
-+ !$omp end task
-+ !$omp taskwait
-+ !$omp end single
-+ !$omp end parallel
-+ end subroutine concurrent2
-+
-+ subroutine concurrent3
-+ integer :: x
-+ !$omp parallel private (x)
-+ x = 1
-+ !$omp single
-+ !$omp task shared (x) depend(out: x)
-+ x = 2
-+ !$omp end task
-+ !$omp task shared (x) depend(in: x)
-+ if (x.ne.2) call abort
-+ !$omp end task
-+ !$omp task shared (x) depend(in: x)
-+ if (x.ne.2) call abort
-+ !$omp end task
-+ !$omp task shared (x) depend(in: x)
-+ if (x.ne.2) call abort
-+ !$omp end task
-+ !$omp end single
-+ !$omp end parallel
-+ end subroutine concurrent3
-+end
-Index: libgomp/testsuite/libgomp.fortran/depend-3.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/depend-3.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/depend-3.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,42 @@
-+! { dg-do run }
-+
-+ integer :: x(2, 3)
-+ integer, allocatable :: z(:, :)
-+ allocate (z(-2:3, 2:4))
-+ call foo (x, z)
-+contains
-+ subroutine foo (x, z)
-+ integer :: x(:, :), y
-+ integer, allocatable :: z(:, :)
-+ y = 1
-+ !$omp parallel shared (x, y, z)
-+ !$omp single
-+ !$omp taskgroup
-+ !$omp task depend(in: x)
-+ if (y.ne.1) call abort
-+ !$omp end task
-+ !$omp task depend(out: x(1:2, 1:3))
-+ y = 2
-+ !$omp end task
-+ !$omp end taskgroup
-+ !$omp taskgroup
-+ !$omp task depend(in: z)
-+ if (y.ne.2) call abort
-+ !$omp end task
-+ !$omp task depend(out: z(-2:3, 2:4))
-+ y = 3
-+ !$omp end task
-+ !$omp end taskgroup
-+ !$omp taskgroup
-+ !$omp task depend(in: x)
-+ if (y.ne.3) call abort
-+ !$omp end task
-+ !$omp task depend(out: x(1:, 1:))
-+ y = 4
-+ !$omp end task
-+ !$omp end taskgroup
-+ !$omp end single
-+ !$omp end parallel
-+ if (y.ne.4) call abort
-+ end subroutine
-+end
-Index: libgomp/testsuite/libgomp.fortran/simd1.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/simd1.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/simd1.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,35 @@
-+! { dg-do run }
-+! { dg-additional-options "-msse2" { target sse2_runtime } }
-+! { dg-additional-options "-mavx" { target avx_runtime } }
-+
-+ type dt
-+ integer :: x = 0
-+ end type
-+ type (dt) :: t
-+ integer :: i, j, k, l, r, s, a(30)
-+ integer, target :: q(30)
-+ integer, pointer :: p(:)
-+ !$omp declare reduction (foo : integer : &
-+ !$omp & omp_out = omp_out + omp_in) initializer (omp_priv = 0)
-+ !$omp declare reduction (+ : dt : omp_out%x = omp_out%x &
-+ !$omp & + omp_in%x)
-+ a(:) = 1
-+ q(:) = 1
-+ p => q
-+ r = 0
-+ j = 10
-+ k = 20
-+ s = 0
-+ !$omp simd safelen (8) reduction(+:r, t) linear(j, k : 2) &
-+ !$omp& private (l) aligned(p : 4) reduction(foo:s)
-+ do i = 1, 30
-+ l = j + k + a(i) + p(i)
-+ r = r + l
-+ j = j + 2
-+ k = k + 2
-+ s = s + l
-+ t%x = t%x + l
-+ end do
-+ if (r.ne.2700.or.j.ne.70.or.k.ne.80.or.s.ne.2700) call abort
-+ if (t%x.ne.2700) call abort
-+end
-Index: libgomp/testsuite/libgomp.fortran/simd3.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/simd3.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/simd3.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,109 @@
-+! { dg-do run }
-+! { dg-additional-options "-msse2" { target sse2_runtime } }
-+! { dg-additional-options "-mavx" { target avx_runtime } }
-+
-+ integer :: a(1024), b(1024), k, m, i, s, t
-+ k = 4
-+ m = 2
-+ t = 1
-+ do i = 1, 1024
-+ a(i) = i - 513
-+ b(i) = modulo (i - 52, 39)
-+ if (i.lt.52.and.b(i).ne.0) b(i) = b(i) - 39
-+ end do
-+ s = foo (b)
-+ do i = 1, 1024
-+ if (a(i).ne.((i - 513) * b(i))) call abort
-+ if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
-+ if (b(i).ne.(modulo (i - 52, 39) - 39)) call abort
-+ else
-+ if (b(i).ne.(modulo (i - 52, 39))) call abort
-+ end if
-+ a(i) = i - 513
-+ end do
-+ if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) call abort
-+ k = 4
-+ m = 2
-+ t = 1
-+ s = bar (b)
-+ do i = 1, 1024
-+ if (a(i).ne.((i - 513) * b(i))) call abort
-+ if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
-+ if (b(i).ne.(modulo (i - 52, 39) - 39)) call abort
-+ else
-+ if (b(i).ne.(modulo (i - 52, 39))) call abort
-+ end if
-+ a(i) = i - 513
-+ end do
-+ if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) call abort
-+ k = 4
-+ m = 2
-+ t = 1
-+ s = baz (b)
-+ do i = 1, 1024
-+ if (a(i).ne.((i - 513) * b(i))) call abort
-+ if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
-+ if (b(i).ne.(modulo (i - 52, 39) - 39)) call abort
-+ else
-+ if (b(i).ne.(modulo (i - 52, 39))) call abort
-+ end if
-+ end do
-+ if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) call abort
-+contains
-+ function foo (p)
-+ integer :: p(1024), u, v, i, s, foo
-+ s = 0
-+ !$omp parallel
-+ !$omp do simd linear(k : m + 1) reduction(+: s) lastprivate(u, v) &
-+ !$omp & schedule (static, 32)
-+ do i = 1, 1024
-+ a(i) = a(i) * p(i)
-+ u = p(i) + k
-+ k = k + m + 1
-+ v = p(i) + k
-+ s = s + p(i) + k
-+ end do
-+ !$omp end do simd
-+ !$omp end parallel
-+ if (i.ne.1025) call abort
-+ if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) call abort
-+ foo = s
-+ end function foo
-+ function bar (p)
-+ integer :: p(1024), u, v, i, s, bar
-+ s = 0
-+ !$omp parallel
-+ !$omp do simd linear(k : m + 1) reduction(+: s) lastprivate(u, v) &
-+ !$omp & schedule (dynamic, 32)
-+ do i = 1, 1024, t
-+ a(i) = a(i) * p(i)
-+ u = p(i) + k
-+ k = k + m + 1
-+ v = p(i) + k
-+ s = s + p(i) + k
-+ end do
-+ !$omp end do simd
-+ !$omp endparallel
-+ if (i.ne.1025) call abort
-+ if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) call abort
-+ bar = s
-+ end function bar
-+ function baz (p)
-+ integer :: p(1024), u, v, i, s, baz
-+ s = 0
-+ !$omp parallel
-+ !$omp do simd linear(k : m + 1) reduction(+: s) lastprivate(u, v) &
-+ !$omp & linear(i : t) schedule (static, 8)
-+ do i = 1, 1024, t
-+ a(i) = a(i) * p(i)
-+ u = p(i) + k
-+ k = k + m + 1
-+ v = p(i) + k
-+ s = s + p(i) + k
-+ end do
-+ !$omp end parallel
-+ if (i.ne.1025) call abort
-+ if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) call abort
-+ baz = s
-+ end function baz
-+end
-Index: libgomp/testsuite/libgomp.fortran/simd5.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/simd5.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/simd5.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,124 @@
-+! { dg-do run }
-+! { dg-additional-options "-msse2" { target sse2_runtime } }
-+! { dg-additional-options "-mavx" { target avx_runtime } }
-+
-+ integer :: i, j, b, c
-+ c = 0
-+ i = 4
-+ j = 4
-+ b = 7
-+!$omp simd linear(b:2) reduction(+:c)
-+ do i = 0, 63
-+ c = c + b - (7 + 2 * i)
-+ b = b + 2
-+ end do
-+ if (c /= 0 .or. i /= 64 .or. b /= 7 + 64 * 2) call abort
-+ i = 4
-+ j = 4
-+ b = 7
-+!$omp simd linear(b:3) reduction(+:c)
-+ do i = 0, 63, 4
-+ c = c + b - (7 + i / 4 * 3)
-+ b = b + 3
-+ end do
-+ if (c /= 0 .or. i /= 64 .or. b /= 7 + 16 * 3) call abort
-+ i = 4
-+ j = 4
-+ b = 7
-+!$omp simd linear(i) linear(b:2) reduction(+:c)
-+ do i = 0, 63
-+ c = c + b - (7 + 2 * i)
-+ b = b + 2
-+ end do
-+ if (c /= 0 .or. i /= 64 .or. b /= 7 + 64 * 2) call abort
-+ i = 4
-+ j = 4
-+ b = 7
-+!$omp simd linear(i:4) linear(b:3) reduction(+:c)
-+ do i = 0, 63, 4
-+ c = c + b - (7 + i / 4 * 3)
-+ b = b + 3
-+ end do
-+ if (c /= 0 .or. i /= 64 .or. b /= 7 + 16 * 3) call abort
-+ i = 4
-+ j = 4
-+ b = 7
-+!$omp simd collapse(2) linear(b:2) reduction(+:c)
-+ do i = 0, 7
-+ do j = 0, 7
-+ c = c + b - (7 + 2 * j + 2 * 8 * i)
-+ b = b + 2
-+ end do
-+ end do
-+ if (c /= 0 .or. i /= 8 .or. j /= 8 .or. b /= 7 + 64 * 2) call abort
-+ i = 4
-+ j = 4
-+ b = 7
-+!$omp simd collapse(2) linear(b:2) reduction(+:c) lastprivate (i, j)
-+ do i = 0, 7
-+ do j = 0, 7
-+ c = c + b - (7 + 2 * j + 2 * 8 * i)
-+ b = b + 2
-+ end do
-+ end do
-+ if (c /= 0 .or. i /= 8 .or. j /= 8 .or. b /= 7 + 64 * 2) call abort
-+ i = 4
-+ j = 4
-+ b = 7
-+!$omp parallel do simd schedule (static, 4) linear(b:2) reduction(+:c)
-+ do i = 0, 63
-+ c = c + b - (7 + 2 * i)
-+ b = b + 2
-+ end do
-+ if (c /= 0 .or. i /= 64 .or. b /= 7 + 64 * 2) call abort
-+ i = 4
-+ j = 4
-+ b = 7
-+!$omp parallel do simd schedule (static, 4) linear(b:3) reduction(+:c)
-+ do i = 0, 63, 4
-+ c = c + b - (7 + i / 4 * 3)
-+ b = b + 3
-+ end do
-+ if (c /= 0 .or. i /= 64 .or. b /= 7 + 16 * 3) call abort
-+ i = 4
-+ j = 4
-+ b = 7
-+!$omp parallel do simd schedule (static, 4) linear(i) linear(b:2) reduction(+:c)
-+ do i = 0, 63
-+ c = c + b - (7 + 2 * i)
-+ b = b + 2
-+ end do
-+ if (c /= 0 .or. i /= 64 .or. b /= 7 + 64 * 2) call abort
-+ i = 4
-+ j = 4
-+ b = 7
-+!$omp parallel do simd schedule (static, 4) linear(i:4) linear(b:3) reduction(+:c)
-+ do i = 0, 63, 4
-+ c = c + b - (7 + i / 4 * 3)
-+ b = b + 3
-+ end do
-+ if (c /= 0 .or. i /= 64 .or. b /= 7 + 16 * 3) call abort
-+ i = 4
-+ j = 4
-+ b = 7
-+!$omp parallel do simd schedule (static, 4) collapse(2) linear(b:2) reduction(+:c)
-+ do i = 0, 7
-+ do j = 0, 7
-+ c = c + b - (7 + 2 * j + 2 * 8 * i)
-+ b = b + 2
-+ end do
-+ end do
-+ if (c /= 0 .or. i /= 8 .or. j /= 8 .or. b /= 7 + 64 * 2) call abort
-+ i = 4
-+ j = 4
-+ b = 7
-+!$omp parallel do simd schedule (static, 4) collapse(2) linear(b:2) &
-+!$omp & reduction(+:c) lastprivate (i, j)
-+ do i = 0, 7
-+ do j = 0, 7
-+ c = c + b - (7 + 2 * j + 2 * 8 * i)
-+ b = b + 2
-+ end do
-+ end do
-+ if (c /= 0 .or. i /= 8 .or. j /= 8 .or. b /= 7 + 64 * 2) call abort
-+end
-Index: libgomp/testsuite/libgomp.fortran/simd7.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/simd7.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/simd7.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,172 @@
-+! { dg-do run }
-+! { dg-additional-options "-msse2" { target sse2_runtime } }
-+! { dg-additional-options "-mavx" { target avx_runtime } }
-+
-+subroutine foo (d, e, f, g, m, n)
-+ integer :: i, j, b(2:9), c(3:n), d(:), e(2:n), f(2:,3:), n
-+ integer, allocatable :: g(:), h(:), k, m
-+ logical :: l
-+ l = .false.
-+ allocate (h(2:7))
-+ i = 4; j = 4; b = 7; c = 8; d = 9; e = 10; f = 11; g = 12; h = 13; k = 14; m = 15
-+!$omp simd linear(b)linear(c:2)linear(d:3)linear(e:4)linear(f:5)linear(g:6) &
-+!$omp & linear(h:7)linear(k:8)linear(m:9) reduction(.or.:l)
-+ do i = 0, 63
-+ l = l .or. .not.allocated (g) .or. .not.allocated (h)
-+ l = l .or. .not.allocated (k) .or. .not.allocated (m)
-+ l = l .or. any (b /= 7 + i) .or. any (c /= 8 + 2 * i)
-+ l = l .or. any (d /= 9 + 3 * i) .or. any (e /= 10 + 4 * i)
-+ l = l .or. any (f /= 11 + 5 * i) .or. any (g /= 12 + 6 * i)
-+ l = l .or. any (h /= 13 + 7 * i) .or. (k /= 14 + 8 * i)
-+ l = l .or. (m /= 15 + 9 * i)
-+ l = l .or. (lbound (b, 1) /= 2) .or. (ubound (b, 1) /= 9)
-+ l = l .or. (lbound (c, 1) /= 3) .or. (ubound (c, 1) /= n)
-+ l = l .or. (lbound (d, 1) /= 1) .or. (ubound (d, 1) /= 17)
-+ l = l .or. (lbound (e, 1) /= 2) .or. (ubound (e, 1) /= n)
-+ l = l .or. (lbound (f, 1) /= 2) .or. (ubound (f, 1) /= 3)
-+ l = l .or. (lbound (f, 2) /= 3) .or. (ubound (f, 2) /= 5)
-+ l = l .or. (lbound (g, 1) /= 7) .or. (ubound (g, 1) /= 10)
-+ l = l .or. (lbound (h, 1) /= 2) .or. (ubound (h, 1) /= 7)
-+ b = b + 1; c = c + 2; d = d + 3; e = e + 4; f = f + 5; g = g + 6
-+ h = h + 7; k = k + 8; m = m + 9
-+ end do
-+ if (l .or. i /= 64) call abort
-+ if (any (b /= 7 + 64) .or. any (c /= 8 + 2 * 64)) call abort
-+ if (any (d /= 9 + 3 * 64) .or. any (e /= 10 + 4 * 64)) call abort
-+ if (any (f /= 11 + 5 * 64) .or. any (g /= 12 + 6 * 64)) call abort
-+ if (any (h /= 13 + 7 * 64) .or. (k /= 14 + 8 * 64)) call abort
-+ if (m /= 15 + 9 * 64) call abort
-+ if ((lbound (b, 1) /= 2) .or. (ubound (b, 1) /= 9)) call abort
-+ if ((lbound (c, 1) /= 3) .or. (ubound (c, 1) /= n)) call abort
-+ if ((lbound (d, 1) /= 1) .or. (ubound (d, 1) /= 17)) call abort
-+ if ((lbound (e, 1) /= 2) .or. (ubound (e, 1) /= n)) call abort
-+ if ((lbound (f, 1) /= 2) .or. (ubound (f, 1) /= 3)) call abort
-+ if ((lbound (f, 2) /= 3) .or. (ubound (f, 2) /= 5)) call abort
-+ if ((lbound (g, 1) /= 7) .or. (ubound (g, 1) /= 10)) call abort
-+ if ((lbound (h, 1) /= 2) .or. (ubound (h, 1) /= 7)) call abort
-+ i = 4; j = 4; b = 7; c = 8; d = 9; e = 10; f = 11; g = 12; h = 13; k = 14; m = 15
-+!$omp simd linear(b)linear(c:2)linear(d:3)linear(e:4)linear(f:5)linear(g:6) &
-+!$omp & linear(h:7)linear(k:8)linear(m:9) reduction(.or.:l) collapse(2)
-+ do i = 0, 7
-+ do j = 0, 7
-+ l = l .or. .not.allocated (g) .or. .not.allocated (h)
-+ l = l .or. .not.allocated (k) .or. .not.allocated (m)
-+ l = l .or. any (b /= 7 + (8 * i + j)) .or. any (c /= 8 + 2 * (8 * i + j))
-+ l = l .or. any (d /= 9 + 3 * (8 * i + j)) .or. any (e /= 10 + 4 * (8 * i + j))
-+ l = l .or. any (f /= 11 + 5 * (8 * i + j)) .or. any (g /= 12 + 6 * (8 * i + j))
-+ l = l .or. any (h /= 13 + 7 * (8 * i + j)) .or. (k /= 14 + 8 * (8 * i + j))
-+ l = l .or. (m /= 15 + 9 * (8 * i + j))
-+ l = l .or. (lbound (b, 1) /= 2) .or. (ubound (b, 1) /= 9)
-+ l = l .or. (lbound (c, 1) /= 3) .or. (ubound (c, 1) /= n)
-+ l = l .or. (lbound (d, 1) /= 1) .or. (ubound (d, 1) /= 17)
-+ l = l .or. (lbound (e, 1) /= 2) .or. (ubound (e, 1) /= n)
-+ l = l .or. (lbound (f, 1) /= 2) .or. (ubound (f, 1) /= 3)
-+ l = l .or. (lbound (f, 2) /= 3) .or. (ubound (f, 2) /= 5)
-+ l = l .or. (lbound (g, 1) /= 7) .or. (ubound (g, 1) /= 10)
-+ l = l .or. (lbound (h, 1) /= 2) .or. (ubound (h, 1) /= 7)
-+ b = b + 1; c = c + 2; d = d + 3; e = e + 4; f = f + 5; g = g + 6
-+ h = h + 7; k = k + 8; m = m + 9
-+ end do
-+ end do
-+ if (l .or. i /= 8 .or. j /= 8) call abort
-+ if (any (b /= 7 + 64) .or. any (c /= 8 + 2 * 64)) call abort
-+ if (any (d /= 9 + 3 * 64) .or. any (e /= 10 + 4 * 64)) call abort
-+ if (any (f /= 11 + 5 * 64) .or. any (g /= 12 + 6 * 64)) call abort
-+ if (any (h /= 13 + 7 * 64) .or. (k /= 14 + 8 * 64)) call abort
-+ if (m /= 15 + 9 * 64) call abort
-+ if ((lbound (b, 1) /= 2) .or. (ubound (b, 1) /= 9)) call abort
-+ if ((lbound (c, 1) /= 3) .or. (ubound (c, 1) /= n)) call abort
-+ if ((lbound (d, 1) /= 1) .or. (ubound (d, 1) /= 17)) call abort
-+ if ((lbound (e, 1) /= 2) .or. (ubound (e, 1) /= n)) call abort
-+ if ((lbound (f, 1) /= 2) .or. (ubound (f, 1) /= 3)) call abort
-+ if ((lbound (f, 2) /= 3) .or. (ubound (f, 2) /= 5)) call abort
-+ if ((lbound (g, 1) /= 7) .or. (ubound (g, 1) /= 10)) call abort
-+ if ((lbound (h, 1) /= 2) .or. (ubound (h, 1) /= 7)) call abort
-+ i = 4; j = 4; b = 7; c = 8; d = 9; e = 10; f = 11; g = 12; h = 13; k = 14; m = 15
-+!$omp parallel do simd linear(b)linear(c:2)linear(d:3)linear(e:4)linear(f:5) &
-+!$omp & linear(g:6)linear(h:7)linear(k:8)linear(m:9) reduction(.or.:l)
-+ do i = 0, 63
-+ l = l .or. .not.allocated (g) .or. .not.allocated (h)
-+ l = l .or. .not.allocated (k) .or. .not.allocated (m)
-+ l = l .or. any (b /= 7 + i) .or. any (c /= 8 + 2 * i)
-+ l = l .or. any (d /= 9 + 3 * i) .or. any (e /= 10 + 4 * i)
-+ l = l .or. any (f /= 11 + 5 * i) .or. any (g /= 12 + 6 * i)
-+ l = l .or. any (h /= 13 + 7 * i) .or. (k /= 14 + 8 * i)
-+ l = l .or. (m /= 15 + 9 * i)
-+ l = l .or. (lbound (b, 1) /= 2) .or. (ubound (b, 1) /= 9)
-+ l = l .or. (lbound (c, 1) /= 3) .or. (ubound (c, 1) /= n)
-+ l = l .or. (lbound (d, 1) /= 1) .or. (ubound (d, 1) /= 17)
-+ l = l .or. (lbound (e, 1) /= 2) .or. (ubound (e, 1) /= n)
-+ l = l .or. (lbound (f, 1) /= 2) .or. (ubound (f, 1) /= 3)
-+ l = l .or. (lbound (f, 2) /= 3) .or. (ubound (f, 2) /= 5)
-+ l = l .or. (lbound (g, 1) /= 7) .or. (ubound (g, 1) /= 10)
-+ l = l .or. (lbound (h, 1) /= 2) .or. (ubound (h, 1) /= 7)
-+ b = b + 1; c = c + 2; d = d + 3; e = e + 4; f = f + 5; g = g + 6
-+ h = h + 7; k = k + 8; m = m + 9
-+ end do
-+ if (l .or. i /= 64) call abort
-+ if (any (b /= 7 + 64) .or. any (c /= 8 + 2 * 64)) call abort
-+ if (any (d /= 9 + 3 * 64) .or. any (e /= 10 + 4 * 64)) call abort
-+ if (any (f /= 11 + 5 * 64) .or. any (g /= 12 + 6 * 64)) call abort
-+ if (any (h /= 13 + 7 * 64) .or. (k /= 14 + 8 * 64)) call abort
-+ if (m /= 15 + 9 * 64) call abort
-+ if ((lbound (b, 1) /= 2) .or. (ubound (b, 1) /= 9)) call abort
-+ if ((lbound (c, 1) /= 3) .or. (ubound (c, 1) /= n)) call abort
-+ if ((lbound (d, 1) /= 1) .or. (ubound (d, 1) /= 17)) call abort
-+ if ((lbound (e, 1) /= 2) .or. (ubound (e, 1) /= n)) call abort
-+ if ((lbound (f, 1) /= 2) .or. (ubound (f, 1) /= 3)) call abort
-+ if ((lbound (f, 2) /= 3) .or. (ubound (f, 2) /= 5)) call abort
-+ if ((lbound (g, 1) /= 7) .or. (ubound (g, 1) /= 10)) call abort
-+ if ((lbound (h, 1) /= 2) .or. (ubound (h, 1) /= 7)) call abort
-+ i = 4; j = 4; b = 7; c = 8; d = 9; e = 10; f = 11; g = 12; h = 13; k = 14; m = 15
-+!$omp parallel do simd linear(b)linear(c:2)linear(d:3)linear(e:4)linear(f:5) &
-+!$omp & linear(g:6)linear(h:7)linear(k:8)linear(m:9) reduction(.or.:l) collapse(2)
-+ do i = 0, 7
-+ do j = 0, 7
-+ l = l .or. .not.allocated (g) .or. .not.allocated (h)
-+ l = l .or. .not.allocated (k) .or. .not.allocated (m)
-+ l = l .or. any (b /= 7 + (8 * i + j)) .or. any (c /= 8 + 2 * (8 * i + j))
-+ l = l .or. any (d /= 9 + 3 * (8 * i + j)) .or. any (e /= 10 + 4 * (8 * i + j))
-+ l = l .or. any (f /= 11 + 5 * (8 * i + j)) .or. any (g /= 12 + 6 * (8 * i + j))
-+ l = l .or. any (h /= 13 + 7 * (8 * i + j)) .or. (k /= 14 + 8 * (8 * i + j))
-+ l = l .or. (m /= 15 + 9 * (8 * i + j))
-+ l = l .or. (lbound (b, 1) /= 2) .or. (ubound (b, 1) /= 9)
-+ l = l .or. (lbound (c, 1) /= 3) .or. (ubound (c, 1) /= n)
-+ l = l .or. (lbound (d, 1) /= 1) .or. (ubound (d, 1) /= 17)
-+ l = l .or. (lbound (e, 1) /= 2) .or. (ubound (e, 1) /= n)
-+ l = l .or. (lbound (f, 1) /= 2) .or. (ubound (f, 1) /= 3)
-+ l = l .or. (lbound (f, 2) /= 3) .or. (ubound (f, 2) /= 5)
-+ l = l .or. (lbound (g, 1) /= 7) .or. (ubound (g, 1) /= 10)
-+ l = l .or. (lbound (h, 1) /= 2) .or. (ubound (h, 1) /= 7)
-+ b = b + 1; c = c + 2; d = d + 3; e = e + 4; f = f + 5; g = g + 6
-+ h = h + 7; k = k + 8; m = m + 9
-+ end do
-+ end do
-+ if (l .or. i /= 8 .or. j /= 8) call abort
-+ if (any (b /= 7 + 64) .or. any (c /= 8 + 2 * 64)) call abort
-+ if (any (d /= 9 + 3 * 64) .or. any (e /= 10 + 4 * 64)) call abort
-+ if (any (f /= 11 + 5 * 64) .or. any (g /= 12 + 6 * 64)) call abort
-+ if (any (h /= 13 + 7 * 64) .or. (k /= 14 + 8 * 64)) call abort
-+ if (m /= 15 + 9 * 64) call abort
-+ if ((lbound (b, 1) /= 2) .or. (ubound (b, 1) /= 9)) call abort
-+ if ((lbound (c, 1) /= 3) .or. (ubound (c, 1) /= n)) call abort
-+ if ((lbound (d, 1) /= 1) .or. (ubound (d, 1) /= 17)) call abort
-+ if ((lbound (e, 1) /= 2) .or. (ubound (e, 1) /= n)) call abort
-+ if ((lbound (f, 1) /= 2) .or. (ubound (f, 1) /= 3)) call abort
-+ if ((lbound (f, 2) /= 3) .or. (ubound (f, 2) /= 5)) call abort
-+ if ((lbound (g, 1) /= 7) .or. (ubound (g, 1) /= 10)) call abort
-+ if ((lbound (h, 1) /= 2) .or. (ubound (h, 1) /= 7)) call abort
-+end subroutine
-+
-+ interface
-+ subroutine foo (d, e, f, g, m, n)
-+ integer :: d(:), e(2:n), f(2:,3:), n
-+ integer, allocatable :: g(:), m
-+ end subroutine
-+ end interface
-+ integer, parameter :: n = 8
-+ integer :: d(2:18), e(3:n+1), f(5:6,7:9)
-+ integer, allocatable :: g(:), m
-+ allocate (g(7:10))
-+ call foo (d, e, f, g, m, n)
-+end
-Index: libgomp/testsuite/libgomp.fortran/allocatable10.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/allocatable10.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/allocatable10.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,112 @@
-+! { dg-do run }
-+
-+ integer, allocatable :: a, b(:), c(:,:)
-+ integer :: i
-+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) &
-+!$omp & initializer (omp_priv = 0)
-+ if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
-+ allocate (a, b(6:9), c(3, 8:9))
-+ a = 0
-+ b = 0
-+ c = 0
-+ if (.not.allocated (a)) call abort
-+ if (.not.allocated (b) .or. size (b) /= 4) call abort
-+ if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
-+ if (.not.allocated (c) .or. size (c) /= 6) call abort
-+ if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
-+ if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
-+!$omp parallel do reduction (+:a, b, c)
-+ do i = 1, 10
-+ if (.not.allocated (a)) call abort
-+ if (.not.allocated (b) .or. size (b) /= 4) call abort
-+ if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
-+ if (.not.allocated (c) .or. size (c) /= 6) call abort
-+ if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
-+ if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
-+ a = a + i
-+ b = b + 2 * i
-+ c = c + 3 * i
-+ end do
-+ if (.not.allocated (a)) call abort
-+ if (.not.allocated (b) .or. size (b) /= 4) call abort
-+ if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
-+ if (.not.allocated (c) .or. size (c) /= 6) call abort
-+ if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
-+ if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
-+ if (a /= 55 .or. any (b /= 110) .or. any (c /= 165)) call abort
-+ a = 0
-+ b = 0
-+ c = 0
-+!$omp parallel do reduction (foo : a, b, c)
-+ do i = 1, 10
-+ if (.not.allocated (a)) call abort
-+ if (.not.allocated (b) .or. size (b) /= 4) call abort
-+ if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
-+ if (.not.allocated (c) .or. size (c) /= 6) call abort
-+ if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
-+ if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
-+ a = a + i
-+ b = b + 2 * i
-+ c = c + 3 * i
-+ end do
-+ if (.not.allocated (a)) call abort
-+ if (.not.allocated (b) .or. size (b) /= 4) call abort
-+ if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
-+ if (.not.allocated (c) .or. size (c) /= 6) call abort
-+ if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
-+ if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
-+ if (a /= 55 .or. any (b /= 110) .or. any (c /= 165)) call abort
-+ a = 0
-+ b = 0
-+ c = 0
-+!$omp simd reduction (+:a, b, c)
-+ do i = 1, 10
-+ if (.not.allocated (a)) call abort
-+ if (.not.allocated (b) .or. size (b) /= 4) call abort
-+ if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
-+ if (.not.allocated (c) .or. size (c) /= 6) call abort
-+ if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
-+ if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
-+ a = a + i
-+ b = b + 2 * i
-+ c = c + 3 * i
-+ end do
-+ if (.not.allocated (a)) call abort
-+ if (.not.allocated (b) .or. size (b) /= 4) call abort
-+ if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
-+ if (.not.allocated (c) .or. size (c) /= 6) call abort
-+ if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
-+ if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
-+ if (a /= 55 .or. any (b /= 110) .or. any (c /= 165)) call abort
-+ a = 0
-+ b = 0
-+ c = 0
-+!$omp simd reduction (foo : a, b, c)
-+ do i = 1, 10
-+ if (.not.allocated (a)) call abort
-+ if (.not.allocated (b) .or. size (b) /= 4) call abort
-+ if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
-+ if (.not.allocated (c) .or. size (c) /= 6) call abort
-+ if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
-+ if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
-+ a = a + i
-+ b = b + 2 * i
-+ c = c + 3 * i
-+ end do
-+ if (.not.allocated (a)) call abort
-+ if (.not.allocated (b) .or. size (b) /= 4) call abort
-+ if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
-+ if (.not.allocated (c) .or. size (c) /= 6) call abort
-+ if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
-+ if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
-+ if (a /= 55 .or. any (b /= 110) .or. any (c /= 165)) call abort
-+end
-Index: libgomp/testsuite/libgomp.fortran/allocatable12.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/allocatable12.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/allocatable12.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,74 @@
-+! { dg-do run }
-+
-+ integer, allocatable :: a, b(:), c(:,:)
-+ logical :: l
-+ if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
-+
-+!$omp parallel private (a, b, c, l)
-+ l = .false.
-+ if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
-+
-+!$omp single
-+ allocate (a, b(6:9), c(3, 8:9))
-+ a = 4
-+ b = 5
-+ c = 6
-+!$omp end single copyprivate (a, b, c)
-+
-+ if (.not.allocated (a)) call abort
-+ if (.not.allocated (b) .or. size (b) /= 4) call abort
-+ if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
-+ if (.not.allocated (c) .or. size (c) /= 6) call abort
-+ if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
-+ if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
-+ if (a /= 4 .or. any (b /= 5) .or. any (c /= 6)) call abort
-+
-+!$omp single
-+ deallocate (a, b, c)
-+ if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
-+ allocate (a, b(0:4), c(3, 2:7))
-+ a = 1
-+ b = 2
-+ c = 3
-+!$omp end single copyprivate (a, b, c)
-+
-+ if (.not.allocated (a)) call abort
-+ if (.not.allocated (b) .or. size (b) /= 5) call abort
-+ if (lbound (b, 1) /= 0 .or. ubound (b, 1) /= 4) call abort
-+ if (.not.allocated (c) .or. size (c) /= 18) call abort
-+ if (size (c, 1) /= 3 .or. size (c, 2) /= 6) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
-+ if (lbound (c, 2) /= 2 .or. ubound (c, 2) /= 7) call abort
-+ if (a /= 1 .or. any (b /= 2) .or. any (c /= 3)) call abort
-+
-+!$omp single
-+ l = .true.
-+ deallocate (a, b, c)
-+ if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
-+ allocate (a, b(2:6), c(3:5, 3:8))
-+ a = 7
-+ b = 8
-+ c = 9
-+!$omp end single copyprivate (a, b, c)
-+
-+ if (.not.allocated (a)) call abort
-+ if (.not.allocated (b) .or. size (b) /= 5) call abort
-+ if (l) then
-+ if (lbound (b, 1) /= 2 .or. ubound (b, 1) /= 6) call abort
-+ else
-+ if (lbound (b, 1) /= 0 .or. ubound (b, 1) /= 4) call abort
-+ end if
-+ if (.not.allocated (c) .or. size (c) /= 18) call abort
-+ if (size (c, 1) /= 3 .or. size (c, 2) /= 6) call abort
-+ if (l) then
-+ if (lbound (c, 1) /= 3 .or. ubound (c, 1) /= 5) call abort
-+ if (lbound (c, 2) /= 3 .or. ubound (c, 2) /= 8) call abort
-+ else
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
-+ if (lbound (c, 2) /= 2 .or. ubound (c, 2) /= 7) call abort
-+ end if
-+ if (a /= 7 .or. any (b /= 8) .or. any (c /= 9)) call abort
-+
-+!$omp end parallel
-+end
-Index: libgomp/testsuite/libgomp.fortran/udr1.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/udr1.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/udr1.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,51 @@
-+! { dg-do run }
-+
-+module udr1
-+ type dt
-+ integer :: x = 7
-+ integer :: y = 9
-+ end type
-+end module udr1
-+ use udr1, only : dt
-+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in)
-+ integer :: i, j
-+!$omp declare reduction (bar : integer : &
-+!$omp & omp_out = omp_out + iand (omp_in, -4)) initializer (omp_priv = 3)
-+ type (dt) :: d
-+!$omp declare reduction (+ : dt : omp_out%x = omp_out%x &
-+!$omp & + iand (omp_in%x, -8))
-+!$omp declare reduction (foo : dt : omp_out%x = iand (omp_in%x, -8) &
-+!$omp & + omp_out%x) initializer (omp_priv = dt (5, 21))
-+ interface operator (+)
-+ function notdefined(x, y)
-+ use udr1, only : dt
-+ type(dt), intent (in) :: x, y
-+ type(dt) :: notdefined
-+ end function
-+ end interface
-+ j = 0
-+!$omp parallel do reduction (foo : j)
-+ do i = 1, 100
-+ j = j + i
-+ end do
-+ if (j .ne. 5050) call abort
-+ j = 3
-+!$omp parallel do reduction (bar : j)
-+ do i = 1, 100
-+ j = j + 4 * i
-+ end do
-+ if (j .ne. (5050 * 4 + 3)) call abort
-+!$omp parallel do reduction (+ : d)
-+ do i = 1, 100
-+ if (d%y .ne. 9) call abort
-+ d%x = d%x + 8 * i
-+ end do
-+ if (d%x .ne. (5050 * 8 + 7) .or. d%y .ne. 9) call abort
-+ d = dt (5, 21)
-+!$omp parallel do reduction (foo : d)
-+ do i = 1, 100
-+ if (d%y .ne. 21) call abort
-+ d%x = d%x + 8 * i
-+ end do
-+ if (d%x .ne. (5050 * 8 + 5) .or. d%y .ne. 21) call abort
-+end
-Index: libgomp/testsuite/libgomp.fortran/omp_atomic5.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/omp_atomic5.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/omp_atomic5.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,59 @@
-+! { dg-do run }
-+ integer (kind = 4) :: a, a2
-+ integer (kind = 2) :: b, b2
-+ real :: c
-+ double precision :: d, d2, c2
-+ integer, dimension (10) :: e
-+ e(:) = 5
-+ e(7) = 9
-+!$omp atomic write seq_cst
-+ a = 1
-+!$omp atomic seq_cst, write
-+ b = 2
-+!$omp atomic write, seq_cst
-+ c = 3
-+!$omp atomic seq_cst write
-+ d = 4
-+!$omp atomic capture seq_cst
-+ a2 = a
-+ a = a + 4
-+!$omp end atomic
-+!$omp atomic capture, seq_cst
-+ b = b - 18
-+ b2 = b
-+!$omp end atomic
-+!$omp atomic seq_cst, capture
-+ c2 = c
-+ c = 2.0 * c
-+!$omp end atomic
-+!$omp atomic seq_cst capture
-+ d = d / 2.0
-+ d2 = d
-+!$omp end atomic
-+ if (a2 .ne. 1 .or. b2 .ne. -16 .or. c2 .ne. 3 .or. d2 .ne. 2) call abort
-+!$omp atomic read seq_cst
-+ a2 = a
-+!$omp atomic seq_cst, read
-+ c2 = c
-+ if (a2 .ne. 5 .or. b2 .ne. -16 .or. c2 .ne. 6 .or. d2 .ne. 2) call abort
-+ a2 = 10
-+ if (a2 .ne. 10) call abort
-+!$omp atomic capture
-+ a2 = a
-+ a = e(1) + e(6) + e(7) * 2
-+!$omp endatomic
-+ if (a2 .ne. 5) call abort
-+!$omp atomic read
-+ a2 = a
-+!$omp end atomic
-+ if (a2 .ne. 28) call abort
-+!$omp atomic capture seq_cst
-+ b2 = b
-+ b = e(1) + e(7) + e(5) * 2
-+!$omp end atomic
-+ if (b2 .ne. -16) call abort
-+!$omp atomic seq_cst, read
-+ b2 = b
-+!$omp end atomic
-+ if (b2 .ne. 24) call abort
-+end
-Index: libgomp/testsuite/libgomp.fortran/udr3.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/udr3.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/udr3.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,38 @@
-+! { dg-do run }
-+
-+!$omp declare reduction (foo : character(kind=1, len=*) &
-+!$omp & : omp_out = trim(omp_out) // omp_in) initializer (omp_priv = '')
-+!$omp declare reduction (bar : character(kind=1, len=:) &
-+!$omp & : omp_out = trim(omp_in) // omp_out) initializer (omp_priv = '')
-+!$omp declare reduction (baz : character(kind=1, len=1) &
-+!$omp & : omp_out = char (ichar (omp_out) + ichar (omp_in) &
-+!$omp & - ichar ('0'))) initializer (omp_priv = '0')
-+!$omp declare reduction (baz : character(kind=1, len=2) &
-+!$omp & : omp_out = char (ichar (omp_out(1:1)) + ichar (omp_in(1:1)) &
-+!$omp & - ichar ('0')) // char (ichar (omp_out(2:2)) + &
-+!$omp & ichar (omp_in(2:2)) - ichar ('0'))) initializer (omp_priv = '00')
-+ character(kind=1, len=64) :: c, d
-+ character(kind = 1, len=1) :: e
-+ character(kind = 1, len=1+1) :: f
-+ integer :: i
-+ c = ''
-+ d = ''
-+ e = '0'
-+ f = '00'
-+!$omp parallel do reduction (foo : c) reduction (bar : d) &
-+!$omp & reduction (baz : e, f)
-+ do i = 1, 64
-+ c = trim(c) // char (ichar ('0') + i)
-+ d = char (ichar ('0') + i) // d
-+ e = char (ichar (e) + mod (i, 3))
-+ f = char (ichar (f(1:1)) + mod (i, 2)) &
-+& // char (ichar (f(2:2)) + mod (i, 3))
-+ end do
-+ do i = 1, 64
-+ if (index (c, char (ichar ('0') + i)) .eq. 0) call abort
-+ if (index (d, char (ichar ('0') + i)) .eq. 0) call abort
-+ end do
-+ if (e.ne.char (ichar ('0') + 64)) call abort
-+ if (f(1:1).ne.char (ichar ('0') + 32)) call abort
-+ if (f(2:2).ne.char (ichar ('0') + 64)) call abort
-+end
-Index: libgomp/testsuite/libgomp.fortran/udr5.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/udr5.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/udr5.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,57 @@
-+! { dg-do run }
-+
-+module m
-+ interface operator(.add.)
-+ module procedure do_add
-+ end interface
-+ type dt
-+ real :: r = 0.0
-+ end type
-+contains
-+ function do_add(x, y)
-+ type (dt), intent (in) :: x, y
-+ type (dt) :: do_add
-+ do_add%r = x%r + y%r
-+ end function
-+ subroutine dp_add(x, y)
-+ double precision :: x, y
-+ x = x + y
-+ end subroutine
-+ subroutine dp_init(x)
-+ double precision :: x
-+ x = 0.0
-+ end subroutine
-+end module
-+
-+program udr5
-+ use m, only : operator(.add.), dt, dp_add, dp_init
-+ type(dt) :: xdt, one
-+ real :: r
-+ integer (kind = 4) :: i4
-+ integer (kind = 8) :: i8
-+ real (kind = 4) :: r4
-+ double precision :: dp
-+!$omp declare reduction(.add.:dt:omp_out=omp_out.add.omp_in)
-+!$omp declare reduction(foo:integer(4),integer(kind=8),real (kind = 4) &
-+!$omp & :omp_out = omp_out + omp_in) initializer (omp_priv = 0)
-+!$omp declare reduction(foo:double precision:dp_add (omp_out, omp_in)) &
-+!$omp & initializer (dp_init (omp_priv))
-+
-+ one%r = 1.0
-+ r = 0.0
-+ i4 = 0
-+ i8 = 0
-+ r4 = 0.0
-+ call dp_init (dp)
-+!$omp parallel reduction(.add.: xdt) reduction(+: r) &
-+!$omp & reduction(foo: i4, i8, r4, dp)
-+ xdt = xdt.add.one
-+ r = r + 1.0
-+ i4 = i4 + 1
-+ i8 = i8 + 1
-+ r4 = r4 + 1.0
-+ call dp_add (dp, 1.0d0)
-+!$omp end parallel
-+ if (xdt%r .ne. r) call abort
-+ if (i4.ne.r.or.i8.ne.r.or.r4.ne.r.or.dp.ne.r) call abort
-+end program udr5
-Index: libgomp/testsuite/libgomp.fortran/udr7.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/udr7.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/udr7.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,46 @@
-+! { dg-do run }
-+
-+program udr7
-+ implicit none
-+ interface
-+ elemental subroutine omp_priv (x, y, z)
-+ real, intent (in) :: x
-+ real, intent (inout) :: y
-+ real, intent (in) :: z
-+ end subroutine omp_priv
-+ elemental real function omp_orig (x)
-+ real, intent (in) :: x
-+ end function omp_orig
-+ end interface
-+!$omp declare reduction (omp_priv : real : &
-+!$omp & omp_priv (omp_orig (omp_in), omp_out, 1.0)) &
-+!$omp & initializer (omp_out (omp_priv, omp_in (omp_orig)))
-+ real :: x (2:4, 1:1, -2:0)
-+ integer :: i
-+ x = 0
-+!$omp parallel do reduction (omp_priv : x)
-+ do i = 1, 64
-+ x = x + i
-+ end do
-+ if (any (x /= 2080.0)) call abort
-+contains
-+ elemental subroutine omp_out (x, y)
-+ real, intent (out) :: x
-+ real, intent (in) :: y
-+ x = y - 4.0
-+ end subroutine omp_out
-+ elemental real function omp_in (x)
-+ real, intent (in) :: x
-+ omp_in = x + 4.0
-+ end function omp_in
-+end program udr7
-+elemental subroutine omp_priv (x, y, z)
-+ real, intent (in) :: x
-+ real, intent (inout) :: y
-+ real, intent (in) :: z
-+ y = y + (x - 4.0) + (z - 1.0)
-+end subroutine omp_priv
-+elemental real function omp_orig (x)
-+ real, intent (in) :: x
-+ omp_orig = x + 4.0
-+end function omp_orig
-Index: libgomp/testsuite/libgomp.fortran/udr9.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/udr9.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/udr9.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,65 @@
-+! { dg-do run }
-+
-+module udr9m1
-+ integer, parameter :: a = 6
-+ integer :: b
-+!$omp declare reduction (foo : integer : combiner1 (omp_out, omp_in)) &
-+!$omp & initializer (initializer1 (omp_priv, omp_orig))
-+!$omp declare reduction (.add. : integer : &
-+!$omp & combiner1 (omp_out, omp_in)) &
-+!$omp & initializer (initializer1 (omp_priv, omp_orig))
-+ interface operator (.add.)
-+ module procedure f1
-+ end interface
-+contains
-+ integer function f1 (x, y)
-+ integer, intent (in) :: x, y
-+ f1 = x + y
-+ end function f1
-+ elemental subroutine combiner1 (x, y)
-+ integer, intent (inout) :: x
-+ integer, intent (in) :: y
-+ x = x + iand (y, -4)
-+ end subroutine
-+ subroutine initializer1 (x, y)
-+ integer :: x, y
-+ if (y .ne. 3) call abort
-+ x = y
-+ end subroutine
-+end module udr9m1
-+module udr9m2
-+ use udr9m1
-+ type dt
-+ integer :: x
-+ end type
-+!$omp declare reduction (+ : dt : combiner2 (omp_in, omp_out)) &
-+!$omp & initializer (initializer2 (omp_priv))
-+ interface operator (+)
-+ module procedure f2
-+ end interface
-+contains
-+ type(dt) function f2 (x, y)
-+ type(dt), intent (in) :: x, y
-+ f2%x = x%x + y%x
-+ end function f2
-+ subroutine combiner2 (x, y)
-+ type(dt) :: x, y
-+ y = y + x
-+ end subroutine combiner2
-+ subroutine initializer2 (x)
-+ type(dt), intent(out) :: x
-+ x%x = 0
-+ end subroutine initializer2
-+end module udr9m2
-+ use udr9m2
-+ integer :: i, j
-+ type(dt) :: d
-+ j = 3
-+ d%x = 0
-+!$omp parallel do reduction (.add.: j) reduction (+ : d)
-+ do i = 1, 100
-+ j = j.add.iand (i, -4)
-+ d = d + dt(i)
-+ end do
-+ if (d%x /= 5050 .or. j /= 4903) call abort
-+end
-Index: libgomp/testsuite/libgomp.fortran/target1.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/target1.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/target1.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,58 @@
-+! { dg-do run }
-+
-+module target1
-+contains
-+ subroutine foo (p, v, w, n)
-+ double precision, pointer :: p(:), v(:), w(:)
-+ double precision :: q(n)
-+ integer :: i, n
-+ !$omp target if (n > 256) map (to: v(1:n), w(:n)) map (from: p(1:n), q)
-+ !$omp parallel do simd
-+ do i = 1, n
-+ p(i) = v(i) * w(i)
-+ q(i) = p(i)
-+ end do
-+ !$omp end target
-+ if (any (p /= q)) call abort
-+ do i = 1, n
-+ if (p(i) /= i * iand (i, 63)) call abort
-+ end do
-+ !$omp target data if (n > 256) map (to: v(1:n), w) map (from: p, q)
-+ !$omp target if (n > 256)
-+ do i = 1, n
-+ p(i) = 1.0
-+ q(i) = 2.0
-+ end do
-+ !$omp end target
-+ !$omp target if (n > 256)
-+ do i = 1, n
-+ p(i) = p(i) + v(i) * w(i)
-+ q(i) = q(i) + v(i) * w(i)
-+ end do
-+ !$omp end target
-+ !$omp target if (n > 256)
-+ !$omp teams distribute parallel do simd linear(i:1)
-+ do i = 1, n
-+ p(i) = p(i) + 2.0
-+ q(i) = q(i) + 3.0
-+ end do
-+ !$omp end target
-+ !$omp end target data
-+ if (any (p + 2.0 /= q)) call abort
-+ end subroutine
-+end module target1
-+ use target1, only : foo
-+ integer :: n, i
-+ double precision, pointer :: p(:), v(:), w(:)
-+ n = 10000
-+ allocate (p(n), v(n), w(n))
-+ do i = 1, n
-+ v(i) = i
-+ w(i) = iand (i, 63)
-+ end do
-+ call foo (p, v, w, n)
-+ do i = 1, n
-+ if (p(i) /= i * iand (i, 63) + 3) call abort
-+ end do
-+ deallocate (p, v, w)
-+end
-Index: libgomp/testsuite/libgomp.fortran/target3.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/target3.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/target3.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,29 @@
-+! { dg-do run }
-+
-+module target3
-+contains
-+ subroutine foo (f, g)
-+ integer :: n
-+ integer, pointer :: f, g(:)
-+ integer, pointer :: j, k(:)
-+ logical :: r
-+ nullify (j)
-+ k => null ()
-+ !$omp target map (tofrom: f, g, j, k) map (from: r)
-+ r = associated (f) .or. associated (g)
-+ r = r .or. associated (j) .or. associated (k)
-+ !$omp end target
-+ if (r) call abort
-+ !$omp target
-+ r = associated (f) .or. associated (g)
-+ r = r .or. associated (j) .or. associated (k)
-+ !$omp end target
-+ if (r) call abort
-+ end subroutine foo
-+end module target3
-+ use target3, only : foo
-+ integer, pointer :: f, g(:)
-+ f => null ()
-+ nullify (g)
-+ call foo (f, g)
-+end
-Index: libgomp/testsuite/libgomp.fortran/target5.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/target5.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/target5.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,21 @@
-+! { dg-do compile }
-+! { dg-options "-fopenmp" }
-+
-+ integer :: r
-+ r = 0
-+ call foo (r)
-+ if (r /= 11) call abort
-+contains
-+ subroutine foo (r)
-+ integer :: i, r
-+ !$omp parallel
-+ !$omp single
-+ !$omp target teams distribute parallel do reduction (+: r)
-+ do i = 1, 10
-+ r = r + 1
-+ end do
-+ r = r + 1
-+ !$omp end single
-+ !$omp end parallel
-+ end subroutine
-+end
-Index: libgomp/testsuite/libgomp.fortran/target7.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/target7.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/target7.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,38 @@
-+! { dg-do run }
-+
-+ interface
-+ real function foo (x)
-+ !$omp declare target
-+ real, intent(in) :: x
-+ end function foo
-+ end interface
-+ integer, parameter :: n = 1000
-+ integer, parameter :: c = 100
-+ integer :: i, j
-+ real :: a(n)
-+ do i = 1, n
-+ a(i) = i
-+ end do
-+ !$omp parallel
-+ !$omp single
-+ do i = 1, n, c
-+ !$omp task shared(a)
-+ !$omp target map(a(i:i+c-1))
-+ !$omp parallel do
-+ do j = i, i + c - 1
-+ a(j) = foo (a(j))
-+ end do
-+ !$omp end target
-+ !$omp end task
-+ end do
-+ !$omp end single
-+ !$omp end parallel
-+ do i = 1, n
-+ if (a(i) /= i + 1) call abort
-+ end do
-+end
-+real function foo (x)
-+ !$omp declare target
-+ real, intent(in) :: x
-+ foo = x + 1
-+end function foo
-Index: libgomp/testsuite/libgomp.fortran/declare-simd-2.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/declare-simd-2.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/declare-simd-2.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,25 @@
-+! { dg-do run { target vect_simd_clones } }
-+! { dg-options "-fno-inline" }
-+! { dg-additional-sources declare-simd-3.f90 }
-+! { dg-additional-options "-msse2" { target sse2_runtime } }
-+! { dg-additional-options "-mavx" { target avx_runtime } }
-+
-+module declare_simd_2_mod
-+ contains
-+ real function foo (a, b, c)
-+ !$omp declare simd (foo) simdlen (4) uniform (a) linear (b : 5)
-+ double precision, value :: a
-+ real, value :: c
-+ !$omp declare simd (foo)
-+ integer, value :: b
-+ foo = a + b * c
-+ end function foo
-+end module declare_simd_2_mod
-+
-+ interface
-+ subroutine bar ()
-+ end subroutine bar
-+ end interface
-+
-+ call bar ()
-+end
-Index: libgomp/testsuite/libgomp.fortran/udr11.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/udr11.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/udr11.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,95 @@
-+! { dg-do run }
-+
-+module udr11
-+ type dt
-+ integer :: x = 0
-+ end type
-+end module udr11
-+ use udr11, only : dt
-+!$omp declare reduction(+:dt:omp_out%x=omp_out%x+omp_in%x)
-+!$omp declare reduction(-:dt:omp_out%x=omp_out%x+omp_in%x)
-+!$omp declare reduction(*:dt:omp_out%x=omp_out%x+omp_in%x)
-+!$omp declare reduction(.and.:dt:omp_out%x=omp_out%x+omp_in%x)
-+!$omp declare reduction(.or.:dt:omp_out%x=omp_out%x+3*omp_in%x)
-+!$omp declare reduction(.eqv.:dt:omp_out%x=omp_out%x+omp_in%x)
-+!$omp declare reduction(.neqv.:dt:omp_out%x=omp_out%x+omp_in%x)
-+!$omp declare reduction(min:dt:omp_out%x=omp_out%x+omp_in%x)
-+!$omp declare reduction(max:dt:omp_out%x=omp_out%x+omp_in%x)
-+!$omp declare reduction(iand:dt:omp_out%x=omp_out%x+omp_in%x)
-+!$omp declare reduction(ior:dt:omp_out%x=omp_out%x+omp_in%x)
-+!$omp declare reduction(ieor:dt:omp_out%x=omp_out%x+omp_in%x)
-+ interface operator(.and.)
-+ function addme1 (x, y)
-+ use udr11, only : dt
-+ type (dt), intent (in) :: x, y
-+ type(dt) :: addme1
-+ end function addme1
-+ end interface
-+ interface operator(.or.)
-+ function addme2 (x, y)
-+ use udr11, only : dt
-+ type (dt), intent (in) :: x, y
-+ type(dt) :: addme2
-+ end function addme2
-+ end interface
-+ interface operator(.eqv.)
-+ function addme3 (x, y)
-+ use udr11, only : dt
-+ type (dt), intent (in) :: x, y
-+ type(dt) :: addme3
-+ end function addme3
-+ end interface
-+ interface operator(.neqv.)
-+ function addme4 (x, y)
-+ use udr11, only : dt
-+ type (dt), intent (in) :: x, y
-+ type(dt) :: addme4
-+ end function addme4
-+ end interface
-+ interface operator(+)
-+ function addme5 (x, y)
-+ use udr11, only : dt
-+ type (dt), intent (in) :: x, y
-+ type(dt) :: addme5
-+ end function addme5
-+ end interface
-+ interface operator(-)
-+ function addme6 (x, y)
-+ use udr11, only : dt
-+ type (dt), intent (in) :: x, y
-+ type(dt) :: addme6
-+ end function addme6
-+ end interface
-+ interface operator(*)
-+ function addme7 (x, y)
-+ use udr11, only : dt
-+ type (dt), intent (in) :: x, y
-+ type(dt) :: addme7
-+ end function addme7
-+ end interface
-+ type(dt) :: j, k, l, m, n, o, p, q, r, s, t, u
-+ integer :: i
-+!$omp parallel do reduction(.and.:j) reduction(.or.:k) &
-+!$omp & reduction(.eqv.:l) reduction(.neqv.:m) &
-+!$omp & reduction(min:n) reduction(max:o) &
-+!$omp & reduction(iand:p) reduction(ior:q) reduction (ieor:r) &
-+!$omp & reduction(+:s) reduction(-:t) reduction(*:u)
-+ do i = 1, 100
-+ j%x = j%x + i
-+ k%x = k%x + 2 * i
-+ l%x = l%x + 3 * i
-+ m%x = m%x + i
-+ n%x = n%x + 2 * i
-+ o%x = o%x + 3 * i
-+ p%x = p%x + i
-+ q%x = q%x + 2 * i
-+ r%x = r%x + 3 * i
-+ s%x = s%x + i
-+ t%x = t%x + 2 * i
-+ u%x = u%x + 3 * i
-+ end do
-+ if (j%x /= 5050 .or. k%x /= 30300 .or. l%x /= 15150) call abort
-+ if (m%x /= 5050 .or. n%x /= 10100 .or. o%x /= 15150) call abort
-+ if (p%x /= 5050 .or. q%x /= 10100 .or. r%x /= 15150) call abort
-+ if (s%x /= 5050 .or. t%x /= 10100 .or. u%x /= 15150) call abort
-+end
-Index: libgomp/testsuite/libgomp.fortran/allocatable9.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/allocatable9.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/allocatable9.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,156 @@
-+! { dg-do run }
-+
-+ integer, allocatable :: a, b(:), c(:,:)
-+ logical :: l
-+ if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
-+!$omp parallel private (a, b, c)
-+ if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
-+ allocate (a, b(-7:-1), c(2:3, 3:5))
-+ if (.not.allocated (a)) call abort
-+ if (.not.allocated (b) .or. size (b) /= 7) call abort
-+ if (lbound (b, 1) /= -7 .or. ubound (b, 1) /= -1) call abort
-+ if (.not.allocated (c) .or. size (c) /= 6) call abort
-+ if (size (c, 1) /= 2 .or. size (c, 2) /= 3) call abort
-+ if (lbound (c, 1) /= 2 .or. ubound (c, 1) /= 3) call abort
-+ if (lbound (c, 2) /= 3 .or. ubound (c, 2) /= 5) call abort
-+ a = 4
-+ b = 3
-+ c = 2
-+!$omp end parallel
-+ if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
-+!$omp parallel firstprivate (a, b, c)
-+ if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
-+ allocate (a, b(-7:-1), c(2:3, 3:5))
-+ if (.not.allocated (a)) call abort
-+ if (.not.allocated (b) .or. size (b) /= 7) call abort
-+ if (lbound (b, 1) /= -7 .or. ubound (b, 1) /= -1) call abort
-+ if (.not.allocated (c) .or. size (c) /= 6) call abort
-+ if (size (c, 1) /= 2 .or. size (c, 2) /= 3) call abort
-+ if (lbound (c, 1) /= 2 .or. ubound (c, 1) /= 3) call abort
-+ if (lbound (c, 2) /= 3 .or. ubound (c, 2) /= 5) call abort
-+ a = 4
-+ b = 3
-+ c = 2
-+!$omp end parallel
-+ if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
-+ allocate (a, b(6:9), c(3, 8:9))
-+ a = 2
-+ b = 4
-+ c = 5
-+ if (.not.allocated (a)) call abort
-+ if (.not.allocated (b) .or. size (b) /= 4) call abort
-+ if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
-+ if (.not.allocated (c) .or. size (c) /= 6) call abort
-+ if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
-+ if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
-+!$omp parallel firstprivate (a, b, c)
-+ if (.not.allocated (a)) call abort
-+ if (.not.allocated (b) .or. size (b) /= 4) call abort
-+ if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
-+ if (.not.allocated (c) .or. size (c) /= 6) call abort
-+ if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
-+ if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
-+ if (a /= 2 .or. any (b .ne. 4) .or. any (c .ne. 5)) call abort
-+ deallocate (a)
-+ if (allocated (a)) call abort
-+ allocate (a)
-+ a = 8
-+ b = (/ 1, 2, 3 /)
-+ c = reshape ((/ 1, 2, 3, 4, 5, 6, 7, 8 /), (/ 2, 4 /))
-+ if (.not.allocated (a)) call abort
-+ if (.not.allocated (b) .or. size (b) /= 3) call abort
-+ if (lbound (b, 1) /= 1 .or. ubound (b, 1) /= 3) call abort
-+ if (.not.allocated (c) .or. size (c) /= 8) call abort
-+ if (size (c, 1) /= 2 .or. size (c, 2) /= 4) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 2) call abort
-+ if (lbound (c, 2) /= 1 .or. ubound (c, 2) /= 4) call abort
-+ if (a /= 8 .or. b(2) /= 2 .or. c(1, 2) /= 3) call abort
-+!$omp end parallel
-+ if (.not.allocated (a)) call abort
-+ if (.not.allocated (b) .or. size (b) /= 4) call abort
-+ if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
-+ if (.not.allocated (c) .or. size (c) /= 6) call abort
-+ if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
-+ if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
-+ if (a /= 2 .or. any (b .ne. 4) .or. any (c .ne. 5)) call abort
-+ l = .false.
-+!$omp parallel sections lastprivate (a, b, c) firstprivate (l)
-+!$omp section
-+ if (.not.allocated (a)) call abort
-+ if (l) then
-+ if (.not.allocated (b) .or. size (b) /= 6) call abort
-+ if (lbound (b, 1) /= 1 .or. ubound (b, 1) /= 6) call abort
-+ if (.not.allocated (c) .or. size (c) /= 8) call abort
-+ if (size (c, 1) /= 4 .or. size (c, 2) /= 2) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 4) call abort
-+ if (lbound (c, 2) /= 1 .or. ubound (c, 2) /= 2) call abort
-+ if (a /= 12 .or. b(2) /= 8 .or. c(1, 2) /= 5) call abort
-+ else
-+ if (.not.allocated (b) .or. size (b) /= 4) call abort
-+ if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
-+ if (.not.allocated (c) .or. size (c) /= 6) call abort
-+ if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
-+ if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
-+ end if
-+ l = .true.
-+ deallocate (a)
-+ if (allocated (a)) call abort
-+ allocate (a)
-+ a = 8
-+ b = (/ 1, 2, 3 /)
-+ c = reshape ((/ 1, 2, 3, 4, 5, 6, 7, 8 /), (/ 2, 4 /))
-+ if (.not.allocated (a)) call abort
-+ if (.not.allocated (b) .or. size (b) /= 3) call abort
-+ if (lbound (b, 1) /= 1 .or. ubound (b, 1) /= 3) call abort
-+ if (.not.allocated (c) .or. size (c) /= 8) call abort
-+ if (size (c, 1) /= 2 .or. size (c, 2) /= 4) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 2) call abort
-+ if (lbound (c, 2) /= 1 .or. ubound (c, 2) /= 4) call abort
-+ if (a /= 8 .or. b(2) /= 2 .or. c(1, 2) /= 3) call abort
-+!$omp section
-+ if (.not.allocated (a)) call abort
-+ if (l) then
-+ if (.not.allocated (b) .or. size (b) /= 3) call abort
-+ if (lbound (b, 1) /= 1 .or. ubound (b, 1) /= 3) call abort
-+ if (.not.allocated (c) .or. size (c) /= 8) call abort
-+ if (size (c, 1) /= 2 .or. size (c, 2) /= 4) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 2) call abort
-+ if (lbound (c, 2) /= 1 .or. ubound (c, 2) /= 4) call abort
-+ if (a /= 8 .or. b(2) /= 2 .or. c(1, 2) /= 3) call abort
-+ else
-+ if (.not.allocated (b) .or. size (b) /= 4) call abort
-+ if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
-+ if (.not.allocated (c) .or. size (c) /= 6) call abort
-+ if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
-+ if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
-+ end if
-+ l = .true.
-+ deallocate (a)
-+ if (allocated (a)) call abort
-+ allocate (a)
-+ a = 12
-+ b = (/ 9, 8, 7, 6, 5, 4 /)
-+ c = reshape ((/ 1, 2, 3, 4, 5, 6, 7, 8 /), (/ 4, 2 /))
-+ if (.not.allocated (a)) call abort
-+ if (.not.allocated (b) .or. size (b) /= 6) call abort
-+ if (lbound (b, 1) /= 1 .or. ubound (b, 1) /= 6) call abort
-+ if (.not.allocated (c) .or. size (c) /= 8) call abort
-+ if (size (c, 1) /= 4 .or. size (c, 2) /= 2) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 4) call abort
-+ if (lbound (c, 2) /= 1 .or. ubound (c, 2) /= 2) call abort
-+ if (a /= 12 .or. b(2) /= 8 .or. c(1, 2) /= 5) call abort
-+!$omp end parallel sections
-+ if (.not.allocated (a)) call abort
-+ if (.not.allocated (b) .or. size (b) /= 6) call abort
-+ if (lbound (b, 1) /= 1 .or. ubound (b, 1) /= 6) call abort
-+ if (.not.allocated (c) .or. size (c) /= 8) call abort
-+ if (size (c, 1) /= 4 .or. size (c, 2) /= 2) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 4) call abort
-+ if (lbound (c, 2) /= 1 .or. ubound (c, 2) /= 2) call abort
-+ if (a /= 12 .or. b(2) /= 8 .or. c(1, 2) /= 5) call abort
-+end
-Index: libgomp/testsuite/libgomp.fortran/associate1.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/associate1.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/associate1.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,23 @@
-+! { dg-do run }
-+
-+program associate1
-+ integer :: v, i, j
-+ real :: a(3, 3)
-+ v = 15
-+ a = 4.5
-+ a(2,1) = 3.5
-+ i = 2
-+ j = 1
-+ associate(u => v, b => a(i, j))
-+!$omp parallel private(v, a) default(none)
-+ v = -1
-+ a = 2.5
-+ if (v /= -1 .or. u /= 15) call abort
-+ if (a(2,1) /= 2.5 .or. b /= 3.5) call abort
-+ associate(u => v, b => a(2, 1))
-+ if (u /= -1 .or. b /= 2.5) call abort
-+ end associate
-+ if (u /= 15 .or. b /= 3.5) call abort
-+!$omp end parallel
-+ end associate
-+end program
-Index: libgomp/testsuite/libgomp.fortran/udr13.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/udr13.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/udr13.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,106 @@
-+! { dg-do run }
-+
-+ interface
-+ subroutine sub1 (x, y)
-+ integer, intent(in) :: y(:)
-+ integer, intent(out) :: x(:)
-+ end subroutine
-+ function fn2 (x, m1, m2, n1, n2)
-+ integer, intent(in) :: x(:,:), m1, m2, n1, n2
-+ integer :: fn2(m1:m2,n1:n2)
-+ end function
-+ subroutine sub3 (x, y)
-+ integer, allocatable, intent(in) :: y(:,:)
-+ integer, allocatable, intent(inout) :: x(:,:)
-+ end subroutine
-+ end interface
-+!$omp declare reduction (foo : integer : sub3 (omp_out, omp_in)) &
-+!$omp initializer (omp_priv = fn3 (omp_orig))
-+!$omp declare reduction (bar : integer : omp_out = fn1 (omp_out, omp_in, &
-+!$omp & lbound (omp_out, 1), ubound (omp_out, 1))) &
-+!$omp & initializer (sub1 (omp_priv, omp_orig))
-+!$omp declare reduction (baz : integer : sub2 (omp_out, omp_in)) &
-+!$omp initializer (omp_priv = fn2 (omp_orig, lbound (omp_priv, 1), &
-+!$omp ubound (omp_priv, 1), lbound (omp_priv, 2), ubound (omp_priv, 2)))
-+ interface
-+ function fn1 (x, y, m1, m2)
-+ integer, intent(in) :: x(:), y(:), m1, m2
-+ integer :: fn1(m1:m2)
-+ end function
-+ subroutine sub2 (x, y)
-+ integer, intent(in) :: y(:,:)
-+ integer, intent(inout) :: x(:,:)
-+ end subroutine
-+ function fn3 (x)
-+ integer, allocatable, intent(in) :: x(:,:)
-+ integer, allocatable :: fn3(:,:)
-+ end function
-+ end interface
-+ integer :: a(10), b(3:5,7:9), r
-+ integer, allocatable :: c(:,:)
-+ a(:) = 0
-+ r = 0
-+!$omp parallel reduction (bar : a) reduction (+: r)
-+ if (lbound (a, 1) /= 1 .or. ubound (a, 1) /= 10) call abort
-+ a = a + 2
-+ r = r + 1
-+!$omp end parallel
-+ if (any (a /= 4 * r) ) call abort
-+ b(:,:) = 0
-+ allocate (c (4:6,8:10))
-+ c(:,:) = 0
-+ r = 0
-+!$omp parallel reduction (baz : b, c) reduction (+: r)
-+ if (lbound (b, 1) /= 3 .or. ubound (b, 1) /= 5) call abort
-+ if (lbound (b, 2) /= 7 .or. ubound (b, 2) /= 9) call abort
-+ if (.not. allocated (c)) call abort
-+ if (lbound (c, 1) /= 4 .or. ubound (c, 1) /= 6) call abort
-+ if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 10) call abort
-+ b = b + 3
-+ c = c + 4
-+ r = r + 1
-+!$omp end parallel
-+ if (any (b /= 3 * r) .or. any (c /= 4 * r)) call abort
-+ deallocate (c)
-+ allocate (c (0:1,7:11))
-+ c(:,:) = 0
-+ r = 0
-+!$omp parallel reduction (foo : c) reduction (+: r)
-+ if (.not. allocated (c)) call abort
-+ if (lbound (c, 1) /= 0 .or. ubound (c, 1) /= 1) call abort
-+ if (lbound (c, 2) /= 7 .or. ubound (c, 2) /= 11) call abort
-+ c = c + 5
-+ r = r + 1
-+!$omp end parallel
-+ if (any (c /= 10 * r)) call abort
-+end
-+function fn1 (x, y, m1, m2)
-+ integer, intent(in) :: x(:), y(:), m1, m2
-+ integer :: fn1(m1:m2)
-+ fn1 = x + 2 * y
-+end function
-+subroutine sub1 (x, y)
-+ integer, intent(in) :: y(:)
-+ integer, intent(out) :: x(:)
-+ x = 0
-+end subroutine
-+function fn2 (x, m1, m2, n1, n2)
-+ integer, intent(in) :: x(:,:), m1, m2, n1, n2
-+ integer :: fn2(m1:m2,n1:n2)
-+ fn2 = x
-+end function
-+subroutine sub2 (x, y)
-+ integer, intent(inout) :: x(:,:)
-+ integer, intent(in) :: y(:,:)
-+ x = x + y
-+end subroutine
-+function fn3 (x)
-+ integer, allocatable, intent(in) :: x(:,:)
-+ integer, allocatable :: fn3(:,:)
-+ fn3 = x
-+end function
-+subroutine sub3 (x, y)
-+ integer, allocatable, intent(inout) :: x(:,:)
-+ integer, allocatable, intent(in) :: y(:,:)
-+ x = x + 2 * y
-+end subroutine
-Index: libgomp/testsuite/libgomp.fortran/udr15.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/udr15.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/udr15.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,64 @@
-+! { dg-do run }
-+
-+module udr15m1
-+ integer, parameter :: a = 6
-+ integer :: b
-+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in)
-+!$omp declare reduction (.add. : integer : &
-+!$omp & omp_out = omp_out .add. f3 (omp_in, -4)) &
-+!$omp & initializer (s1 (omp_priv, omp_orig))
-+ interface operator (.add.)
-+ module procedure f1
-+ end interface
-+contains
-+ integer function f1 (x, y)
-+ integer, intent (in) :: x, y
-+ f1 = x + y
-+ end function f1
-+ integer function f3 (x, y)
-+ integer, intent (in) :: x, y
-+ f3 = iand (x, y)
-+ end function f3
-+ subroutine s1 (x, y)
-+ integer, intent (in) :: y
-+ integer, intent (out) :: x
-+ x = 3
-+ end subroutine s1
-+end module udr15m1
-+module udr15m2
-+ use udr15m1, f4 => f1, f5 => f3, s2 => s1, operator (.addtwo.) => operator (.add.)
-+ type dt
-+ integer :: x
-+ end type
-+!$omp declare reduction (+ : dt : omp_out = f6 (omp_out + omp_in)) &
-+!$omp & initializer (s3 (omp_priv))
-+ interface operator (+)
-+ module procedure f2
-+ end interface
-+contains
-+ type(dt) function f2 (x, y)
-+ type(dt), intent (in) :: x, y
-+ f2%x = x%x + y%x
-+ end function f2
-+ type(dt) function f6 (x)
-+ type(dt), intent (in) :: x
-+ f6%x = x%x
-+ end function f6
-+ subroutine s3 (x)
-+ type(dt), intent (out) :: x
-+ x = dt(0)
-+ end subroutine
-+end module udr15m2
-+ use udr15m2, operator (.addthree.) => operator (.addtwo.), &
-+ f7 => f4, f8 => f6, s4 => s3
-+ integer :: i, j
-+ type(dt) :: d
-+ j = 3
-+ d%x = 0
-+!$omp parallel do reduction (.addthree.: j) reduction (+ : d)
-+ do i = 1, 100
-+ j = j.addthree.iand (i, -4)
-+ d = d + dt(i)
-+ end do
-+ if (d%x /= 5050 .or. j /= 4903) call abort
-+end
-Index: libgomp/testsuite/libgomp.fortran/openmp_version-2.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/openmp_version-2.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/openmp_version-2.f90 (.../branches/gcc-4_9-branch)
-@@ -4,6 +4,6 @@
- use omp_lib
- implicit none
-
-- if (openmp_version .ne. 201107) call abort;
-+ if (openmp_version .ne. 201307) call abort;
-
- end program main
-Index: libgomp/testsuite/libgomp.fortran/cancel-do-1.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/cancel-do-1.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/cancel-do-1.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,14 @@
-+! { dg-do run }
-+! { dg-set-target-env-var OMP_CANCELLATION "true" }
-+
-+ use omp_lib
-+ integer :: i
-+
-+ !$omp parallel num_threads(32)
-+ !$omp do
-+ do i = 0, 999
-+ !$omp cancel do
-+ if (omp_get_cancellation ()) call abort
-+ enddo
-+ !$omp endparallel
-+end
-Index: libgomp/testsuite/libgomp.fortran/alloc-comp-1.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/alloc-comp-1.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/alloc-comp-1.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,328 @@
-+! { dg-do run }
-+! Don't cycle by default through all options, just test -O0 and -O2,
-+! as this is quite large test.
-+! { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } }
-+
-+module m
-+ type dl
-+ integer :: a, b
-+ integer, allocatable :: c(:,:)
-+ integer :: d, e
-+ integer, allocatable :: f
-+ end type
-+ type dt
-+ integer :: g
-+ type (dl), allocatable :: h(:)
-+ integer :: i
-+ type (dl) :: j(2, 2)
-+ type (dl), allocatable :: k
-+ end type
-+contains
-+ subroutine ver_dl (obj, val, c, cl1, cu1, cl2, cu2, f)
-+ type (dl), intent (in) :: obj
-+ integer, intent (in) :: val, cl1, cu1, cl2, cu2
-+ logical, intent (in) :: c, f
-+ if ((c .neqv. allocated (obj%c)) .or. (f .neqv. allocated (obj%f))) call abort
-+ if (c) then
-+ if (lbound (obj%c, 1) /= cl1 .or. ubound (obj%c, 1) /= cu1) call abort
-+ if (lbound (obj%c, 2) /= cl2 .or. ubound (obj%c, 2) /= cu2) call abort
-+ end if
-+ if (val /= 0) then
-+ if (obj%a /= val .or. obj%b /= val) call abort
-+ if (obj%d /= val .or. obj%e /= val) call abort
-+ if (c) then
-+ if (any (obj%c /= val)) call abort
-+ end if
-+ if (f) then
-+ if (obj%f /= val) call abort
-+ end if
-+ end if
-+ end subroutine ver_dl
-+ subroutine ver_dt (obj, val, h, hl, hu, k, c, cl1, cu1, cl2, cu2, f)
-+ type (dt), intent (in) :: obj
-+ integer, intent (in) :: val, hl, hu, cl1, cu1, cl2, cu2
-+ logical, intent (in) :: h, k, c, f
-+ integer :: i, j
-+ if ((h .neqv. allocated (obj%h)) .or. (k .neqv. allocated (obj%k))) call abort
-+ if (h) then
-+ if (lbound (obj%h, 1) /= hl .or. ubound (obj%h, 1) /= hu) call abort
-+ do i = hl, hu
-+ call ver_dl (obj%h(i), val, c, cl1, cu1, cl2, cu2, f)
-+ end do
-+ end if
-+ do i = 1, 2
-+ do j = 1, 2
-+ call ver_dl (obj%j(i, j), val, c, cl1, cu1, cl2, cu2, f)
-+ end do
-+ end do
-+ if (k) call ver_dl (obj%k, val, c, cl1, cu1, cl2, cu2, f)
-+ if (val /= 0) then
-+ if (obj%g /= val .or. obj%i /= val) call abort
-+ end if
-+ end subroutine ver_dt
-+ subroutine alloc_dl (obj, val, c, cl1, cu1, cl2, cu2, f)
-+ type (dl), intent (inout) :: obj
-+ integer, intent (in) :: val, cl1, cu1, cl2, cu2
-+ logical, intent (in) :: c, f
-+ if (val /= 0) then
-+ obj%a = val
-+ obj%b = val
-+ obj%d = val
-+ obj%e = val
-+ end if
-+ if (allocated (obj%c)) deallocate (obj%c)
-+ if (c) then
-+ allocate (obj%c(cl1:cu1, cl2:cu2))
-+ if (val /= 0) obj%c = val
-+ end if
-+ if (f) then
-+ if (.not.allocated (obj%f)) allocate (obj%f)
-+ if (val /= 0) obj%f = val
-+ else
-+ if (allocated (obj%f)) deallocate (obj%f)
-+ end if
-+ end subroutine alloc_dl
-+ subroutine alloc_dt (obj, val, h, hl, hu, k, c, cl1, cu1, cl2, cu2, f)
-+ type (dt), intent (inout) :: obj
-+ integer, intent (in) :: val, hl, hu, cl1, cu1, cl2, cu2
-+ logical, intent (in) :: h, k, c, f
-+ integer :: i, j
-+ if (val /= 0) then
-+ obj%g = val
-+ obj%i = val
-+ end if
-+ if (allocated (obj%h)) deallocate (obj%h)
-+ if (h) then
-+ allocate (obj%h(hl:hu))
-+ do i = hl, hu
-+ call alloc_dl (obj%h(i), val, c, cl1, cu1, cl2, cu2, f)
-+ end do
-+ end if
-+ do i = 1, 2
-+ do j = 1, 2
-+ call alloc_dl (obj%j(i, j), val, c, cl1, cu1, cl2, cu2, f)
-+ end do
-+ end do
-+ if (k) then
-+ if (.not.allocated (obj%k)) allocate (obj%k)
-+ call alloc_dl (obj%k, val, c, cl1, cu1, cl2, cu2, f)
-+ else
-+ if (allocated (obj%k)) deallocate (obj%k)
-+ end if
-+ end subroutine alloc_dt
-+end module m
-+ use m
-+ type (dt) :: y
-+ call foo (y)
-+contains
-+ subroutine foo (y)
-+ use m
-+ type (dt) :: x, y, z(-3:-3,2:3)
-+ logical, parameter :: F = .false.
-+ logical, parameter :: T = .true.
-+ logical :: l
-+ call ver_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (y, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+!$omp parallel private (x, y, z)
-+ call ver_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (y, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (y, 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
-+ call ver_dt (y, 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
-+ call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (z(-3,3), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
-+ call ver_dt (z(-3,3), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
-+!$omp end parallel
-+ call ver_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (y, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (y, 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
-+ call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (z(-3,3), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
-+!$omp parallel private (x, y, z)
-+ call ver_dt (x, 0, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (y, 0, T, 3, 4, F, T, 1, 1, 2, 4, T)
-+ deallocate (x%h, x%k)
-+ deallocate (y%h)
-+ allocate (y%k)
-+ call ver_dt (z(-3,2), 0, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (z(-3,3), 0, T, 3, 4, F, T, 1, 1, 2, 4, T)
-+ deallocate (z(-3,2)%h, z(-3,2)%k)
-+ deallocate (z(-3,3)%h)
-+ allocate (z(-3,3)%k)
-+!$omp end parallel
-+ call alloc_dt (x, 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
-+ call alloc_dt (y, 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
-+ call alloc_dt (z(-3,2), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
-+ call alloc_dt (z(-3,3), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
-+!$omp parallel firstprivate (x, y, z)
-+ call ver_dt (x, 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
-+ call alloc_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (y, 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
-+ call alloc_dt (y, 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
-+ call ver_dt (y, 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
-+ call ver_dt (z(-3,2), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
-+ call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (z(-3,3), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
-+ call alloc_dt (z(-3,3), 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
-+ call ver_dt (z(-3,3), 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
-+!$omp end parallel
-+ call ver_dt (x, 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
-+ call alloc_dt (x, 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (y, 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
-+ call alloc_dt (y, 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (z(-3,2), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
-+ call alloc_dt (z(-3,2), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (z(-3,3), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
-+ call alloc_dt (z(-3,3), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+!$omp parallel firstprivate (x, y, z)
-+ call ver_dt (x, 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (x, 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (y, 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (y, 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
-+ call ver_dt (y, 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
-+ call ver_dt (z(-3,2), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (z(-3,3), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (z(-3,3), 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
-+ call ver_dt (z(-3,3), 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
-+!$omp end parallel
-+ call ver_dt (x, 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (y, 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (y, 18, T, 0, 1, T, T, 0, 1, 0, 1, T)
-+ call ver_dt (z(-3,2), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (z(-3,3), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (z(-3,3), 18, T, 0, 1, T, T, 0, 1, 0, 1, T)
-+ l = F
-+!$omp parallel sections lastprivate (x, y, z) firstprivate (l)
-+!$omp section
-+ if (l) then
-+ call ver_dt (x, 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (y, 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ call ver_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ else
-+ call ver_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (y, 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
-+ call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (z(-3,3), 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
-+ end if
-+ l = T
-+ call alloc_dt (x, 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
-+ call ver_dt (x, 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
-+ call alloc_dt (y, 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
-+ call ver_dt (y, 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
-+ call alloc_dt (z(-3,2), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
-+ call ver_dt (z(-3,2), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
-+ call alloc_dt (z(-3,3), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
-+ call ver_dt (z(-3,3), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
-+!$omp section
-+ if (l) then
-+ call ver_dt (x, 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
-+ call ver_dt (y, 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
-+ call ver_dt (z(-3,2), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
-+ call ver_dt (z(-3,3), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
-+ else
-+ call ver_dt (x, 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (y, 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
-+ call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (z(-3,3), 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
-+ end if
-+ l = T
-+ call alloc_dt (x, 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (x, 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call alloc_dt (y, 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ call ver_dt (y, 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ call alloc_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call alloc_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ call ver_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+!$omp section
-+!$omp end parallel sections
-+ call ver_dt (x, 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (y, 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ call ver_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+!$omp parallel sections lastprivate (x, y, z) firstprivate (l)
-+!$omp section
-+ if (l) then
-+ call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ else
-+ call ver_dt (x, 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (y, 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ call ver_dt (z(-3,2), 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (z(-3,3), 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ end if
-+ l = T
-+ call alloc_dt (x, 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call ver_dt (x, 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call alloc_dt (y, 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+ call ver_dt (y, 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+ call alloc_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call ver_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call alloc_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+ call ver_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+!$omp section
-+ if (l) then
-+ call ver_dt (x, 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call ver_dt (y, 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+ call ver_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call ver_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+ else
-+ call ver_dt (x, 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (y, 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ call ver_dt (z(-3,2), 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (z(-3,3), 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ end if
-+ l = T
-+ call alloc_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call alloc_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call alloc_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call alloc_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+!$omp section
-+!$omp end parallel sections
-+ call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+!$omp parallel private (x, y, z)
-+ call ver_dt (x, 0, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (y, 0, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call ver_dt (z(-3,2), 0, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (z(-3,3), 0, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+!$omp single
-+ call alloc_dt (x, 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call alloc_dt (y, 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+ call alloc_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call alloc_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+!$omp end single copyprivate (x, y, z)
-+ call ver_dt (x, 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call ver_dt (y, 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+ call ver_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call ver_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+!$omp end parallel
-+ call ver_dt (x, 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (y, 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ end subroutine foo
-+end
-Index: libgomp/testsuite/libgomp.fortran/alloc-comp-3.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/alloc-comp-3.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/alloc-comp-3.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,372 @@
-+! { dg-do run }
-+! Don't cycle by default through all options, just test -O0 and -O2,
-+! as this is quite large test.
-+! { dg-skip-if "" { ! run_expensive_tests } { "*" } { "-O0" "-O2" } }
-+
-+module m
-+ type dl
-+ integer :: a, b
-+ integer, allocatable :: c(:,:)
-+ integer :: d, e
-+ integer, allocatable :: f
-+ end type
-+ type dt
-+ integer :: g
-+ type (dl), allocatable :: h(:)
-+ integer :: i
-+ type (dl) :: j(2, 2)
-+ type (dl), allocatable :: k
-+ end type
-+contains
-+ subroutine ver_dl (obj, val, c, cl1, cu1, cl2, cu2, f)
-+ type (dl), intent (in) :: obj
-+ integer, intent (in) :: val, cl1, cu1, cl2, cu2
-+ logical, intent (in) :: c, f
-+ if ((c .neqv. allocated (obj%c)) .or. (f .neqv. allocated (obj%f))) call abort
-+ if (c) then
-+ if (lbound (obj%c, 1) /= cl1 .or. ubound (obj%c, 1) /= cu1) call abort
-+ if (lbound (obj%c, 2) /= cl2 .or. ubound (obj%c, 2) /= cu2) call abort
-+ end if
-+ if (val /= 0) then
-+ if (obj%a /= val .or. obj%b /= val) call abort
-+ if (obj%d /= val .or. obj%e /= val) call abort
-+ if (c) then
-+ if (any (obj%c /= val)) call abort
-+ end if
-+ if (f) then
-+ if (obj%f /= val) call abort
-+ end if
-+ end if
-+ end subroutine ver_dl
-+ subroutine ver_dt (obj, val, h, hl, hu, k, c, cl1, cu1, cl2, cu2, f)
-+ type (dt), intent (in) :: obj
-+ integer, intent (in) :: val, hl, hu, cl1, cu1, cl2, cu2
-+ logical, intent (in) :: h, k, c, f
-+ integer :: i, j
-+ if ((h .neqv. allocated (obj%h)) .or. (k .neqv. allocated (obj%k))) call abort
-+ if (h) then
-+ if (lbound (obj%h, 1) /= hl .or. ubound (obj%h, 1) /= hu) call abort
-+ do i = hl, hu
-+ call ver_dl (obj%h(i), val, c, cl1, cu1, cl2, cu2, f)
-+ end do
-+ end if
-+ do i = 1, 2
-+ do j = 1, 2
-+ call ver_dl (obj%j(i, j), val, c, cl1, cu1, cl2, cu2, f)
-+ end do
-+ end do
-+ if (k) call ver_dl (obj%k, val, c, cl1, cu1, cl2, cu2, f)
-+ if (val /= 0) then
-+ if (obj%g /= val .or. obj%i /= val) call abort
-+ end if
-+ end subroutine ver_dt
-+ subroutine alloc_dl (obj, val, c, cl1, cu1, cl2, cu2, f)
-+ type (dl), intent (inout) :: obj
-+ integer, intent (in) :: val, cl1, cu1, cl2, cu2
-+ logical, intent (in) :: c, f
-+ if (val /= 0) then
-+ obj%a = val
-+ obj%b = val
-+ obj%d = val
-+ obj%e = val
-+ end if
-+ if (allocated (obj%c)) deallocate (obj%c)
-+ if (c) then
-+ allocate (obj%c(cl1:cu1, cl2:cu2))
-+ if (val /= 0) obj%c = val
-+ end if
-+ if (f) then
-+ if (.not.allocated (obj%f)) allocate (obj%f)
-+ if (val /= 0) obj%f = val
-+ else
-+ if (allocated (obj%f)) deallocate (obj%f)
-+ end if
-+ end subroutine alloc_dl
-+ subroutine alloc_dt (obj, val, h, hl, hu, k, c, cl1, cu1, cl2, cu2, f)
-+ type (dt), intent (inout) :: obj
-+ integer, intent (in) :: val, hl, hu, cl1, cu1, cl2, cu2
-+ logical, intent (in) :: h, k, c, f
-+ integer :: i, j
-+ if (val /= 0) then
-+ obj%g = val
-+ obj%i = val
-+ end if
-+ if (allocated (obj%h)) deallocate (obj%h)
-+ if (h) then
-+ allocate (obj%h(hl:hu))
-+ do i = hl, hu
-+ call alloc_dl (obj%h(i), val, c, cl1, cu1, cl2, cu2, f)
-+ end do
-+ end if
-+ do i = 1, 2
-+ do j = 1, 2
-+ call alloc_dl (obj%j(i, j), val, c, cl1, cu1, cl2, cu2, f)
-+ end do
-+ end do
-+ if (k) then
-+ if (.not.allocated (obj%k)) allocate (obj%k)
-+ call alloc_dl (obj%k, val, c, cl1, cu1, cl2, cu2, f)
-+ else
-+ if (allocated (obj%k)) deallocate (obj%k)
-+ end if
-+ end subroutine alloc_dt
-+end module m
-+ use m
-+ type (dt), allocatable :: z(:,:)
-+ type (dt) :: y(2:3)
-+ call foo (y, z, 4)
-+contains
-+ subroutine foo (y, z, n)
-+ use m
-+ integer :: n
-+ type (dt) :: x(2:n), y(3:)
-+ type (dt), allocatable :: z(:,:)
-+ logical, parameter :: F = .false.
-+ logical, parameter :: T = .true.
-+ logical :: l
-+ if (lbound (x, 1) /= 2 .or. ubound (x, 1) /= 4) call abort
-+ if (lbound (y, 1) /= 3 .or. ubound (y, 1) /= 4) call abort
-+ call ver_dt (x(2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (x(n), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (y(3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (y(4), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+!$omp parallel private (z)
-+ if (allocated (z)) call abort
-+!$omp end parallel
-+!$omp parallel firstprivate (z)
-+ if (allocated (z)) call abort
-+!$omp end parallel
-+ l = F
-+!$omp parallel sections lastprivate (z) firstprivate (l)
-+!$omp section
-+ if (.not. l) then
-+ if (allocated (z)) call abort
-+ end if
-+!$omp section
-+ if (.not. l) then
-+ if (allocated (z)) call abort
-+ end if
-+ allocate (z(-3:-3,2:3))
-+ call alloc_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call alloc_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+!$omp section
-+!$omp end parallel sections
-+ if (.not.allocated (z)) call abort
-+ if (lbound (z, 1) /= -3 .or. ubound (z, 1) /= -3) call abort
-+ if (lbound (z, 2) /= 2 .or. ubound (z, 2) /= 3) call abort
-+ call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call ver_dt (x(n - 1), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (y(4), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+!$omp parallel private (x, y, z)
-+ call ver_dt (x(n - 1), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (x(n - 1), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (x(n - 1), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (y(4), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (y(4), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
-+ call ver_dt (y(4), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
-+ call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (z(-3,3), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
-+ call ver_dt (z(-3,3), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
-+!$omp end parallel
-+ call ver_dt (x(n - 1), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (x(n - 1), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (y(4), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (y(4), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
-+ call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (z(-3,3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (z(-3,3), 14, T, 3, 4, F, T, 1, 1, 2, 4, T)
-+!$omp parallel private (x, y, z)
-+ call ver_dt (x(n - 1), 0, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (y(4), 0, T, 3, 4, F, T, 1, 1, 2, 4, T)
-+ deallocate (x(n - 1)%h, x(n - 1)%k)
-+ deallocate (y(4)%h)
-+ allocate (y(4)%k)
-+ call ver_dt (z(-3,2), 0, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (z(-3,3), 0, T, 3, 4, F, T, 1, 1, 2, 4, T)
-+ deallocate (z(-3,2)%h, z(-3,2)%k)
-+ deallocate (z(-3,3)%h)
-+ allocate (z(-3,3)%k)
-+!$omp end parallel
-+ call alloc_dt (x(n - 1), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
-+ call alloc_dt (y(4), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
-+ call alloc_dt (z(-3,2), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
-+ call alloc_dt (z(-3,3), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
-+!$omp parallel firstprivate (x, y, z)
-+ if (lbound (x, 1) /= 2 .or. ubound (x, 1) /= 4) call abort
-+ if (lbound (y, 1) /= 3 .or. ubound (y, 1) /= 4) call abort
-+ call ver_dt (x(n - 1), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
-+ call alloc_dt (x(n - 1), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (x(n - 1), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (y(4), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
-+ call alloc_dt (y(4), 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
-+ call ver_dt (y(4), 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
-+ call ver_dt (z(-3,2), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
-+ call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (z(-3,3), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
-+ call alloc_dt (z(-3,3), 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
-+ call ver_dt (z(-3,3), 4, T, 3, 4, T, T, 1, 1, 2, 4, T)
-+!$omp end parallel
-+ call ver_dt (x(n - 1), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
-+ call alloc_dt (x(n - 1), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (y(4), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
-+ call alloc_dt (y(4), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (z(-3,2), 5, T, 1, 2, F, T, 2, 3, -2, -2, F)
-+ call alloc_dt (z(-3,2), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (z(-3,3), 15, F, 0, 0, T, T, 2, 2, 2, 2, T)
-+ call alloc_dt (z(-3,3), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+!$omp parallel firstprivate (x, y, z)
-+ call ver_dt (x(n - 1), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (x(n - 1), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (x(n - 1), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (y(4), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (y(4), 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
-+ call ver_dt (y(4), 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
-+ call ver_dt (z(-3,2), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (z(-3,2), 4, T, -3, -1, T, T, -1, -1, 2, 3, T)
-+ call ver_dt (z(-3,3), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (z(-3,3), 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
-+ call ver_dt (z(-3,3), 17, T, 1, 2, F, T, 2, 2, 3, 3, F)
-+!$omp end parallel
-+ call ver_dt (x(n - 1), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (y(4), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (y(4), 18, T, 0, 1, T, T, 0, 1, 0, 1, T)
-+ call ver_dt (z(-3,2), 4, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (z(-3,3), 16, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call alloc_dt (z(-3,3), 18, T, 0, 1, T, T, 0, 1, 0, 1, T)
-+ l = F
-+!$omp parallel sections lastprivate (x, y, z) firstprivate (l)
-+!$omp section
-+ if (l) then
-+ call ver_dt (x(n - 1), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (y(4), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ call ver_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ else
-+ call ver_dt (x(n - 1), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (y(4), 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
-+ call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (z(-3,3), 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
-+ end if
-+ l = T
-+ call alloc_dt (x(n - 1), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
-+ call ver_dt (x(n - 1), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
-+ call alloc_dt (y(4), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
-+ call ver_dt (y(4), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
-+ call alloc_dt (z(-3,2), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
-+ call ver_dt (z(-3,2), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
-+ call alloc_dt (z(-3,3), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
-+ call ver_dt (z(-3,3), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
-+!$omp section
-+ if (l) then
-+ call ver_dt (x(n - 1), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
-+ call ver_dt (y(4), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
-+ call ver_dt (z(-3,2), 7, T, 1, 1, T, T, 1, 2, 3, 3, T)
-+ call ver_dt (z(-3,3), 20, T, 0, 0, F, T, 2, 2, 3, 4, F)
-+ else
-+ call ver_dt (x(n - 1), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (y(4), 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
-+ call ver_dt (z(-3,2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (z(-3,3), 0, T, 0, 1, T, T, 0, 1, 0, 1, T)
-+ end if
-+ l = T
-+ call alloc_dt (x(n - 1), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (x(n - 1), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call alloc_dt (y(4), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ call ver_dt (y(4), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ call alloc_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call alloc_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ call ver_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+!$omp section
-+!$omp end parallel sections
-+ call ver_dt (x(n - 1), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (y(4), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ call ver_dt (z(-3,2), 9, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (z(-3,3), 21, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+!$omp parallel sections lastprivate (x, y, z) firstprivate (l)
-+!$omp section
-+ if (l) then
-+ call ver_dt (x(n - 1), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (y(4), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ else
-+ call ver_dt (x(n - 1), 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (y(4), 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ call ver_dt (z(-3,2), 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (z(-3,3), 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ end if
-+ l = T
-+ call alloc_dt (x(n - 1), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call ver_dt (x(n - 1), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call alloc_dt (y(4), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+ call ver_dt (y(4), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+ call alloc_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call ver_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call alloc_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+ call ver_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+!$omp section
-+ if (l) then
-+ call ver_dt (x(n - 1), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call ver_dt (y(4), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+ call ver_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call ver_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+ else
-+ call ver_dt (x(n - 1), 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (y(4), 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ call ver_dt (z(-3,2), 0, T, 1, 1, F, F, 0, 0, 0, 0, T)
-+ call ver_dt (z(-3,3), 0, F, 0, 0, T, T, 1, 2, 3, 4, T)
-+ end if
-+ l = T
-+ call alloc_dt (x(n - 1), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (x(n - 1), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call alloc_dt (y(4), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call ver_dt (y(4), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call alloc_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call alloc_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+!$omp section
-+!$omp end parallel sections
-+ call ver_dt (x(n - 1), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (y(4), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+!$omp parallel private (x, y, z)
-+ call ver_dt (x(n - 1), 0, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (y(4), 0, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call ver_dt (z(-3,2), 0, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (z(-3,3), 0, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+!$omp single
-+ call alloc_dt (x(n - 1), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call alloc_dt (y(4), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+ call alloc_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call alloc_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+!$omp end single copyprivate (x, y, z)
-+ call ver_dt (x(n - 1), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call ver_dt (y(4), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+ call ver_dt (z(-3,2), 3, F, 0, 0, T, T, 0, 1, 0, 1, F)
-+ call ver_dt (z(-3,3), 22, T, 5, 5, F, T, 2, 3, 2, 2, T)
-+!$omp end parallel
-+ call ver_dt (x(n - 1), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (y(4), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call ver_dt (z(-3,2), 5, F, 0, 0, T, T, -1, -1, -1, -1, T)
-+ call ver_dt (z(-3,3), 23, T, 0, 1, T, T, 2, 2, 2, 2, F)
-+ call ver_dt (x(2), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (x(n), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ call ver_dt (y(3), 0, F, 0, 0, F, F, 0, 0, 0, 0, F)
-+ end subroutine foo
-+end
-Index: libgomp/testsuite/libgomp.fortran/nestedfn5.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/nestedfn5.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/nestedfn5.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,96 @@
-+! { dg-do run }
-+
-+ interface
-+ subroutine bar (q)
-+ integer :: q(19:)
-+ end subroutine
-+ end interface
-+ integer :: q(7:15)
-+ q(:) = 5
-+ call bar (q)
-+end
-+subroutine bar (q)
-+ use iso_c_binding, only: c_ptr, c_loc, c_int
-+ integer :: a, b, c, d(2:3,4:5), q(19:), h, k, m, n, o, p
-+ integer(c_int), target :: e(64)
-+ type (c_ptr) :: f, g(64)
-+ logical :: l
-+ a = 1
-+ b = 2
-+ c = 3
-+ d = 4
-+ l = .false.
-+ f = c_loc (e)
-+ call foo
-+contains
-+ subroutine foo
-+ use iso_c_binding, only: c_sizeof
-+!$omp simd linear(a:2) linear(b:1)
-+ do a = 1, 20, 2
-+ b = b + 1
-+ end do
-+!$omp end simd
-+ if (a /= 21 .or. b /= 12) call abort
-+!$omp simd aligned(f : c_sizeof (e(1)))
-+ do b = 1, 64
-+ g(b) = f
-+ end do
-+!$omp end simd
-+!$omp parallel
-+!$omp single
-+!$omp taskgroup
-+!$omp task depend(out : a, d(2:2,4:5))
-+ a = a + 1
-+ d(2:2,4:5) = d(2:2,4:5) + 1
-+!$omp end task
-+!$omp task depend(in : a, d(2:2,4:5))
-+ if (a /= 22) call abort
-+ if (any (d(2:2,4:5) /= 5)) call abort
-+!$omp end task
-+!$omp end taskgroup
-+!$omp end single
-+!$omp end parallel
-+ b = 10
-+!$omp target data map (tofrom: a, d(2:3,4:4), q) map (from: l)
-+!$omp target map (tofrom: b, d(2:3,4:4))
-+ l = .false.
-+ if (a /= 22 .or. any (q /= 5)) l = .true.
-+ if (lbound (q, 1) /= 19 .or. ubound (q, 1) /= 27) l = .true.
-+ if (d(2,4) /= 5 .or. d(3,4) /= 4) l = .true.
-+ l = l .or. (b /= 10)
-+ a = 6
-+ b = 11
-+ q = 8
-+ d(2:3,4:4) = 9
-+!$omp end target
-+!$omp target update from (a, q, d(2:3,4:4), l)
-+ if (a /= 6 .or. l .or. b /= 11 .or. any (q /= 8)) call abort
-+ if (any (d(2:3,4:4) /= 9) .or. d(2,5) /= 5 .or. d(3,5) /= 4) call abort
-+ a = 12
-+ b = 13
-+ q = 14
-+ d = 15
-+!$omp target update to (a, q, d(2:3,4:4))
-+!$omp target map (tofrom: b, d(2:3,4:4))
-+ if (a /= 12 .or. b /= 13 .or. any (q /= 14)) l = .true.
-+ l = l .or. any (d(2:3,4:4) /= 15)
-+!$omp end target
-+ a = 0
-+ b = 1
-+ c = 100
-+ h = 8
-+ m = 0
-+ n = 64
-+ o = 16
-+ if (l) call abort
-+!$omp target teams distribute parallel do simd if (.not.l) device(a) &
-+!$omp & num_teams(b) dist_schedule(static, c) num_threads (h) &
-+!$omp & reduction (+: m) safelen (n) schedule(static, o)
-+ do p = 1, 64
-+ m = m + 1
-+ end do
-+!$omp end target teams distribute parallel do simd
-+ if (m /= 64) call abort
-+!$omp end target data
-+ end subroutine foo
-+end subroutine bar
-Index: libgomp/testsuite/libgomp.fortran/depend-2.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/depend-2.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/depend-2.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,34 @@
-+! { dg-do run }
-+
-+ integer :: x(3:6, 7:12), y
-+ y = 1
-+ !$omp parallel shared (x, y)
-+ !$omp single
-+ !$omp taskgroup
-+ !$omp task depend(in: x(:, :))
-+ if (y.ne.1) call abort
-+ !$omp end task
-+ !$omp task depend(out: x(:, :))
-+ y = 2
-+ !$omp end task
-+ !$omp end taskgroup
-+ !$omp taskgroup
-+ !$omp task depend(in: x(4, 7))
-+ if (y.ne.2) call abort
-+ !$omp end task
-+ !$omp task depend(out: x(4:4, 7:7))
-+ y = 3
-+ !$omp end task
-+ !$omp end taskgroup
-+ !$omp taskgroup
-+ !$omp task depend(in: x(4:, 8:))
-+ if (y.ne.3) call abort
-+ !$omp end task
-+ !$omp task depend(out: x(4:6, 8:12))
-+ y = 4
-+ !$omp end task
-+ !$omp end taskgroup
-+ !$omp end single
-+ !$omp end parallel
-+ if (y.ne.4) call abort
-+end
-Index: libgomp/testsuite/libgomp.fortran/cancel-taskgroup-2.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/cancel-taskgroup-2.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/cancel-taskgroup-2.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,28 @@
-+! { dg-do run }
-+! { dg-set-target-env-var OMP_CANCELLATION "true" }
-+
-+ use omp_lib
-+ integer :: i
-+
-+ !$omp parallel
-+ !$omp taskgroup
-+ !$omp task
-+ !$omp cancel taskgroup
-+ call abort
-+ !$omp endtask
-+ !$omp endtaskgroup
-+ !$omp endparallel
-+ !$omp parallel private (i)
-+ !$omp barrier
-+ !$omp single
-+ !$omp taskgroup
-+ do i = 0, 49
-+ !$omp task
-+ !$omp cancellation point taskgroup
-+ !$omp cancel taskgroup if (i.gt.5)
-+ !$omp end task
-+ end do
-+ !$omp end taskgroup
-+ !$omp endsingle
-+ !$omp end parallel
-+end
-Index: libgomp/testsuite/libgomp.fortran/simd2.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/simd2.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/simd2.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,101 @@
-+! { dg-do run }
-+! { dg-additional-options "-msse2" { target sse2_runtime } }
-+! { dg-additional-options "-mavx" { target avx_runtime } }
-+
-+ integer :: a(1024), b(1024), k, m, i, s, t
-+ k = 4
-+ m = 2
-+ t = 1
-+ do i = 1, 1024
-+ a(i) = i - 513
-+ b(i) = modulo (i - 52, 39)
-+ if (i.lt.52.and.b(i).ne.0) b(i) = b(i) - 39
-+ end do
-+ s = foo (b)
-+ do i = 1, 1024
-+ if (a(i).ne.((i - 513) * b(i))) call abort
-+ if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
-+ if (b(i).ne.(modulo (i - 52, 39) - 39)) call abort
-+ else
-+ if (b(i).ne.(modulo (i - 52, 39))) call abort
-+ end if
-+ a(i) = i - 513
-+ end do
-+ if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) call abort
-+ k = 4
-+ m = 2
-+ t = 1
-+ s = bar (b)
-+ do i = 1, 1024
-+ if (a(i).ne.((i - 513) * b(i))) call abort
-+ if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
-+ if (b(i).ne.(modulo (i - 52, 39) - 39)) call abort
-+ else
-+ if (b(i).ne.(modulo (i - 52, 39))) call abort
-+ end if
-+ a(i) = i - 513
-+ end do
-+ if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) call abort
-+ k = 4
-+ m = 2
-+ t = 1
-+ s = baz (b)
-+ do i = 1, 1024
-+ if (a(i).ne.((i - 513) * b(i))) call abort
-+ if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
-+ if (b(i).ne.(modulo (i - 52, 39) - 39)) call abort
-+ else
-+ if (b(i).ne.(modulo (i - 52, 39))) call abort
-+ end if
-+ end do
-+ if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) call abort
-+contains
-+ function foo (p)
-+ integer :: p(1024), u, v, i, s, foo
-+ s = 0
-+ !$omp simd linear(k : m + 1) reduction(+: s) lastprivate(u, v)
-+ do i = 1, 1024
-+ a(i) = a(i) * p(i)
-+ u = p(i) + k
-+ k = k + m + 1
-+ v = p(i) + k
-+ s = s + p(i) + k
-+ end do
-+ !$omp end simd
-+ if (i.ne.1025) call abort
-+ if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) call abort
-+ foo = s
-+ end function foo
-+ function bar (p)
-+ integer :: p(1024), u, v, i, s, bar
-+ s = 0
-+ !$omp simd linear(k : m + 1) reduction(+: s) lastprivate(u, v)
-+ do i = 1, 1024, t
-+ a(i) = a(i) * p(i)
-+ u = p(i) + k
-+ k = k + m + 1
-+ v = p(i) + k
-+ s = s + p(i) + k
-+ end do
-+ !$omp end simd
-+ if (i.ne.1025) call abort
-+ if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) call abort
-+ bar = s
-+ end function bar
-+ function baz (p)
-+ integer :: p(1024), u, v, i, s, baz
-+ s = 0
-+ !$omp simd linear(k : m + 1) reduction(+: s) lastprivate(u, v) &
-+ !$omp & linear(i : t)
-+ do i = 1, 1024, t
-+ a(i) = a(i) * p(i)
-+ u = p(i) + k
-+ k = k + m + 1
-+ v = p(i) + k
-+ s = s + p(i) + k
-+ end do
-+ if (i.ne.1025) call abort
-+ if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) call abort
-+ baz = s
-+ end function baz
-+end
-Index: libgomp/testsuite/libgomp.fortran/simd4.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/simd4.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/simd4.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,103 @@
-+! { dg-do run }
-+! { dg-additional-options "-msse2" { target sse2_runtime } }
-+! { dg-additional-options "-mavx" { target avx_runtime } }
-+
-+ integer :: a(1024), b(1024), k, m, i, s, t
-+ k = 4
-+ m = 2
-+ t = 1
-+ do i = 1, 1024
-+ a(i) = i - 513
-+ b(i) = modulo (i - 52, 39)
-+ if (i.lt.52.and.b(i).ne.0) b(i) = b(i) - 39
-+ end do
-+ s = foo (b)
-+ do i = 1, 1024
-+ if (a(i).ne.((i - 513) * b(i))) call abort
-+ if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
-+ if (b(i).ne.(modulo (i - 52, 39) - 39)) call abort
-+ else
-+ if (b(i).ne.(modulo (i - 52, 39))) call abort
-+ end if
-+ a(i) = i - 513
-+ end do
-+ if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) call abort
-+ k = 4
-+ m = 2
-+ t = 1
-+ s = bar (b)
-+ do i = 1, 1024
-+ if (a(i).ne.((i - 513) * b(i))) call abort
-+ if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
-+ if (b(i).ne.(modulo (i - 52, 39) - 39)) call abort
-+ else
-+ if (b(i).ne.(modulo (i - 52, 39))) call abort
-+ end if
-+ a(i) = i - 513
-+ end do
-+ if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) call abort
-+ k = 4
-+ m = 2
-+ t = 1
-+ s = baz (b)
-+ do i = 1, 1024
-+ if (a(i).ne.((i - 513) * b(i))) call abort
-+ if (i.lt.52.and.modulo (i - 52, 39).ne.0) then
-+ if (b(i).ne.(modulo (i - 52, 39) - 39)) call abort
-+ else
-+ if (b(i).ne.(modulo (i - 52, 39))) call abort
-+ end if
-+ end do
-+ if (k.ne.(4 + 3 * 1024).or.s.ne.1596127) call abort
-+contains
-+ function foo (p)
-+ integer :: p(1024), u, v, i, s, foo
-+ s = 0
-+ !$omp parallel do simd linear(k : m + 1) reduction(+: s) &
-+ !$omp & lastprivate(u, v) schedule (static, 32)
-+ do i = 1, 1024
-+ a(i) = a(i) * p(i)
-+ u = p(i) + k
-+ k = k + m + 1
-+ v = p(i) + k
-+ s = s + p(i) + k
-+ end do
-+ !$omp end parallel do simd
-+ if (i.ne.1025) call abort
-+ if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) call abort
-+ foo = s
-+ end function foo
-+ function bar (p)
-+ integer :: p(1024), u, v, i, s, bar
-+ s = 0
-+ !$omp parallel do simd linear(k : m + 1) reduction(+: s) &
-+ !$omp & lastprivate(u, v) schedule (dynamic, 32)
-+ do i = 1, 1024, t
-+ a(i) = a(i) * p(i)
-+ u = p(i) + k
-+ k = k + m + 1
-+ v = p(i) + k
-+ s = s + p(i) + k
-+ end do
-+ !$omp endparalleldosimd
-+ if (i.ne.1025) call abort
-+ if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) call abort
-+ bar = s
-+ end function bar
-+ function baz (p)
-+ integer :: p(1024), u, v, i, s, baz
-+ s = 0
-+ !$omp parallel do simd linear(k : m + 1) reduction(+: s) &
-+ !$omp & lastprivate(u, v) linear(i : t) schedule (static, 8)
-+ do i = 1, 1024, t
-+ a(i) = a(i) * p(i)
-+ u = p(i) + k
-+ k = k + m + 1
-+ v = p(i) + k
-+ s = s + p(i) + k
-+ end do
-+ if (i.ne.1025) call abort
-+ if (u.ne.(36 + 4 + 3 * 1023).or.v.ne.(36 + 4 + 3 * 1024)) call abort
-+ baz = s
-+ end function baz
-+end
-Index: libgomp/testsuite/libgomp.fortran/simd6.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/simd6.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/simd6.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,135 @@
-+! { dg-do run }
-+! { dg-additional-options "-msse2" { target sse2_runtime } }
-+! { dg-additional-options "-mavx" { target avx_runtime } }
-+
-+ interface
-+ subroutine foo (b, i, j, x)
-+ integer, intent (inout) :: b
-+ integer, intent (in) :: i, j, x
-+ end subroutine
-+ end interface
-+ integer :: i, j, b, c
-+ c = 0
-+ i = 4
-+ j = 4
-+ b = 7
-+!$omp simd linear(b:2) reduction(+:c)
-+ do i = 0, 63
-+ c = c + b - (7 + 2 * i)
-+ call foo (b, i, j, 2)
-+ end do
-+ if (c /= 0 .or. i /= 64 .or. b /= 7 + 64 * 2) call abort
-+ i = 4
-+ j = 4
-+ b = 7
-+!$omp simd linear(b:3) reduction(+:c)
-+ do i = 0, 63, 4
-+ c = c + b - (7 + i / 4 * 3)
-+ call foo (b, i, j, 3)
-+ end do
-+ if (c /= 0 .or. i /= 64 .or. b /= 7 + 16 * 3) call abort
-+ i = 4
-+ j = 4
-+ b = 7
-+!$omp simd linear(i) linear(b:2) reduction(+:c)
-+ do i = 0, 63
-+ c = c + b - (7 + 2 * i)
-+ call foo (b, i, j, 2)
-+ end do
-+ if (c /= 0 .or. i /= 64 .or. b /= 7 + 64 * 2) call abort
-+ i = 4
-+ j = 4
-+ b = 7
-+!$omp simd linear(i:4) linear(b:3) reduction(+:c)
-+ do i = 0, 63, 4
-+ c = c + b - (7 + i / 4 * 3)
-+ call foo (b, i, j, 3)
-+ end do
-+ if (c /= 0 .or. i /= 64 .or. b /= 7 + 16 * 3) call abort
-+ i = 4
-+ j = 4
-+ b = 7
-+!$omp simd collapse(2) linear(b:2) reduction(+:c)
-+ do i = 0, 7
-+ do j = 0, 7
-+ c = c + b - (7 + 2 * j + 2 * 8 * i)
-+ call foo (b, i, j, 2)
-+ end do
-+ end do
-+ if (c /= 0 .or. i /= 8 .or. j /= 8 .or. b /= 7 + 64 * 2) call abort
-+ i = 4
-+ j = 4
-+ b = 7
-+!$omp simd collapse(2) linear(b:2) reduction(+:c) lastprivate (i, j)
-+ do i = 0, 7
-+ do j = 0, 7
-+ c = c + b - (7 + 2 * j + 2 * 8 * i)
-+ call foo (b, i, j, 2)
-+ end do
-+ end do
-+ if (c /= 0 .or. i /= 8 .or. j /= 8 .or. b /= 7 + 64 * 2) call abort
-+ i = 4
-+ j = 4
-+ b = 7
-+!$omp parallel do simd schedule (static, 4) linear(b:2) reduction(+:c)
-+ do i = 0, 63
-+ c = c + b - (7 + 2 * i)
-+ call foo (b, i, j, 2)
-+ end do
-+ if (c /= 0 .or. i /= 64 .or. b /= 7 + 64 * 2) call abort
-+ i = 4
-+ j = 4
-+ b = 7
-+!$omp parallel do simd schedule (static, 4) linear(b:3) reduction(+:c)
-+ do i = 0, 63, 4
-+ c = c + b - (7 + i / 4 * 3)
-+ call foo (b, i, j, 3)
-+ end do
-+ if (c /= 0 .or. i /= 64 .or. b /= 7 + 16 * 3) call abort
-+ i = 4
-+ j = 4
-+ b = 7
-+!$omp parallel do simd schedule (static, 4) linear(i) linear(b:2) reduction(+:c)
-+ do i = 0, 63
-+ c = c + b - (7 + 2 * i)
-+ call foo (b, i, j, 2)
-+ end do
-+ if (c /= 0 .or. i /= 64 .or. b /= 7 + 64 * 2) call abort
-+ i = 4
-+ j = 4
-+ b = 7
-+!$omp parallel do simd schedule (static, 4) linear(i:4) linear(b:3) reduction(+:c)
-+ do i = 0, 63, 4
-+ c = c + b - (7 + i / 4 * 3)
-+ call foo (b, i, j, 3)
-+ end do
-+ if (c /= 0 .or. i /= 64 .or. b /= 7 + 16 * 3) call abort
-+ i = 4
-+ j = 4
-+ b = 7
-+!$omp parallel do simd schedule (static, 4) collapse(2) linear(b:2) reduction(+:c)
-+ do i = 0, 7
-+ do j = 0, 7
-+ c = c + b - (7 + 2 * j + 2 * 8 * i)
-+ call foo (b, i, j, 2)
-+ end do
-+ end do
-+ if (c /= 0 .or. i /= 8 .or. j /= 8 .or. b /= 7 + 64 * 2) call abort
-+ i = 4
-+ j = 4
-+ b = 7
-+!$omp parallel do simd schedule (static, 4) collapse(2) linear(b:2) &
-+!$omp & reduction(+:c) lastprivate (i, j)
-+ do i = 0, 7
-+ do j = 0, 7
-+ c = c + b - (7 + 2 * j + 2 * 8 * i)
-+ call foo (b, i, j, 2)
-+ end do
-+ end do
-+ if (c /= 0 .or. i /= 8 .or. j /= 8 .or. b /= 7 + 64 * 2) call abort
-+end
-+subroutine foo (b, i, j, x)
-+ integer, intent (inout) :: b
-+ integer, intent (in) :: i, j, x
-+ b = b + (i - i) + (j - j) + x
-+end subroutine
-Index: libgomp/testsuite/libgomp.fortran/allocatable11.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/allocatable11.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/allocatable11.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,72 @@
-+! { dg-do run }
-+! { dg-require-effective-target tls_runtime }
-+
-+ use omp_lib
-+ integer, allocatable, save :: a, b(:), c(:,:)
-+ integer :: p
-+!$omp threadprivate (a, b, c)
-+ if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
-+
-+ call omp_set_dynamic (.false.)
-+ call omp_set_num_threads (4)
-+
-+!$omp parallel num_threads (4)
-+ if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
-+!$omp end parallel
-+
-+ allocate (a, b(6:9), c(3, 8:9))
-+ a = 4
-+ b = 5
-+ c = 6
-+ if (.not.allocated (a)) call abort
-+ if (.not.allocated (b) .or. size (b) /= 4) call abort
-+ if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
-+ if (.not.allocated (c) .or. size (c) /= 6) call abort
-+ if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
-+ if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
-+
-+!$omp parallel num_threads (4) copyin (a, b, c) private (p)
-+ p = omp_get_thread_num ()
-+ if (.not.allocated (a)) call abort
-+ if (.not.allocated (b) .or. size (b) /= 4) call abort
-+ if (lbound (b, 1) /= 6 .or. ubound (b, 1) /= 9) call abort
-+ if (.not.allocated (c) .or. size (c) /= 6) call abort
-+ if (size (c, 1) /= 3 .or. size (c, 2) /= 2) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
-+ if (lbound (c, 2) /= 8 .or. ubound (c, 2) /= 9) call abort
-+ if (a /= 4 .or. any (b /= 5) .or. any (c /= 6)) call abort
-+ deallocate (a, b, c)
-+ if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
-+ allocate (a, b(p:9), c(3, p:7))
-+ a = p
-+ b = p
-+ c = p
-+ if (.not.allocated (a)) call abort
-+ if (.not.allocated (b) .or. size (b) /= (10 - p)) call abort
-+ if (lbound (b, 1) /= p .or. ubound (b, 1) /= 9) call abort
-+ if (.not.allocated (c) .or. size (c) /= (3 * (8 - p))) call abort
-+ if (size (c, 1) /= 3 .or. size (c, 2) /= (8 - p)) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
-+ if (lbound (c, 2) /= p .or. ubound (c, 2) /= 7) call abort
-+ if (a /= p .or. any (b /= p) .or. any (c /= p)) call abort
-+!$omp end parallel
-+
-+!$omp parallel num_threads (4) copyin (a, b, c)
-+ if (.not.allocated (a)) call abort
-+ if (.not.allocated (b) .or. size (b) /= 10) call abort
-+ if (lbound (b, 1) /= 0 .or. ubound (b, 1) /= 9) call abort
-+ if (.not.allocated (c) .or. size (c) /= 24) call abort
-+ if (size (c, 1) /= 3 .or. size (c, 2) /= 8) call abort
-+ if (lbound (c, 1) /= 1 .or. ubound (c, 1) /= 3) call abort
-+ if (lbound (c, 2) /= 0 .or. ubound (c, 2) /= 7) call abort
-+ if (a /= 0 .or. any (b /= 0) .or. any (c /= 0)) call abort
-+!$omp end parallel
-+
-+ deallocate (a, b, c)
-+ if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
-+
-+!$omp parallel num_threads (4) copyin (a, b, c)
-+ if (allocated (a) .or. allocated (b) .or. allocated (c)) call abort
-+!$omp end parallel
-+end
-Index: libgomp/testsuite/libgomp.fortran/cancel-sections-1.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/cancel-sections-1.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/cancel-sections-1.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,23 @@
-+! { dg-do run }
-+! { dg-set-target-env-var OMP_CANCELLATION "true" }
-+
-+ use omp_lib
-+
-+ if (omp_get_cancellation ()) then
-+ !$omp parallel num_threads(32)
-+ !$omp sections
-+ !$omp cancel sections
-+ call abort
-+ !$omp section
-+ !$omp cancel sections
-+ call abort
-+ !$omp section
-+ !$omp cancel sections
-+ call abort
-+ !$omp section
-+ !$omp cancel sections
-+ call abort
-+ !$omp end sections
-+ !$omp end parallel
-+ end if
-+end
-Index: libgomp/testsuite/libgomp.fortran/udr2.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/udr2.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/udr2.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,51 @@
-+! { dg-do run }
-+
-+module udr2
-+ type dt
-+ integer :: x = 7
-+ integer :: y = 9
-+ end type
-+end module udr2
-+ use udr2, only : dt
-+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in)
-+ integer :: i, j(2:4,3:5)
-+!$omp declare reduction (bar : integer : &
-+!$omp & omp_out = omp_out + iand (omp_in, -4)) initializer (omp_priv = 3)
-+ interface operator (+)
-+ function notdefined(x, y)
-+ use udr2, only : dt
-+ type(dt), intent (in) :: x, y
-+ type(dt) :: notdefined
-+ end function
-+ end interface
-+ type (dt) :: d(2:4,3:5)
-+!$omp declare reduction (+ : dt : omp_out%x = omp_out%x &
-+!$omp & + iand (omp_in%x, -8))
-+!$omp declare reduction (foo : dt : omp_out%x = iand (omp_in%x, -8) &
-+!$omp & + omp_out%x) initializer (omp_priv = dt (5, 21))
-+ j = 0
-+!$omp parallel do reduction (foo : j)
-+ do i = 1, 100
-+ j = j + i
-+ end do
-+ if (any(j .ne. 5050)) call abort
-+ j = 3
-+!$omp parallel do reduction (bar : j)
-+ do i = 1, 100
-+ j = j + 4 * i
-+ end do
-+ if (any(j .ne. (5050 * 4 + 3))) call abort
-+!$omp parallel do reduction (+ : d)
-+ do i = 1, 100
-+ if (any(d%y .ne. 9)) call abort
-+ d%x = d%x + 8 * i
-+ end do
-+ if (any(d%x .ne. (5050 * 8 + 7)) .or. any(d%y .ne. 9)) call abort
-+ d = dt (5, 21)
-+!$omp parallel do reduction (foo : d)
-+ do i = 1, 100
-+ if (any(d%y .ne. 21)) call abort
-+ d%x = d%x + 8 * i
-+ end do
-+ if (any(d%x .ne. (5050 * 8 + 5)) .or. any(d%y .ne. 21)) call abort
-+end
-Index: libgomp/testsuite/libgomp.fortran/udr4.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/udr4.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/udr4.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,50 @@
-+! { dg-do run }
-+
-+!$omp declare reduction (foo : character(kind=1, len=*) &
-+!$omp & : omp_out = fn (omp_out, omp_in)) initializer (omp_priv = '')
-+!$omp declare reduction (bar : character(kind=1, len=:) &
-+!$omp & : omp_out = fn (omp_in, omp_out)) initializer (omp_priv = '')
-+!$omp declare reduction (baz : character(kind=1, len=1) &
-+!$omp & : omp_out = char (ichar (omp_out) + ichar (omp_in) &
-+!$omp & - ichar ('0'))) initializer (omp_priv = '0')
-+!$omp declare reduction (baz : character(kind=1, len=2) &
-+!$omp & : omp_out = char (ichar (omp_out(1:1)) + ichar (omp_in(1:1)) &
-+!$omp & - ichar ('0')) // char (ichar (omp_out(2:2)) + &
-+!$omp & ichar (omp_in(2:2)) - ichar ('0'))) initializer (omp_priv = '00')
-+ interface
-+ elemental function fn (x, y)
-+ character (len=64), intent (in) :: x, y
-+ character (len=64) :: fn
-+ end function
-+ end interface
-+ character(kind=1, len=64) :: c(-3:-2,1:1,7:8), d(2:3,-7:-5)
-+ character(kind = 1, len=1) :: e(2:4)
-+ character(kind = 1, len=1+1) :: f(8:10,9:10)
-+ integer :: i, j, k
-+ c = ''
-+ d = ''
-+ e = '0'
-+ f = '00'
-+!$omp parallel do reduction (foo : c) reduction (bar : d) &
-+!$omp & reduction (baz : e, f) private (j, k)
-+ do i = 1, 64
-+ forall (j = -3:-2, k = 7:8) &
-+ c(j,1,k) = trim(c(j,1,k)) // char (ichar ('0') + i)
-+ d = char (ichar ('0') + i) // d
-+ e = char (ichar (e) + mod (i, 3))
-+ f = char (ichar (f(:,:)(1:1)) + mod (i, 2)) &
-+& // char (ichar (f(:,:)(2:2)) + mod (i, 3))
-+ end do
-+ do i = 1, 64
-+ if (any (index (c, char (ichar ('0') + i)) .eq. 0)) call abort
-+ if (any (index (d, char (ichar ('0') + i)) .eq. 0)) call abort
-+ end do
-+ if (any (e.ne.char (ichar ('0') + 64))) call abort
-+ if (any (f(:,:)(1:1).ne.char (ichar ('0') + 32))) call abort
-+ if (any (f(:,:)(2:2).ne.char (ichar ('0') + 64))) call abort
-+end
-+elemental function fn (x, y)
-+ character (len=64), intent (in) :: x, y
-+ character (len=64) :: fn
-+ fn = trim(x) // y
-+end function
-Index: libgomp/testsuite/libgomp.fortran/udr6.f90
-===================================================================
---- a/src/libgomp/testsuite/libgomp.fortran/udr6.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.fortran/udr6.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,69 @@
-+! { dg-do run }
-+
-+module m
-+ interface operator(.add.)
-+ module procedure do_add
-+ end interface
-+ type dt
-+ real :: r = 0.0
-+ end type
-+contains
-+ elemental function do_add(x, y)
-+ type (dt), intent (in) :: x, y
-+ type (dt) :: do_add
-+ do_add%r = x%r + y%r
-+ end function
-+ elemental subroutine dp_add(x, y)
-+ double precision, intent (inout) :: x
-+ double precision, intent (in) :: y
-+ x = x + y
-+ end subroutine
-+ elemental subroutine dp_init(x)
-+ double precision, intent (out) :: x
-+ x = 0.0
-+ end subroutine
-+end module
-+
-+program udr6
-+ use m, only : operator(.add.), dt, dp_add, dp_init
-+ type(dt), allocatable :: xdt(:)
-+ type(dt) :: one
-+ real :: r
-+ integer (kind = 4), allocatable, dimension(:) :: i4
-+ integer (kind = 8), allocatable, dimension(:,:) :: i8
-+ integer :: i
-+ real (kind = 4), allocatable :: r4(:,:)
-+ double precision, allocatable :: dp(:)
-+!$omp declare reduction(.add.:dt:omp_out=omp_out.add.omp_in)
-+!$omp declare reduction(foo:integer(4),integer(kind=8),real (kind = 4) &
-+!$omp & :omp_out = omp_out + omp_in) initializer (omp_priv = 0)
-+!$omp declare reduction(foo:double precision:dp_add (omp_out, omp_in)) &
-+!$omp & initializer (dp_init (omp_priv))
-+
-+ one%r = 1.0
-+ allocate (xdt(4), i4 (3), i8(-5:-2,2:3), r4(2:5,1:1), dp(7))
-+ r = 0.0
-+ i4 = 0
-+ i8 = 0
-+ r4 = 0.0
-+ do i = 1, 7
-+ call dp_init (dp(i))
-+ end do
-+!$omp parallel reduction(.add.: xdt) reduction(+: r) &
-+!$omp & reduction(foo: i4, i8, r4, dp) private(i)
-+ do i = 1, 4
-+ xdt(i) = xdt(i).add.one
-+ end do
-+ r = r + 1.0
-+ i4 = i4 + 1
-+ i8 = i8 + 1
-+ r4 = r4 + 1.0
-+ do i = 1, 7
-+ call dp_add (dp(i), 1.0d0)
-+ end do
-+!$omp end parallel
-+ if (any (xdt%r .ne. r)) call abort
-+ if (any (i4.ne.r).or.any(i8.ne.r)) call abort
-+ if (any(r4.ne.r).or.any(dp.ne.r)) call abort
-+ deallocate (xdt, i4, i8, r4, dp)
-+end program udr6
-Index: libgomp/testsuite/libgomp.c/simd-9.c
-===================================================================
---- a/src/libgomp/testsuite/libgomp.c/simd-9.c (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.c/simd-9.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,70 @@
-+/* { dg-do run } */
-+/* { dg-options "-O2" } */
-+/* { dg-additional-options "-msse2" { target sse2_runtime } } */
-+/* { dg-additional-options "-mavx" { target avx_runtime } } */
-+
-+extern void abort ();
-+int a[32][32] __attribute__((aligned (32))) = { { 1 } };
-+struct S { int s; };
-+#pragma omp declare reduction (+:struct S:omp_out.s += omp_in.s)
-+#pragma omp declare reduction (foo:struct S:omp_out.s += omp_in.s)
-+#pragma omp declare reduction (foo:int:omp_out += omp_in)
-+
-+__attribute__((noinline, noclone)) int
-+foo (void)
-+{
-+ int i, j, u = 0;
-+ struct S s, t;
-+ s.s = 0; t.s = 0;
-+ #pragma omp simd aligned(a : 32) lastprivate (i, j) reduction(+:s) reduction(foo:t, u) collapse(2)
-+ for (i = 0; i < 32; i++)
-+ for (j = 0; j < 32; j++)
-+ {
-+ int *q = &i;
-+ int *r = &j;
-+ int x = a[i][j];
-+ s.s += x;
-+ t.s += x;
-+ u += x;
-+ }
-+ if (t.s != s.s || u != s.s || i != 32 || j != 32)
-+ abort ();
-+ return s.s;
-+}
-+
-+__attribute__((noinline, noclone)) int
-+bar (void)
-+{
-+ int i, j, u = 0;
-+ struct S s, t;
-+ s.s = 0; t.s = 0;
-+ #pragma omp simd aligned(a:32)reduction(+:s)reduction(foo:t,u)collapse(2)
-+ for (i = 0; i < 32; i++)
-+ for (j = 0; j < 32; j++)
-+ {
-+ int *q = &i;
-+ int *r = &j;
-+ int x = a[i][j];
-+ s.s += x;
-+ t.s += x;
-+ u += x;
-+ }
-+ if (t.s != s.s || u != s.s || i != 32 || j != 32)
-+ abort ();
-+ return s.s;
-+}
-+
-+int
-+main ()
-+{
-+ int i, j;
-+ for (i = 0; i < 32; i++)
-+ for (j = 0; j < 32; j++)
-+ a[i][j] = j + (i / 4);
-+ int s = foo ();
-+ if (s != 19456)
-+ abort ();
-+ if (bar () != 19456)
-+ abort ();
-+ return 0;
-+}
-Index: libgomp/testsuite/libgomp.c/simd-12.c
-===================================================================
---- a/src/libgomp/testsuite/libgomp.c/simd-12.c (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.c/simd-12.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,19 @@
-+/* { dg-do run } */
-+/* { dg-options "-O2" } */
-+/* { dg-additional-options "-msse2" { target sse2_runtime } } */
-+/* { dg-additional-options "-mavx" { target avx_runtime } } */
-+
-+int
-+main ()
-+{
-+ int k = 0, i, s = 0;
-+ #pragma omp parallel
-+ #pragma omp for simd linear(k : 3) reduction(+: s) schedule (static, 16)
-+ for (i = 0; i < 128; i++)
-+ {
-+ k = k + 3;
-+ s = s + k;
-+ }
-+ if (s != 128 * 129 / 2 * 3) __builtin_abort ();
-+ return 0;
-+}
-Index: libgomp/testsuite/libgomp.c/simd-16.c
-===================================================================
---- a/src/libgomp/testsuite/libgomp.c/simd-16.c (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.c/simd-16.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,67 @@
-+/* { dg-do run } */
-+/* { dg-options "-O2 -std=c99" } */
-+/* { dg-additional-options "-msse2" { target sse2_runtime } } */
-+/* { dg-additional-options "-mavx" { target avx_runtime } } */
-+
-+int
-+main ()
-+{
-+ int b, c = 0;
-+ b = 7;
-+ #pragma omp simd linear(b:2) reduction(+:c)
-+ for (int i = 0; i < 64; i++)
-+ {
-+ c = c + (b != 7 + 2 * i);
-+ b = b + 2;
-+ }
-+ if (c || b != 7 + 64 * 2)
-+ __builtin_abort ();
-+ b = 7;
-+ #pragma omp simd linear(b:3) reduction(+:c)
-+ for (int i = 0; i < 64; i += 4)
-+ {
-+ c = c + (b != 7 + i / 4 * 3);
-+ b = b + 3;
-+ }
-+ if (c || b != 7 + 16 * 3)
-+ __builtin_abort ();
-+ b = 7;
-+ #pragma omp simd collapse (2) linear(b:2) reduction(+:c)
-+ for (int i = 0; i < 8; i++)
-+ for (int j = 0; j < 8; j++)
-+ {
-+ c = c + (b != 7 + 2 * j + 2 * 8 * i);
-+ b = b + 2;
-+ }
-+ if (c || b != 7 + 64 * 2)
-+ __builtin_abort ();
-+ b = 7;
-+ #pragma omp parallel for simd schedule (static, 4) linear(b:2) reduction(+:c)
-+ for (int i = 0; i < 64; i++)
-+ {
-+ c = c + (b != 7 + 2 * i);
-+ b = b + 2;
-+ }
-+ if (c || b != 7 + 64 * 2)
-+ __builtin_abort ();
-+ b = 7;
-+ #pragma omp parallel for simd schedule (static, 4) linear(b:3) reduction(+:c)
-+ for (int i = 0; i < 64; i += 4)
-+ {
-+ c = c + (b != 7 + i / 4 * 3);
-+ b = b + 3;
-+ }
-+ if (c || b != 7 + 16 * 3)
-+ __builtin_abort ();
-+ b = 7;
-+ #pragma omp parallel for simd collapse (2) schedule (static, 4) linear(b:2) reduction(+:c)
-+ for (int i = 0; i < 8; i++)
-+ for (int j = 0; j < 8; j++)
-+ {
-+ c = c + (b != 7 + 2 * j + 2 * 8 * i);
-+ b = b + 2;
-+ }
-+ if (c || b != 7 + 64 * 2)
-+ __builtin_abort ();
-+ return 0;
-+}
-Index: libgomp/testsuite/libgomp.c/for-2.c
-===================================================================
---- a/src/libgomp/testsuite/libgomp.c/for-2.c (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.c/for-2.c (.../branches/gcc-4_9-branch)
-@@ -21,11 +21,14 @@
- #undef F
- #undef G
-
-+#undef SC
-+#define SC static
- #define F for simd
- #define G f_simd
- #include "for-1.h"
- #undef F
- #undef G
-+#undef SC
-
- int
- main ()
-Index: libgomp/testsuite/libgomp.c/for-2.h
-===================================================================
---- a/src/libgomp/testsuite/libgomp.c/for-2.h (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.c/for-2.h (.../branches/gcc-4_9-branch)
-@@ -8,6 +8,9 @@
- for (;;);
- }
- #endif
-+#ifndef SC
-+#define SC
-+#endif
-
- __attribute__((noinline, noclone)) void
- N(f0) (void)
-@@ -57,7 +60,7 @@
- N(f5) (int n11, int n12, int n21, int n22, int n31, int n32,
- int s1, int s2, int s3)
- {
-- int v1, v2, v3;
-+ SC int v1, v2, v3;
- #pragma omp F S collapse(3)
- for (v1 = n11; v1 < n12; v1 += s1)
- for (v2 = n21; v2 < n22; v2 += s2)
-@@ -69,8 +72,8 @@
- N(f6) (int n11, int n12, int n21, int n22, long long n31, long long n32,
- int s1, int s2, long long int s3)
- {
-- int v1, v2;
-- long long v3;
-+ SC int v1, v2;
-+ SC long long v3;
- #pragma omp F S collapse(3)
- for (v1 = n11; v1 > n12; v1 += s1)
- for (v2 = n21; v2 > n22; v2 += s2)
-@@ -81,8 +84,8 @@
- __attribute__((noinline, noclone)) void
- N(f7) (void)
- {
-- unsigned int v1, v3;
-- unsigned long long v2;
-+ SC unsigned int v1, v3;
-+ SC unsigned long long v2;
- #pragma omp F S collapse(3)
- for (v1 = 0; v1 < 20; v1 += 2)
- for (v2 = __LONG_LONG_MAX__ + 16ULL;
-@@ -94,7 +97,7 @@
- __attribute__((noinline, noclone)) void
- N(f8) (void)
- {
-- long long v1, v2, v3;
-+ SC long long v1, v2, v3;
- #pragma omp F S collapse(3)
- for (v1 = 0; v1 < 20; v1 += 2)
- for (v2 = 30; v2 < 20; v2++)
-@@ -118,7 +121,7 @@
- __attribute__((noinline, noclone)) void
- N(f10) (void)
- {
-- int i;
-+ SC int i;
- #pragma omp F S collapse(3)
- for (i = 0; i < 10; i++)
- for (int j = 10; j < 8; j++)
-@@ -146,7 +149,7 @@
- __attribute__((noinline, noclone)) void
- N(f12) (int n)
- {
-- int i;
-+ SC int i;
- #pragma omp F S collapse(3)
- for (i = 0; i < 10; i++)
- for (int j = n; j < 8; j++)
-@@ -170,7 +173,7 @@
- __attribute__((noinline, noclone)) void
- N(f14) (void)
- {
-- float *i;
-+ SC float *i;
- #pragma omp F S collapse(3)
- for (i = &b[0][0][0]; i < &b[0][0][10]; i++)
- for (float *j = &b[0][15][0]; j > &b[0][0][0]; j -= 10)
-Index: libgomp/testsuite/libgomp.c/simd-13.c
-===================================================================
---- a/src/libgomp/testsuite/libgomp.c/simd-13.c (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.c/simd-13.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,18 @@
-+/* { dg-do run } */
-+/* { dg-options "-O2" } */
-+/* { dg-additional-options "-msse2" { target sse2_runtime } } */
-+/* { dg-additional-options "-mavx" { target avx_runtime } } */
-+
-+int
-+main ()
-+{
-+ int k = 0, i, s = 0;
-+ #pragma omp parallel for simd linear(k : 3) reduction(+: s) schedule (static, 16)
-+ for (i = 0; i < 128; i++)
-+ {
-+ k = k + 3;
-+ s = s + k;
-+ }
-+ if (s != 128 * 129 / 2 * 3) __builtin_abort ();
-+ return 0;
-+}
-Index: libgomp/testsuite/libgomp.c/simd-17.c
-===================================================================
---- a/src/libgomp/testsuite/libgomp.c/simd-17.c (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.c/simd-17.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,73 @@
-+/* { dg-do run } */
-+/* { dg-options "-O2 -std=c99" } */
-+/* { dg-additional-options "-msse2" { target sse2_runtime } } */
-+/* { dg-additional-options "-mavx" { target avx_runtime } } */
-+
-+static inline void
-+foo (int *b, int *i, int *j, int x)
-+{
-+ *b = *b + x + (*i - *i) + (*j - *j);
-+}
-+
-+int
-+main ()
-+{
-+ int b, c = 0;
-+ b = 7;
-+ #pragma omp simd linear(b:2) reduction(+:c)
-+ for (int i = 0; i < 64; i++)
-+ {
-+ c = c + (b != 7 + 2 * i);
-+ foo (&b, &i, &i, 2);
-+ }
-+ if (c || b != 7 + 64 * 2)
-+ __builtin_abort ();
-+ b = 7;
-+ #pragma omp simd linear(b:3) reduction(+:c)
-+ for (int i = 0; i < 64; i += 4)
-+ {
-+ c = c + (b != 7 + i / 4 * 3);
-+ foo (&b, &i, &i, 3);
-+ }
-+ if (c || b != 7 + 16 * 3)
-+ __builtin_abort ();
-+ b = 7;
-+ #pragma omp simd collapse (2) linear(b:2) reduction(+:c)
-+ for (int i = 0; i < 8; i++)
-+ for (int j = 0; j < 8; j++)
-+ {
-+ c = c + (b != 7 + 2 * j + 2 * 8 * i);
-+ foo (&b, &i, &j, 2);
-+ }
-+ if (c || b != 7 + 64 * 2)
-+ __builtin_abort ();
-+ b = 7;
-+ #pragma omp parallel for simd schedule (static, 4) linear(b:2) reduction(+:c)
-+ for (int i = 0; i < 64; i++)
-+ {
-+ c = c + (b != 7 + 2 * i);
-+ foo (&b, &i, &i, 2);
-+ }
-+ if (c || b != 7 + 64 * 2)
-+ __builtin_abort ();
-+ b = 7;
-+ #pragma omp parallel for simd schedule (static, 4) linear(b:3) reduction(+:c)
-+ for (int i = 0; i < 64; i += 4)
-+ {
-+ c = c + (b != 7 + i / 4 * 3);
-+ foo (&b, &i, &i, 3);
-+ }
-+ if (c || b != 7 + 16 * 3)
-+ __builtin_abort ();
-+ b = 7;
-+ #pragma omp parallel for simd collapse (2) schedule (static, 4) linear(b:2) reduction(+:c)
-+ for (int i = 0; i < 8; i++)
-+ for (int j = 0; j < 8; j++)
-+ {
-+ c = c + (b != 7 + 2 * j + 2 * 8 * i);
-+ foo (&b, &i, &j, 2);
-+ }
-+ if (c || b != 7 + 64 * 2)
-+ __builtin_abort ();
-+ return 0;
-+}
-Index: libgomp/testsuite/libgomp.c/loop-16.c
-===================================================================
---- a/src/libgomp/testsuite/libgomp.c/loop-16.c (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.c/loop-16.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,27 @@
-+/* { dg-do run } */
-+
-+extern void abort (void);
-+
-+volatile int count;
-+static int test (void)
-+{
-+ return ++count > 0;
-+}
-+
-+int i;
-+
-+int
-+main ()
-+{
-+ #pragma omp for lastprivate (i)
-+ for (i = 0; i < 10; ++i)
-+ {
-+ int *p = &i;
-+ if (test ())
-+ continue;
-+ abort ();
-+ }
-+ if (i != count)
-+ abort ();
-+ return 0;
-+}
-Index: libgomp/testsuite/libgomp.c/simd-7.c
-===================================================================
---- a/src/libgomp/testsuite/libgomp.c/simd-7.c (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.c/simd-7.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,96 @@
-+/* { dg-do run } */
-+/* { dg-options "-O2" } */
-+/* { dg-additional-options "-msse2" { target sse2_runtime } } */
-+/* { dg-additional-options "-mavx" { target avx_runtime } } */
-+
-+extern void abort ();
-+int a[1024] __attribute__((aligned (32))) = { 1 };
-+int b[1024] __attribute__((aligned (32))) = { 1 };
-+int k, m;
-+struct U { int u; };
-+struct V { int v; };
-+
-+__attribute__((noinline, noclone)) int
-+foo (int *p)
-+{
-+ int i, s = 0;
-+ struct U u;
-+ struct V v;
-+ #pragma omp simd aligned(a, p : 32) linear(k: m + 1) \
-+ linear(i) reduction(+:s) lastprivate(u, v)
-+ for (i = 0; i < 1024; i++)
-+ {
-+ int *q = &i;
-+ a[i] *= p[i];
-+ u.u = p[i] + k;
-+ k += m + 1;
-+ v.v = p[i] + k;
-+ s += p[i] + k;
-+ }
-+ if (u.u != 36 + 4 + 3 * 1023 || v.v != 36 + 4 + 3 * 1024 || i != 1024)
-+ abort ();
-+ return s;
-+}
-+
-+__attribute__((noinline, noclone)) int
-+bar (int *p)
-+{
-+ int i, s = 0;
-+ struct U u;
-+ struct V v;
-+ #pragma omp simd aligned(a, p : 32) linear(k: m + 1) \
-+ reduction(+:s) lastprivate(u, v)
-+ for (i = 0; i < 1024; i++)
-+ {
-+ int *q = &i;
-+ a[i] *= p[i];
-+ u.u = p[i] + k;
-+ k += m + 1;
-+ v.v = p[i] + k;
-+ s += p[i] + k;
-+ }
-+ if (u.u != 36 + 4 + 3 * 1023 || v.v != 36 + 4 + 3 * 1024 || i != 1024)
-+ abort ();
-+ return s;
-+}
-+
-+int
-+main ()
-+{
-+#if __SIZEOF_INT__ >= 4
-+ int i;
-+ k = 4;
-+ m = 2;
-+ for (i = 0; i < 1024; i++)
-+ {
-+ a[i] = i - 512;
-+ b[i] = (i - 51) % 39;
-+ }
-+ int s = foo (b);
-+ for (i = 0; i < 1024; i++)
-+ {
-+ if (b[i] != (i - 51) % 39
-+ || a[i] != (i - 512) * b[i])
-+ abort ();
-+ }
-+ if (k != 4 + 3 * 1024 || s != 1596127)
-+ abort ();
-+ k = 4;
-+ m = 2;
-+ for (i = 0; i < 1024; i++)
-+ {
-+ a[i] = i - 512;
-+ b[i] = (i - 51) % 39;
-+ }
-+ s = bar (b);
-+ for (i = 0; i < 1024; i++)
-+ {
-+ if (b[i] != (i - 51) % 39
-+ || a[i] != (i - 512) * b[i])
-+ abort ();
-+ }
-+ if (k != 4 + 3 * 1024 || s != 1596127)
-+ abort ();
-+#endif
-+ return 0;
-+}
-Index: libgomp/testsuite/libgomp.c/simd-10.c
-===================================================================
---- a/src/libgomp/testsuite/libgomp.c/simd-10.c (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.c/simd-10.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,26 @@
-+/* { dg-do run } */
-+/* { dg-options "-O2" } */
-+/* { dg-additional-options "-msse2" { target sse2_runtime } } */
-+/* { dg-additional-options "-mavx" { target avx_runtime } } */
-+
-+int s = 0, i, u;
-+
-+void
-+foo ()
-+{
-+ #pragma omp for simd schedule(static, 32) reduction(+:s) lastprivate(u)
-+ for (i = 0; i < 128; i++)
-+ {
-+ s++;
-+ u = i;
-+ }
-+ if (i != 128 || s != 128 || u != 127)
-+ __builtin_abort ();
-+}
-+
-+int
-+main ()
-+{
-+ foo ();
-+ return 0;
-+}
-Index: libgomp/testsuite/libgomp.c/simd-14.c
-===================================================================
---- a/src/libgomp/testsuite/libgomp.c/simd-14.c (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.c/simd-14.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,123 @@
-+/* { dg-do run } */
-+/* { dg-options "-O2" } */
-+/* { dg-additional-options "-msse2" { target sse2_runtime } } */
-+/* { dg-additional-options "-mavx" { target avx_runtime } } */
-+
-+int
-+main ()
-+{
-+ int i, j, b, c = 0;
-+ i = 4; j = 4; b = 7;
-+ #pragma omp simd linear(b:2) reduction(+:c)
-+ for (i = 0; i < 64; i++)
-+ {
-+ c = c + (b != 7 + 2 * i);
-+ b = b + 2;
-+ }
-+ if (c || i != 64 || b != 7 + 64 * 2)
-+ __builtin_abort ();
-+ i = 4; j = 4; b = 7;
-+ #pragma omp simd linear(b:3) reduction(+:c)
-+ for (i = 0; i < 64; i += 4)
-+ {
-+ c = c + (b != 7 + i / 4 * 3);
-+ b = b + 3;
-+ }
-+ if (c || i != 64 || b != 7 + 16 * 3)
-+ __builtin_abort ();
-+ i = 4; j = 4; b = 7;
-+ #pragma omp simd linear(i) linear(b:2) reduction(+:c)
-+ for (i = 0; i < 64; i++)
-+ {
-+ c = c + (b != 7 + 2 * i);
-+ b = b + 2;
-+ }
-+ if (c || i != 64 || b != 7 + 64 * 2)
-+ __builtin_abort ();
-+ i = 4; j = 4; b = 7;
-+ #pragma omp simd linear(i:4) linear(b:3) reduction(+:c)
-+ for (i = 0; i < 64; i += 4)
-+ {
-+ c = c + (b != 7 + i / 4 * 3);
-+ b = b + 3;
-+ }
-+ if (c || i != 64 || b != 7 + 16 * 3)
-+ __builtin_abort ();
-+ i = 4; j = 4; b = 7;
-+ #pragma omp simd collapse (2) linear(b:2) reduction(+:c)
-+ for (i = 0; i < 8; i++)
-+ for (j = 0; j < 8; j++)
-+ {
-+ c = c + (b != 7 + 2 * j + 2 * 8 * i);
-+ b = b + 2;
-+ }
-+ if (c || i != 8 || j != 8 || b != 7 + 64 * 2)
-+ __builtin_abort ();
-+ i = 4; j = 4; b = 7;
-+ #pragma omp simd collapse (2) lastprivate (i, j) linear(b:2) reduction(+:c)
-+ for (i = 0; i < 8; i++)
-+ for (j = 0; j < 8; j++)
-+ {
-+ c = c + (b != 7 + 2 * j + 2 * 8 * i);
-+ b = b + 2;
-+ }
-+ if (c || i != 8 || j != 8 || b != 7 + 64 * 2)
-+ __builtin_abort ();
-+ i = 4; j = 4; b = 7;
-+ #pragma omp parallel for simd schedule (static, 4) linear(b:2) reduction(+:c)
-+ for (i = 0; i < 64; i++)
-+ {
-+ c = c + (b != 7 + 2 * i);
-+ b = b + 2;
-+ }
-+ if (c || i != 64 || b != 7 + 64 * 2)
-+ __builtin_abort ();
-+ i = 4; j = 4; b = 7;
-+ #pragma omp parallel for simd schedule (static, 4) linear(b:3) reduction(+:c)
-+ for (i = 0; i < 64; i += 4)
-+ {
-+ c = c + (b != 7 + i / 4 * 3);
-+ b = b + 3;
-+ }
-+ if (c || i != 64 || b != 7 + 16 * 3)
-+ __builtin_abort ();
-+ i = 4; j = 4; b = 7;
-+ #pragma omp parallel for simd schedule (static, 4) linear(i) linear(b:2) reduction(+:c)
-+ for (i = 0; i < 64; i++)
-+ {
-+ c = c + (b != 7 + 2 * i);
-+ b = b + 2;
-+ }
-+ if (c || i != 64 || b != 7 + 64 * 2)
-+ __builtin_abort ();
-+ i = 4; j = 4; b = 7;
-+ #pragma omp parallel for simd schedule (static, 4) linear(i:4) linear(b:3) reduction(+:c)
-+ for (i = 0; i < 64; i += 4)
-+ {
-+ c = c + (b != 7 + i / 4 * 3);
-+ b = b + 3;
-+ }
-+ if (c || i != 64 || b != 7 + 16 * 3)
-+ __builtin_abort ();
-+ i = 4; j = 4; b = 7;
-+ #pragma omp parallel for simd lastprivate (i, j) collapse (2) schedule (static, 4) linear(b:2) reduction(+:c)
-+ for (i = 0; i < 8; i++)
-+ for (j = 0; j < 8; j++)
-+ {
-+ c = c + (b != 7 + 2 * j + 2 * 8 * i);
-+ b = b + 2;
-+ }
-+ if (c || i != 8 || j != 8 || b != 7 + 64 * 2)
-+ __builtin_abort ();
-+ i = 4; j = 4; b = 7;
-+ #pragma omp parallel for simd collapse (2) schedule (static, 4) linear(b:2) reduction(+:c)
-+ for (i = 0; i < 8; i++)
-+ for (j = 0; j < 8; j++)
-+ {
-+ c = c + (b != 7 + 2 * j + 2 * 8 * i);
-+ b = b + 2;
-+ }
-+ if (c || i != 8 || j != 8 || b != 7 + 64 * 2)
-+ __builtin_abort ();
-+ return 0;
-+}
-Index: libgomp/testsuite/libgomp.c/target-8.c
-===================================================================
---- a/src/libgomp/testsuite/libgomp.c/target-8.c (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.c/target-8.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,26 @@
-+/* { dg-do run } */
-+/* { dg-options "-fopenmp" } */
-+
-+void
-+foo (int *p)
-+{
-+ int i;
-+ #pragma omp parallel
-+ #pragma omp single
-+ #pragma omp target teams distribute parallel for map(p[0:24])
-+ for (i = 0; i < 24; i++)
-+ p[i] = p[i] + 1;
-+}
-+
-+int
-+main ()
-+{
-+ int p[24], i;
-+ for (i = 0; i < 24; i++)
-+ p[i] = i;
-+ foo (p);
-+ for (i = 0; i < 24; i++)
-+ if (p[i] != i + 1)
-+ __builtin_abort ();
-+ return 0;
-+}
-Index: libgomp/testsuite/libgomp.c/atomic-17.c
-===================================================================
---- a/src/libgomp/testsuite/libgomp.c/atomic-17.c (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.c/atomic-17.c (.../branches/gcc-4_9-branch)
-@@ -13,13 +13,13 @@
- v = x;
- if (v != 3)
- abort ();
-- #pragma omp atomic update seq_cst
-+ #pragma omp atomic seq_cst update
- x = 3 * 2 * 1 + x;
-- #pragma omp atomic read seq_cst
-+ #pragma omp atomic read, seq_cst
- v = x;
- if (v != 9)
- abort ();
-- #pragma omp atomic capture seq_cst
-+ #pragma omp atomic seq_cst, capture
- v = x = x | 16;
- if (v != 25)
- abort ();
-@@ -27,15 +27,15 @@
- v = x = x + 14 * 2 / 4;
- if (v != 32)
- abort ();
-- #pragma omp atomic capture seq_cst
-+ #pragma omp atomic seq_cst capture
- v = x = 5 | x;
- if (v != 37)
- abort ();
-- #pragma omp atomic capture seq_cst
-+ #pragma omp atomic capture, seq_cst
- v = x = 40 + 12 - 2 - 7 - x;
- if (v != 6)
- abort ();
-- #pragma omp atomic read seq_cst
-+ #pragma omp atomic seq_cst read
- v = x;
- if (v != 6)
- abort ();
-@@ -43,7 +43,7 @@
- { v = x; x = 3 + x; }
- if (v != 6)
- abort ();
-- #pragma omp atomic capture seq_cst
-+ #pragma omp atomic seq_cst capture
- { v = x; x = -1 * -1 * -1 * -1 - x; }
- if (v != 9)
- abort ();
-@@ -51,11 +51,11 @@
- v = x;
- if (v != -8)
- abort ();
-- #pragma omp atomic capture seq_cst
-+ #pragma omp atomic capture, seq_cst
- { x = 2 * 2 - x; v = x; }
- if (v != 12)
- abort ();
-- #pragma omp atomic capture seq_cst
-+ #pragma omp atomic seq_cst capture
- { x = 7 & x; v = x; }
- if (v != 4)
- abort ();
-@@ -63,7 +63,7 @@
- { v = x; x = 6; }
- if (v != 4)
- abort ();
-- #pragma omp atomic read seq_cst
-+ #pragma omp atomic read, seq_cst
- v = x;
- if (v != 6)
- abort ();
-@@ -71,11 +71,11 @@
- { v = x; x = 7 * 8 + 23; }
- if (v != 6)
- abort ();
-- #pragma omp atomic read seq_cst
-+ #pragma omp atomic seq_cst, read
- v = x;
- if (v != 79)
- abort ();
-- #pragma omp atomic capture seq_cst
-+ #pragma omp atomic capture , seq_cst
- { v = x; x = 23 + 6 * 4; }
- if (v != 79)
- abort ();
-@@ -83,7 +83,7 @@
- v = x;
- if (v != 47)
- abort ();
-- #pragma omp atomic capture seq_cst
-+ #pragma omp atomic seq_cst capture
- { v = x; x = l ? 17 : 12; }
- if (v != 47)
- abort ();
-Index: libgomp/testsuite/libgomp.c/simd-8.c
-===================================================================
---- a/src/libgomp/testsuite/libgomp.c/simd-8.c (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.c/simd-8.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,44 @@
-+/* { dg-do run } */
-+/* { dg-options "-O2" } */
-+/* { dg-additional-options "-msse2" { target sse2_runtime } } */
-+/* { dg-additional-options "-mavx" { target avx_runtime } } */
-+
-+extern void abort ();
-+int a[32][32] __attribute__((aligned (32))) = { { 1 } };
-+struct S { int s; };
-+#pragma omp declare reduction (+:struct S:omp_out.s += omp_in.s)
-+#pragma omp declare reduction (foo:struct S:omp_out.s += omp_in.s)
-+#pragma omp declare reduction (foo:int:omp_out += omp_in)
-+
-+__attribute__((noinline, noclone)) int
-+foo (void)
-+{
-+ int i, j, u = 0;
-+ struct S s, t;
-+ s.s = 0; t.s = 0;
-+ #pragma omp simd aligned(a : 32) reduction(+:s) reduction(foo:t, u) collapse(2)
-+ for (i = 0; i < 32; i++)
-+ for (j = 0; j < 32; j++)
-+ {
-+ int x = a[i][j];
-+ s.s += x;
-+ t.s += x;
-+ u += x;
-+ }
-+ if (t.s != s.s || u != s.s)
-+ abort ();
-+ return s.s;
-+}
-+
-+int
-+main ()
-+{
-+ int i, j;
-+ for (i = 0; i < 32; i++)
-+ for (j = 0; j < 32; j++)
-+ a[i][j] = j + (i / 4);
-+ int s = foo ();
-+ if (s != 19456)
-+ abort ();
-+ return 0;
-+}
-Index: libgomp/testsuite/libgomp.c/simd-11.c
-===================================================================
---- a/src/libgomp/testsuite/libgomp.c/simd-11.c (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.c/simd-11.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,27 @@
-+/* { dg-do run } */
-+/* { dg-options "-O2" } */
-+/* { dg-additional-options "-msse2" { target sse2_runtime } } */
-+/* { dg-additional-options "-mavx" { target avx_runtime } } */
-+
-+int s = 0, i, j, u;
-+
-+void
-+foo ()
-+{
-+ #pragma omp for simd schedule(static, 32) reduction(+:s) lastprivate(u) collapse(2)
-+ for (i = 0; i < 16; i++)
-+ for (j = 0; j < 16; j++)
-+ {
-+ s++;
-+ u = i + j;
-+ }
-+ if (i != 16 || j != 16 || s != 256 || u != 30)
-+ __builtin_abort ();
-+}
-+
-+int
-+main ()
-+{
-+ foo ();
-+ return 0;
-+}
-Index: libgomp/testsuite/libgomp.c/simd-15.c
-===================================================================
---- a/src/libgomp/testsuite/libgomp.c/simd-15.c (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/testsuite/libgomp.c/simd-15.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,129 @@
-+/* { dg-do run } */
-+/* { dg-options "-O2" } */
-+/* { dg-additional-options "-msse2" { target sse2_runtime } } */
-+/* { dg-additional-options "-mavx" { target avx_runtime } } */
-+
-+static inline void
-+foo (int *b, int *i, int *j, int x)
-+{
-+ *b = *b + x + (*i - *i) + (*j - *j);
-+}
-+
-+int
-+main ()
-+{
-+ int i, j, b, c = 0;
-+ i = 4; j = 4; b = 7;
-+ #pragma omp simd linear(b:2) reduction(+:c)
-+ for (i = 0; i < 64; i++)
-+ {
-+ c = c + (b != 7 + 2 * i);
-+ foo (&b, &i, &j, 2);
-+ }
-+ if (c || i != 64 || b != 7 + 64 * 2)
-+ __builtin_abort ();
-+ i = 4; j = 4; b = 7;
-+ #pragma omp simd linear(b:3) reduction(+:c)
-+ for (i = 0; i < 64; i += 4)
-+ {
-+ c = c + (b != 7 + i / 4 * 3);
-+ foo (&b, &i, &j, 3);
-+ }
-+ if (c || i != 64 || b != 7 + 16 * 3)
-+ __builtin_abort ();
-+ i = 4; j = 4; b = 7;
-+ #pragma omp simd linear(i) linear(b:2) reduction(+:c)
-+ for (i = 0; i < 64; i++)
-+ {
-+ c = c + (b != 7 + 2 * i);
-+ foo (&b, &i, &j, 2);
-+ }
-+ if (c || i != 64 || b != 7 + 64 * 2)
-+ __builtin_abort ();
-+ i = 4; j = 4; b = 7;
-+ #pragma omp simd linear(i:4) linear(b:3) reduction(+:c)
-+ for (i = 0; i < 64; i += 4)
-+ {
-+ c = c + (b != 7 + i / 4 * 3);
-+ foo (&b, &i, &j, 3);
-+ }
-+ if (c || i != 64 || b != 7 + 16 * 3)
-+ __builtin_abort ();
-+ i = 4; j = 4; b = 7;
-+ #pragma omp simd collapse (2) linear(b:2) reduction(+:c)
-+ for (i = 0; i < 8; i++)
-+ for (j = 0; j < 8; j++)
-+ {
-+ c = c + (b != 7 + 2 * j + 2 * 8 * i);
-+ foo (&b, &i, &j, 2);
-+ }
-+ if (c || i != 8 || j != 8 || b != 7 + 64 * 2)
-+ __builtin_abort ();
-+ i = 4; j = 4; b = 7;
-+ #pragma omp simd collapse (2) lastprivate (i, j) linear(b:2) reduction(+:c)
-+ for (i = 0; i < 8; i++)
-+ for (j = 0; j < 8; j++)
-+ {
-+ c = c + (b != 7 + 2 * j + 2 * 8 * i);
-+ foo (&b, &i, &j, 2);
-+ }
-+ if (c || i != 8 || j != 8 || b != 7 + 64 * 2)
-+ __builtin_abort ();
-+ i = 4; j = 4; b = 7;
-+ #pragma omp parallel for simd schedule (static, 4) linear(b:2) reduction(+:c)
-+ for (i = 0; i < 64; i++)
-+ {
-+ c = c + (b != 7 + 2 * i);
-+ foo (&b, &i, &j, 2);
-+ }
-+ if (c || i != 64 || b != 7 + 64 * 2)
-+ __builtin_abort ();
-+ i = 4; j = 4; b = 7;
-+ #pragma omp parallel for simd schedule (static, 4) linear(b:3) reduction(+:c)
-+ for (i = 0; i < 64; i += 4)
-+ {
-+ c = c + (b != 7 + i / 4 * 3);
-+ foo (&b, &i, &j, 3);
-+ }
-+ if (c || i != 64 || b != 7 + 16 * 3)
-+ __builtin_abort ();
-+ i = 4; j = 4; b = 7;
-+ #pragma omp parallel for simd schedule (static, 4) linear(i) linear(b:2) reduction(+:c)
-+ for (i = 0; i < 64; i++)
-+ {
-+ c = c + (b != 7 + 2 * i);
-+ foo (&b, &i, &j, 2);
-+ }
-+ if (c || i != 64 || b != 7 + 64 * 2)
-+ __builtin_abort ();
-+ i = 4; j = 4; b = 7;
-+ #pragma omp parallel for simd schedule (static, 4) linear(i:4) linear(b:3) reduction(+:c)
-+ for (i = 0; i < 64; i += 4)
-+ {
-+ c = c + (b != 7 + i / 4 * 3);
-+ foo (&b, &i, &j, 3);
-+ }
-+ if (c || i != 64 || b != 7 + 16 * 3)
-+ __builtin_abort ();
-+ i = 4; j = 4; b = 7;
-+ #pragma omp parallel for simd lastprivate (i, j) collapse (2) schedule (static, 4) linear(b:2) reduction(+:c)
-+ for (i = 0; i < 8; i++)
-+ for (j = 0; j < 8; j++)
-+ {
-+ c = c + (b != 7 + 2 * j + 2 * 8 * i);
-+ foo (&b, &i, &j, 2);
-+ }
-+ if (c || i != 8 || j != 8 || b != 7 + 64 * 2)
-+ __builtin_abort ();
-+ i = 4; j = 4; b = 7;
-+ #pragma omp parallel for simd collapse (2) schedule (static, 4) linear(b:2) reduction(+:c)
-+ for (i = 0; i < 8; i++)
-+ for (j = 0; j < 8; j++)
-+ {
-+ c = c + (b != 7 + 2 * j + 2 * 8 * i);
-+ foo (&b, &i, &j, 2);
-+ }
-+ if (c || i != 8 || j != 8 || b != 7 + 64 * 2)
-+ __builtin_abort ();
-+ return 0;
-+}
-Index: libgomp/omp_lib.h.in
-===================================================================
---- a/src/libgomp/omp_lib.h.in (.../tags/gcc_4_9_0_release)
-+++ b/src/libgomp/omp_lib.h.in (.../branches/gcc-4_9-branch)
-@@ -45,7 +45,7 @@
- parameter (omp_proc_bind_master = 2)
- parameter (omp_proc_bind_close = 3)
- parameter (omp_proc_bind_spread = 4)
-- parameter (openmp_version = 201107)
-+ parameter (openmp_version = 201307)
-
- external omp_init_lock, omp_init_nest_lock
- external omp_destroy_lock, omp_destroy_nest_lock
-Index: libstdc++-v3/python/libstdcxx/v6/printers.py
-===================================================================
---- a/src/libstdc++-v3/python/libstdcxx/v6/printers.py (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/python/libstdcxx/v6/printers.py (.../branches/gcc-4_9-branch)
-@@ -375,6 +375,22 @@
- self.node = node
- return result
-
-+def get_value_from_Rb_tree_node(node):
-+ """Returns the value held in an _Rb_tree_node<_Val>"""
-+ try:
-+ member = node.type.fields()[1].name
-+ if member == '_M_value_field':
-+ # C++03 implementation, node contains the value as a member
-+ return node['_M_value_field']
-+ elif member == '_M_storage':
-+ # C++11 implementation, node stores value in __aligned_buffer
-+ p = node['_M_storage']['_M_storage'].address
-+ p = p.cast(node.type.template_argument(0).pointer())
-+ return p.dereference()
-+ except:
-+ pass
-+ raise ValueError, "Unsupported implementation for %s" % str(node.type)
-+
- # This is a pretty printer for std::_Rb_tree_iterator (which is
- # std::map::iterator), and has nothing to do with the RbtreeIterator
- # class above.
-@@ -387,7 +403,8 @@
- def to_string (self):
- typename = str(self.val.type.strip_typedefs()) + '::_Link_type'
- nodetype = gdb.lookup_type(typename).strip_typedefs()
-- return self.val.cast(nodetype).dereference()['_M_value_field']
-+ node = self.val.cast(nodetype).dereference()
-+ return get_value_from_Rb_tree_node(node)
-
- class StdDebugIteratorPrinter:
- "Print a debug enabled version of an iterator"
-@@ -417,7 +434,8 @@
- def next(self):
- if self.count % 2 == 0:
- n = self.rbiter.next()
-- n = n.cast(self.type).dereference()['_M_value_field']
-+ n = n.cast(self.type).dereference()
-+ n = get_value_from_Rb_tree_node(n)
- self.pair = n
- item = n['first']
- else:
-@@ -458,7 +476,8 @@
-
- def next(self):
- item = self.rbiter.next()
-- item = item.cast(self.type).dereference()['_M_value_field']
-+ item = item.cast(self.type).dereference()
-+ item = get_value_from_Rb_tree_node(item)
- # FIXME: this is weird ... what to do?
- # Maybe a 'set' display hint?
- result = ('[%d]' % self.count, item)
-Index: libstdc++-v3/scripts/run_doxygen
-===================================================================
---- a/src/libstdc++-v3/scripts/run_doxygen (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/scripts/run_doxygen (.../branches/gcc-4_9-branch)
-@@ -193,8 +193,15 @@
- if $do_latex; then
- cd ${outdir}/${mode}
-
-- # Also drop in the header file and style sheet
-- doxygen -w latex header.tex doxygen.sty
-+ # Grrr, Doxygen 1.8.x changed the -w latex options.
-+ need_footer=`doxygen -h | sed -n -e '/-w latex/s=.*footer.*=true=p'`
-+
-+ # Also drop in the header file (maybe footer file) and style sheet
-+ if $need_footer; then
-+ doxygen -w latex header.tex footer.tex doxygen.sty
-+ else
-+ doxygen -w latex header.tex doxygen.sty
-+ fi
-
- echo ::
- echo :: LaTeX pages begin with
-Index: libstdc++-v3/src/c++98/ios_init.cc
-===================================================================
---- a/src/libstdc++-v3/src/c++98/ios_init.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/src/c++98/ios_init.cc (.../branches/gcc-4_9-branch)
-@@ -37,7 +37,7 @@
- {
- using namespace __gnu_cxx;
-
-- // Extern declarations for global objects in src/globals.cc.
-+ // Extern declarations for global objects in src/c++98/globals.cc.
- extern stdio_sync_filebuf<char> buf_cout_sync;
- extern stdio_sync_filebuf<char> buf_cin_sync;
- extern stdio_sync_filebuf<char> buf_cerr_sync;
-Index: libstdc++-v3/doc/xml/faq.xml
-===================================================================
---- a/src/libstdc++-v3/doc/xml/faq.xml (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/doc/xml/faq.xml (.../branches/gcc-4_9-branch)
-@@ -241,7 +241,7 @@
- </question>
- <answer xml:id="a-license.what_restrictions">
- <para>
-- None. We encourage such programs to be released as open source,
-+ None. We encourage such programs to be released as free software,
- but we won't punish you or sue you if you choose otherwise.
- </para>
- </answer>
-Index: libstdc++-v3/doc/html/faq.html
-===================================================================
---- a/src/libstdc++-v3/doc/html/faq.html (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/doc/html/faq.html (.../branches/gcc-4_9-branch)
-@@ -223,7 +223,7 @@
- </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.license.what_restrictions"></a><a id="q-license.what_restrictions"></a><p><strong>2.4.</strong></p></td><td align="left" valign="top"><p>
- I see. So, what restrictions are there on programs that use the library?
- </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.what_restrictions"></a></td><td align="left" valign="top"><p>
-- None. We encourage such programs to be released as open source,
-+ None. We encourage such programs to be released as free software,
- but we won't punish you or sue you if you choose otherwise.
- </p></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>3.1. <a href="faq.html#faq.how_to_install">How do I install libstdc++?
- </a></dt><dt>3.2. <a href="faq.html#faq.how_to_get_sources">How does one get current libstdc++ sources?
-Index: libstdc++-v3/include/debug/vector
-===================================================================
---- a/src/libstdc++-v3/include/debug/vector (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/include/debug/vector (.../branches/gcc-4_9-branch)
-@@ -602,7 +602,7 @@
- }
- else
- #if __cplusplus >= 201103L
-- return iterator(__first.base()._M_const_cast(), this);
-+ return begin() + (__first.base() - cbegin().base());
- #else
- return __first;
- #endif
-Index: libstdc++-v3/include/std/iostream
-===================================================================
---- a/src/libstdc++-v3/include/std/iostream (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/include/std/iostream (.../branches/gcc-4_9-branch)
-@@ -48,13 +48,13 @@
- *
- * The &lt;iostream&gt; header declares the eight <em>standard stream
- * objects</em>. For other declarations, see
-- * http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt11ch24.html
-+ * http://gcc.gnu.org/onlinedocs/libstdc++/manual/io.html
- * and the @link iosfwd I/O forward declarations @endlink
- *
- * They are required by default to cooperate with the global C
- * library's @c FILE streams, and to be available during program
-- * startup and termination. For more information, see the HOWTO
-- * linked to above.
-+ * startup and termination. For more information, see the section of the
-+ * manual linked to above.
- */
- //@{
- extern istream cin; /// Linked to standard input
-Index: libstdc++-v3/include/std/tuple
-===================================================================
---- a/src/libstdc++-v3/include/std/tuple (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/include/std/tuple (.../branches/gcc-4_9-branch)
-@@ -710,27 +710,28 @@
- add_cv<typename tuple_element<__i, _Tp>::type>::type type;
- };
-
-+#if __cplusplus > 201103L
-+ template<std::size_t __i, typename _Tp>
-+ using tuple_element_t = typename tuple_element<__i, _Tp>::type;
-+#endif
-+
- /// Finds the size of a given tuple type.
- template<typename _Tp>
- struct tuple_size;
-
-+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
-+ // 2313. tuple_size should always derive from integral_constant<size_t, N>
- template<typename _Tp>
- struct tuple_size<const _Tp>
-- : public integral_constant<
-- typename remove_cv<decltype(tuple_size<_Tp>::value)>::type,
-- tuple_size<_Tp>::value> { };
-+ : public integral_constant<size_t, tuple_size<_Tp>::value> { };
-
- template<typename _Tp>
- struct tuple_size<volatile _Tp>
-- : public integral_constant<
-- typename remove_cv<decltype(tuple_size<_Tp>::value)>::type,
-- tuple_size<_Tp>::value> { };
-+ : public integral_constant<size_t, tuple_size<_Tp>::value> { };
-
- template<typename _Tp>
- struct tuple_size<const volatile _Tp>
-- : public integral_constant<
-- typename remove_cv<decltype(tuple_size<_Tp>::value)>::type,
-- tuple_size<_Tp>::value> { };
-+ : public integral_constant<size_t, tuple_size<_Tp>::value> { };
-
- /// class tuple_size
- template<typename... _Elements>
-@@ -747,23 +748,23 @@
- __get_helper(const _Tuple_impl<__i, _Head, _Tail...>& __t) noexcept
- { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); }
-
-- // Return a reference (const reference, rvalue reference) to the ith element
-- // of a tuple. Any const or non-const ref elements are returned with their
-- // original type.
-+ /// Return a reference to the ith element of a tuple.
- template<std::size_t __i, typename... _Elements>
- constexpr typename __add_ref<
- typename tuple_element<__i, tuple<_Elements...>>::type
- >::type
- get(tuple<_Elements...>& __t) noexcept
-- { return __get_helper<__i>(__t); }
-+ { return std::__get_helper<__i>(__t); }
-
-+ /// Return a const reference to the ith element of a const tuple.
- template<std::size_t __i, typename... _Elements>
- constexpr typename __add_c_ref<
- typename tuple_element<__i, tuple<_Elements...>>::type
- >::type
- get(const tuple<_Elements...>& __t) noexcept
-- { return __get_helper<__i>(__t); }
-+ { return std::__get_helper<__i>(__t); }
-
-+ /// Return an rvalue reference to the ith element of a tuple rvalue.
- template<std::size_t __i, typename... _Elements>
- constexpr typename __add_r_ref<
- typename tuple_element<__i, tuple<_Elements...>>::type
-@@ -783,22 +784,26 @@
- __get_helper2(const _Tuple_impl<__i, _Head, _Tail...>& __t) noexcept
- { return _Tuple_impl<__i, _Head, _Tail...>::_M_head(__t); }
-
-+ /// Return a reference to the unique element of type _Tp of a tuple.
- template <typename _Tp, typename... _Types>
- constexpr _Tp&
- get(tuple<_Types...>& __t) noexcept
-- { return __get_helper2<_Tp>(__t); }
-+ { return std::__get_helper2<_Tp>(__t); }
-
-+ /// Return a reference to the unique element of type _Tp of a tuple rvalue.
- template <typename _Tp, typename... _Types>
- constexpr _Tp&&
- get(tuple<_Types...>&& __t) noexcept
-- { return std::move(__get_helper2<_Tp>(__t)); }
-+ { return std::forward<_Tp&&>(std::__get_helper2<_Tp>(__t)); }
-
-+ /// Return a const reference to the unique element of type _Tp of a tuple.
- template <typename _Tp, typename... _Types>
- constexpr const _Tp&
- get(const tuple<_Types...>& __t) noexcept
-- { return __get_helper2<_Tp>(__t); }
-+ { return std::__get_helper2<_Tp>(__t); }
- #endif
-
-+
- // This class helps construct the various comparison operations on tuples
- template<std::size_t __check_equal_size, std::size_t __i, std::size_t __j,
- typename _Tp, typename _Up>
-Index: libstdc++-v3/include/std/iomanip
-===================================================================
---- a/src/libstdc++-v3/include/std/iomanip (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/include/std/iomanip (.../branches/gcc-4_9-branch)
-@@ -41,7 +41,10 @@
-
- #if __cplusplus >= 201103L
- #include <locale>
-+#if __cplusplus > 201103L
-+#include <sstream> // used in quoted.
- #endif
-+#endif
-
- namespace std _GLIBCXX_VISIBILITY(default)
- {
-@@ -342,7 +345,6 @@
-
- /**
- * @brief Struct for delimited strings.
-- * The left and right delimiters can be different.
- */
- template<typename _String, typename _CharT>
- struct _Quoted_string
-@@ -364,8 +366,10 @@
- };
-
- /**
-- * @brief Inserter for delimited strings.
-- * The left and right delimiters can be different.
-+ * @brief Inserter for quoted strings.
-+ *
-+ * _GLIBCXX_RESOLVE_LIB_DEFECTS
-+ * DR 2344 quoted()'s interaction with padding is unclear
- */
- template<typename _CharT, typename _Traits>
- auto&
-@@ -372,21 +376,24 @@
- operator<<(std::basic_ostream<_CharT, _Traits>& __os,
- const _Quoted_string<const _CharT*, _CharT>& __str)
- {
-- __os << __str._M_delim;
-+ std::basic_ostringstream<_CharT, _Traits> __ostr;
-+ __ostr << __str._M_delim;
- for (const _CharT* __c = __str._M_string; *__c; ++__c)
- {
- if (*__c == __str._M_delim || *__c == __str._M_escape)
-- __os << __str._M_escape;
-- __os << *__c;
-+ __ostr << __str._M_escape;
-+ __ostr << *__c;
- }
-- __os << __str._M_delim;
-+ __ostr << __str._M_delim;
-
-- return __os;
-+ return __os << __ostr.str();
- }
-
- /**
-- * @brief Inserter for delimited strings.
-- * The left and right delimiters can be different.
-+ * @brief Inserter for quoted strings.
-+ *
-+ * _GLIBCXX_RESOLVE_LIB_DEFECTS
-+ * DR 2344 quoted()'s interaction with padding is unclear
- */
- template<typename _CharT, typename _Traits, typename _String>
- auto&
-@@ -393,16 +400,17 @@
- operator<<(std::basic_ostream<_CharT, _Traits>& __os,
- const _Quoted_string<_String, _CharT>& __str)
- {
-- __os << __str._M_delim;
-+ std::basic_ostringstream<_CharT, _Traits> __ostr;
-+ __ostr << __str._M_delim;
- for (auto& __c : __str._M_string)
- {
- if (__c == __str._M_delim || __c == __str._M_escape)
-- __os << __str._M_escape;
-- __os << __c;
-+ __ostr << __str._M_escape;
-+ __ostr << __c;
- }
-- __os << __str._M_delim;
-+ __ostr << __str._M_delim;
-
-- return __os;
-+ return __os << __ostr.str();
- }
-
- /**
-Index: libstdc++-v3/include/std/type_traits
-===================================================================
---- a/src/libstdc++-v3/include/std/type_traits (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/include/std/type_traits (.../branches/gcc-4_9-branch)
-@@ -37,6 +37,18 @@
-
- #include <bits/c++config.h>
-
-+#ifdef _GLIBCXX_USE_C99_STDINT_TR1
-+# if defined (__UINT_LEAST16_TYPE__) && defined(__UINT_LEAST32_TYPE__)
-+namespace std
-+{
-+ typedef __UINT_LEAST16_TYPE__ uint_least16_t;
-+ typedef __UINT_LEAST32_TYPE__ uint_least32_t;
-+}
-+# else
-+# include <cstdint>
-+# endif
-+#endif
-+
- namespace std _GLIBCXX_VISIBILITY(default)
- {
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-@@ -1583,6 +1595,12 @@
- struct __make_unsigned<long long>
- { typedef unsigned long long __type; };
-
-+#if defined(_GLIBCXX_USE_WCHAR_T) && !defined(__WCHAR_UNSIGNED__)
-+ template<>
-+ struct __make_unsigned<wchar_t> : __make_unsigned<__WCHAR_TYPE__>
-+ { };
-+#endif
-+
- #if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128)
- template<>
- struct __make_unsigned<__int128>
-@@ -1665,6 +1683,21 @@
- struct __make_signed<unsigned long long>
- { typedef signed long long __type; };
-
-+#if defined(_GLIBCXX_USE_WCHAR_T) && defined(__WCHAR_UNSIGNED__)
-+ template<>
-+ struct __make_signed<wchar_t> : __make_signed<__WCHAR_TYPE__>
-+ { };
-+#endif
-+
-+#ifdef _GLIBCXX_USE_C99_STDINT_TR1
-+ template<>
-+ struct __make_signed<char16_t> : __make_signed<uint_least16_t>
-+ { };
-+ template<>
-+ struct __make_signed<char32_t> : __make_signed<uint_least32_t>
-+ { };
-+#endif
-+
- #if !defined(__STRICT_ANSI__) && defined(_GLIBCXX_USE_INT128)
- template<>
- struct __make_signed<unsigned __int128>
-Index: libstdc++-v3/include/std/future
-===================================================================
---- a/src/libstdc++-v3/include/std/future (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/include/std/future (.../branches/gcc-4_9-branch)
-@@ -365,12 +365,14 @@
- void
- _M_set_result(function<_Ptr_type()> __res, bool __ignore_failure = false)
- {
-- bool __set = __ignore_failure;
-+ bool __set = false;
- // all calls to this function are serialized,
- // side-effects of invoking __res only happen once
- call_once(_M_once, &_State_baseV2::_M_do_set, this, ref(__res),
- ref(__set));
-- if (!__set)
-+ if (__set)
-+ _M_cond.notify_all();
-+ else if (!__ignore_failure)
- __throw_future_error(int(future_errc::promise_already_satisfied));
- }
-
-@@ -485,7 +487,6 @@
- lock_guard<mutex> __lock(_M_mutex);
- _M_result.swap(__res);
- }
-- _M_cond.notify_all();
- __set = true;
- }
-
-@@ -495,6 +496,7 @@
- virtual void _M_complete_async() { }
-
- // Return true if state contains a deferred function.
-+ // Caller must own _M_mutex.
- virtual bool _M_has_deferred() const { return false; }
- };
-
-@@ -1007,22 +1009,25 @@
- void
- set_value(const _Res& __r)
- {
-+ auto __future = _M_future;
- auto __setter = _State::__setter(this, __r);
-- _M_future->_M_set_result(std::move(__setter));
-+ __future->_M_set_result(std::move(__setter));
- }
-
- void
- set_value(_Res&& __r)
- {
-+ auto __future = _M_future;
- auto __setter = _State::__setter(this, std::move(__r));
-- _M_future->_M_set_result(std::move(__setter));
-+ __future->_M_set_result(std::move(__setter));
- }
-
- void
- set_exception(exception_ptr __p)
- {
-+ auto __future = _M_future;
- auto __setter = _State::__setter(__p, this);
-- _M_future->_M_set_result(std::move(__setter));
-+ __future->_M_set_result(std::move(__setter));
- }
- };
-
-@@ -1105,15 +1110,17 @@
- void
- set_value(_Res& __r)
- {
-+ auto __future = _M_future;
- auto __setter = _State::__setter(this, __r);
-- _M_future->_M_set_result(std::move(__setter));
-+ __future->_M_set_result(std::move(__setter));
- }
-
- void
- set_exception(exception_ptr __p)
- {
-+ auto __future = _M_future;
- auto __setter = _State::__setter(__p, this);
-- _M_future->_M_set_result(std::move(__setter));
-+ __future->_M_set_result(std::move(__setter));
- }
- };
-
-@@ -1190,8 +1197,9 @@
- void
- set_exception(exception_ptr __p)
- {
-+ auto __future = _M_future;
- auto __setter = _State::__setter(__p, this);
-- _M_future->_M_set_result(std::move(__setter));
-+ __future->_M_set_result(std::move(__setter));
- }
- };
-
-@@ -1217,8 +1225,9 @@
- inline void
- promise<void>::set_value()
- {
-+ auto __future = _M_future;
- auto __setter = _State::__setter(this);
-- _M_future->_M_set_result(std::move(__setter));
-+ __future->_M_set_result(std::move(__setter));
- }
-
-
-Index: libstdc++-v3/include/std/functional
-===================================================================
---- a/src/libstdc++-v3/include/std/functional (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/include/std/functional (.../branches/gcc-4_9-branch)
-@@ -2149,8 +2149,15 @@
- using _Invoke = decltype(__callable_functor(std::declval<_Functor&>())
- (std::declval<_ArgTypes>()...) );
-
-+ // Used so the return type convertibility checks aren't done when
-+ // performing overload resolution for copy construction/assignment.
-+ template<typename _Tp>
-+ using _NotSelf = __not_<is_same<_Tp, function>>;
-+
- template<typename _Functor>
-- using _Callable = __check_func_return_type<_Invoke<_Functor>, _Res>;
-+ using _Callable
-+ = __and_<_NotSelf<_Functor>,
-+ __check_func_return_type<_Invoke<_Functor>, _Res>>;
-
- template<typename _Cond, typename _Tp>
- using _Requires = typename enable_if<_Cond::value, _Tp>::type;
-@@ -2291,7 +2298,7 @@
- * reference_wrapper<F>, this function will not throw.
- */
- template<typename _Functor>
-- _Requires<_Callable<_Functor>, function&>
-+ _Requires<_Callable<typename decay<_Functor>::type>, function&>
- operator=(_Functor&& __f)
- {
- function(std::forward<_Functor>(__f)).swap(*this);
-Index: libstdc++-v3/include/experimental/optional
-===================================================================
---- a/src/libstdc++-v3/include/experimental/optional (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/include/experimental/optional (.../branches/gcc-4_9-branch)
-@@ -736,12 +736,12 @@
- template<typename _Tp>
- constexpr bool
- operator!=(const optional<_Tp>& __lhs, _Tp const& __rhs)
-- { return !__lhs || *__lhs != __rhs; }
-+ { return !__lhs || !(*__lhs == __rhs); }
-
- template<typename _Tp>
- constexpr bool
- operator!=(const _Tp& __lhs, const optional<_Tp>& __rhs)
-- { return !__rhs || __lhs != *__rhs; }
-+ { return !__rhs || !(__lhs == *__rhs); }
-
- template<typename _Tp>
- constexpr bool
-Index: libstdc++-v3/include/bits/hashtable.h
-===================================================================
---- a/src/libstdc++-v3/include/bits/hashtable.h (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/include/bits/hashtable.h (.../branches/gcc-4_9-branch)
-@@ -316,14 +316,49 @@
- size_type _M_element_count;
- _RehashPolicy _M_rehash_policy;
-
-+ // A single bucket used when only need for 1 bucket. Especially
-+ // interesting in move semantic to leave hashtable with only 1 buckets
-+ // which is not allocated so that we can have those operations noexcept
-+ // qualified.
-+ // Note that we can't leave hashtable with 0 bucket without adding
-+ // numerous checks in the code to avoid 0 modulus.
-+ __bucket_type _M_single_bucket;
-+
-+ bool
-+ _M_uses_single_bucket(__bucket_type* __bkts) const
-+ { return __builtin_expect(_M_buckets == &_M_single_bucket, false); }
-+
-+ bool
-+ _M_uses_single_bucket() const
-+ { return _M_uses_single_bucket(_M_buckets); }
-+
- __hashtable_alloc&
- _M_base_alloc() { return *this; }
-
-- using __hashtable_alloc::_M_deallocate_buckets;
-+ __bucket_type*
-+ _M_allocate_buckets(size_type __n)
-+ {
-+ if (__builtin_expect(__n == 1, false))
-+ {
-+ _M_single_bucket = nullptr;
-+ return &_M_single_bucket;
-+ }
-
-+ return __hashtable_alloc::_M_allocate_buckets(__n);
-+ }
-+
- void
-+ _M_deallocate_buckets(__bucket_type* __bkts, size_type __n)
-+ {
-+ if (_M_uses_single_bucket(__bkts))
-+ return;
-+
-+ __hashtable_alloc::_M_deallocate_buckets(__bkts, __n);
-+ }
-+
-+ void
- _M_deallocate_buckets()
-- { this->_M_deallocate_buckets(_M_buckets, _M_bucket_count); }
-+ { _M_deallocate_buckets(_M_buckets, _M_bucket_count); }
-
- // Gets bucket begin, deals with the fact that non-empty buckets contain
- // their before begin node.
-@@ -703,11 +738,7 @@
-
- size_type
- erase(const key_type& __k)
-- {
-- if (__builtin_expect(_M_bucket_count == 0, false))
-- return 0;
-- return _M_erase(__unique_keys(), __k);
-- }
-+ { return _M_erase(__unique_keys(), __k); }
-
- iterator
- erase(const_iterator, const_iterator);
-@@ -768,7 +799,7 @@
- _M_rehash_policy()
- {
- _M_bucket_count = _M_rehash_policy._M_next_bkt(__bucket_hint);
-- _M_buckets = this->_M_allocate_buckets(_M_bucket_count);
-+ _M_buckets = _M_allocate_buckets(_M_bucket_count);
- }
-
- template<typename _Key, typename _Value,
-@@ -796,7 +827,7 @@
- std::max(_M_rehash_policy._M_bkt_for_elements(__nb_elems),
- __bucket_hint));
-
-- _M_buckets = this->_M_allocate_buckets(_M_bucket_count);
-+ _M_buckets = _M_allocate_buckets(_M_bucket_count);
- __try
- {
- for (; __f != __l; ++__f)
-@@ -833,9 +864,9 @@
- {
- // Replacement allocator cannot free existing storage.
- this->_M_deallocate_nodes(_M_begin());
-- if (__builtin_expect(_M_bucket_count != 0, true))
-- _M_deallocate_buckets();
-- _M_reset();
-+ _M_before_begin._M_nxt = nullptr;
-+ _M_deallocate_buckets();
-+ _M_buckets = nullptr;
- std::__alloc_on_copy(__this_alloc, __that_alloc);
- __hashtable_base::operator=(__ht);
- _M_bucket_count = __ht._M_bucket_count;
-@@ -867,7 +898,7 @@
- if (_M_bucket_count != __ht._M_bucket_count)
- {
- __former_buckets = _M_buckets;
-- _M_buckets = this->_M_allocate_buckets(__ht._M_bucket_count);
-+ _M_buckets = _M_allocate_buckets(__ht._M_bucket_count);
- _M_bucket_count = __ht._M_bucket_count;
- }
- else
-@@ -885,8 +916,7 @@
- [&__roan](const __node_type* __n)
- { return __roan(__n->_M_v()); });
- if (__former_buckets)
-- this->_M_deallocate_buckets(__former_buckets,
-- __former_bucket_count);
-+ _M_deallocate_buckets(__former_buckets, __former_bucket_count);
- }
- __catch(...)
- {
-@@ -917,7 +947,7 @@
- {
- __bucket_type* __buckets = nullptr;
- if (!_M_buckets)
-- _M_buckets = __buckets = this->_M_allocate_buckets(_M_bucket_count);
-+ _M_buckets = __buckets = _M_allocate_buckets(_M_bucket_count);
-
- __try
- {
-@@ -964,8 +994,9 @@
- _M_reset() noexcept
- {
- _M_rehash_policy._M_reset();
-- _M_bucket_count = 0;
-- _M_buckets = nullptr;
-+ _M_bucket_count = 1;
-+ _M_single_bucket = nullptr;
-+ _M_buckets = &_M_single_bucket;
- _M_before_begin._M_nxt = nullptr;
- _M_element_count = 0;
- }
-@@ -980,12 +1011,16 @@
- _M_move_assign(_Hashtable&& __ht, std::true_type)
- {
- this->_M_deallocate_nodes(_M_begin());
-- if (__builtin_expect(_M_bucket_count != 0, true))
-- _M_deallocate_buckets();
--
-+ _M_deallocate_buckets();
- __hashtable_base::operator=(std::move(__ht));
- _M_rehash_policy = __ht._M_rehash_policy;
-- _M_buckets = __ht._M_buckets;
-+ if (!__ht._M_uses_single_bucket())
-+ _M_buckets = __ht._M_buckets;
-+ else
-+ {
-+ _M_buckets = &_M_single_bucket;
-+ _M_single_bucket = __ht._M_single_bucket;
-+ }
- _M_bucket_count = __ht._M_bucket_count;
- _M_before_begin._M_nxt = __ht._M_before_begin._M_nxt;
- _M_element_count = __ht._M_element_count;
-@@ -1019,7 +1054,7 @@
- if (_M_bucket_count != __ht._M_bucket_count)
- {
- __former_buckets = _M_buckets;
-- _M_buckets = this->_M_allocate_buckets(__ht._M_bucket_count);
-+ _M_buckets = _M_allocate_buckets(__ht._M_bucket_count);
- _M_bucket_count = __ht._M_bucket_count;
- }
- else
-@@ -1093,10 +1128,18 @@
- _M_element_count(__ht._M_element_count),
- _M_rehash_policy(__ht._M_rehash_policy)
- {
-+ // Update, if necessary, buckets if __ht is using its single bucket.
-+ if (__ht._M_uses_single_bucket())
-+ {
-+ _M_buckets = &_M_single_bucket;
-+ _M_single_bucket = __ht._M_single_bucket;
-+ }
-+
- // Update, if necessary, bucket pointing to before begin that hasn't
- // moved.
- if (_M_begin())
- _M_buckets[_M_bucket_index(_M_begin())] = &_M_before_begin;
-+
- __ht._M_reset();
- }
-
-@@ -1139,7 +1182,14 @@
- {
- if (__ht._M_node_allocator() == this->_M_node_allocator())
- {
-- _M_buckets = __ht._M_buckets;
-+ if (__ht._M_uses_single_bucket())
-+ {
-+ _M_buckets = &_M_single_bucket;
-+ _M_single_bucket = __ht._M_single_bucket;
-+ }
-+ else
-+ _M_buckets = __ht._M_buckets;
-+
- _M_before_begin._M_nxt = __ht._M_before_begin._M_nxt;
- // Update, if necessary, bucket pointing to before begin that hasn't
- // moved.
-@@ -1189,15 +1239,34 @@
-
- std::__alloc_on_swap(this->_M_node_allocator(), __x._M_node_allocator());
- std::swap(_M_rehash_policy, __x._M_rehash_policy);
-- std::swap(_M_buckets, __x._M_buckets);
-+
-+ // Deal properly with potentially moved instances.
-+ if (this->_M_uses_single_bucket())
-+ {
-+ if (!__x._M_uses_single_bucket())
-+ {
-+ _M_buckets = __x._M_buckets;
-+ __x._M_buckets = &__x._M_single_bucket;
-+ }
-+ }
-+ else if (__x._M_uses_single_bucket())
-+ {
-+ __x._M_buckets = _M_buckets;
-+ _M_buckets = &_M_single_bucket;
-+ }
-+ else
-+ std::swap(_M_buckets, __x._M_buckets);
-+
- std::swap(_M_bucket_count, __x._M_bucket_count);
- std::swap(_M_before_begin._M_nxt, __x._M_before_begin._M_nxt);
- std::swap(_M_element_count, __x._M_element_count);
-+ std::swap(_M_single_bucket, __x._M_single_bucket);
-
- // Fix buckets containing the _M_before_begin pointers that can't be
- // swapped.
- if (_M_begin())
- _M_buckets[_M_bucket_index(_M_begin())] = &_M_before_begin;
-+
- if (__x._M_begin())
- __x._M_buckets[__x._M_bucket_index(__x._M_begin())]
- = &__x._M_before_begin;
-@@ -1230,9 +1299,6 @@
- _H1, _H2, _Hash, _RehashPolicy, _Traits>::
- find(const key_type& __k)
- {
-- if (__builtin_expect(_M_bucket_count == 0, false))
-- return end();
--
- __hash_code __code = this->_M_hash_code(__k);
- std::size_t __n = _M_bucket_index(__k, __code);
- __node_type* __p = _M_find_node(__n, __k, __code);
-@@ -1250,9 +1316,6 @@
- _H1, _H2, _Hash, _RehashPolicy, _Traits>::
- find(const key_type& __k) const
- {
-- if (__builtin_expect(_M_bucket_count == 0, false))
-- return end();
--
- __hash_code __code = this->_M_hash_code(__k);
- std::size_t __n = _M_bucket_index(__k, __code);
- __node_type* __p = _M_find_node(__n, __k, __code);
-@@ -1270,9 +1333,6 @@
- _H1, _H2, _Hash, _RehashPolicy, _Traits>::
- count(const key_type& __k) const
- {
-- if (__builtin_expect(_M_bucket_count == 0, false))
-- return 0;
--
- __hash_code __code = this->_M_hash_code(__k);
- std::size_t __n = _M_bucket_index(__k, __code);
- __node_type* __p = _M_bucket_begin(__n);
-@@ -1287,7 +1347,7 @@
- else if (__result)
- // All equivalent values are next to each other, if we
- // found a non-equivalent value after an equivalent one it
-- // means that we won't find any more equivalent values.
-+ // means that we won't find any new equivalent value.
- break;
- if (!__p->_M_nxt || _M_bucket_index(__p->_M_next()) != __n)
- break;
-@@ -1311,9 +1371,6 @@
- _H1, _H2, _Hash, _RehashPolicy, _Traits>::
- equal_range(const key_type& __k)
- {
-- if (__builtin_expect(_M_bucket_count == 0, false))
-- return std::make_pair(end(), end());
--
- __hash_code __code = this->_M_hash_code(__k);
- std::size_t __n = _M_bucket_index(__k, __code);
- __node_type* __p = _M_find_node(__n, __k, __code);
-@@ -1347,9 +1404,6 @@
- _H1, _H2, _Hash, _RehashPolicy, _Traits>::
- equal_range(const key_type& __k) const
- {
-- if (__builtin_expect(_M_bucket_count == 0, false))
-- return std::make_pair(end(), end());
--
- __hash_code __code = this->_M_hash_code(__k);
- std::size_t __n = _M_bucket_index(__k, __code);
- __node_type* __p = _M_find_node(__n, __k, __code);
-@@ -1944,7 +1998,7 @@
- _H1, _H2, _Hash, _RehashPolicy, _Traits>::
- _M_rehash_aux(size_type __n, std::true_type)
- {
-- __bucket_type* __new_buckets = this->_M_allocate_buckets(__n);
-+ __bucket_type* __new_buckets = _M_allocate_buckets(__n);
- __node_type* __p = _M_begin();
- _M_before_begin._M_nxt = nullptr;
- std::size_t __bbegin_bkt = 0;
-@@ -1969,8 +2023,7 @@
- __p = __next;
- }
-
-- if (__builtin_expect(_M_bucket_count != 0, true))
-- _M_deallocate_buckets();
-+ _M_deallocate_buckets();
- _M_bucket_count = __n;
- _M_buckets = __new_buckets;
- }
-@@ -1986,7 +2039,7 @@
- _H1, _H2, _Hash, _RehashPolicy, _Traits>::
- _M_rehash_aux(size_type __n, std::false_type)
- {
-- __bucket_type* __new_buckets = this->_M_allocate_buckets(__n);
-+ __bucket_type* __new_buckets = _M_allocate_buckets(__n);
-
- __node_type* __p = _M_begin();
- _M_before_begin._M_nxt = nullptr;
-@@ -2060,8 +2113,7 @@
- __new_buckets[__next_bkt] = __prev_p;
- }
-
-- if (__builtin_expect(_M_bucket_count != 0, true))
-- _M_deallocate_buckets();
-+ _M_deallocate_buckets();
- _M_bucket_count = __n;
- _M_buckets = __new_buckets;
- }
-Index: libstdc++-v3/include/bits/regex_compiler.h
-===================================================================
---- a/src/libstdc++-v3/include/bits/regex_compiler.h (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/include/bits/regex_compiler.h (.../branches/gcc-4_9-branch)
-@@ -369,8 +369,9 @@
- #endif
- }
-
-+ // __neg should be true for \D, \S and \W only.
- void
-- _M_add_character_class(const _StringT& __s)
-+ _M_add_character_class(const _StringT& __s, bool __neg)
- {
- auto __mask = _M_traits.lookup_classname(__s.data(),
- __s.data() + __s.size(),
-@@ -377,7 +378,10 @@
- __icase);
- if (__mask == 0)
- __throw_regex_error(regex_constants::error_ctype);
-- _M_class_set |= __mask;
-+ if (!__neg)
-+ _M_class_set |= __mask;
-+ else
-+ _M_neg_class_set.push_back(__mask);
- #ifdef _GLIBCXX_DEBUG
- _M_is_ready = false;
- #endif
-@@ -387,7 +391,7 @@
- _M_make_range(_CharT __l, _CharT __r)
- {
- _M_range_set.push_back(make_pair(_M_translator._M_transform(__l),
-- _M_translator._M_transform(__r)));
-+ _M_translator._M_transform(__r)));
- #ifdef _GLIBCXX_DEBUG
- _M_is_ready = false;
- #endif
-@@ -435,6 +439,7 @@
- std::vector<_CharT> _M_char_set;
- std::vector<_StringT> _M_equiv_set;
- std::vector<pair<_StrTransT, _StrTransT>> _M_range_set;
-+ std::vector<_CharClassT> _M_neg_class_set;
- _CharClassT _M_class_set;
- _TransT _M_translator;
- const _TraitsT& _M_traits;
-Index: libstdc++-v3/include/bits/regex_automaton.tcc
-===================================================================
---- a/src/libstdc++-v3/include/bits/regex_automaton.tcc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/include/bits/regex_automaton.tcc (.../branches/gcc-4_9-branch)
-@@ -35,7 +35,7 @@
- _GLIBCXX_BEGIN_NAMESPACE_VERSION
-
- #ifdef _GLIBCXX_DEBUG
-- std::ostream&
-+ inline std::ostream&
- _State_base::_M_print(std::ostream& ostr) const
- {
- switch (_M_opcode)
-@@ -66,7 +66,7 @@
- }
-
- // Prints graphviz dot commands for state.
-- std::ostream&
-+ inline std::ostream&
- _State_base::_M_dot(std::ostream& __ostr, _StateIdT __id) const
- {
- switch (_M_opcode)
-@@ -197,20 +197,18 @@
- // _M_insert_state() never return -1
- auto __id = _M_nfa._M_insert_state(__dup);
- __m[__u] = __id;
-+ if (__dup._M_opcode == _S_opcode_alternative
-+ || __dup._M_opcode == _S_opcode_subexpr_lookahead)
-+ if (__dup._M_alt != _S_invalid_state_id && __m[__dup._M_alt] == -1)
-+ __stack.push(__dup._M_alt);
- if (__u == _M_end)
- continue;
- if (__dup._M_next != _S_invalid_state_id && __m[__dup._M_next] == -1)
- __stack.push(__dup._M_next);
-- if (__dup._M_opcode == _S_opcode_alternative
-- || __dup._M_opcode == _S_opcode_subexpr_lookahead)
-- if (__dup._M_alt != _S_invalid_state_id && __m[__dup._M_alt] == -1)
-- __stack.push(__dup._M_alt);
- }
-- long __size = static_cast<long>(__m.size());
-- for (long __k = 0; __k < __size; __k++)
-+ for (auto __v : __m)
- {
-- long __v;
-- if ((__v = __m[__k]) == -1)
-+ if (__v == -1)
- continue;
- auto& __ref = _M_nfa[__v];
- if (__ref._M_next != _S_invalid_state_id)
-Index: libstdc++-v3/include/bits/stl_vector.h
-===================================================================
---- a/src/libstdc++-v3/include/bits/stl_vector.h (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/include/bits/stl_vector.h (.../branches/gcc-4_9-branch)
-@@ -1051,7 +1051,7 @@
- insert(const_iterator __position, size_type __n, const value_type& __x)
- {
- difference_type __offset = __position - cbegin();
-- _M_fill_insert(__position._M_const_cast(), __n, __x);
-+ _M_fill_insert(begin() + __offset, __n, __x);
- return begin() + __offset;
- }
- #else
-@@ -1096,7 +1096,7 @@
- _InputIterator __last)
- {
- difference_type __offset = __position - cbegin();
-- _M_insert_dispatch(__position._M_const_cast(),
-+ _M_insert_dispatch(begin() + __offset,
- __first, __last, __false_type());
- return begin() + __offset;
- }
-@@ -1144,10 +1144,11 @@
- iterator
- #if __cplusplus >= 201103L
- erase(const_iterator __position)
-+ { return _M_erase(begin() + (__position - cbegin())); }
- #else
- erase(iterator __position)
-+ { return _M_erase(__position); }
- #endif
-- { return _M_erase(__position._M_const_cast()); }
-
- /**
- * @brief Remove a range of elements.
-@@ -1170,10 +1171,15 @@
- iterator
- #if __cplusplus >= 201103L
- erase(const_iterator __first, const_iterator __last)
-+ {
-+ const auto __beg = begin();
-+ const auto __cbeg = cbegin();
-+ return _M_erase(__beg + (__first - __cbeg), __beg + (__last - __cbeg));
-+ }
- #else
- erase(iterator __first, iterator __last)
-+ { return _M_erase(__first, __last); }
- #endif
-- { return _M_erase(__first._M_const_cast(), __last._M_const_cast()); }
-
- /**
- * @brief Swaps data with another %vector.
-Index: libstdc++-v3/include/bits/regex_executor.tcc
-===================================================================
---- a/src/libstdc++-v3/include/bits/regex_executor.tcc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/include/bits/regex_executor.tcc (.../branches/gcc-4_9-branch)
-@@ -120,10 +120,10 @@
- if (_M_match_queue->empty())
- break;
- _M_visited->assign(_M_visited->size(), false);
-- auto _M_old_queue = std::move(*_M_match_queue);
-- for (auto __task : _M_old_queue)
-+ auto __old_queue = std::move(*_M_match_queue);
-+ for (auto& __task : __old_queue)
- {
-- _M_cur_results = __task.second;
-+ _M_cur_results = std::move(__task.second);
- _M_dfs<__match_mode>(__task.first);
- }
- if (!__match_mode)
-Index: libstdc++-v3/include/bits/stl_iterator.h
-===================================================================
---- a/src/libstdc++-v3/include/bits/stl_iterator.h (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/include/bits/stl_iterator.h (.../branches/gcc-4_9-branch)
-@@ -736,21 +736,6 @@
- _Container>::__type>& __i) _GLIBCXX_NOEXCEPT
- : _M_current(__i.base()) { }
-
--#if __cplusplus >= 201103L
-- __normal_iterator<typename _Container::pointer, _Container>
-- _M_const_cast() const noexcept
-- {
-- using _PTraits = std::pointer_traits<typename _Container::pointer>;
-- return __normal_iterator<typename _Container::pointer, _Container>
-- (_PTraits::pointer_to(const_cast<typename _PTraits::element_type&>
-- (*_M_current)));
-- }
--#else
-- __normal_iterator
-- _M_const_cast() const
-- { return *this; }
--#endif
--
- // Forward iterator requirements
- reference
- operator*() const _GLIBCXX_NOEXCEPT
-Index: libstdc++-v3/include/bits/vector.tcc
-===================================================================
---- a/src/libstdc++-v3/include/bits/vector.tcc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/include/bits/vector.tcc (.../branches/gcc-4_9-branch)
-@@ -121,14 +121,17 @@
- else
- {
- #if __cplusplus >= 201103L
-+ const auto __pos = begin() + (__position - cbegin());
- if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
- {
- _Tp __x_copy = __x;
-- _M_insert_aux(__position._M_const_cast(), std::move(__x_copy));
-+ _M_insert_aux(__pos, std::move(__x_copy));
- }
- else
-+ _M_insert_aux(__pos, __x);
-+#else
-+ _M_insert_aux(__position, __x);
- #endif
-- _M_insert_aux(__position._M_const_cast(), __x);
- }
- return iterator(this->_M_impl._M_start + __n);
- }
-@@ -307,7 +310,7 @@
- ++this->_M_impl._M_finish;
- }
- else
-- _M_insert_aux(__position._M_const_cast(),
-+ _M_insert_aux(begin() + (__position - cbegin()),
- std::forward<_Args>(__args)...);
- return iterator(this->_M_impl._M_start + __n);
- }
-Index: libstdc++-v3/include/bits/shared_ptr_base.h
-===================================================================
---- a/src/libstdc++-v3/include/bits/shared_ptr_base.h (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/include/bits/shared_ptr_base.h (.../branches/gcc-4_9-branch)
-@@ -871,7 +871,7 @@
- : _M_ptr(__p), _M_refcount(__p)
- {
- __glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>)
-- static_assert( !is_void<_Tp>::value, "incomplete type" );
-+ static_assert( !is_void<_Tp1>::value, "incomplete type" );
- static_assert( sizeof(_Tp1) > 0, "incomplete type" );
- __enable_shared_from_this_helper(_M_refcount, __p, __p);
- }
-Index: libstdc++-v3/include/bits/stl_tree.h
-===================================================================
---- a/src/libstdc++-v3/include/bits/stl_tree.h (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/include/bits/stl_tree.h (.../branches/gcc-4_9-branch)
-@@ -526,11 +526,11 @@
-
- _Link_type
- _M_end() _GLIBCXX_NOEXCEPT
-- { return static_cast<_Link_type>(&this->_M_impl._M_header); }
-+ { return reinterpret_cast<_Link_type>(&this->_M_impl._M_header); }
-
- _Const_Link_type
- _M_end() const _GLIBCXX_NOEXCEPT
-- { return static_cast<_Const_Link_type>(&this->_M_impl._M_header); }
-+ { return reinterpret_cast<_Const_Link_type>(&this->_M_impl._M_header); }
-
- static const_reference
- _S_value(_Const_Link_type __x)
-@@ -1073,6 +1073,7 @@
- _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::
- _M_move_assign(_Rb_tree& __x)
- {
-+ _M_impl._M_key_compare = __x._M_impl._M_key_compare;
- if (_Alloc_traits::_S_propagate_on_move_assign()
- || _Alloc_traits::_S_always_equal()
- || _M_get_Node_allocator() == __x._M_get_Node_allocator())
-Index: libstdc++-v3/include/bits/regex_compiler.tcc
-===================================================================
---- a/src/libstdc++-v3/include/bits/regex_compiler.tcc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/include/bits/regex_compiler.tcc (.../branches/gcc-4_9-branch)
-@@ -397,7 +397,7 @@
- _GLIBCXX_DEBUG_ASSERT(_M_value.size() == 1);
- _BracketMatcher<_TraitsT, __icase, __collate> __matcher
- (_M_ctype.is(_CtypeT::upper, _M_value[0]), _M_traits);
-- __matcher._M_add_character_class(_M_value);
-+ __matcher._M_add_character_class(_M_value, false);
- __matcher._M_ready();
- _M_stack.push(_StateSeqT(_M_nfa,
- _M_nfa._M_insert_matcher(std::move(__matcher))));
-@@ -428,7 +428,7 @@
- else if (_M_match_token(_ScannerT::_S_token_equiv_class_name))
- __matcher._M_add_equivalence_class(_M_value);
- else if (_M_match_token(_ScannerT::_S_token_char_class_name))
-- __matcher._M_add_character_class(_M_value);
-+ __matcher._M_add_character_class(_M_value, false);
- else if (_M_try_char()) // [a
- {
- auto __ch = _M_value[0];
-@@ -451,6 +451,10 @@
- }
- __matcher._M_add_char(__ch);
- }
-+ else if (_M_match_token(_ScannerT::_S_token_quoted_class))
-+ __matcher._M_add_character_class(_M_value,
-+ _M_ctype.is(_CtypeT::upper,
-+ _M_value[0]));
- else
- __throw_regex_error(regex_constants::error_brack);
- }
-@@ -527,6 +531,15 @@
- _M_traits.transform_primary(&__ch, &__ch+1))
- != _M_equiv_set.end())
- __ret = true;
-+ else
-+ {
-+ for (auto& __it : _M_neg_class_set)
-+ if (!_M_traits.isctype(__ch, __it))
-+ {
-+ __ret = true;
-+ break;
-+ }
-+ }
- }
- if (_M_is_non_matching)
- return !__ret;
-Index: libstdc++-v3/include/tr2/bool_set
-===================================================================
---- a/src/libstdc++-v3/include/tr2/bool_set (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/include/tr2/bool_set (.../branches/gcc-4_9-branch)
-@@ -44,7 +44,7 @@
- * bool_set
- *
- * See N2136, Bool_set: multi-valued logic
-- * by Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion.
-+ * by Hervé Brönnimann, Guillaume Melquiond, Sylvain Pion.
- *
- * The implicit conversion to bool is slippery! I may use the new
- * explicit conversion. This has been specialized in the language
-Index: libstdc++-v3/ChangeLog
-===================================================================
---- a/src/libstdc++-v3/ChangeLog (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/ChangeLog (.../branches/gcc-4_9-branch)
-@@ -1,3 +1,197 @@
-+2014-06-23 Jonathan Wakely <jwakely@redhat.com>
-+
-+ PR libstdc++/61532
-+ * testsuite/20_util/make_signed/requirements/typedefs-1.cc: Do not
-+ apply the signed specifier to wchar_t.
-+ * testsuite/20_util/make_signed/requirements/typedefs-2.cc: Likewise.
-+ * testsuite/20_util/make_unsigned/requirements/typedefs-1.cc: Do not
-+ apply the unsigned specifier to wchar_t.
-+ * testsuite/20_util/make_unsigned/requirements/typedefs-2.cc:
-+ Likewise.
-+
-+2014-06-13 Jonathan Wakely <jwakely@redhat.com>
-+
-+ Backport from mainline
-+ PR libstdc++/60326
-+ * include/std/type_traits (__make_unsigned, __make_signed): Define
-+ specializations for wchar_t, char16_t and char32_t.
-+ * testsuite/20_util/make_signed/requirements/typedefs-4.cc: New.
-+ * testsuite/20_util/make_unsigned/requirements/typedefs-1.cc: Correct
-+ test for make_unsigned<volatile wchar_t>.
-+ * testsuite/20_util/make_unsigned/requirements/typedefs-2.cc:
-+ Likewise.
-+ * testsuite/20_util/declval/requirements/1_neg.cc: Adjust dg-error
-+ line number.
-+ * testsuite/20_util/make_signed/requirements/typedefs_neg.cc:
-+ Likewise.
-+ * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc:
-+ Likewise.
-+
-+ Backport from mainline
-+ PR libstdc++/61269
-+ * include/std/type_traits: Move include outside namespace std.
-+ * testsuite/20_util/declval/requirements/1_neg.cc: Adjust dg-error.
-+ * testsuite/20_util/make_signed/requirements/typedefs_neg.cc: Likewise.
-+ * testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc:
-+ Likewise.
-+
-+ * include/std/tuple (tuple_size<cv _Tp>): Implement LWG 2313.
-+ (get<_Tp>(tuple<_Types...>&&)): Use forward instead of move.
-+ * testsuite/20_util/tuple/element_access/get_by_type.cc: Test rvalues.
-+
-+2014-06-07 Ed Smith-Rowland <3dw4rd@verizon.net>
-+
-+ Backport from mainline
-+ DR 2344 - std::quoted doesn't respect padding
-+ * include/std/iomanip: Allow for padding in quoted inserters.
-+ * testsuite/27_io/manipulators/standard/char/dr2344.cc: New.
-+ * testsuite/27_io/manipulators/standard/wchar_t/dr2344.cc: New.
-+
-+2014-06-03 Jonathan Wakely <jwakely@redhat.com>
-+
-+ * include/bits/regex_executor.tcc (_Executor<>::_M_main): Move instead
-+ of copying.
-+
-+2014-06-03 Jonathan Wakely <jwakely@redhat.com>
-+
-+ Backport from mainline
-+ 2014-04-15 Jonathan Wakely <jwakely@redhat.com>
-+
-+ PR libstdc++/60734
-+ * include/bits/stl_tree.h (_Rb_tree::_M_end): Fix invalid cast.
-+
-+ Backport from mainline
-+ 2014-04-24 Tim Shen <timshen91@gmail.com>
-+
-+ * include/bits/regex_automaton.tcc (_StateSeq<>::_M_clone()):
-+ Do _M_alt before _M_next.
-+ * testsuite/28_regex/basic_regex/multiple_quantifiers.cc: Add testcases.
-+
-+ Backport from mainline
-+ 2014-05-20 Tim Shen <timshen91@gmail.com>
-+
-+ PR libstdc++/61227
-+ * include/bits/regex_compiler.h
-+ (_BracketMatcher<>::_M_add_character_class): Add negative character
-+ class support.
-+ * include/bits/regex_compiler.tcc (_BracketMatcher<>::_M_apply):
-+ Likewise.
-+ * testsuite/28_regex/algorithms/regex_match/ecma/char/quoted_char.cc:
-+ Add more testcases.
-+
-+2014-05-29 Jonathan Wakely <jwakely@redhat.com>
-+
-+ * include/tr2/bool_set: Use UTF-8 for accented characters.
-+ * scripts/run_doxygen: Handle Doxygen 1.8.x change.
-+
-+2014-05-27 Jonathan Wakely <jwakely@redhat.com>
-+
-+ PR libstdc++/61329
-+ * include/bits/regex_automaton.tcc (_State_base::_M_print): Add
-+ inline specifier.
-+ (_State_base::_M_dot): Likewise.
-+
-+2014-05-23 François Dumont <fdumont@gcc.gnu.org>
-+
-+ PR libstdc++/61143
-+ * include/bits/hashtable.h: Fix move semantic to leave hashtable in a
-+ usable state.
-+ * testsuite/23_containers/unordered_set/61143.cc: New.
-+ * testsuite/23_containers/unordered_set/modifiers/swap.cc: New.
-+
-+2014-05-17 Jonathan Wakely <jwakely@redhat.com>
-+
-+ PR libstdc++/60966
-+ * include/std/future (__future_base::_State_baseV2::_M_set_result):
-+ Signal condition variable after call_once returns.
-+ (__future_base::_State_baseV2::_M_do_set): Do not signal here.
-+ (promise::set_value, promise::set_exception): Increment the reference
-+ count on the shared state until the function returns.
-+ * testsuite/30_threads/promise/60966.cc: New.
-+
-+2014-05-08 Joshua Gay <jgay@gnu.org>
-+
-+ PR libstdc++/61117
-+ * doc/xml/faq.xml (faq.license.what_restrictions): Replace "open
-+ source" with "free software".
-+ * doc/html/faq.html: Likewise.
-+
-+2014-05-08 Jonathan Wakely <jwakely@redhat.com>
-+
-+ * include/std/iostream: Fix URL in comment.
-+ * src/c++98/ios_init.cc: Fix path in comment.
-+
-+2014-05-07 Jonathan Wakely <jwakely@redhat.com>
-+
-+ PR libstdc++/61023
-+ * include/bits/stl_tree.h (_Rb_tree::_M_move_assign): Copy the
-+ comparison function.
-+ * testsuite/23_containers/set/cons/61023.cc: New.
-+
-+ PR libstdc++/61086
-+ * include/bits/stl_iterator.h (__normal_iterator::_M_const_cast):
-+ Remove.
-+ * include/bits/stl_vector.h (vector::insert, vector::erase): Use
-+ arithmetic to obtain a mutable iterator from const_iterator.
-+ * include/bits/vector.tcc (vector::insert): Likewise.
-+ * include/debug/vector (vector::erase): Likewise.
-+ * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc:
-+ Adjust dg-error line number.
-+ * testsuite/23_containers/vector/requirements/dr438/
-+ constructor_1_neg.cc: Likewise.
-+ * testsuite/23_containers/vector/requirements/dr438/
-+ constructor_2_neg.cc: Likewise.
-+ * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc:
-+ Likewise.
-+
-+2014-05-06 Jonathan Wakely <jwakely@redhat.com>
-+
-+ Backport from mainline
-+ 2014-04-15 Jonathan Wakely <jwakely@redhat.com>
-+
-+ PR libstdc++/60594
-+ * include/std/functional (function::_Callable): Exclude own type
-+ from the callable checks.
-+ * testsuite/20_util/function/60594.cc: New.
-+
-+2014-05-02 Jonathan Wakely <jwakely@redhat.com>
-+
-+ PR libstdc++/59476
-+ * python/libstdcxx/v6/printers.py (get_value_from_Rb_tree_node): New
-+ function to handle both C++03 and C++11 _Rb_tree_node implementations.
-+ (StdRbtreeIteratorPrinter, StdMapPrinter, StdSetPrinter): Use it.
-+ * testsuite/libstdc++-prettyprinters/simple.cc: Update comment to
-+ refer to...
-+ * testsuite/libstdc++-prettyprinters/simple11.cc: New.
-+
-+ PR libstdc++/61036
-+ * include/bits/shared_ptr_base.h (__shared_ptr::__shared_ptr(_Tp1*)):
-+ Check the correct type in the static assertion.
-+ * testsuite/20_util/shared_ptr/cons/61036.cc: New.
-+
-+2014-04-27 Lars Gullik Bjønnes <larsbj@gullik.org>
-+
-+ PR libstdc++/60710
-+ * include/experimental/optional (operator!=): Implement in terms of
-+ operator==.
-+ * testsuite/experimental/optional/relops/1.cc: Remove operator!=.
-+ * testsuite/experimental/optional/relops/2.cc: Likewise.
-+ * testsuite/experimental/optional/relops/3.cc: Likewise.
-+ * testsuite/experimental/optional/relops/4.cc: Likewise.
-+ * testsuite/experimental/optional/relops/5.cc: Likewise.
-+ * testsuite/experimental/optional/relops/6.cc: Likewise.
-+
-+2014-04-27 Jonathan Wakely <jwakely@redhat.com>
-+
-+ PR libstdc++/60497
-+ * include/std/tuple (get): Qualify calls to prevent ADL.
-+ * testsuite/20_util/tuple/60497.cc: New.
-+
-+ * include/std/tuple (tuple_element_t): Define.
-+ * testsuite/20_util/tuple/tuple_element.cc: Change to compile-only
-+ test.
-+ * testsuite/20_util/tuple/tuple_element_t.cc: New.
-+
- 2014-04-22 Release Manager
-
- * GCC 4.9.0 released.
-Index: libstdc++-v3/testsuite/27_io/manipulators/standard/wchar_t/dr2344.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/27_io/manipulators/standard/wchar_t/dr2344.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/27_io/manipulators/standard/wchar_t/dr2344.cc (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,50 @@
-+// { dg-do run }
-+// { dg-options "-std=gnu++14" }
-+
-+// Copyright (C) 2014 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
-+// <http://www.gnu.org/licenses/>.
-+
-+// 27.7.6 - Quoted manipulators [quoted.manip]
-+
-+#include <sstream>
-+#include <iomanip>
-+#include <testsuite_hooks.h>
-+
-+void
-+test01()
-+{
-+ bool test [[gnu::unused]] = true;
-+
-+ std::wostringstream ssx;
-+ ssx << L"[" << std::left << std::setfill(L'x') << std::setw(20) << LR"("AB \"CD\" EF")" << L"]";
-+ VERIFY( ssx.str() == LR"(["AB \"CD\" EF"xxxxxx])" );
-+
-+ std::wostringstream ssy;
-+ ssy << L"[" << std::left << std::setfill(L'y') << std::setw(20) << std::quoted(LR"(GH "IJ" KL)") << L"]";
-+ VERIFY( ssy.str() == LR"(["GH \"IJ\" KL"yyyyyy])" );
-+
-+ std::wostringstream ssz;
-+ ssz << L"[" << std::right << std::setfill(L'z') << std::setw(20) << std::quoted(LR"(PQ "RS" TU)") << L"]";
-+ VERIFY( ssz.str() == LR"([zzzzzz"PQ \"RS\" TU"])" );
-+}
-+
-+int
-+main()
-+{
-+ test01();
-+ return 0;
-+}
-Index: libstdc++-v3/testsuite/27_io/manipulators/standard/char/dr2344.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/27_io/manipulators/standard/char/dr2344.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/27_io/manipulators/standard/char/dr2344.cc (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,50 @@
-+// { dg-do run }
-+// { dg-options "-std=gnu++14" }
-+
-+// Copyright (C) 2014 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
-+// <http://www.gnu.org/licenses/>.
-+
-+// 27.7.6 - Quoted manipulators [quoted.manip]
-+
-+#include <sstream>
-+#include <iomanip>
-+#include <testsuite_hooks.h>
-+
-+void
-+test01()
-+{
-+ bool test [[gnu::unused]] = true;
-+
-+ std::ostringstream ssx;
-+ ssx << "[" << std::left << std::setfill('x') << std::setw(20) << R"("AB \"CD\" EF")" << "]";
-+ VERIFY( ssx.str() == R"(["AB \"CD\" EF"xxxxxx])" );
-+
-+ std::ostringstream ssy;
-+ ssy << "[" << std::left << std::setfill('y') << std::setw(20) << std::quoted(R"(GH "IJ" KL)") << "]";
-+ VERIFY( ssy.str() == R"(["GH \"IJ\" KL"yyyyyy])" );
-+
-+ std::ostringstream ssz;
-+ ssz << "[" << std::right << std::setfill('z') << std::setw(20) << std::quoted(R"(PQ "RS" TU)") << "]";
-+ VERIFY( ssz.str() == R"([zzzzzz"PQ \"RS\" TU"])" );
-+}
-+
-+int
-+main()
-+{
-+ test01();
-+ return 0;
-+}
-Index: libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/quoted_char.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/quoted_char.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/char/quoted_char.cc (.../branches/gcc-4_9-branch)
-@@ -44,6 +44,16 @@
- VERIFY(regex_match_debug("_az", regex("\\w*")));
- VERIFY(regex_match_debug("!@#$%", regex("\\W*")));
- VERIFY(!regex_match_debug("_01234", regex("\\W*")));
-+
-+ VERIFY(regex_match_debug("01", regex("[\\d]*")));
-+ VERIFY(regex_match_debug("asdfjkl", regex("[\\D]*")));
-+ VERIFY(!regex_match_debug("asdfjkl0", regex("[\\D]*")));
-+ VERIFY(regex_match_debug("\r\t\v\f ", regex("[\\s]*")));
-+ VERIFY(regex_match_debug("asdfjkl", regex("[\\S]*")));
-+ VERIFY(!regex_match_debug("asdfjkl\r", regex("[\\S]*")));
-+ VERIFY(regex_match_debug("_az", regex("[\\w]*")));
-+ VERIFY(regex_match_debug("!@#$%", regex("[\\W]*")));
-+ VERIFY(!regex_match_debug("_01234", regex("[\\W]*")));
- }
-
- int
-Index: libstdc++-v3/testsuite/28_regex/basic_regex/multiple_quantifiers.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/28_regex/basic_regex/multiple_quantifiers.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/28_regex/basic_regex/multiple_quantifiers.cc (.../branches/gcc-4_9-branch)
-@@ -21,7 +21,10 @@
- // Tests multiple consecutive quantifiers
-
- #include <regex>
-+#include <testsuite_hooks.h>
-+#include <testsuite_regex.h>
-
-+using namespace __gnu_test;
- using namespace std;
-
- int
-@@ -29,5 +32,6 @@
- {
- regex re1("a++");
- regex re2("(a+)+");
-+ VERIFY(regex_match_debug("aa", regex("(a)*{3}")));
- return 0;
- }
-Index: libstdc++-v3/testsuite/libstdc++-prettyprinters/simple11.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/libstdc++-prettyprinters/simple11.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/libstdc++-prettyprinters/simple11.cc (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,92 @@
-+// If you modify this, please update simple.cc and debug.cc as well.
-+
-+// { dg-do run }
-+// { dg-options "-g -O0 -std=gnu++11" }
-+
-+// Copyright (C) 2011-2014 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
-+// <http://www.gnu.org/licenses/>.
-+
-+#include <string>
-+#include <deque>
-+#include <bitset>
-+#include <iostream>
-+#include <list>
-+#include <map>
-+#include <set>
-+#include <ext/slist>
-+
-+int
-+main()
-+{
-+ std::string tem;
-+ std::string str = "zardoz";
-+// { dg-final { note-test str "\"zardoz\"" } }
-+
-+ std::bitset<10> bs;
-+ bs[0] = 1;
-+ bs[5] = 1;
-+ bs[7] = 1;
-+// { dg-final { note-test bs {std::bitset = {[0] = 1, [5] = 1, [7] = 1}} } }
-+
-+ std::deque<std::string> deq;
-+ deq.push_back("one");
-+ deq.push_back("two");
-+// { dg-final { note-test deq {std::deque with 2 elements = {"one", "two"}} } }
-+
-+ std::deque<std::string>::iterator deqiter = deq.begin();
-+// { dg-final { note-test deqiter {"one"} } }
-+
-+ std::list<std::string> lst;
-+ lst.push_back("one");
-+ lst.push_back("two");
-+// { dg-final { note-test lst {std::list = {[0] = "one", [1] = "two"}} } }
-+
-+ std::list<std::string>::iterator lstiter = lst.begin();
-+ tem = *lstiter;
-+// { dg-final { note-test lstiter {"one"}} }
-+
-+ std::list<std::string>::const_iterator lstciter = lst.begin();
-+ tem = *lstciter;
-+// { dg-final { note-test lstciter {"one"}} }
-+
-+ std::map<std::string, int> mp;
-+ mp["zardoz"] = 23;
-+// { dg-final { note-test mp {std::map with 1 elements = {["zardoz"] = 23}} } }
-+
-+ std::map<std::string, int>::iterator mpiter = mp.begin();
-+// { dg-final { note-test mpiter {{first = "zardoz", second = 23}} } }
-+
-+ std::set<std::string> sp;
-+ sp.insert("clownfish");
-+ sp.insert("barrel");
-+// { dg-final { note-test sp {std::set with 2 elements = {[0] = "barrel", [1] = "clownfish"}} } }
-+
-+ std::set<std::string>::const_iterator spciter = sp.begin();
-+// { dg-final { note-test spciter {"barrel"} } }
-+
-+ __gnu_cxx::slist<int> sll;
-+ sll.push_front(23);
-+ sll.push_front(47);
-+// { dg-final { note-test sll {__gnu_cxx::slist = {[0] = 47, [1] = 23}} } }
-+
-+ __gnu_cxx::slist<int>::iterator slliter = sll.begin();
-+// { dg-final { note-test slliter {47} } }
-+
-+ return 0; // Mark SPOT
-+}
-+
-+// { dg-final { gdb-test SPOT } }
-Index: libstdc++-v3/testsuite/libstdc++-prettyprinters/simple.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/libstdc++-prettyprinters/simple.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/libstdc++-prettyprinters/simple.cc (.../branches/gcc-4_9-branch)
-@@ -1,4 +1,4 @@
--// If you modify this, please update debug.cc as well.
-+// If you modify this, please update simple11.cc and debug.cc as well.
-
- // { dg-do run }
- // { dg-options "-g -O0" }
-Index: libstdc++-v3/testsuite/30_threads/promise/60966.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/30_threads/promise/60966.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/30_threads/promise/60966.cc (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,67 @@
-+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-gnu* *-*-solaris* *-*-cygwin *-*-darwin* powerpc-ibm-aix* } }
-+// { dg-options " -std=gnu++11 -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-gnu* powerpc-ibm-aix* } }
-+// { dg-options " -std=gnu++11 -pthreads" { target *-*-solaris* } }
-+// { dg-options " -std=gnu++11 " { target *-*-cygwin *-*-darwin* } }
-+// { dg-require-cstdint "" }
-+// { dg-require-gthreads "" }
-+// { dg-require-atomic-builtins "" }
-+
-+// Copyright (C) 2014 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
-+// <http://www.gnu.org/licenses/>.
-+
-+// libstdc++/60966
-+// This test hangs if std::promise::~promise() destroys the
-+// shared state before std::promise::set_value() finishes using it.
-+
-+#include <future>
-+#include <thread>
-+#include <vector>
-+
-+const int THREADS = 10;
-+
-+void run_task(std::promise<void>* pr)
-+{
-+ std::this_thread::sleep_for(std::chrono::milliseconds(100));
-+ pr->set_value();
-+}
-+
-+int main()
-+{
-+ std::vector<std::promise<void>*> tasks(THREADS);
-+ std::vector<std::thread> threads(THREADS);
-+ std::vector<std::future<void>> futures(THREADS);
-+
-+ for (int i = 0; i < THREADS; ++i)
-+ {
-+ std::promise<void>* task = new std::promise<void>;
-+ tasks[i] = task;
-+ futures[i] = task->get_future();
-+ threads[i] = std::thread(run_task, task);
-+ }
-+
-+ for (int i = 0; i < THREADS; ++i)
-+ {
-+ // the temporary future releases the state as soon as wait() returns
-+ std::future<void>(std::move(futures[i])).wait();
-+ // state is ready, should now be safe to delete promise, so it
-+ // releases the shared state too
-+ delete tasks[i];
-+ }
-+
-+ for (auto& t : threads)
-+ t.join();
-+}
-Index: libstdc++-v3/testsuite/experimental/optional/relops/1.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/experimental/optional/relops/1.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/experimental/optional/relops/1.cc (.../branches/gcc-4_9-branch)
-@@ -37,10 +37,6 @@
- { return std::tie(lhs.i, lhs.s) == std::tie(rhs.i, rhs.s); }
-
- bool
-- operator!=(value_type const& lhs, value_type const& rhs)
-- { return !(lhs == rhs); }
--
-- bool
- operator<(value_type const& lhs, value_type const& rhs)
- { return std::tie(lhs.i, lhs.s) < std::tie(rhs.i, rhs.s); }
-
-Index: libstdc++-v3/testsuite/experimental/optional/relops/2.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/experimental/optional/relops/2.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/experimental/optional/relops/2.cc (.../branches/gcc-4_9-branch)
-@@ -37,10 +37,6 @@
- { return std::tie(lhs.i, lhs.s) == std::tie(rhs.i, rhs.s); }
-
- bool
-- operator!=(value_type const& lhs, value_type const& rhs)
-- { return !(lhs == rhs); }
--
-- bool
- operator<(value_type const& lhs, value_type const& rhs)
- { return std::tie(lhs.i, lhs.s) < std::tie(rhs.i, rhs.s); }
-
-Index: libstdc++-v3/testsuite/experimental/optional/relops/3.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/experimental/optional/relops/3.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/experimental/optional/relops/3.cc (.../branches/gcc-4_9-branch)
-@@ -37,10 +37,6 @@
- { return std::tie(lhs.i, lhs.s) == std::tie(rhs.i, rhs.s); }
-
- bool
-- operator!=(value_type const& lhs, value_type const& rhs)
-- { return !(lhs == rhs); }
--
-- bool
- operator<(value_type const& lhs, value_type const& rhs)
- { return std::tie(lhs.i, lhs.s) < std::tie(rhs.i, rhs.s); }
-
-Index: libstdc++-v3/testsuite/experimental/optional/relops/4.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/experimental/optional/relops/4.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/experimental/optional/relops/4.cc (.../branches/gcc-4_9-branch)
-@@ -37,10 +37,6 @@
- { return std::tie(lhs.i, lhs.s) == std::tie(rhs.i, rhs.s); }
-
- bool
-- operator!=(value_type const& lhs, value_type const& rhs)
-- { return !(lhs == rhs); }
--
-- bool
- operator<(value_type const& lhs, value_type const& rhs)
- { return std::tie(lhs.i, lhs.s) < std::tie(rhs.i, rhs.s); }
-
-Index: libstdc++-v3/testsuite/experimental/optional/relops/5.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/experimental/optional/relops/5.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/experimental/optional/relops/5.cc (.../branches/gcc-4_9-branch)
-@@ -37,10 +37,6 @@
- { return std::tie(lhs.i, lhs.s) == std::tie(rhs.i, rhs.s); }
-
- bool
-- operator!=(value_type const& lhs, value_type const& rhs)
-- { return !(lhs == rhs); }
--
-- bool
- operator<(value_type const& lhs, value_type const& rhs)
- { return std::tie(lhs.i, lhs.s) < std::tie(rhs.i, rhs.s); }
-
-Index: libstdc++-v3/testsuite/experimental/optional/relops/6.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/experimental/optional/relops/6.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/experimental/optional/relops/6.cc (.../branches/gcc-4_9-branch)
-@@ -37,10 +37,6 @@
- { return std::tie(lhs.i, lhs.s) == std::tie(rhs.i, rhs.s); }
-
- bool
-- operator!=(value_type const& lhs, value_type const& rhs)
-- { return !(lhs == rhs); }
--
-- bool
- operator<(value_type const& lhs, value_type const& rhs)
- { return std::tie(lhs.i, lhs.s) < std::tie(rhs.i, rhs.s); }
-
-Index: libstdc++-v3/testsuite/23_containers/set/cons/61023.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/23_containers/set/cons/61023.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/23_containers/set/cons/61023.cc (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,56 @@
-+// { dg-options "-std=gnu++11" }
-+
-+// Copyright (C) 2014 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
-+// <http://www.gnu.org/licenses/>.
-+
-+#include <set>
-+#include <stdexcept>
-+
-+struct Comparator
-+{
-+ Comparator() : valid(false) { }
-+ explicit Comparator(bool) : valid(true) { }
-+
-+ bool operator()(int i, int j) const
-+ {
-+ if (!valid)
-+ throw std::logic_error("Comparator is invalid");
-+ return i < j;
-+ }
-+
-+private:
-+ bool valid;
-+};
-+
-+int main()
-+{
-+ using test_type = std::set<int, Comparator>;
-+
-+ Comparator cmp{true};
-+
-+ test_type good{cmp};
-+
-+ test_type s1;
-+ s1 = good; // copy-assign
-+ s1.insert(1);
-+ s1.insert(2);
-+
-+ test_type s2;
-+ s2 = std::move(good); // move-assign
-+ s2.insert(1);
-+ s2.insert(2);
-+}
-Index: libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc (.../branches/gcc-4_9-branch)
-@@ -18,7 +18,7 @@
- // <http://www.gnu.org/licenses/>.
-
- // { dg-do compile }
--// { dg-error "no matching" "" { target *-*-* } 1320 }
-+// { dg-error "no matching" "" { target *-*-* } 1326 }
-
- #include <vector>
-
-Index: libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc (.../branches/gcc-4_9-branch)
-@@ -18,7 +18,7 @@
- // <http://www.gnu.org/licenses/>.
-
- // { dg-do compile }
--// { dg-error "no matching" "" { target *-*-* } 1361 }
-+// { dg-error "no matching" "" { target *-*-* } 1367 }
-
- #include <vector>
-
-Index: libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc (.../branches/gcc-4_9-branch)
-@@ -18,7 +18,7 @@
- // <http://www.gnu.org/licenses/>.
-
- // { dg-do compile }
--// { dg-error "no matching" "" { target *-*-* } 1246 }
-+// { dg-error "no matching" "" { target *-*-* } 1252 }
-
- #include <vector>
-
-Index: libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc (.../branches/gcc-4_9-branch)
-@@ -18,7 +18,7 @@
- // <http://www.gnu.org/licenses/>.
-
- // { dg-do compile }
--// { dg-error "no matching" "" { target *-*-* } 1246 }
-+// { dg-error "no matching" "" { target *-*-* } 1252 }
-
- #include <vector>
- #include <utility>
-Index: libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/swap.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/swap.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/23_containers/unordered_set/modifiers/swap.cc (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,65 @@
-+// Copyright (C) 2014 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
-+// <http://www.gnu.org/licenses/>.
-+
-+// { dg-options "-std=gnu++11" }
-+
-+#include <unordered_set>
-+#include <testsuite_hooks.h>
-+
-+void test01()
-+{
-+ bool test __attribute__((unused)) = true;
-+ std::unordered_set<int> us1 { 0, 1 };
-+ {
-+ std::unordered_set<int> us2(std::move(us1));
-+
-+ us1.swap(us2);
-+
-+ VERIFY( us1.find(0) != us1.end() );
-+
-+ us1.insert(2);
-+
-+ VERIFY( us1.size() == 3 );
-+
-+ us2.swap(us1);
-+
-+ VERIFY( us2.size() == 3 );
-+ VERIFY( us2.find(2) != us2.end() );
-+
-+ us1 = { 3, 4, 5 };
-+
-+ VERIFY( us1.size() == 3 );
-+ VERIFY( us1.bucket_count() >= 3 );
-+
-+ std::unordered_set<int> us3(std::move(us1));
-+ us3 = std::move(us2);
-+
-+ us1.swap(us2);
-+
-+ VERIFY( us1.empty() );
-+ VERIFY( us2.empty() );
-+ }
-+
-+ us1 = { 0, 1 };
-+ VERIFY( us1.size() == 2 );
-+}
-+
-+int main()
-+{
-+ test01();
-+ return 0;
-+}
-Index: libstdc++-v3/testsuite/23_containers/unordered_set/61143.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/23_containers/unordered_set/61143.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/23_containers/unordered_set/61143.cc (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,38 @@
-+// { dg-options "-std=gnu++11" }
-+
-+// Copyright (C) 2014 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
-+// <http://www.gnu.org/licenses/>.
-+
-+// libstdc++/61143
-+
-+#include <unordered_set>
-+
-+void test01()
-+{
-+ std::unordered_set<int> us1, us2;
-+ us1.insert(1);
-+
-+ us2 = std::move(us1);
-+
-+ us1.insert(1);
-+}
-+
-+int main()
-+{
-+ test01();
-+ return 0;
-+}
-Index: libstdc++-v3/testsuite/20_util/tuple/tuple_element.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/20_util/tuple/tuple_element.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/20_util/tuple/tuple_element.cc (.../branches/gcc-4_9-branch)
-@@ -1,4 +1,5 @@
--// { dg-options "-std=gnu++0x" }
-+// { dg-options "-std=gnu++11" }
-+// { dg-do compile }
-
- // Copyright (C) 2007-2014 Free Software Foundation, Inc.
- //
-Index: libstdc++-v3/testsuite/20_util/tuple/tuple_element_t.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/20_util/tuple/tuple_element_t.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/20_util/tuple/tuple_element_t.cc (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,36 @@
-+// { dg-options "-std=gnu++14" }
-+// { dg-do compile }
-+
-+// Copyright (C) 2014 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
-+// <http://www.gnu.org/licenses/>.
-+
-+#include <tuple>
-+
-+using namespace std;
-+
-+struct foo
-+{ };
-+
-+int
-+main()
-+{
-+ // As foo isn't constructible from anything else, this
-+ // lets us check if the alias is returning foo when it should
-+ foo q1;
-+ tuple_element_t<0,tuple<foo,void,int> > q2(q1);
-+ tuple_element_t<2,tuple<void,int,foo> > q3(q1);
-+}
-Index: libstdc++-v3/testsuite/20_util/tuple/element_access/get_by_type.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/20_util/tuple/element_access/get_by_type.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/20_util/tuple/element_access/get_by_type.cc (.../branches/gcc-4_9-branch)
-@@ -41,4 +41,8 @@
- get<1>(b)=5;
- VERIFY(get<int>(b)==1 && get<int&>(b)==5 && get<const int&>(b)==2);
- VERIFY(j==5);
-+ // test rvalue overload:
-+ VERIFY(get<int>(std::move(b))==1);
-+ VERIFY(get<int&>(std::move(b))==5);
-+ VERIFY(get<const int&>(std::move(b))==2);
- }
-Index: libstdc++-v3/testsuite/20_util/tuple/60497.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/20_util/tuple/60497.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/20_util/tuple/60497.cc (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,37 @@
-+// { dg-options "-std=gnu++14" }
-+// { dg-do compile }
-+
-+// Copyright (C) 2014 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
-+// <http://www.gnu.org/licenses/>.
-+
-+// libstdc++/60497
-+
-+#include <tuple>
-+
-+struct A;
-+template<typename T> struct B { T t; };
-+
-+using element_type = B<A>*;
-+using tuple_type = std::tuple<element_type>;
-+
-+tuple_type t;
-+const tuple_type ct;
-+
-+auto a = std::get<0>(t);
-+auto b = std::get<0>(ct);
-+auto c = std::get<element_type>(t);
-+auto d = std::get<element_type>(ct);
-Index: libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs_neg.cc (.../branches/gcc-4_9-branch)
-@@ -48,5 +48,5 @@
- // { dg-error "required from here" "" { target *-*-* } 40 }
- // { dg-error "required from here" "" { target *-*-* } 42 }
-
--// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1714 }
--// { dg-error "declaration of" "" { target *-*-* } 1678 }
-+// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1747 }
-+// { dg-error "declaration of" "" { target *-*-* } 1711 }
-Index: libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-1.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-1.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-1.cc (.../branches/gcc-4_9-branch)
-@@ -29,6 +29,7 @@
- using std::make_signed;
- using std::is_same;
- using std::is_signed;
-+ using std::is_volatile;
-
- // Positive tests.
- typedef make_signed<const int>::type test2_type;
-@@ -53,7 +54,9 @@
-
- #ifdef _GLIBCXX_USE_WCHAR_T
- typedef make_signed<volatile wchar_t>::type test23_type;
-- static_assert( is_same<test23_type, volatile signed wchar_t>::value,
-+ static_assert( is_signed<test23_type>::value
-+ && is_volatile<test23_type>::value
-+ && sizeof(test23_type) == sizeof(volatile wchar_t),
- "make_signed<volatile wchar_t>" );
- #endif
-
-Index: libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-2.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-2.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-2.cc (.../branches/gcc-4_9-branch)
-@@ -30,6 +30,8 @@
- {
- using std::make_signed;
- using std::is_same;
-+ using std::is_signed;
-+ using std::is_volatile;
-
- // Positive tests.
- typedef make_signed<const int>::type test2_type;
-@@ -50,7 +52,9 @@
-
- #ifdef _GLIBCXX_USE_WCHAR_T
- typedef make_signed<volatile wchar_t>::type test23_type;
-- static_assert(is_same<test23_type, volatile signed wchar_t>::value, "");
-+ static_assert(is_signed<test23_type>::value
-+ && is_volatile<test23_type>::value
-+ && sizeof(test23_type) == sizeof(volatile wchar_t), "");
- #endif
-
- typedef make_signed<test_enum>::type test24_type;
-Index: libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-4.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-4.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/20_util/make_signed/requirements/typedefs-4.cc (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,33 @@
-+// { dg-options "-std=gnu++11" }
-+// { dg-do compile }
-+// { dg-require-cstdint "" }
-+
-+// Copyright (C) 2014 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
-+// <http://www.gnu.org/licenses/>.
-+
-+#include <type_traits>
-+
-+// libstdc++/60326
-+
-+using namespace std;
-+#ifdef _GLIBCXX_USE_WCHAR_T
-+using wchar_signed = make_signed<wchar_t>::type;
-+using wchar_unsigned = make_unsigned<wchar_t>::type;
-+static_assert( !is_same<wchar_signed, wchar_unsigned>::value, "wchar_t" );
-+#endif
-+static_assert( is_signed<make_signed<char16_t>::type>::value, "char16_t");
-+static_assert( is_signed<make_signed<char32_t>::type>::value, "char32_t");
-Index: libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs_neg.cc (.../branches/gcc-4_9-branch)
-@@ -48,5 +48,5 @@
- // { dg-error "required from here" "" { target *-*-* } 40 }
- // { dg-error "required from here" "" { target *-*-* } 42 }
-
--// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1632 }
--// { dg-error "declaration of" "" { target *-*-* } 1596 }
-+// { dg-error "invalid use of incomplete type" "" { target *-*-* } 1650 }
-+// { dg-error "declaration of" "" { target *-*-* } 1614 }
-Index: libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-1.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-1.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-1.cc (.../branches/gcc-4_9-branch)
-@@ -29,6 +29,7 @@
- using std::make_unsigned;
- using std::is_same;
- using std::is_unsigned;
-+ using std::is_volatile;
-
- // Positive tests.
- typedef make_unsigned<const unsigned int>::type test2_type;
-@@ -49,7 +50,9 @@
-
- #ifdef _GLIBCXX_USE_WCHAR_T
- typedef make_unsigned<volatile wchar_t>::type test23_type;
-- static_assert(is_same<test23_type, volatile wchar_t>::value, "");
-+ static_assert(is_unsigned<test23_type>::value
-+ && is_volatile<test23_type>::value
-+ && sizeof(test23_type) == sizeof(volatile wchar_t), "");
- #endif
-
- // Chapter 48, chapter 20. Smallest rank such that new unsigned type
-Index: libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-2.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-2.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/20_util/make_unsigned/requirements/typedefs-2.cc (.../branches/gcc-4_9-branch)
-@@ -30,6 +30,8 @@
- {
- using std::make_unsigned;
- using std::is_same;
-+ using std::is_unsigned;
-+ using std::is_volatile;
-
- // Positive tests.
- typedef make_unsigned<const unsigned int>::type test2_type;
-@@ -50,7 +52,9 @@
-
- #ifdef _GLIBCXX_USE_WCHAR_T
- typedef make_unsigned<volatile wchar_t>::type test23_type;
-- static_assert(is_same<test23_type, volatile wchar_t>::value, "");
-+ static_assert(is_unsigned<test23_type>::value
-+ && is_volatile<test23_type>::value
-+ && sizeof(test23_type) == sizeof(volatile wchar_t), "");
- #endif
-
- typedef make_unsigned<test_enum>::type test24_type;
-Index: libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/20_util/declval/requirements/1_neg.cc (.../branches/gcc-4_9-branch)
-@@ -19,7 +19,7 @@
- // with this library; see the file COPYING3. If not see
- // <http://www.gnu.org/licenses/>.
-
--// { dg-error "static assertion failed" "" { target *-*-* } 2003 }
-+// { dg-error "static assertion failed" "" { target *-*-* } 2036 }
-
- #include <utility>
-
-Index: libstdc++-v3/testsuite/20_util/shared_ptr/cons/61036.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/20_util/shared_ptr/cons/61036.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/20_util/shared_ptr/cons/61036.cc (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,28 @@
-+// { dg-options "-std=gnu++11" }
-+// { dg-do compile }
-+
-+// Copyright (C) 2014 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
-+// <http://www.gnu.org/licenses/>.
-+
-+// 20.8.2.2 Template class shared_ptr [util.smartptr.shared]
-+
-+#include <memory>
-+
-+void test01()
-+{
-+ std::shared_ptr<void> p(new int);
-+}
-Index: libstdc++-v3/testsuite/20_util/function/60594.cc
-===================================================================
---- a/src/libstdc++-v3/testsuite/20_util/function/60594.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/libstdc++-v3/testsuite/20_util/function/60594.cc (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,36 @@
-+// { dg-options "-std=gnu++11" }
-+// { dg-do compile }
-+
-+// Copyright (C) 2011-2014 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
-+// <http://www.gnu.org/licenses/>.
-+
-+// libstdc++/60594
-+
-+#include <functional>
-+#include <type_traits>
-+struct bar;
-+using F = std::function<bar()>;
-+// check for copy constructible and assignable while 'bar' is incomplete
-+constexpr int c = std::is_copy_constructible<F>::value;
-+constexpr int a = std::is_copy_assignable<F>::value;
-+struct bar { };
-+bar func();
-+void test()
-+{
-+ F g{ &func };
-+ g = func;
-+}
-Index: lto-plugin/configure
-===================================================================
---- a/src/lto-plugin/configure (.../tags/gcc_4_9_0_release)
-+++ b/src/lto-plugin/configure (.../branches/gcc-4_9-branch)
-@@ -4087,9 +4087,33 @@
- done
- CFLAGS="$save_CFLAGS"
-
-+
-+# Check whether -static-libgcc is supported.
-+saved_LDFLAGS="$LDFLAGS"
-+LDFLAGS="$LDFLAGS -static-libgcc"
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -static-libgcc" >&5
-+$as_echo_n "checking for -static-libgcc... " >&6; }
-+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+/* end confdefs.h. */
-+
-+ int main() {}
-+_ACEOF
-+if ac_fn_c_try_link "$LINENO"; then :
-+ have_static_libgcc=yes
-+else
-+ have_static_libgcc=no
-+fi
-+rm -f core conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_static_libgcc" >&5
-+$as_echo "$have_static_libgcc" >&6; };
-+LDFLAGS="$saved_LDFLAGS"
- # Need -Wc to get it through libtool.
--if test "x$GCC" = xyes; then ac_lto_plugin_ldflags="-Wc,-static-libgcc"; fi
-+if test "x$have_static_libgcc" = xyes; then
-+ ac_lto_plugin_ldflags="-Wc,-static-libgcc"
-+fi
-
-+
- case `pwd` in
- *\ * | *\ *)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
-@@ -10562,7 +10586,7 @@
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 10565 "configure"
-+#line 10589 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-@@ -10668,7 +10692,7 @@
- lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
- lt_status=$lt_dlunknown
- cat > conftest.$ac_ext <<_LT_EOF
--#line 10671 "configure"
-+#line 10695 "configure"
- #include "confdefs.h"
-
- #if HAVE_DLFCN_H
-Index: lto-plugin/configure.ac
-===================================================================
---- a/src/lto-plugin/configure.ac (.../tags/gcc_4_9_0_release)
-+++ b/src/lto-plugin/configure.ac (.../branches/gcc-4_9-branch)
-@@ -7,9 +7,21 @@
- AC_PROG_CC
- AC_SYS_LARGEFILE
- ACX_PROG_CC_WARNING_OPTS([-Wall], [ac_lto_plugin_warn_cflags])
-+
-+# Check whether -static-libgcc is supported.
-+saved_LDFLAGS="$LDFLAGS"
-+LDFLAGS="$LDFLAGS -static-libgcc"
-+AC_MSG_CHECKING([for -static-libgcc])
-+AC_LINK_IFELSE([
-+ int main() {}], [have_static_libgcc=yes], [have_static_libgcc=no])
-+AC_MSG_RESULT($have_static_libgcc);
-+LDFLAGS="$saved_LDFLAGS"
- # Need -Wc to get it through libtool.
--if test "x$GCC" = xyes; then ac_lto_plugin_ldflags="-Wc,-static-libgcc"; fi
-+if test "x$have_static_libgcc" = xyes; then
-+ ac_lto_plugin_ldflags="-Wc,-static-libgcc"
-+fi
- AC_SUBST(ac_lto_plugin_ldflags)
-+
- AM_PROG_LIBTOOL
- ACX_LT_HOST_FLAGS
- AC_SUBST(target_noncanonical)
-Index: lto-plugin/ChangeLog
-===================================================================
---- a/src/lto-plugin/ChangeLog (.../tags/gcc_4_9_0_release)
-+++ b/src/lto-plugin/ChangeLog (.../branches/gcc-4_9-branch)
-@@ -1,3 +1,9 @@
-+2014-05-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
-+
-+ PR lto/60981
-+ * configure.ac: Check for -static-libgcc.
-+ * configure: Regenerate.
-+
- 2014-04-22 Release Manager
-
- * GCC 4.9.0 released.
-Index: contrib/ChangeLog
-===================================================================
---- a/src/contrib/ChangeLog (.../tags/gcc_4_9_0_release)
-+++ b/src/contrib/ChangeLog (.../branches/gcc-4_9-branch)
-@@ -1,3 +1,7 @@
-+2014-06-29 Richard Biener <rguenther@suse.de>
-+
-+ * gennews: Use gcc-3.0/index.html.
-+
- 2014-04-22 Release Manager
-
- * GCC 4.9.0 released.
-Index: contrib/gennews
-===================================================================
---- a/src/contrib/gennews (.../tags/gcc_4_9_0_release)
-+++ b/src/contrib/gennews (.../branches/gcc-4_9-branch)
-@@ -37,7 +37,7 @@
- gcc-3.3/index.html gcc-3.3/changes.html
- gcc-3.2/index.html gcc-3.2/changes.html
- gcc-3.1/index.html gcc-3.1/changes.html
-- gcc-3.0/gcc-3.0.html gcc-3.0/features.html gcc-3.0/caveats.html
-+ gcc-3.0/index.html gcc-3.0/features.html gcc-3.0/caveats.html
- gcc-2.95/index.html gcc-2.95/features.html gcc-2.95/caveats.html
- egcs-1.1/index.html egcs-1.1/features.html egcs-1.1/caveats.html
- egcs-1.0/index.html egcs-1.0/features.html egcs-1.0/caveats.html"
-Index: libbacktrace/ChangeLog
-===================================================================
---- a/src/libbacktrace/ChangeLog (.../tags/gcc_4_9_0_release)
-+++ b/src/libbacktrace/ChangeLog (.../branches/gcc-4_9-branch)
-@@ -1,3 +1,12 @@
-+2014-05-08 Ian Lance Taylor <iant@google.com>
-+
-+ Backport from mainline:
-+ * mmap.c (backtrace_free): If freeing a large aligned block of
-+ memory, call munmap rather than holding onto it.
-+ (backtrace_vector_grow): When growing a vector, double the number
-+ of pages requested. When releasing the old version of a grown
-+ vector, pass the correct size to backtrace_free.
-+
- 2014-04-22 Release Manager
-
- * GCC 4.9.0 released.
-Index: libbacktrace/mmap.c
-===================================================================
---- a/src/libbacktrace/mmap.c (.../tags/gcc_4_9_0_release)
-+++ b/src/libbacktrace/mmap.c (.../branches/gcc-4_9-branch)
-@@ -164,6 +164,26 @@
- {
- int locked;
-
-+ /* If we are freeing a large aligned block, just release it back to
-+ the system. This case arises when growing a vector for a large
-+ binary with lots of debug info. Calling munmap here may cause us
-+ to call mmap again if there is also a large shared library; we
-+ just live with that. */
-+ if (size >= 16 * 4096)
-+ {
-+ size_t pagesize;
-+
-+ pagesize = getpagesize ();
-+ if (((uintptr_t) addr & (pagesize - 1)) == 0
-+ && (size & (pagesize - 1)) == 0)
-+ {
-+ /* If munmap fails for some reason, just add the block to
-+ the freelist. */
-+ if (munmap (addr, size) == 0)
-+ return;
-+ }
-+ }
-+
- /* If we can acquire the lock, add the new space to the free list.
- If we can't acquire the lock, just leak the memory.
- __sync_lock_test_and_set returns the old state of the lock, so we
-@@ -209,7 +229,10 @@
- alc = pagesize;
- }
- else
-- alc = (alc + pagesize - 1) & ~ (pagesize - 1);
-+ {
-+ alc *= 2;
-+ alc = (alc + pagesize - 1) & ~ (pagesize - 1);
-+ }
- base = backtrace_alloc (state, alc, error_callback, data);
- if (base == NULL)
- return NULL;
-@@ -216,7 +239,8 @@
- if (vec->base != NULL)
- {
- memcpy (base, vec->base, vec->size);
-- backtrace_free (state, vec->base, vec->alc, error_callback, data);
-+ backtrace_free (state, vec->base, vec->size + vec->alc,
-+ error_callback, data);
- }
- vec->base = base;
- vec->alc = alc - vec->size;
-Index: libjava/classpath
-===================================================================
---- a/src/libjava/classpath (.../tags/gcc_4_9_0_release)
-+++ b/src/libjava/classpath (.../branches/gcc-4_9-branch)
-
-Property changes on: libjava/classpath
-___________________________________________________________________
-Modified: svn:mergeinfo
- Merged /trunk/libjava/classpath:r210668,211733
-Index: libgcc/ChangeLog
-===================================================================
---- a/src/libgcc/ChangeLog (.../tags/gcc_4_9_0_release)
-+++ b/src/libgcc/ChangeLog (.../branches/gcc-4_9-branch)
-@@ -1,3 +1,40 @@
-+2014-05-27 Georg-Johann Lay <avr@gjlay.de>
-+
-+ Backport from 2014-05-27 mainline r210322.
-+
-+ PR libgcc/61152
-+ * config/arm/bpabi-lib.h (License): Add GCC Runtime Library Exception.
-+
-+2014-05-22 Nick Clifton <nickc@redhat.com>
-+
-+ * config/msp430/t-msp430 (HOST_LIBGCC2_CFLAGS): Add
-+ -mhwmult=none.
-+
-+2014-05-21 Maciej W. Rozycki <macro@codesourcery.com>
-+
-+ Backport from mainline
-+ 2014-05-21 Maciej W. Rozycki <macro@codesourcery.com>
-+
-+ PR libgcc/60166
-+ * config/arm/sfp-machine.h (_FP_NANFRAC_H, _FP_NANFRAC_S)
-+ (_FP_NANFRAC_D, _FP_NANSIGN_Q): Set the quiet bit.
-+
-+2014-05-15 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
-+
-+ Backport from mainline
-+ 2014-05-08 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
-+
-+ PR libgcc/61097
-+ * config/t-slibgcc-sld: Only build and install libgcc-unwind.map
-+ if --enable-shared.
-+
-+2014-04-30 Bernd Edlinger <bernd.edlinger@hotmail.de>
-+
-+ Work around for current cygwin32 build problems.
-+ * config/i386/cygming-crtbegin.c (__register_frame_info,
-+ __deregister_frame_info, _Jv_RegisterClasses): Compile weak default
-+ functions only for 64-bit systems.
-+
- 2014-04-22 Release Manager
-
- * GCC 4.9.0 released.
-Index: libgcc/config/t-slibgcc-sld
-===================================================================
---- a/src/libgcc/config/t-slibgcc-sld (.../tags/gcc_4_9_0_release)
-+++ b/src/libgcc/config/t-slibgcc-sld (.../branches/gcc-4_9-branch)
-@@ -4,6 +4,8 @@
- SHLIB_LDFLAGS = -Wl,-h,$(SHLIB_SONAME) -Wl,-z,text -Wl,-z,defs \
- -Wl,-M,$(SHLIB_MAP)
-
-+ifeq ($(enable_shared),yes)
-+
- # Linker mapfile to enforce direct binding to libgcc_s unwinder
- # (PR target/59788).
- libgcc-unwind.map: libgcc-std.ver
-@@ -26,3 +28,5 @@
- $(INSTALL_DATA) $< $(DESTDIR)$(slibdir)
-
- install: install-libgcc-unwind-map
-+
-+endif
-Index: libgcc/config/i386/cygming-crtbegin.c
-===================================================================
---- a/src/libgcc/config/i386/cygming-crtbegin.c (.../tags/gcc_4_9_0_release)
-+++ b/src/libgcc/config/i386/cygming-crtbegin.c (.../branches/gcc-4_9-branch)
-@@ -54,6 +54,11 @@
- TARGET_ATTRIBUTE_WEAK;
- extern void *__deregister_frame_info (__attribute__((unused)) const void *)
- TARGET_ATTRIBUTE_WEAK;
-+
-+/* Work around for current cygwin32 build problems (Bug gas/16858).
-+ Compile weak default functions only for 64-bit systems,
-+ when absolutely necessary. */
-+#ifdef __x86_64__
- TARGET_ATTRIBUTE_WEAK void
- __register_frame_info (__attribute__((unused)) const void *p,
- __attribute__((unused)) struct object *o)
-@@ -65,6 +70,7 @@
- {
- return (void*) 0;
- }
-+#endif
- #endif /* DWARF2_UNWIND_INFO */
-
- #if TARGET_USE_JCR_SECTION
-@@ -71,10 +77,12 @@
- extern void _Jv_RegisterClasses (__attribute__((unused)) const void *)
- TARGET_ATTRIBUTE_WEAK;
-
-+#ifdef __x86_64__
- TARGET_ATTRIBUTE_WEAK void
- _Jv_RegisterClasses (__attribute__((unused)) const void *p)
- {
- }
-+#endif
- #endif /* TARGET_USE_JCR_SECTION */
-
- #if defined(HAVE_LD_RO_RW_SECTION_MIXING)
-Index: libgcc/config/arm/sfp-machine.h
-===================================================================
---- a/src/libgcc/config/arm/sfp-machine.h (.../tags/gcc_4_9_0_release)
-+++ b/src/libgcc/config/arm/sfp-machine.h (.../branches/gcc-4_9-branch)
-@@ -21,10 +21,10 @@
-
- /* According to RTABI, QNAN is only with the most significant bit of the
- significand set, and all other significand bits zero. */
--#define _FP_NANFRAC_H 0
--#define _FP_NANFRAC_S 0
--#define _FP_NANFRAC_D 0, 0
--#define _FP_NANFRAC_Q 0, 0, 0, 0
-+#define _FP_NANFRAC_H _FP_QNANBIT_H
-+#define _FP_NANFRAC_S _FP_QNANBIT_S
-+#define _FP_NANFRAC_D _FP_QNANBIT_D, 0
-+#define _FP_NANFRAC_Q _FP_QNANBIT_Q, 0, 0, 0
- #define _FP_NANSIGN_H 0
- #define _FP_NANSIGN_S 0
- #define _FP_NANSIGN_D 0
-Index: libgcc/config/arm/bpabi-lib.h
-===================================================================
---- a/src/libgcc/config/arm/bpabi-lib.h (.../tags/gcc_4_9_0_release)
-+++ b/src/libgcc/config/arm/bpabi-lib.h (.../branches/gcc-4_9-branch)
-@@ -14,6 +14,10 @@
- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
- License for more details.
-
-+ Under Section 7 of GPL version 3, you are granted additional
-+ permissions described in the GCC Runtime Library Exception, version
-+ 3.1, as published by the Free Software Foundation.
-+
- You should have received a copy of the GNU General Public License and
- a copy of the GCC Runtime Library Exception along with this program;
- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
-Index: libgcc/config/msp430/t-msp430
-===================================================================
---- a/src/libgcc/config/msp430/t-msp430 (.../tags/gcc_4_9_0_release)
-+++ b/src/libgcc/config/msp430/t-msp430 (.../branches/gcc-4_9-branch)
-@@ -42,7 +42,7 @@
- $(srcdir)/config/msp430/floathisf.c \
- $(srcdir)/config/msp430/cmpd.c
-
--HOST_LIBGCC2_CFLAGS += -Os -ffunction-sections -fdata-sections
-+HOST_LIBGCC2_CFLAGS += -Os -ffunction-sections -fdata-sections -mhwmult=none
-
- # Local Variables:
- # mode: Makefile
-Index: gcc/tree-vrp.c
-===================================================================
---- a/src/gcc/tree-vrp.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/tree-vrp.c (.../branches/gcc-4_9-branch)
-@@ -3616,15 +3616,18 @@
- /* If arg is non-zero, then ffs or popcount
- are non-zero. */
- if (((vr0->type == VR_RANGE
-- && integer_nonzerop (vr0->min))
-+ && range_includes_zero_p (vr0->min, vr0->max) == 0)
- || (vr0->type == VR_ANTI_RANGE
-- && integer_zerop (vr0->min)))
-- && !is_overflow_infinity (vr0->min))
-+ && range_includes_zero_p (vr0->min, vr0->max) == 1))
-+ && !is_overflow_infinity (vr0->min)
-+ && !is_overflow_infinity (vr0->max))
- mini = 1;
- /* If some high bits are known to be zero,
- we can decrease the maximum. */
- if (vr0->type == VR_RANGE
- && TREE_CODE (vr0->max) == INTEGER_CST
-+ && !operand_less_p (vr0->min,
-+ build_zero_cst (TREE_TYPE (vr0->min)))
- && !is_overflow_infinity (vr0->max))
- maxi = tree_floor_log2 (vr0->max) + 1;
- }
-@@ -6661,8 +6664,9 @@
- }
- else
- {
-+ if (!is_gimple_debug (gsi_stmt (si)))
-+ is_unreachable = 0;
- gsi_next (&si);
-- is_unreachable = 0;
- }
- }
- }
-Index: gcc/tree-ssa-loop-im.c
-===================================================================
---- a/src/gcc/tree-ssa-loop-im.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/tree-ssa-loop-im.c (.../branches/gcc-4_9-branch)
-@@ -1544,15 +1544,6 @@
- struct loop *loop, *outer;
- unsigned i, n;
-
--#if 0
-- /* Initialize bb_loop_postorder with a mapping from loop->num to
-- its postorder index. */
-- i = 0;
-- bb_loop_postorder = XNEWVEC (unsigned, number_of_loops (cfun));
-- FOR_EACH_LOOP (loop, LI_FROM_INNERMOST)
-- bb_loop_postorder[loop->num] = i++;
--#endif
--
- /* Collect all basic-blocks in loops and sort them after their
- loops postorder. */
- i = 0;
-@@ -1807,6 +1798,7 @@
- gimple_stmt_iterator gsi;
- gimple stmt;
- struct prev_flag_edges *prev_edges = (struct prev_flag_edges *) ex->aux;
-+ bool irr = ex->flags & EDGE_IRREDUCIBLE_LOOP;
-
- /* ?? Insert store after previous store if applicable. See note
- below. */
-@@ -1821,8 +1813,9 @@
- old_dest = ex->dest;
- new_bb = split_edge (ex);
- then_bb = create_empty_bb (new_bb);
-- if (current_loops && new_bb->loop_father)
-- add_bb_to_loop (then_bb, new_bb->loop_father);
-+ if (irr)
-+ then_bb->flags = BB_IRREDUCIBLE_LOOP;
-+ add_bb_to_loop (then_bb, new_bb->loop_father);
-
- gsi = gsi_start_bb (new_bb);
- stmt = gimple_build_cond (NE_EXPR, flag, boolean_false_node,
-@@ -1834,9 +1827,12 @@
- stmt = gimple_build_assign (unshare_expr (mem), tmp_var);
- gsi_insert_after (&gsi, stmt, GSI_CONTINUE_LINKING);
-
-- make_edge (new_bb, then_bb, EDGE_TRUE_VALUE);
-- make_edge (new_bb, old_dest, EDGE_FALSE_VALUE);
-- then_old_edge = make_edge (then_bb, old_dest, EDGE_FALLTHRU);
-+ make_edge (new_bb, then_bb,
-+ EDGE_TRUE_VALUE | (irr ? EDGE_IRREDUCIBLE_LOOP : 0));
-+ make_edge (new_bb, old_dest,
-+ EDGE_FALSE_VALUE | (irr ? EDGE_IRREDUCIBLE_LOOP : 0));
-+ then_old_edge = make_edge (then_bb, old_dest,
-+ EDGE_FALLTHRU | (irr ? EDGE_IRREDUCIBLE_LOOP : 0));
-
- set_immediate_dominator (CDI_DOMINATORS, then_bb, new_bb);
-
-Index: gcc/tree-ssa-tail-merge.c
-===================================================================
---- a/src/gcc/tree-ssa-tail-merge.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/tree-ssa-tail-merge.c (.../branches/gcc-4_9-branch)
-@@ -481,7 +481,11 @@
- hashval = iterative_hash_hashval_t
- ((hashval_t) gimple_call_internal_fn (stmt), hashval);
- else
-- hashval = iterative_hash_expr (gimple_call_fn (stmt), hashval);
-+ {
-+ hashval = iterative_hash_expr (gimple_call_fn (stmt), hashval);
-+ if (gimple_call_chain (stmt))
-+ hashval = iterative_hash_expr (gimple_call_chain (stmt), hashval);
-+ }
- for (i = 0; i < gimple_call_num_args (stmt); i++)
- {
- arg = gimple_call_arg (stmt, i);
-@@ -1121,18 +1125,23 @@
- switch (gimple_code (s1))
- {
- case GIMPLE_CALL:
-- if (gimple_call_num_args (s1) != gimple_call_num_args (s2))
-- return false;
- if (!gimple_call_same_target_p (s1, s2))
- return false;
-
-+ t1 = gimple_call_chain (s1);
-+ t2 = gimple_call_chain (s2);
-+ if (!gimple_operand_equal_value_p (t1, t2))
-+ return false;
-+
-+ if (gimple_call_num_args (s1) != gimple_call_num_args (s2))
-+ return false;
-+
- for (i = 0; i < gimple_call_num_args (s1); ++i)
- {
- t1 = gimple_call_arg (s1, i);
- t2 = gimple_call_arg (s2, i);
-- if (gimple_operand_equal_value_p (t1, t2))
-- continue;
-- return false;
-+ if (!gimple_operand_equal_value_p (t1, t2))
-+ return false;
- }
-
- lhs1 = gimple_get_lhs (s1);
-Index: gcc/tree-pretty-print.c
-===================================================================
---- a/src/gcc/tree-pretty-print.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/tree-pretty-print.c (.../branches/gcc-4_9-branch)
-@@ -499,6 +499,7 @@
- pp_string (buffer, "alloc");
- break;
- case OMP_CLAUSE_MAP_TO:
-+ case OMP_CLAUSE_MAP_TO_PSET:
- pp_string (buffer, "to");
- break;
- case OMP_CLAUSE_MAP_FROM:
-@@ -519,6 +520,9 @@
- if (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_MAP
- && OMP_CLAUSE_MAP_KIND (clause) == OMP_CLAUSE_MAP_POINTER)
- pp_string (buffer, " [pointer assign, bias: ");
-+ else if (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_MAP
-+ && OMP_CLAUSE_MAP_KIND (clause) == OMP_CLAUSE_MAP_TO_PSET)
-+ pp_string (buffer, " [pointer set, len: ");
- else
- pp_string (buffer, " [len: ");
- dump_generic_node (buffer, OMP_CLAUSE_SIZE (clause),
-Index: gcc/c-family/c-opts.c
-===================================================================
---- a/src/gcc/c-family/c-opts.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/c-family/c-opts.c (.../branches/gcc-4_9-branch)
-@@ -851,6 +851,12 @@
- if (flag_objc_exceptions && !flag_objc_sjlj_exceptions)
- flag_exceptions = 1;
-
-+ /* If -ffreestanding, -fno-hosted or -fno-builtin then disable
-+ pattern recognition. */
-+ if (!global_options_set.x_flag_tree_loop_distribute_patterns
-+ && flag_no_builtin)
-+ flag_tree_loop_distribute_patterns = 0;
-+
- /* -Woverlength-strings is off by default, but is enabled by -Wpedantic.
- It is never enabled in C++, as the minimum limit is not normative
- in that standard. */
-Index: gcc/c-family/ChangeLog
-===================================================================
---- a/src/gcc/c-family/ChangeLog (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/c-family/ChangeLog (.../branches/gcc-4_9-branch)
-@@ -1,3 +1,45 @@
-+2014-06-30 Jakub Jelinek <jakub@redhat.com>
-+
-+ Backported from mainline
-+ 2014-06-10 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR fortran/60928
-+ * c-pragma.c (omp_pragmas_simd): Move PRAGMA_OMP_TASK...
-+ (omp_pragmas): ... back here.
-+
-+2014-06-12 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR middle-end/61486
-+ * c-omp.c (c_omp_split_clauses): Don't crash on firstprivate in
-+ #pragma omp target teams or
-+ #pragma omp {,target }teams distribute simd.
-+
-+2014-06-04 Marek Polacek <polacek@redhat.com>
-+
-+ Backport from mainline
-+ 2014-05-08 Marek Polacek <polacek@redhat.com>
-+
-+ PR c/61053
-+ * c-common.c (min_align_of_type): New function factored out from...
-+ (c_sizeof_or_alignof_type): ...here.
-+ * c-common.h (min_align_of_type): Declare.
-+
-+2014-05-06 Richard Biener <rguenther@suse.de>
-+
-+ * c-opts.c (c_common_post_options): For -freestanding,
-+ -fno-hosted and -fno-builtin disable pattern recognition
-+ if not enabled explicitely.
-+
-+2014-04-22 Richard Biener <rguenther@suse.de>
-+
-+ Backport from mainline
-+ 2014-04-14 Richard Biener <rguenther@suse.de>
-+ Marc Glisse <marc.glisse@inria.fr>
-+
-+ PR c/60819
-+ * c-common.c (convert_vector_to_pointer_for_subscript): Properly
-+ apply may-alias the scalar pointer type when applicable.
-+
- 2014-04-22 Release Manager
-
- * GCC 4.9.0 released.
-Index: gcc/c-family/c-common.c
-===================================================================
---- a/src/gcc/c-family/c-common.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/c-family/c-common.c (.../branches/gcc-4_9-branch)
-@@ -4927,6 +4927,26 @@
- return -1;
- }
-
-+/* Return the least alignment required for type TYPE. */
-+
-+unsigned int
-+min_align_of_type (tree type)
-+{
-+ unsigned int align = TYPE_ALIGN (type);
-+ align = MIN (align, BIGGEST_ALIGNMENT);
-+#ifdef BIGGEST_FIELD_ALIGNMENT
-+ align = MIN (align, BIGGEST_FIELD_ALIGNMENT);
-+#endif
-+ unsigned int field_align = align;
-+#ifdef ADJUST_FIELD_ALIGN
-+ tree field = build_decl (UNKNOWN_LOCATION, FIELD_DECL, NULL_TREE,
-+ type);
-+ field_align = ADJUST_FIELD_ALIGN (field, field_align);
-+#endif
-+ align = MIN (align, field_align);
-+ return align / BITS_PER_UNIT;
-+}
-+
- /* Compute the value of 'sizeof (TYPE)' or '__alignof__ (TYPE)', where
- the IS_SIZEOF parameter indicates which operator is being applied.
- The COMPLAIN flag controls whether we should diagnose possibly
-@@ -5005,21 +5025,7 @@
- size_int (TYPE_PRECISION (char_type_node)
- / BITS_PER_UNIT));
- else if (min_alignof)
-- {
-- unsigned int align = TYPE_ALIGN (type);
-- align = MIN (align, BIGGEST_ALIGNMENT);
--#ifdef BIGGEST_FIELD_ALIGNMENT
-- align = MIN (align, BIGGEST_FIELD_ALIGNMENT);
--#endif
-- unsigned int field_align = align;
--#ifdef ADJUST_FIELD_ALIGN
-- tree field = build_decl (UNKNOWN_LOCATION, FIELD_DECL, NULL_TREE,
-- type);
-- field_align = ADJUST_FIELD_ALIGN (field, field_align);
--#endif
-- align = MIN (align, field_align);
-- value = size_int (align / BITS_PER_UNIT);
-- }
-+ value = size_int (min_align_of_type (type));
- else
- value = size_int (TYPE_ALIGN_UNIT (type));
- }
-@@ -11770,8 +11776,21 @@
-
- c_common_mark_addressable_vec (*vecp);
- type = build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
-- type = build_pointer_type (type);
- type1 = build_pointer_type (TREE_TYPE (*vecp));
-+ bool ref_all = TYPE_REF_CAN_ALIAS_ALL (type1);
-+ if (!ref_all
-+ && !DECL_P (*vecp))
-+ {
-+ /* If the original vector isn't declared may_alias and it
-+ isn't a bare vector look if the subscripting would
-+ alias the vector we subscript, and if not, force ref-all. */
-+ alias_set_type vecset = get_alias_set (*vecp);
-+ alias_set_type sset = get_alias_set (type);
-+ if (!alias_sets_must_conflict_p (sset, vecset)
-+ && !alias_set_subset_of (sset, vecset))
-+ ref_all = true;
-+ }
-+ type = build_pointer_type_for_mode (type, ptr_mode, ref_all);
- *vecp = build1 (ADDR_EXPR, type1, *vecp);
- *vecp = convert (type, *vecp);
- }
-Index: gcc/c-family/c-omp.c
-===================================================================
---- a/src/gcc/c-family/c-omp.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/c-family/c-omp.c (.../branches/gcc-4_9-branch)
-@@ -789,8 +789,13 @@
- else if ((mask & (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_NUM_TEAMS))
- != 0)
- {
-- /* This must be #pragma omp {,target }teams distribute. */
-- gcc_assert (code == OMP_DISTRIBUTE);
-+ /* This must be one of
-+ #pragma omp {,target }teams distribute
-+ #pragma omp target teams
-+ #pragma omp {,target }teams distribute simd. */
-+ gcc_assert (code == OMP_DISTRIBUTE
-+ || code == OMP_TEAMS
-+ || code == OMP_SIMD);
- s = C_OMP_CLAUSE_SPLIT_TEAMS;
- }
- else if ((mask & (OMP_CLAUSE_MASK_1
-Index: gcc/c-family/c-common.h
-===================================================================
---- a/src/gcc/c-family/c-common.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/c-family/c-common.h (.../branches/gcc-4_9-branch)
-@@ -758,6 +758,7 @@
- extern tree c_save_expr (tree);
- extern tree c_common_truthvalue_conversion (location_t, tree);
- extern void c_apply_type_quals_to_decl (int, tree);
-+extern unsigned int min_align_of_type (tree);
- extern tree c_sizeof_or_alignof_type (location_t, tree, bool, bool, int);
- extern tree c_alignof_expr (location_t, tree);
- /* Print an error message for invalid operands to arith operation CODE.
-Index: gcc/c-family/c-pragma.c
-===================================================================
---- a/src/gcc/c-family/c-pragma.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/c-family/c-pragma.c (.../branches/gcc-4_9-branch)
-@@ -1188,6 +1188,7 @@
- { "section", PRAGMA_OMP_SECTION },
- { "sections", PRAGMA_OMP_SECTIONS },
- { "single", PRAGMA_OMP_SINGLE },
-+ { "task", PRAGMA_OMP_TASK },
- { "taskgroup", PRAGMA_OMP_TASKGROUP },
- { "taskwait", PRAGMA_OMP_TASKWAIT },
- { "taskyield", PRAGMA_OMP_TASKYIELD },
-@@ -1200,7 +1201,6 @@
- { "parallel", PRAGMA_OMP_PARALLEL },
- { "simd", PRAGMA_OMP_SIMD },
- { "target", PRAGMA_OMP_TARGET },
-- { "task", PRAGMA_OMP_TASK },
- { "teams", PRAGMA_OMP_TEAMS },
- };
-
-Index: gcc/c/ChangeLog
-===================================================================
---- a/src/gcc/c/ChangeLog (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/c/ChangeLog (.../branches/gcc-4_9-branch)
-@@ -1,3 +1,66 @@
-+2014-06-30 Jakub Jelinek <jakub@redhat.com>
-+
-+ Backported from mainline
-+ 2014-06-25 Jakub Jelinek <jakub@redhat.com>
-+
-+ * c-typeck.c (c_finish_omp_clauses): Make sure
-+ OMP_CLAUSE_LINEAR_STEP has correct type.
-+
-+2014-06-30 Sebastian Huber <sebastian.huber@embedded-brains.de>
-+
-+ * c-parser.c (c_parser_declaration_or_fndef): Discard all type
-+ qualifiers in __auto_type for atomic types.
-+ (c_parser_typeof_specifier): Discard all type qualifiers in
-+ __typeof__ for atomic types.
-+
-+2014-06-30 Igor Zamyatin <igor.zamyatin@intel.com>
-+
-+ PR middle-end/57541
-+ * c-array-notation.c (fix_builtin_array_notation_fn):
-+ Check for 0 arguments in builtin call. Check that bultin argument is
-+ correct.
-+ * c-parser.c (c_parser_array_notation): Check for incorrect initial
-+ index.
-+
-+2014-06-24 Jakub Jelinek <jakub@redhat.com>
-+
-+ * c-parser.c (c_parser_omp_for_loop): For
-+ #pragma omp parallel for simd move lastprivate clause from parallel
-+ to for rather than simd.
-+
-+2014-06-04 Igor Zamyatin <igor.zamyatin@intel.com>
-+
-+ PR c/58942
-+ * c-array-notation.c (fix_builtin_array_notation_fn): Handle the case
-+ with a pointer.
-+
-+2014-06-04 Marek Polacek <polacek@redhat.com>
-+
-+ Backport from mainline
-+ 2014-05-08 Marek Polacek <polacek@redhat.com>
-+
-+ PR c/61053
-+ * c-decl.c (grokdeclarator): Use min_align_of_type instead of
-+ TYPE_ALIGN_UNIT.
-+
-+2014-05-26 Igor Zamyatin <igor.zamyatin@intel.com>
-+
-+ PR c/61191
-+ * c-array-notation.c (fix_builtin_array_notation_fn): Check invalid
-+ function parameters.
-+
-+2014-04-24 Jakub Jelinek <jakub@redhat.com>
-+
-+ * c-parser.c (c_parser_omp_atomic): Allow seq_cst before
-+ atomic-clause, allow comma in between atomic-clause and
-+ seq_cst.
-+
-+2014-04-22 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR c/59073
-+ * c-parser.c (c_parser_omp_parallel): If c_parser_omp_for
-+ fails, don't set OM_PARALLEL_COMBINED and return NULL.
-+
- 2014-04-22 Release Manager
-
- * GCC 4.9.0 released.
-Index: gcc/c/c-parser.c
-===================================================================
---- a/src/gcc/c/c-parser.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/c/c-parser.c (.../branches/gcc-4_9-branch)
-@@ -1707,14 +1707,10 @@
- " initializer");
- init = convert_lvalue_to_rvalue (init_loc, init, true, true);
- tree init_type = TREE_TYPE (init.value);
-- /* As with typeof, remove _Atomic and const
-- qualifiers from atomic types. */
-+ /* As with typeof, remove all qualifiers from atomic types. */
- if (init_type != error_mark_node && TYPE_ATOMIC (init_type))
- init_type
-- = c_build_qualified_type (init_type,
-- (TYPE_QUALS (init_type)
-- & ~(TYPE_QUAL_ATOMIC
-- | TYPE_QUAL_CONST)));
-+ = c_build_qualified_type (init_type, TYPE_UNQUALIFIED);
- bool vm_type = variably_modified_type_p (init_type,
- NULL_TREE);
- if (vm_type)
-@@ -3011,16 +3007,11 @@
- if (was_vm)
- ret.expr = c_fully_fold (expr.value, false, &ret.expr_const_operands);
- pop_maybe_used (was_vm);
-- /* For use in macros such as those in <stdatomic.h>, remove
-- _Atomic and const qualifiers from atomic types. (Possibly
-- all qualifiers should be removed; const can be an issue for
-- more macros using typeof than just the <stdatomic.h>
-- ones.) */
-+ /* For use in macros such as those in <stdatomic.h>, remove all
-+ qualifiers from atomic types. (const can be an issue for more macros
-+ using typeof than just the <stdatomic.h> ones.) */
- if (ret.spec != error_mark_node && TYPE_ATOMIC (ret.spec))
-- ret.spec = c_build_qualified_type (ret.spec,
-- (TYPE_QUALS (ret.spec)
-- & ~(TYPE_QUAL_ATOMIC
-- | TYPE_QUAL_CONST)));
-+ ret.spec = c_build_qualified_type (ret.spec, TYPE_UNQUALIFIED);
- }
- c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
- return ret;
-@@ -11198,6 +11189,18 @@
- if (c_parser_next_token_is (parser, CPP_NAME))
- {
- const char *p = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value);
-+ if (!strcmp (p, "seq_cst"))
-+ {
-+ seq_cst = true;
-+ c_parser_consume_token (parser);
-+ if (c_parser_next_token_is (parser, CPP_COMMA)
-+ && c_parser_peek_2nd_token (parser)->type == CPP_NAME)
-+ c_parser_consume_token (parser);
-+ }
-+ }
-+ if (c_parser_next_token_is (parser, CPP_NAME))
-+ {
-+ const char *p = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value);
-
- if (!strcmp (p, "read"))
- code = OMP_ATOMIC_READ;
-@@ -11212,13 +11215,21 @@
- if (p)
- c_parser_consume_token (parser);
- }
-- if (c_parser_next_token_is (parser, CPP_NAME))
-+ if (!seq_cst)
- {
-- const char *p = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value);
-- if (!strcmp (p, "seq_cst"))
-+ if (c_parser_next_token_is (parser, CPP_COMMA)
-+ && c_parser_peek_2nd_token (parser)->type == CPP_NAME)
-+ c_parser_consume_token (parser);
-+
-+ if (c_parser_next_token_is (parser, CPP_NAME))
- {
-- seq_cst = true;
-- c_parser_consume_token (parser);
-+ const char *p
-+ = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value);
-+ if (!strcmp (p, "seq_cst"))
-+ {
-+ seq_cst = true;
-+ c_parser_consume_token (parser);
-+ }
- }
- }
- c_parser_skip_to_pragma_eol (parser);
-@@ -11861,8 +11872,17 @@
- tree l = build_omp_clause (OMP_CLAUSE_LOCATION (*c),
- OMP_CLAUSE_LASTPRIVATE);
- OMP_CLAUSE_DECL (l) = OMP_CLAUSE_DECL (*c);
-- OMP_CLAUSE_CHAIN (l) = clauses;
-- clauses = l;
-+ if (code == OMP_SIMD)
-+ {
-+ OMP_CLAUSE_CHAIN (l)
-+ = cclauses[C_OMP_CLAUSE_SPLIT_FOR];
-+ cclauses[C_OMP_CLAUSE_SPLIT_FOR] = l;
-+ }
-+ else
-+ {
-+ OMP_CLAUSE_CHAIN (l) = clauses;
-+ clauses = l;
-+ }
- OMP_CLAUSE_SET_CODE (*c, OMP_CLAUSE_SHARED);
- }
- }
-@@ -12208,10 +12228,12 @@
- if (!flag_openmp) /* flag_openmp_simd */
- return c_parser_omp_for (loc, parser, p_name, mask, cclauses);
- block = c_begin_omp_parallel ();
-- c_parser_omp_for (loc, parser, p_name, mask, cclauses);
-+ tree ret = c_parser_omp_for (loc, parser, p_name, mask, cclauses);
- stmt
- = c_finish_omp_parallel (loc, cclauses[C_OMP_CLAUSE_SPLIT_PARALLEL],
- block);
-+ if (ret == NULL_TREE)
-+ return ret;
- OMP_PARALLEL_COMBINED (stmt) = 1;
- return stmt;
- }
-@@ -14042,7 +14064,7 @@
- tree value_tree = NULL_TREE, type = NULL_TREE, array_type = NULL_TREE;
- tree array_type_domain = NULL_TREE;
-
-- if (array_value == error_mark_node)
-+ if (array_value == error_mark_node || initial_index == error_mark_node)
- {
- /* No need to continue. If either of these 2 were true, then an error
- must be emitted already. Thus, no need to emit them twice. */
-Index: gcc/c/c-typeck.c
-===================================================================
---- a/src/gcc/c/c-typeck.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/c/c-typeck.c (.../branches/gcc-4_9-branch)
-@@ -11925,6 +11925,9 @@
- s = size_one_node;
- OMP_CLAUSE_LINEAR_STEP (c) = s;
- }
-+ else
-+ OMP_CLAUSE_LINEAR_STEP (c)
-+ = fold_convert (TREE_TYPE (t), OMP_CLAUSE_LINEAR_STEP (c));
- goto check_dup_generic;
-
- check_dup_generic:
-Index: gcc/c/c-array-notation.c
-===================================================================
---- a/src/gcc/c/c-array-notation.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/c/c-array-notation.c (.../branches/gcc-4_9-branch)
-@@ -214,6 +214,13 @@
- if (an_type == BUILT_IN_NONE)
- return NULL_TREE;
-
-+ /* Builtin call should contain at least one argument. */
-+ if (call_expr_nargs (an_builtin_fn) == 0)
-+ {
-+ error_at (EXPR_LOCATION (an_builtin_fn), "Invalid builtin arguments");
-+ return error_mark_node;
-+ }
-+
- if (an_type == BUILT_IN_CILKPLUS_SEC_REDUCE
- || an_type == BUILT_IN_CILKPLUS_SEC_REDUCE_MUTATING)
- {
-@@ -229,6 +236,8 @@
- /* Fully fold any EXCESSIVE_PRECISION EXPR that can occur in the function
- parameter. */
- func_parm = c_fully_fold (func_parm, false, NULL);
-+ if (func_parm == error_mark_node)
-+ return error_mark_node;
-
- location = EXPR_LOCATION (an_builtin_fn);
-
-@@ -236,7 +245,10 @@
- return error_mark_node;
-
- if (rank == 0)
-- return an_builtin_fn;
-+ {
-+ error_at (location, "Invalid builtin arguments");
-+ return error_mark_node;
-+ }
- else if (rank > 1
- && (an_type == BUILT_IN_CILKPLUS_SEC_REDUCE_MAX_IND
- || an_type == BUILT_IN_CILKPLUS_SEC_REDUCE_MIN_IND))
-@@ -308,7 +320,9 @@
- || an_type == BUILT_IN_CILKPLUS_SEC_REDUCE_MIN_IND)
- array_ind_value = build_decl (location, VAR_DECL, NULL_TREE,
- TREE_TYPE (func_parm));
-- array_op0 = (*array_operand)[0];
-+ array_op0 = (*array_operand)[0];
-+ if (TREE_CODE (array_op0) == INDIRECT_REF)
-+ array_op0 = TREE_OPERAND (array_op0, 0);
- switch (an_type)
- {
- case BUILT_IN_CILKPLUS_SEC_REDUCE_ADD:
-Index: gcc/c/c-decl.c
-===================================================================
---- a/src/gcc/c/c-decl.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/c/c-decl.c (.../branches/gcc-4_9-branch)
-@@ -5911,7 +5911,7 @@
- else if (declspecs->align_log != -1)
- {
- alignas_align = 1U << declspecs->align_log;
-- if (alignas_align < TYPE_ALIGN_UNIT (type))
-+ if (alignas_align < min_align_of_type (type))
- {
- if (name)
- error_at (loc, "%<_Alignas%> specifiers cannot reduce "
-Index: gcc/cgraph.c
-===================================================================
---- a/src/gcc/cgraph.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/cgraph.c (.../branches/gcc-4_9-branch)
-@@ -2566,11 +2566,16 @@
- skipped_thunk = true;
- }
-
-- if (skipped_thunk
-- && (!node2->clone_of
-- || !node2->clone.args_to_skip
-- || !bitmap_bit_p (node2->clone.args_to_skip, 0)))
-- return false;
-+ if (skipped_thunk)
-+ {
-+ if (!node2->clone.args_to_skip
-+ || !bitmap_bit_p (node2->clone.args_to_skip, 0))
-+ return false;
-+ if (node2->former_clone_of == node->decl)
-+ return true;
-+ else if (!node2->clone_of)
-+ return false;
-+ }
-
- while (node != node2 && node2)
- node2 = node2->clone_of;
-Index: gcc/cgraph.h
-===================================================================
---- a/src/gcc/cgraph.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/cgraph.h (.../branches/gcc-4_9-branch)
-@@ -723,6 +723,7 @@
- /* In symtab.c */
- void symtab_register_node (symtab_node *);
- void symtab_unregister_node (symtab_node *);
-+void symtab_remove_from_same_comdat_group (symtab_node *);
- void symtab_remove_node (symtab_node *);
- symtab_node *symtab_get_node (const_tree);
- symtab_node *symtab_node_for_asm (const_tree asmname);
-Index: gcc/DATESTAMP
-===================================================================
---- a/src/gcc/DATESTAMP (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/DATESTAMP (.../branches/gcc-4_9-branch)
-@@ -1 +1 @@
--20140422
-+20140712
-Index: gcc/tree-tailcall.c
-===================================================================
---- a/src/gcc/tree-tailcall.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/tree-tailcall.c (.../branches/gcc-4_9-branch)
-@@ -285,10 +285,20 @@
- {
- /* Reject a tailcall if the type conversion might need
- additional code. */
-- if (gimple_assign_cast_p (stmt)
-- && TYPE_MODE (TREE_TYPE (dest)) != TYPE_MODE (TREE_TYPE (src_var)))
-- return false;
-+ if (gimple_assign_cast_p (stmt))
-+ {
-+ if (TYPE_MODE (TREE_TYPE (dest)) != TYPE_MODE (TREE_TYPE (src_var)))
-+ return false;
-
-+ /* Even if the type modes are the same, if the precision of the
-+ type is smaller than mode's precision,
-+ reduce_to_bit_field_precision would generate additional code. */
-+ if (INTEGRAL_TYPE_P (TREE_TYPE (dest))
-+ && (GET_MODE_PRECISION (TYPE_MODE (TREE_TYPE (dest)))
-+ > TYPE_PRECISION (TREE_TYPE (dest))))
-+ return false;
-+ }
-+
- if (src_var != *ass_var)
- return false;
-
-Index: gcc/tree.c
-===================================================================
---- a/src/gcc/tree.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/tree.c (.../branches/gcc-4_9-branch)
-@@ -252,7 +252,7 @@
- 4, /* OMP_CLAUSE_REDUCTION */
- 1, /* OMP_CLAUSE_COPYIN */
- 1, /* OMP_CLAUSE_COPYPRIVATE */
-- 2, /* OMP_CLAUSE_LINEAR */
-+ 3, /* OMP_CLAUSE_LINEAR */
- 2, /* OMP_CLAUSE_ALIGNED */
- 1, /* OMP_CLAUSE_DEPEND */
- 1, /* OMP_CLAUSE_UNIFORM */
-@@ -11079,8 +11079,13 @@
- WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
- }
-
-+ case OMP_CLAUSE_LINEAR:
-+ WALK_SUBTREE (OMP_CLAUSE_DECL (*tp));
-+ WALK_SUBTREE (OMP_CLAUSE_LINEAR_STEP (*tp));
-+ WALK_SUBTREE (OMP_CLAUSE_LINEAR_STMT (*tp));
-+ WALK_SUBTREE_TAIL (OMP_CLAUSE_CHAIN (*tp));
-+
- case OMP_CLAUSE_ALIGNED:
-- case OMP_CLAUSE_LINEAR:
- case OMP_CLAUSE_FROM:
- case OMP_CLAUSE_TO:
- case OMP_CLAUSE_MAP:
-Index: gcc/tree.h
-===================================================================
---- a/src/gcc/tree.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/tree.h (.../branches/gcc-4_9-branch)
-@@ -1327,9 +1327,20 @@
- #define OMP_CLAUSE_LINEAR_VARIABLE_STRIDE(NODE) \
- TREE_PROTECTED (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LINEAR))
-
-+/* True if a LINEAR clause is for an array or allocatable variable that
-+ needs special handling by the frontend. */
-+#define OMP_CLAUSE_LINEAR_ARRAY(NODE) \
-+ (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LINEAR)->base.deprecated_flag)
-+
- #define OMP_CLAUSE_LINEAR_STEP(NODE) \
- OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LINEAR), 1)
-
-+#define OMP_CLAUSE_LINEAR_STMT(NODE) \
-+ OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_LINEAR), 2)
-+
-+#define OMP_CLAUSE_LINEAR_GIMPLE_SEQ(NODE) \
-+ (OMP_CLAUSE_CHECK (NODE))->omp_clause.gimple_reduction_init
-+
- #define OMP_CLAUSE_ALIGNED_ALIGNMENT(NODE) \
- OMP_CLAUSE_OPERAND (OMP_CLAUSE_SUBCODE_CHECK (NODE, OMP_CLAUSE_ALIGNED), 1)
-
-Index: gcc/ipa-cp.c
-===================================================================
---- a/src/gcc/ipa-cp.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ipa-cp.c (.../branches/gcc-4_9-branch)
-@@ -433,6 +433,8 @@
- else if (!opt_for_fn (node->decl, optimize)
- || !opt_for_fn (node->decl, flag_ipa_cp))
- reason = "non-optimized function";
-+ else if (node->tm_clone)
-+ reason = "transactional memory clone";
- else if (lookup_attribute ("omp declare simd", DECL_ATTRIBUTES (node->decl)))
- {
- /* Ideally we should clone the SIMD clones themselves and create
-@@ -1587,15 +1589,7 @@
- && DECL_FUNCTION_CODE (target) == BUILT_IN_UNREACHABLE)
- || !possible_polymorphic_call_target_p
- (ie, cgraph_get_node (target)))
-- {
-- if (dump_file)
-- fprintf (dump_file,
-- "Type inconsident devirtualization: %s/%i->%s\n",
-- ie->caller->name (), ie->caller->order,
-- IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (target)));
-- target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
-- cgraph_get_create_node (target);
-- }
-+ target = ipa_impossible_devirt_target (ie, target);
- return target;
- }
- }
-@@ -1629,7 +1623,7 @@
- if (targets.length () == 1)
- target = targets[0]->decl;
- else
-- target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
-+ target = ipa_impossible_devirt_target (ie, NULL_TREE);
- }
- else
- {
-@@ -1643,15 +1637,7 @@
-
- if (target && !possible_polymorphic_call_target_p (ie,
- cgraph_get_node (target)))
-- {
-- if (dump_file)
-- fprintf (dump_file,
-- "Type inconsident devirtualization: %s/%i->%s\n",
-- ie->caller->name (), ie->caller->order,
-- IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (target)));
-- target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
-- cgraph_get_create_node (target);
-- }
-+ target = ipa_impossible_devirt_target (ie, target);
-
- return target;
- }
-@@ -2482,7 +2468,8 @@
- struct ipcp_value_source *src)
- {
- struct ipa_node_params *caller_info = IPA_NODE_REF (cs->caller);
-- struct ipa_node_params *dst_info = IPA_NODE_REF (cs->callee);
-+ cgraph_node *real_dest = cgraph_function_node (cs->callee);
-+ struct ipa_node_params *dst_info = IPA_NODE_REF (real_dest);
-
- if ((dst_info->ipcp_orig_node && !dst_info->is_all_contexts_clone)
- || caller_info->node_dead)
-Index: gcc/configure
-===================================================================
---- a/src/gcc/configure (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/configure (.../branches/gcc-4_9-branch)
-@@ -24497,7 +24497,7 @@
- .align 4
- smac %g2, %g3, %g1
- umac %g2, %g3, %g1
-- cas [%g2], %g3, %g1' > conftest.s
-+ casa [%g2] 0xb, %g3, %g1' > conftest.s
- if { ac_try='$gcc_cv_as $gcc_cv_as_flags -Aleon -o conftest.o conftest.s >&5'
- { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
- (eval $ac_try) 2>&5
-@@ -27056,6 +27056,34 @@
-
- fi
-
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking linker mapfile support for clearing hardware capabilities" >&5
-+$as_echo_n "checking linker mapfile support for clearing hardware capabilities... " >&6; }
-+saved_LDFLAGS="$LDFLAGS"
-+for clearcap_map in sol2-clearcapv2.map sol2-clearcap.map; do
-+ LDFLAGS="$saved_LDFLAGS -Wl,-M,${srcdir}/config/$clearcap_map"
-+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+/* end confdefs.h. */
-+int main(void) {return 0;}
-+_ACEOF
-+if ac_fn_c_try_link "$LINENO"; then :
-+ gcc_cv_ld_clearcap=yes; break
-+else
-+ gcc_cv_ld_clearcap=no
-+fi
-+rm -f core conftest.err conftest.$ac_objext \
-+ conftest$ac_exeext conftest.$ac_ext
-+done
-+LDFLAGS="$saved_LDFLAGS"
-+if test "x$gcc_cv_ld_clearcap" = xyes; then
-+
-+$as_echo "#define HAVE_LD_CLEARCAP 1" >>confdefs.h
-+
-+ ac_config_links="$ac_config_links clearcap.map:${srcdir}/config/$clearcap_map"
-+
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld_clearcap" >&5
-+$as_echo "$gcc_cv_ld_clearcap" >&6; }
-+
- case "$target:$tm_file" in
- powerpc64-*-freebsd* | powerpc64*-*-linux* | powerpc*-*-linux*rs6000/biarch64.h*)
- case "$target" in
-@@ -28585,6 +28613,7 @@
- # Files that config.status was made for.
- config_files="$ac_config_files"
- config_headers="$ac_config_headers"
-+config_links="$ac_config_links"
- config_commands="$ac_config_commands"
-
- _ACEOF
-@@ -28614,6 +28643,9 @@
- Configuration headers:
- $config_headers
-
-+Configuration links:
-+$config_links
-+
- Configuration commands:
- $config_commands
-
-@@ -28749,6 +28781,7 @@
- "as") CONFIG_FILES="$CONFIG_FILES as:exec-tool.in" ;;
- "collect-ld") CONFIG_FILES="$CONFIG_FILES collect-ld:exec-tool.in" ;;
- "nm") CONFIG_FILES="$CONFIG_FILES nm:exec-tool.in" ;;
-+ "clearcap.map") CONFIG_LINKS="$CONFIG_LINKS clearcap.map:${srcdir}/config/$clearcap_map" ;;
- "$all_outputs") CONFIG_FILES="$CONFIG_FILES $all_outputs" ;;
- "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
-
-@@ -28764,6 +28797,7 @@
- if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
- test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-+ test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links
- test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
- fi
-
-@@ -29085,7 +29119,7 @@
- fi # test -n "$CONFIG_HEADERS"
-
-
--eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS"
-+eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS"
- shift
- for ac_tag
- do
-@@ -29321,7 +29355,38 @@
- || as_fn_error "could not create -" "$LINENO" 5
- fi
- ;;
-+ :L)
-+ #
-+ # CONFIG_LINK
-+ #
-
-+ if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then
-+ :
-+ else
-+ # Prefer the file from the source tree if names are identical.
-+ if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then
-+ ac_source=$srcdir/$ac_source
-+ fi
-+
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5
-+$as_echo "$as_me: linking $ac_source to $ac_file" >&6;}
-+
-+ if test ! -r "$ac_source"; then
-+ as_fn_error "$ac_source: file not found" "$LINENO" 5
-+ fi
-+ rm -f "$ac_file"
-+
-+ # Try a relative symlink, then a hard link, then a copy.
-+ case $srcdir in
-+ [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;;
-+ *) ac_rel_source=$ac_top_build_prefix$ac_source ;;
-+ esac
-+ ln -s "$ac_rel_source" "$ac_file" 2>/dev/null ||
-+ ln "$ac_source" "$ac_file" 2>/dev/null ||
-+ cp -p "$ac_source" "$ac_file" ||
-+ as_fn_error "cannot link or copy $ac_source to $ac_file" "$LINENO" 5
-+ fi
-+ ;;
- :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
- $as_echo "$as_me: executing $ac_file commands" >&6;}
- ;;
-Index: gcc/lra-eliminations.c
-===================================================================
---- a/src/gcc/lra-eliminations.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/lra-eliminations.c (.../branches/gcc-4_9-branch)
-@@ -565,6 +565,16 @@
- alter_subreg (&x, false);
- return x;
- }
-+ else if (! subst_p)
-+ {
-+ /* LRA can transform subregs itself. So don't call
-+ simplify_gen_subreg until LRA transformations are
-+ finished. Function simplify_gen_subreg can do
-+ non-trivial transformations (like truncation) which
-+ might make LRA work to fail. */
-+ SUBREG_REG (x) = new_rtx;
-+ return x;
-+ }
- else
- return simplify_gen_subreg (GET_MODE (x), new_rtx,
- GET_MODE (new_rtx), SUBREG_BYTE (x));
-Index: gcc/fold-const.c
-===================================================================
---- a/src/gcc/fold-const.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fold-const.c (.../branches/gcc-4_9-branch)
-@@ -484,8 +484,6 @@
-
- case TRUNC_DIV_EXPR:
- case ROUND_DIV_EXPR:
-- case FLOOR_DIV_EXPR:
-- case CEIL_DIV_EXPR:
- case EXACT_DIV_EXPR:
- /* In general we can't negate A / B, because if A is INT_MIN and
- B is 1, we may turn this into INT_MIN / -1 which is undefined
-@@ -682,8 +680,6 @@
-
- case TRUNC_DIV_EXPR:
- case ROUND_DIV_EXPR:
-- case FLOOR_DIV_EXPR:
-- case CEIL_DIV_EXPR:
- case EXACT_DIV_EXPR:
- /* In general we can't negate A / B, because if A is INT_MIN and
- B is 1, we may turn this into INT_MIN / -1 which is undefined
-@@ -9312,7 +9308,7 @@
- /* Transform comparisons of the form X +- C1 CMP Y +- C2 to
- X CMP Y +- C2 +- C1 for signed X, Y. This is valid if
- the resulting offset is smaller in absolute value than the
-- original one. */
-+ original one and has the same sign. */
- if (TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (arg0))
- && (TREE_CODE (arg0) == PLUS_EXPR || TREE_CODE (arg0) == MINUS_EXPR)
- && (TREE_CODE (TREE_OPERAND (arg0, 1)) == INTEGER_CST
-@@ -9331,19 +9327,20 @@
- "a comparison");
-
- /* Put the constant on the side where it doesn't overflow and is
-- of lower absolute value than before. */
-+ of lower absolute value and of same sign than before. */
- cst = int_const_binop (TREE_CODE (arg0) == TREE_CODE (arg1)
- ? MINUS_EXPR : PLUS_EXPR,
- const2, const1);
- if (!TREE_OVERFLOW (cst)
-- && tree_int_cst_compare (const2, cst) == tree_int_cst_sgn (const2))
-+ && tree_int_cst_compare (const2, cst) == tree_int_cst_sgn (const2)
-+ && tree_int_cst_sgn (cst) == tree_int_cst_sgn (const2))
- {
- fold_overflow_warning (warnmsg, WARN_STRICT_OVERFLOW_COMPARISON);
- return fold_build2_loc (loc, code, type,
-- variable1,
-- fold_build2_loc (loc,
-- TREE_CODE (arg1), TREE_TYPE (arg1),
-- variable2, cst));
-+ variable1,
-+ fold_build2_loc (loc, TREE_CODE (arg1),
-+ TREE_TYPE (arg1),
-+ variable2, cst));
- }
-
- cst = int_const_binop (TREE_CODE (arg0) == TREE_CODE (arg1)
-@@ -9350,13 +9347,15 @@
- ? MINUS_EXPR : PLUS_EXPR,
- const1, const2);
- if (!TREE_OVERFLOW (cst)
-- && tree_int_cst_compare (const1, cst) == tree_int_cst_sgn (const1))
-+ && tree_int_cst_compare (const1, cst) == tree_int_cst_sgn (const1)
-+ && tree_int_cst_sgn (cst) == tree_int_cst_sgn (const1))
- {
- fold_overflow_warning (warnmsg, WARN_STRICT_OVERFLOW_COMPARISON);
- return fold_build2_loc (loc, code, type,
-- fold_build2_loc (loc, TREE_CODE (arg0), TREE_TYPE (arg0),
-- variable1, cst),
-- variable2);
-+ fold_build2_loc (loc, TREE_CODE (arg0),
-+ TREE_TYPE (arg0),
-+ variable1, cst),
-+ variable2);
- }
- }
-
-@@ -11430,7 +11429,6 @@
- {
- double_int c1, c2, c3, msk;
- int width = TYPE_PRECISION (type), w;
-- bool try_simplify = true;
-
- c1 = tree_to_double_int (TREE_OPERAND (arg0, 1));
- c2 = tree_to_double_int (arg1);
-@@ -11467,20 +11465,7 @@
- }
- }
-
-- /* If X is a tree of the form (Y * K1) & K2, this might conflict
-- with that optimization from the BIT_AND_EXPR optimizations.
-- This could end up in an infinite recursion. */
-- if (TREE_CODE (TREE_OPERAND (arg0, 0)) == MULT_EXPR
-- && TREE_CODE (TREE_OPERAND (TREE_OPERAND (arg0, 0), 1))
-- == INTEGER_CST)
-- {
-- tree t = TREE_OPERAND (TREE_OPERAND (arg0, 0), 1);
-- double_int masked = mask_with_tz (type, c3, tree_to_double_int (t));
--
-- try_simplify = (masked != c1);
-- }
--
-- if (try_simplify && c3 != c1)
-+ if (c3 != c1)
- return fold_build2_loc (loc, BIT_IOR_EXPR, type,
- fold_build2_loc (loc, BIT_AND_EXPR, type,
- TREE_OPERAND (arg0, 0),
-@@ -11870,16 +11855,25 @@
- && TREE_CODE (arg0) == MULT_EXPR
- && TREE_CODE (TREE_OPERAND (arg0, 1)) == INTEGER_CST)
- {
-+ double_int darg1 = tree_to_double_int (arg1);
- double_int masked
-- = mask_with_tz (type, tree_to_double_int (arg1),
-+ = mask_with_tz (type, darg1,
- tree_to_double_int (TREE_OPERAND (arg0, 1)));
-
- if (masked.is_zero ())
- return omit_two_operands_loc (loc, type, build_zero_cst (type),
- arg0, arg1);
-- else if (masked != tree_to_double_int (arg1))
-- return fold_build2_loc (loc, code, type, op0,
-- double_int_to_tree (type, masked));
-+ else if (masked != darg1)
-+ {
-+ /* Avoid the transform if arg1 is a mask of some
-+ mode which allows further optimizations. */
-+ int pop = darg1.popcount ();
-+ if (!(pop >= BITS_PER_UNIT
-+ && exact_log2 (pop) != -1
-+ && double_int::mask (pop) == darg1))
-+ return fold_build2_loc (loc, code, type, op0,
-+ double_int_to_tree (type, masked));
-+ }
- }
-
- /* For constants M and N, if M == (1LL << cst) - 1 && (N & M) == M,
-@@ -12092,11 +12086,17 @@
- /* See if we can shorten the right shift. */
- if (shiftc < prec)
- shift_type = inner_type;
-+ /* Otherwise X >> C1 is all zeros, so we'll optimize
-+ it into (X, 0) later on by making sure zerobits
-+ is all ones. */
- }
- }
- zerobits = ~(unsigned HOST_WIDE_INT) 0;
-- zerobits >>= HOST_BITS_PER_WIDE_INT - shiftc;
-- zerobits <<= prec - shiftc;
-+ if (shiftc < prec)
-+ {
-+ zerobits >>= HOST_BITS_PER_WIDE_INT - shiftc;
-+ zerobits <<= prec - shiftc;
-+ }
- /* For arithmetic shift if sign bit could be set, zerobits
- can contain actually sign bits, so no transformation is
- possible, unless MASK masks them all away. In that
-@@ -12114,7 +12114,7 @@
- /* ((X << 16) & 0xff00) is (X, 0). */
- if ((mask & zerobits) == mask)
- return omit_one_operand_loc (loc, type,
-- build_int_cst (type, 0), arg0);
-+ build_int_cst (type, 0), arg0);
-
- newmask = mask | zerobits;
- if (newmask != mask && (newmask & (newmask + 1)) == 0)
-Index: gcc/omp-low.c
-===================================================================
---- a/src/gcc/omp-low.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/omp-low.c (.../branches/gcc-4_9-branch)
-@@ -1509,11 +1509,19 @@
- break;
-
- case OMP_CLAUSE_SHARED:
-+ decl = OMP_CLAUSE_DECL (c);
- /* Ignore shared directives in teams construct. */
- if (gimple_code (ctx->stmt) == GIMPLE_OMP_TEAMS)
-- break;
-+ {
-+ /* Global variables don't need to be copied,
-+ the receiver side will use them directly. */
-+ tree odecl = maybe_lookup_decl_in_outer_ctx (decl, ctx);
-+ if (is_global_var (odecl))
-+ break;
-+ insert_decl_map (&ctx->cb, decl, odecl);
-+ break;
-+ }
- gcc_assert (is_taskreg_ctx (ctx));
-- decl = OMP_CLAUSE_DECL (c);
- gcc_assert (!COMPLETE_TYPE_P (TREE_TYPE (decl))
- || !is_variable_sized (decl));
- /* Global variables don't need to be copied,
-@@ -1670,6 +1678,11 @@
- }
- else
- {
-+ if (ctx->outer)
-+ {
-+ scan_omp_op (&OMP_CLAUSE_DECL (c), ctx->outer);
-+ decl = OMP_CLAUSE_DECL (c);
-+ }
- gcc_assert (!splay_tree_lookup (ctx->field_map,
- (splay_tree_key) decl));
- tree field
-@@ -1730,6 +1743,9 @@
- if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
- && OMP_CLAUSE_REDUCTION_PLACEHOLDER (c))
- scan_array_reductions = true;
-+ else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LINEAR
-+ && OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c))
-+ scan_array_reductions = true;
- break;
-
- case OMP_CLAUSE_SHARED:
-@@ -1816,6 +1832,9 @@
- else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
- && OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (c))
- scan_omp (&OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (c), ctx);
-+ else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LINEAR
-+ && OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c))
-+ scan_omp (&OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c), ctx);
- }
-
- /* Create a new name for omp child function. Returns an identifier. */
-@@ -1997,6 +2016,7 @@
- tree temp = create_tmp_var (type, NULL);
- tree c = build_omp_clause (UNKNOWN_LOCATION,
- OMP_CLAUSE__LOOPTEMP_);
-+ insert_decl_map (&outer_ctx->cb, temp, temp);
- OMP_CLAUSE_DECL (c) = temp;
- OMP_CLAUSE_CHAIN (c) = gimple_omp_parallel_clauses (stmt);
- gimple_omp_parallel_set_clauses (stmt, c);
-@@ -2494,6 +2514,23 @@
- return false;
- }
- break;
-+ case GIMPLE_OMP_TARGET:
-+ for (; ctx != NULL; ctx = ctx->outer)
-+ if (gimple_code (ctx->stmt) == GIMPLE_OMP_TARGET
-+ && gimple_omp_target_kind (ctx->stmt) == GF_OMP_TARGET_KIND_REGION)
-+ {
-+ const char *name;
-+ switch (gimple_omp_target_kind (stmt))
-+ {
-+ case GF_OMP_TARGET_KIND_REGION: name = "target"; break;
-+ case GF_OMP_TARGET_KIND_DATA: name = "target data"; break;
-+ case GF_OMP_TARGET_KIND_UPDATE: name = "target update"; break;
-+ default: gcc_unreachable ();
-+ }
-+ warning_at (gimple_location (stmt), 0,
-+ "%s construct inside of target region", name);
-+ }
-+ break;
- default:
- break;
- }
-@@ -2961,8 +2998,10 @@
- {
- tree c = find_omp_clause (gimple_omp_for_clauses (ctx->stmt),
- OMP_CLAUSE_SAFELEN);
-- if (c
-- && compare_tree_int (OMP_CLAUSE_SAFELEN_EXPR (c), max_vf) == -1)
-+ if (c && TREE_CODE (OMP_CLAUSE_SAFELEN_EXPR (c)) != INTEGER_CST)
-+ max_vf = 1;
-+ else if (c && compare_tree_int (OMP_CLAUSE_SAFELEN_EXPR (c),
-+ max_vf) == -1)
- max_vf = tree_to_shwi (OMP_CLAUSE_SAFELEN_EXPR (c));
- }
- if (max_vf > 1)
-@@ -2994,6 +3033,27 @@
- return true;
- }
-
-+/* Helper function of lower_rec_input_clauses. For a reference
-+ in simd reduction, add an underlying variable it will reference. */
-+
-+static void
-+handle_simd_reference (location_t loc, tree new_vard, gimple_seq *ilist)
-+{
-+ tree z = TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (new_vard)));
-+ if (TREE_CONSTANT (z))
-+ {
-+ const char *name = NULL;
-+ if (DECL_NAME (new_vard))
-+ name = IDENTIFIER_POINTER (DECL_NAME (new_vard));
-+
-+ z = create_tmp_var_raw (TREE_TYPE (TREE_TYPE (new_vard)), name);
-+ gimple_add_tmp_var (z);
-+ TREE_ADDRESSABLE (z) = 1;
-+ z = build_fold_addr_expr_loc (loc, z);
-+ gimplify_assign (new_vard, z, ilist);
-+ }
-+}
-+
- /* Generate code to implement the input clauses, FIRSTPRIVATE and COPYIN,
- from the receiver (aka child) side and initializers for REFERENCE_TYPE
- private variables. Initialization statements go in ILIST, while calls
-@@ -3025,11 +3085,14 @@
- for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
- switch (OMP_CLAUSE_CODE (c))
- {
-+ case OMP_CLAUSE_LINEAR:
-+ if (OMP_CLAUSE_LINEAR_ARRAY (c))
-+ max_vf = 1;
-+ /* FALLTHRU */
- case OMP_CLAUSE_REDUCTION:
- case OMP_CLAUSE_PRIVATE:
- case OMP_CLAUSE_FIRSTPRIVATE:
- case OMP_CLAUSE_LASTPRIVATE:
-- case OMP_CLAUSE_LINEAR:
- if (is_variable_sized (OMP_CLAUSE_DECL (c)))
- max_vf = 1;
- break;
-@@ -3085,6 +3148,13 @@
- if (pass != 0)
- continue;
- }
-+ /* Even without corresponding firstprivate, if
-+ decl is Fortran allocatable, it needs outer var
-+ reference. */
-+ else if (pass == 0
-+ && lang_hooks.decls.omp_private_outer_ref
-+ (OMP_CLAUSE_DECL (c)))
-+ lastprivate_firstprivate = true;
- break;
- case OMP_CLAUSE_ALIGNED:
- if (pass == 0)
-@@ -3185,13 +3255,11 @@
- }
- else if (TREE_CONSTANT (x))
- {
-- /* For reduction with placeholder in SIMD loop,
-- defer adding the initialization of the reference,
-- because if we decide to use SIMD array for it,
-- the initilization could cause expansion ICE. */
-- if (c_kind == OMP_CLAUSE_REDUCTION
-- && OMP_CLAUSE_REDUCTION_PLACEHOLDER (c)
-- && is_simd)
-+ /* For reduction in SIMD loop, defer adding the
-+ initialization of the reference, because if we decide
-+ to use SIMD array for it, the initilization could cause
-+ expansion ICE. */
-+ if (c_kind == OMP_CLAUSE_REDUCTION && is_simd)
- x = NULL_TREE;
- else
- {
-@@ -3350,34 +3418,37 @@
- if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LINEAR
- && gimple_omp_for_combined_into_p (ctx->stmt))
- {
-- tree stept = POINTER_TYPE_P (TREE_TYPE (x))
-- ? sizetype : TREE_TYPE (x);
-- tree t = fold_convert (stept,
-- OMP_CLAUSE_LINEAR_STEP (c));
-- tree c = find_omp_clause (clauses,
-- OMP_CLAUSE__LOOPTEMP_);
-- gcc_assert (c);
-- tree l = OMP_CLAUSE_DECL (c);
-- if (fd->collapse == 1)
-+ tree t = OMP_CLAUSE_LINEAR_STEP (c);
-+ tree stept = TREE_TYPE (t);
-+ tree ct = find_omp_clause (clauses,
-+ OMP_CLAUSE__LOOPTEMP_);
-+ gcc_assert (ct);
-+ tree l = OMP_CLAUSE_DECL (ct);
-+ tree n1 = fd->loop.n1;
-+ tree step = fd->loop.step;
-+ tree itype = TREE_TYPE (l);
-+ if (POINTER_TYPE_P (itype))
-+ itype = signed_type_for (itype);
-+ l = fold_build2 (MINUS_EXPR, itype, l, n1);
-+ if (TYPE_UNSIGNED (itype)
-+ && fd->loop.cond_code == GT_EXPR)
-+ l = fold_build2 (TRUNC_DIV_EXPR, itype,
-+ fold_build1 (NEGATE_EXPR, itype, l),
-+ fold_build1 (NEGATE_EXPR,
-+ itype, step));
-+ else
-+ l = fold_build2 (TRUNC_DIV_EXPR, itype, l, step);
-+ t = fold_build2 (MULT_EXPR, stept,
-+ fold_convert (stept, l), t);
-+
-+ if (OMP_CLAUSE_LINEAR_ARRAY (c))
- {
-- tree n1 = fd->loop.n1;
-- tree step = fd->loop.step;
-- tree itype = TREE_TYPE (l);
-- if (POINTER_TYPE_P (itype))
-- itype = signed_type_for (itype);
-- l = fold_build2 (MINUS_EXPR, itype, l, n1);
-- if (TYPE_UNSIGNED (itype)
-- && fd->loop.cond_code == GT_EXPR)
-- l = fold_build2 (TRUNC_DIV_EXPR, itype,
-- fold_build1 (NEGATE_EXPR,
-- itype, l),
-- fold_build1 (NEGATE_EXPR,
-- itype, step));
-- else
-- l = fold_build2 (TRUNC_DIV_EXPR, itype, l, step);
-+ x = lang_hooks.decls.omp_clause_linear_ctor
-+ (c, new_var, x, t);
-+ gimplify_and_add (x, ilist);
-+ goto do_dtor;
- }
-- t = fold_build2 (MULT_EXPR, stept,
-- fold_convert (stept, l), t);
-+
- if (POINTER_TYPE_P (TREE_TYPE (x)))
- x = fold_build2 (POINTER_PLUS_EXPR,
- TREE_TYPE (x), x, t);
-@@ -3401,10 +3472,7 @@
- = gimple_build_assign (unshare_expr (lvar), iv);
- gsi_insert_before_without_update (&gsi, g,
- GSI_SAME_STMT);
-- tree stept = POINTER_TYPE_P (TREE_TYPE (x))
-- ? sizetype : TREE_TYPE (x);
-- tree t = fold_convert (stept,
-- OMP_CLAUSE_LINEAR_STEP (c));
-+ tree t = OMP_CLAUSE_LINEAR_STEP (c);
- enum tree_code code = PLUS_EXPR;
- if (POINTER_TYPE_P (TREE_TYPE (new_var)))
- code = POINTER_PLUS_EXPR;
-@@ -3520,25 +3588,10 @@
- But if they aren't used, we need to emit the deferred
- initialization now. */
- else if (is_reference (var) && is_simd)
-- {
-- tree z
-- = TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (new_vard)));
-- if (TREE_CONSTANT (z))
-- {
-- const char *name = NULL;
-- if (DECL_NAME (var))
-- name = IDENTIFIER_POINTER (DECL_NAME (new_vard));
--
-- z = create_tmp_var_raw
-- (TREE_TYPE (TREE_TYPE (new_vard)), name);
-- gimple_add_tmp_var (z);
-- TREE_ADDRESSABLE (z) = 1;
-- z = build_fold_addr_expr_loc (clause_loc, z);
-- gimplify_assign (new_vard, z, ilist);
-- }
-- }
-+ handle_simd_reference (clause_loc, new_vard, ilist);
- x = lang_hooks.decls.omp_clause_default_ctor
-- (c, new_var, unshare_expr (x));
-+ (c, unshare_expr (new_var),
-+ build_outer_var_ref (var, ctx));
- if (x)
- gimplify_and_add (x, ilist);
- if (OMP_CLAUSE_REDUCTION_GIMPLE_INIT (c))
-@@ -3569,6 +3622,13 @@
- if (code == MINUS_EXPR)
- code = PLUS_EXPR;
-
-+ tree new_vard = new_var;
-+ if (is_simd && is_reference (var))
-+ {
-+ gcc_assert (TREE_CODE (new_var) == MEM_REF);
-+ new_vard = TREE_OPERAND (new_var, 0);
-+ gcc_assert (DECL_P (new_vard));
-+ }
- if (is_simd
- && lower_rec_simd_input_clauses (new_var, ctx, max_vf,
- idx, lane, ivar, lvar))
-@@ -3580,9 +3640,18 @@
- x = build2 (code, TREE_TYPE (ref), ref, ivar);
- ref = build_outer_var_ref (var, ctx);
- gimplify_assign (ref, x, &llist[1]);
-+
-+ if (new_vard != new_var)
-+ {
-+ SET_DECL_VALUE_EXPR (new_vard,
-+ build_fold_addr_expr (lvar));
-+ DECL_HAS_VALUE_EXPR_P (new_vard) = 1;
-+ }
- }
- else
- {
-+ if (is_reference (var) && is_simd)
-+ handle_simd_reference (clause_loc, new_vard, ilist);
- gimplify_assign (new_var, x, ilist);
- if (is_simd)
- {
-@@ -3683,8 +3752,9 @@
- tree c = find_omp_clause (gimple_omp_for_clauses (ctx->stmt),
- OMP_CLAUSE_SAFELEN);
- if (c == NULL_TREE
-- || compare_tree_int (OMP_CLAUSE_SAFELEN_EXPR (c),
-- max_vf) == 1)
-+ || (TREE_CODE (OMP_CLAUSE_SAFELEN_EXPR (c)) == INTEGER_CST
-+ && compare_tree_int (OMP_CLAUSE_SAFELEN_EXPR (c),
-+ max_vf) == 1))
- {
- c = build_omp_clause (UNKNOWN_LOCATION, OMP_CLAUSE_SAFELEN);
- OMP_CLAUSE_SAFELEN_EXPR (c) = build_int_cst (integer_type_node,
-@@ -3803,6 +3873,14 @@
- OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (c));
- OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (c) = NULL;
- }
-+ else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LINEAR
-+ && OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c))
-+ {
-+ lower_omp (&OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c), ctx);
-+ gimple_seq_add_seq (stmt_list,
-+ OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c));
-+ OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c) = NULL;
-+ }
-
- x = build_outer_var_ref (var, ctx);
- if (is_reference (var))
-@@ -5570,6 +5648,12 @@
- {
- stmt = gimple_build_assign (endvar, iend);
- gsi_insert_after (&gsi, stmt, GSI_CONTINUE_LINKING);
-+ if (useless_type_conversion_p (TREE_TYPE (fd->loop.v), TREE_TYPE (iend)))
-+ stmt = gimple_build_assign (fd->loop.v, iend);
-+ else
-+ stmt = gimple_build_assign_with_ops (NOP_EXPR, fd->loop.v, iend,
-+ NULL_TREE);
-+ gsi_insert_after (&gsi, stmt, GSI_CONTINUE_LINKING);
- }
- if (fd->collapse > 1)
- expand_omp_for_init_vars (fd, &gsi, counts, inner_stmt, startvar);
-@@ -5986,6 +6070,12 @@
- {
- stmt = gimple_build_assign (endvar, e);
- gsi_insert_after (&gsi, stmt, GSI_CONTINUE_LINKING);
-+ if (useless_type_conversion_p (TREE_TYPE (fd->loop.v), TREE_TYPE (e)))
-+ stmt = gimple_build_assign (fd->loop.v, e);
-+ else
-+ stmt = gimple_build_assign_with_ops (NOP_EXPR, fd->loop.v, e,
-+ NULL_TREE);
-+ gsi_insert_after (&gsi, stmt, GSI_CONTINUE_LINKING);
- }
- if (fd->collapse > 1)
- expand_omp_for_init_vars (fd, &gsi, counts, inner_stmt, startvar);
-@@ -6371,6 +6461,12 @@
- {
- stmt = gimple_build_assign (endvar, e);
- gsi_insert_after (&si, stmt, GSI_CONTINUE_LINKING);
-+ if (useless_type_conversion_p (TREE_TYPE (fd->loop.v), TREE_TYPE (e)))
-+ stmt = gimple_build_assign (fd->loop.v, e);
-+ else
-+ stmt = gimple_build_assign_with_ops (NOP_EXPR, fd->loop.v, e,
-+ NULL_TREE);
-+ gsi_insert_after (&si, stmt, GSI_CONTINUE_LINKING);
- }
- if (fd->collapse > 1)
- expand_omp_for_init_vars (fd, &si, counts, inner_stmt, startvar);
-@@ -6822,8 +6918,10 @@
- else
- {
- safelen = OMP_CLAUSE_SAFELEN_EXPR (safelen);
-- if (!tree_fits_uhwi_p (safelen)
-- || tree_to_uhwi (safelen) > INT_MAX)
-+ if (TREE_CODE (safelen) != INTEGER_CST)
-+ loop->safelen = 0;
-+ else if (!tree_fits_uhwi_p (safelen)
-+ || tree_to_uhwi (safelen) > INT_MAX)
- loop->safelen = INT_MAX;
- else
- loop->safelen = tree_to_uhwi (safelen);
-@@ -8389,10 +8487,14 @@
- && gimple_code (ctx->outer->stmt) == GIMPLE_OMP_PARALLEL
- && ctx->outer->cancellable)
- {
-- tree lhs = create_tmp_var (boolean_type_node, NULL);
-+ tree fndecl = builtin_decl_explicit (BUILT_IN_GOMP_CANCEL);
-+ tree c_bool_type = TREE_TYPE (TREE_TYPE (fndecl));
-+ tree lhs = create_tmp_var (c_bool_type, NULL);
- gimple_omp_return_set_lhs (omp_return, lhs);
- tree fallthru_label = create_artificial_label (UNKNOWN_LOCATION);
-- gimple g = gimple_build_cond (NE_EXPR, lhs, boolean_false_node,
-+ gimple g = gimple_build_cond (NE_EXPR, lhs,
-+ fold_convert (c_bool_type,
-+ boolean_false_node),
- ctx->outer->cancel_label, fallthru_label);
- gimple_seq_add_stmt (body, g);
- gimple_seq_add_stmt (body, gimple_build_label (fallthru_label));
-@@ -8989,7 +9091,10 @@
- OMP_CLAUSE__LOOPTEMP_);
- }
- else
-- temp = create_tmp_var (type, NULL);
-+ {
-+ temp = create_tmp_var (type, NULL);
-+ insert_decl_map (&ctx->outer->cb, temp, temp);
-+ }
- *pc = build_omp_clause (UNKNOWN_LOCATION, OMP_CLAUSE__LOOPTEMP_);
- OMP_CLAUSE_DECL (*pc) = temp;
- pc = &OMP_CLAUSE_CHAIN (*pc);
-@@ -10098,8 +10203,6 @@
- }
- break;
- }
-- tree lhs;
-- lhs = create_tmp_var (boolean_type_node, NULL);
- if (DECL_FUNCTION_CODE (fndecl) == BUILT_IN_GOMP_BARRIER)
- {
- fndecl = builtin_decl_explicit (BUILT_IN_GOMP_BARRIER_CANCEL);
-@@ -10106,6 +10209,8 @@
- gimple_call_set_fndecl (stmt, fndecl);
- gimple_call_set_fntype (stmt, TREE_TYPE (fndecl));
- }
-+ tree lhs;
-+ lhs = create_tmp_var (TREE_TYPE (TREE_TYPE (fndecl)), NULL);
- gimple_call_set_lhs (stmt, lhs);
- tree fallthru_label;
- fallthru_label = create_artificial_label (UNKNOWN_LOCATION);
-@@ -10112,7 +10217,9 @@
- gimple g;
- g = gimple_build_label (fallthru_label);
- gsi_insert_after (gsi_p, g, GSI_SAME_STMT);
-- g = gimple_build_cond (NE_EXPR, lhs, boolean_false_node,
-+ g = gimple_build_cond (NE_EXPR, lhs,
-+ fold_convert (TREE_TYPE (lhs),
-+ boolean_false_node),
- cctx->cancel_label, fallthru_label);
- gsi_insert_after (gsi_p, g, GSI_SAME_STMT);
- break;
-@@ -11291,45 +11398,53 @@
- ipa_simd_modify_stmt_ops (tree *tp, int *walk_subtrees, void *data)
- {
- struct walk_stmt_info *wi = (struct walk_stmt_info *) data;
-- if (!SSA_VAR_P (*tp))
-+ struct modify_stmt_info *info = (struct modify_stmt_info *) wi->info;
-+ tree *orig_tp = tp;
-+ if (TREE_CODE (*tp) == ADDR_EXPR)
-+ tp = &TREE_OPERAND (*tp, 0);
-+ struct ipa_parm_adjustment *cand = NULL;
-+ if (TREE_CODE (*tp) == PARM_DECL)
-+ cand = ipa_get_adjustment_candidate (&tp, NULL, info->adjustments, true);
-+ else
- {
-- /* Make sure we treat subtrees as a RHS. This makes sure that
-- when examining the `*foo' in *foo=x, the `foo' get treated as
-- a use properly. */
-- wi->is_lhs = false;
-- wi->val_only = true;
- if (TYPE_P (*tp))
- *walk_subtrees = 0;
-- return NULL_TREE;
- }
-- struct modify_stmt_info *info = (struct modify_stmt_info *) wi->info;
-- struct ipa_parm_adjustment *cand
-- = ipa_get_adjustment_candidate (&tp, NULL, info->adjustments, true);
-- if (!cand)
-- return NULL_TREE;
-
-- tree t = *tp;
-- tree repl = make_ssa_name (TREE_TYPE (t), NULL);
--
-- gimple stmt;
-- gimple_stmt_iterator gsi = gsi_for_stmt (info->stmt);
-- if (wi->is_lhs)
-+ tree repl = NULL_TREE;
-+ if (cand)
-+ repl = unshare_expr (cand->new_decl);
-+ else
- {
-- stmt = gimple_build_assign (unshare_expr (cand->new_decl), repl);
-- gsi_insert_after (&gsi, stmt, GSI_SAME_STMT);
-- SSA_NAME_DEF_STMT (repl) = info->stmt;
-+ if (tp != orig_tp)
-+ {
-+ *walk_subtrees = 0;
-+ bool modified = info->modified;
-+ info->modified = false;
-+ walk_tree (tp, ipa_simd_modify_stmt_ops, wi, wi->pset);
-+ if (!info->modified)
-+ {
-+ info->modified = modified;
-+ return NULL_TREE;
-+ }
-+ info->modified = modified;
-+ repl = *tp;
-+ }
-+ else
-+ return NULL_TREE;
- }
-- else
-+
-+ if (tp != orig_tp)
- {
-- /* You'd think we could skip the extra SSA variable when
-- wi->val_only=true, but we may have `*var' which will get
-- replaced into `*var_array[iter]' and will likely be something
-- not gimple. */
-- stmt = gimple_build_assign (repl, unshare_expr (cand->new_decl));
-+ repl = build_fold_addr_expr (repl);
-+ gimple stmt
-+ = gimple_build_assign (make_ssa_name (TREE_TYPE (repl), NULL), repl);
-+ repl = gimple_assign_lhs (stmt);
-+ gimple_stmt_iterator gsi = gsi_for_stmt (info->stmt);
- gsi_insert_before (&gsi, stmt, GSI_SAME_STMT);
-+ *orig_tp = repl;
- }
--
-- if (!useless_type_conversion_p (TREE_TYPE (*tp), TREE_TYPE (repl)))
-+ else if (!useless_type_conversion_p (TREE_TYPE (*tp), TREE_TYPE (repl)))
- {
- tree vce = build1 (VIEW_CONVERT_EXPR, TREE_TYPE (*tp), repl);
- *tp = vce;
-@@ -11338,8 +11453,6 @@
- *tp = repl;
-
- info->modified = true;
-- wi->is_lhs = false;
-- wi->val_only = true;
- return NULL_TREE;
- }
-
-@@ -11358,7 +11471,7 @@
- tree retval_array, tree iter)
- {
- basic_block bb;
-- unsigned int i, j;
-+ unsigned int i, j, l;
-
- /* Re-use the adjustments array, but this time use it to replace
- every function argument use to an offset into the corresponding
-@@ -11381,6 +11494,46 @@
- j += node->simdclone->simdlen / TYPE_VECTOR_SUBPARTS (vectype) - 1;
- }
-
-+ l = adjustments.length ();
-+ for (i = 1; i < num_ssa_names; i++)
-+ {
-+ tree name = ssa_name (i);
-+ if (name
-+ && SSA_NAME_VAR (name)
-+ && TREE_CODE (SSA_NAME_VAR (name)) == PARM_DECL)
-+ {
-+ for (j = 0; j < l; j++)
-+ if (SSA_NAME_VAR (name) == adjustments[j].base
-+ && adjustments[j].new_decl)
-+ {
-+ tree base_var;
-+ if (adjustments[j].new_ssa_base == NULL_TREE)
-+ {
-+ base_var
-+ = copy_var_decl (adjustments[j].base,
-+ DECL_NAME (adjustments[j].base),
-+ TREE_TYPE (adjustments[j].base));
-+ adjustments[j].new_ssa_base = base_var;
-+ }
-+ else
-+ base_var = adjustments[j].new_ssa_base;
-+ if (SSA_NAME_IS_DEFAULT_DEF (name))
-+ {
-+ bb = single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun));
-+ gimple_stmt_iterator gsi = gsi_after_labels (bb);
-+ tree new_decl = unshare_expr (adjustments[j].new_decl);
-+ set_ssa_default_def (cfun, adjustments[j].base, NULL_TREE);
-+ SET_SSA_NAME_VAR_OR_IDENTIFIER (name, base_var);
-+ SSA_NAME_IS_DEFAULT_DEF (name) = 0;
-+ gimple stmt = gimple_build_assign (name, new_decl);
-+ gsi_insert_before (&gsi, stmt, GSI_SAME_STMT);
-+ }
-+ else
-+ SET_SSA_NAME_VAR_OR_IDENTIFIER (name, base_var);
-+ }
-+ }
-+ }
-+
- struct modify_stmt_info info;
- info.adjustments = adjustments;
-
-Index: gcc/ipa-inline-transform.c
-===================================================================
---- a/src/gcc/ipa-inline-transform.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ipa-inline-transform.c (.../branches/gcc-4_9-branch)
-@@ -214,6 +214,7 @@
- it is NULL. If UPDATE_OVERALL_SUMMARY is false, do not bother to recompute overall
- size of caller after inlining. Caller is required to eventually do it via
- inline_update_overall_summary.
-+ If callee_removed is non-NULL, set it to true if we removed callee node.
-
- Return true iff any new callgraph edges were discovered as a
- result of inlining. */
-@@ -221,7 +222,8 @@
- bool
- inline_call (struct cgraph_edge *e, bool update_original,
- vec<cgraph_edge_p> *new_edges,
-- int *overall_size, bool update_overall_summary)
-+ int *overall_size, bool update_overall_summary,
-+ bool *callee_removed)
- {
- int old_size = 0, new_size = 0;
- struct cgraph_node *to = NULL;
-@@ -260,6 +262,8 @@
- {
- next_alias = cgraph_alias_target (alias);
- cgraph_remove_node (alias);
-+ if (callee_removed)
-+ *callee_removed = true;
- alias = next_alias;
- }
- else
-Index: gcc/tree-ssa-sccvn.c
-===================================================================
---- a/src/gcc/tree-ssa-sccvn.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/tree-ssa-sccvn.c (.../branches/gcc-4_9-branch)
-@@ -3074,33 +3074,12 @@
- /* If all value numbered to the same value, the phi node has that
- value. */
- if (allsame)
-- {
-- if (is_gimple_min_invariant (sameval))
-- {
-- VN_INFO (PHI_RESULT (phi))->has_constants = true;
-- VN_INFO (PHI_RESULT (phi))->expr = sameval;
-- }
-- else
-- {
-- VN_INFO (PHI_RESULT (phi))->has_constants = false;
-- VN_INFO (PHI_RESULT (phi))->expr = sameval;
-- }
-+ return set_ssa_val_to (PHI_RESULT (phi), sameval);
-
-- if (TREE_CODE (sameval) == SSA_NAME)
-- return visit_copy (PHI_RESULT (phi), sameval);
--
-- return set_ssa_val_to (PHI_RESULT (phi), sameval);
-- }
--
- /* Otherwise, see if it is equivalent to a phi node in this block. */
- result = vn_phi_lookup (phi);
- if (result)
-- {
-- if (TREE_CODE (result) == SSA_NAME)
-- changed = visit_copy (PHI_RESULT (phi), result);
-- else
-- changed = set_ssa_val_to (PHI_RESULT (phi), result);
-- }
-+ changed = set_ssa_val_to (PHI_RESULT (phi), result);
- else
- {
- vn_phi_insert (phi, PHI_RESULT (phi));
-@@ -3214,24 +3193,18 @@
- catch those with constants. The goal here is to simultaneously
- combine constants between expressions, but avoid infinite
- expansion of expressions during simplification. */
-- if (TREE_CODE (op0) == SSA_NAME)
-- {
-- if (VN_INFO (op0)->has_constants
-+ op0 = vn_valueize (op0);
-+ if (TREE_CODE (op0) == SSA_NAME
-+ && (VN_INFO (op0)->has_constants
- || TREE_CODE_CLASS (code) == tcc_comparison
-- || code == COMPLEX_EXPR)
-- op0 = valueize_expr (vn_get_expr_for (op0));
-- else
-- op0 = vn_valueize (op0);
-- }
-+ || code == COMPLEX_EXPR))
-+ op0 = valueize_expr (vn_get_expr_for (op0));
-
-- if (TREE_CODE (op1) == SSA_NAME)
-- {
-- if (VN_INFO (op1)->has_constants
-- || code == COMPLEX_EXPR)
-- op1 = valueize_expr (vn_get_expr_for (op1));
-- else
-- op1 = vn_valueize (op1);
-- }
-+ op1 = vn_valueize (op1);
-+ if (TREE_CODE (op1) == SSA_NAME
-+ && (VN_INFO (op1)->has_constants
-+ || code == COMPLEX_EXPR))
-+ op1 = valueize_expr (vn_get_expr_for (op1));
-
- /* Pointer plus constant can be represented as invariant address.
- Do so to allow further propatation, see also tree forwprop. */
-@@ -3289,24 +3262,28 @@
- return NULL_TREE;
-
- orig_op0 = op0;
-- if (VN_INFO (op0)->has_constants)
-- op0 = valueize_expr (vn_get_expr_for (op0));
-- else if (CONVERT_EXPR_CODE_P (code)
-- || code == REALPART_EXPR
-- || code == IMAGPART_EXPR
-- || code == VIEW_CONVERT_EXPR
-- || code == BIT_FIELD_REF)
-+ op0 = vn_valueize (op0);
-+ if (TREE_CODE (op0) == SSA_NAME)
- {
-- /* We want to do tree-combining on conversion-like expressions.
-- Make sure we feed only SSA_NAMEs or constants to fold though. */
-- tree tem = valueize_expr (vn_get_expr_for (op0));
-- if (UNARY_CLASS_P (tem)
-- || BINARY_CLASS_P (tem)
-- || TREE_CODE (tem) == VIEW_CONVERT_EXPR
-- || TREE_CODE (tem) == SSA_NAME
-- || TREE_CODE (tem) == CONSTRUCTOR
-- || is_gimple_min_invariant (tem))
-- op0 = tem;
-+ if (VN_INFO (op0)->has_constants)
-+ op0 = valueize_expr (vn_get_expr_for (op0));
-+ else if (CONVERT_EXPR_CODE_P (code)
-+ || code == REALPART_EXPR
-+ || code == IMAGPART_EXPR
-+ || code == VIEW_CONVERT_EXPR
-+ || code == BIT_FIELD_REF)
-+ {
-+ /* We want to do tree-combining on conversion-like expressions.
-+ Make sure we feed only SSA_NAMEs or constants to fold though. */
-+ tree tem = valueize_expr (vn_get_expr_for (op0));
-+ if (UNARY_CLASS_P (tem)
-+ || BINARY_CLASS_P (tem)
-+ || TREE_CODE (tem) == VIEW_CONVERT_EXPR
-+ || TREE_CODE (tem) == SSA_NAME
-+ || TREE_CODE (tem) == CONSTRUCTOR
-+ || is_gimple_min_invariant (tem))
-+ op0 = tem;
-+ }
- }
-
- /* Avoid folding if nothing changed, but remember the expression. */
-Index: gcc/cgraphunit.c
-===================================================================
---- a/src/gcc/cgraphunit.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/cgraphunit.c (.../branches/gcc-4_9-branch)
-@@ -1680,6 +1680,7 @@
- #ifdef ENABLE_CHECKING
- verify_flow_info ();
- #endif
-+ free_dominance_info (CDI_DOMINATORS);
-
- /* Since we want to emit the thunk, we explicitly mark its name as
- referenced. */
-Index: gcc/ChangeLog
-===================================================================
---- a/src/gcc/ChangeLog (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ChangeLog (.../branches/gcc-4_9-branch)
-@@ -1,3 +1,1643 @@
-+2014-07-10 Cary Coutant <ccoutant@google.com>
-+
-+ Backport from trunk at r212211.
-+
-+ * dwarf2out.c (remove_addr_table_entry): Remove unnecessary hash table
-+ lookup.
-+ (resolve_addr_in_expr): When replacing the rtx in a location list
-+ entry, get a new address table entry.
-+ (dwarf2out_finish): Call index_location_lists even if there are no
-+ addr_index_table entries yet.
-+
-+2014-07-10 Tom G. Christensen <tgc@jupiterrise.com>
-+
-+ * doc/install.texi: Remove links to defunct package providers for
-+ Solaris.
-+
-+2014-07-10 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ PR middle-end/53590
-+ * function.c (allocate_struct_function): Revert r188667 change.
-+
-+ * gimple-low.c (lower_builtin_setjmp): Use properly-typed constant.
-+
-+2014-07-09 Alan Lawrence <alan.lawrence@arm.com>
-+
-+ Backport r211369 from trunk.
-+ 2014-06-09 Alan Lawrence <alan.lawrence@arm.com>
-+
-+ PR target/61062
-+ * config/arm/arm_neon.h (vtrn_s8, vtrn_s16, vtrn_u8, vtrn_u16, vtrn_p8,
-+ vtrn_p16, vtrn_s32, vtrn_f32, vtrn_u32, vtrnq_s8, vtrnq_s16, vtrnq_s32,
-+ vtrnq_f32, vtrnq_u8, vtrnq_u16, vtrnq_u32, vtrnq_p8, vtrnq_p16, vzip_s8,
-+ vzip_s16, vzip_u8, vzip_u16, vzip_p8, vzip_p16, vzip_s32, vzip_f32,
-+ vzip_u32, vzipq_s8, vzipq_s16, vzipq_s32, vzipq_f32, vzipq_u8,
-+ vzipq_u16, vzipq_u32, vzipq_p8, vzipq_p16, vuzp_s8, vuzp_s16, vuzp_s32,
-+ vuzp_f32, vuzp_u8, vuzp_u16, vuzp_u32, vuzp_p8, vuzp_p16, vuzpq_s8,
-+ vuzpq_s16, vuzpq_s32, vuzpq_f32, vuzpq_u8, vuzpq_u16, vuzpq_u32,
-+ vuzpq_p8, vuzpq_p16): Correct mask for bigendian.
-+
-+
-+2014-07-09 Alan Lawrence <alan.lawrence@arm.com>
-+
-+ Backport r210219 from trunk.
-+ 2014-05-08 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
-+
-+ * config/arm/arm_neon.h: Update comment.
-+ * config/arm/neon-docgen.ml: Delete.
-+ * config/arm/neon-gen.ml: Delete.
-+ * doc/arm-neon-intrinsics.texi: Update comment.
-+
-+2014-07-09 Zhenqiang Chen <zhenqiang.chen@linaro.org>
-+
-+ Backport r211775 from trunk.
-+ 2014-06-18 Terry Guo <terry.guo@arm.com>
-+
-+ PR target/61544
-+ * config/arm/arm.c (thumb1_reorg): Move to next basic block if we
-+ reach the head.
-+
-+2014-07-08 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR rtl-optimization/61673
-+ * combine.c (simplify_comparison): Test just mode's sign bit
-+ in tmode rather than the sign bit and any bits above it.
-+
-+2014-07-08 James Greenhalgh <james.greenhalgh@arm.com>
-+
-+ Backport r212298 from trunk.
-+ 2014-07-04 James Greenhalgh <james.greenhalgh@arm.com>
-+
-+ * config/aarch64/aarch64-simd.md (move_lo_quad_internal_<mode>): New.
-+ (move_lo_quad_internal_be_<mode>): Likewise.
-+ (move_lo_quad_<mode>): Convert to define_expand.
-+ (aarch64_simd_move_hi_quad_<mode>): Gate on BYTES_BIG_ENDIAN.
-+ (aarch64_simd_move_hi_quad_be_<mode>): New.
-+ (move_hi_quad_<mode>): Use appropriate insn for BYTES_BIG_ENDIAN.
-+ (aarch64_combinez<mode>): Gate on BYTES_BIG_ENDIAN.
-+ (aarch64_combinez_be<mode>): New.
-+ (aarch64_combine<mode>): Convert to define_expand.
-+ (aarch64_combine_internal<mode>): New.
-+ (aarch64_simd_combine<mode>): Remove bogus RTL description.
-+
-+2014-07-08 Richard Biener <rguenther@suse.de>
-+
-+ PR tree-optimization/61680
-+ * tree-vect-data-refs.c (vect_analyze_data_ref_dependence):
-+ Handle properly all read-write dependences with group accesses.
-+
-+ PR tree-optimization/61681
-+ * tree-ssa-structalias.c (find_what_var_points_to): Expand
-+ NONLOCAL inside ESCAPED.
-+
-+2014-07-08 Alan Lawrence <alan.lawrence@arm.com>
-+
-+ Backport r211502 from mainline.
-+ 2014-06-10 Alan Lawrence <alan.lawrence@arm.com>
-+
-+ PR target/59843
-+ * config/aarch64/aarch64-modes.def: Add V1DFmode.
-+ * config/aarch64/aarch64.c (aarch64_vector_mode_supported_p):
-+ Support V1DFmode.
-+
-+2014-07-08 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR tree-optimization/61725
-+ * tree-vrp.c (extract_range_basic): Don't assume vr0 is unsigned
-+ range, use range_includes_zerop_p instead of integer_zerop on
-+ vr0->min, only use log2 of max if min is not negative.
-+
-+2014-07-06 Gerald Pfeifer <gerald@pfeifer.com>
-+
-+ * doc/install.texi (Specific, aarch64*-*-*): Fix markup. Reword a bit.
-+
-+2014-07-04 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR middle-end/61654
-+ * cgraphunit.c (expand_thunk): Call free_dominance_info.
-+
-+ PR tree-optimization/61684
-+ * tree-ssa-ifcombine.c (recognize_single_bit_test): Make sure
-+ rhs1 of conversion is a SSA_NAME before using SSA_NAME_DEF_STMT on it.
-+
-+2014-06-30 Jakub Jelinek <jakub@redhat.com>
-+
-+ Backported from mainline
-+ 2014-06-27 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR tree-optimization/57233
-+ PR tree-optimization/61299
-+ * tree-vect-generic.c (get_compute_type, count_type_subparts): New
-+ functions.
-+ (expand_vector_operations_1): Use them. If {L,R}ROTATE_EXPR
-+ would be lowered to scalar shifts, check if corresponding
-+ shifts and vector BIT_IOR_EXPR are supported and don't lower
-+ or lower just to narrower vector type in that case.
-+ * expmed.c (expand_shift_1): Fix up handling of vector
-+ shifts and rotates.
-+
-+ 2014-06-25 Jakub Jelinek <jakub@redhat.com>
-+
-+ * langhooks-def.h (LANG_HOOKS_OMP_CLAUSE_LINEAR_CTOR): Define.
-+ (LANG_HOOKS_DECLS): Add it.
-+ * gimplify.c (gimplify_omp_for): Make sure OMP_CLAUSE_LINEAR_STEP
-+ has correct type.
-+ * tree.h (OMP_CLAUSE_LINEAR_ARRAY): Define.
-+ * langhooks.h (struct lang_hooks_for_decls): Add
-+ omp_clause_linear_ctor hook.
-+ * omp-low.c (lower_rec_input_clauses): Set max_vf even if
-+ OMP_CLAUSE_LINEAR_ARRAY is set. Don't fold_convert
-+ OMP_CLAUSE_LINEAR_STEP. For OMP_CLAUSE_LINEAR_ARRAY in
-+ combined simd loop use omp_clause_linear_ctor hook.
-+
-+ 2014-06-24 Jakub Jelinek <jakub@redhat.com>
-+
-+ * gimplify.c (gimplify_scan_omp_clauses) <case OMP_CLAUSE_MAP,
-+ OMP_CLAUSE_TO, OMP_CLAUSE_FROM): Make sure OMP_CLAUSE_SIZE is
-+ non-NULL.
-+ <case OMP_CLAUSE_ALIGNED>: Gimplify OMP_CLAUSE_ALIGNED_ALIGNMENT.
-+ (gimplify_adjust_omp_clauses_1): Make sure OMP_CLAUSE_SIZE is
-+ non-NULL.
-+ (gimplify_adjust_omp_clauses): Likewise.
-+ * omp-low.c (lower_rec_simd_input_clauses,
-+ lower_rec_input_clauses, expand_omp_simd): Handle non-constant
-+ safelen the same as safelen(1).
-+ * tree-nested.c (convert_nonlocal_omp_clauses,
-+ convert_local_omp_clauses): Handle OMP_CLAUSE_ALIGNED. For
-+ OMP_CLAUSE_{MAP,TO,FROM} if not decl use walk_tree.
-+ (convert_nonlocal_reference_stmt, convert_local_reference_stmt):
-+ Fixup handling of GIMPLE_OMP_TARGET.
-+ (convert_tramp_reference_stmt, convert_gimple_call): Handle
-+ GIMPLE_OMP_TARGET.
-+
-+ 2014-06-18 Jakub Jelinek <jakub@redhat.com>
-+
-+ * gimplify.c (omp_notice_variable): If n is non-NULL
-+ and no flags change in ORT_TARGET region, don't jump to
-+ do_outer.
-+ (struct gimplify_adjust_omp_clauses_data): New type.
-+ (gimplify_adjust_omp_clauses_1): Adjust for data being
-+ a struct gimplify_adjust_omp_clauses_data pointer instead
-+ of tree *. Pass pre_p as a new argument to
-+ lang_hooks.decls.omp_finish_clause hook.
-+ (gimplify_adjust_omp_clauses): Add pre_p argument, adjust
-+ splay_tree_foreach to pass both list_p and pre_p.
-+ (gimplify_omp_parallel, gimplify_omp_task, gimplify_omp_for,
-+ gimplify_omp_workshare, gimplify_omp_target_update): Adjust
-+ gimplify_adjust_omp_clauses callers.
-+ * langhooks.c (lhd_omp_finish_clause): New function.
-+ * langhooks-def.h (lhd_omp_finish_clause): New prototype.
-+ (LANG_HOOKS_OMP_FINISH_CLAUSE): Define to lhd_omp_finish_clause.
-+ * langhooks.h (struct lang_hooks_for_decls): Add a new
-+ gimple_seq * argument to omp_finish_clause hook.
-+ * omp-low.c (scan_sharing_clauses): Call scan_omp_op on
-+ non-DECL_P OMP_CLAUSE_DECL if ctx->outer.
-+ (scan_omp_parallel, lower_omp_for): When adding
-+ _LOOPTEMP_ clause var, add it to outer ctx's decl_map
-+ as identity.
-+ * tree-core.h (OMP_CLAUSE_MAP_TO_PSET): New map kind.
-+ * tree-nested.c (convert_nonlocal_omp_clauses,
-+ convert_local_omp_clauses): Handle various OpenMP 4.0 clauses.
-+ * tree-pretty-print.c (dump_omp_clause): Handle
-+ OMP_CLAUSE_MAP_TO_PSET.
-+
-+ 2014-06-10 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR fortran/60928
-+ * omp-low.c (lower_rec_input_clauses) <case OMP_CLAUSE_LASTPRIVATE>:
-+ Set lastprivate_firstprivate even if omp_private_outer_ref
-+ langhook returns true.
-+ <case OMP_CLAUSE_REDUCTION>: When calling omp_clause_default_ctor
-+ langhook, call unshare_expr on new_var and call
-+ build_outer_var_ref to get the last argument.
-+
-+ 2014-05-11 Jakub Jelinek <jakub@redhat.com>
-+
-+ * tree.h (OMP_CLAUSE_LINEAR_STMT): Define.
-+ * tree.c (omp_clause_num_ops): Increase OMP_CLAUSE_LINEAR
-+ number of operands to 3.
-+ (walk_tree_1): Walk all operands of OMP_CLAUSE_LINEAR.
-+ * tree-nested.c (convert_nonlocal_omp_clauses,
-+ convert_local_omp_clauses): Handle OMP_CLAUSE_DEPEND.
-+ * gimplify.c (gimplify_scan_omp_clauses): Handle
-+ OMP_CLAUSE_LINEAR_STMT.
-+ * omp-low.c (lower_rec_input_clauses): Fix typo.
-+ (maybe_add_implicit_barrier_cancel, lower_omp_1): Add
-+ cast between Fortran boolean_type_node and C _Bool if
-+ needed.
-+
-+2014-06-30 Jason Merrill <jason@redhat.com>
-+
-+ PR c++/51253
-+ PR c++/61382
-+ * gimplify.c (gimplify_arg): Non-static.
-+ * gimplify.h: Declare it.
-+
-+2014-06-30 Marcus Shawcroft <marcus.shawcroft@arm.com>
-+
-+ Backport from Mainline
-+ 2014-06-30 Marcus Shawcroft <marcus.shawcroft@arm.com>
-+
-+ PR target/61633
-+ * config/aarch64/aarch64.md (*aarch64_ashr_sisd_or_int_<mode>3):
-+ Add alternative; make early clobber. Adjust both split patterns
-+ to use operand 0 as the working register.
-+
-+2014-06-30 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
-+
-+ * config/aarch64/iterators.md (VCOND): Handle SI and HI modes.
-+ Update comments.
-+ (VCONQ): Make comment more helpful.
-+ (VCON): Delete.
-+ * config/aarch64/aarch64-simd.md
-+ (aarch64_sqdmulh_lane<mode>):
-+ Use VCOND for operands 2. Update lane checking and flipping logic.
-+ (aarch64_sqrdmulh_lane<mode>): Likewise.
-+ (aarch64_sq<r>dmulh_lane<mode>_internal): Likewise.
-+ (aarch64_sqdmull2<mode>): Remove VCON, use VQ_HSI mode iterator.
-+ (aarch64_sqdml<SBINQOPS:as>l_lane<mode>_internal, VD_HSI): Change mode
-+ attribute of operand 3 to VCOND.
-+ (aarch64_sqdml<SBINQOPS:as>l_lane<mode>_internal, SD_HSI): Likewise.
-+ (aarch64_sqdml<SBINQOPS:as>l2_lane<mode>_internal): Likewise.
-+ (aarch64_sqdmull_lane<mode>_internal, VD_HSI): Likewise.
-+ (aarch64_sqdmull_lane<mode>_internal, SD_HSI): Likewise.
-+ (aarch64_sqdmull2_lane<mode>_internal): Likewise.
-+ (aarch64_sqdml<SBINQOPS:as>l_laneq<mode>_internal, VD_HSI: New
-+ define_insn.
-+ (aarch64_sqdml<SBINQOPS:as>l_laneq<mode>_internal, SD_HSI): Likewise.
-+ (aarch64_sqdml<SBINQOPS:as>l2_laneq<mode>_internal): Likewise.
-+ (aarch64_sqdmull_laneq<mode>_internal, VD_HSI): Likewise.
-+ (aarch64_sqdmull_laneq<mode>_internal, SD_HSI): Likewise.
-+ (aarch64_sqdmull2_laneq<mode>_internal): Likewise.
-+ (aarch64_sqdmlal_lane<mode>): Change mode attribute of penultimate
-+ operand to VCOND. Update lane flipping and bounds checking logic.
-+ (aarch64_sqdmlal2_lane<mode>): Likewise.
-+ (aarch64_sqdmlsl_lane<mode>): Likewise.
-+ (aarch64_sqdmull_lane<mode>): Likewise.
-+ (aarch64_sqdmull2_lane<mode>): Likewise.
-+ (aarch64_sqdmlal_laneq<mode>):
-+ Replace VCON usage with VCONQ.
-+ Emit aarch64_sqdmlal_laneq<mode>_internal insn.
-+ (aarch64_sqdmlal2_laneq<mode>): Emit
-+ aarch64_sqdmlal2_laneq<mode>_internal insn.
-+ Replace VCON with VCONQ.
-+ (aarch64_sqdmlsl2_lane<mode>): Replace VCON with VCONQ.
-+ (aarch64_sqdmlsl2_laneq<mode>): Likewise.
-+ (aarch64_sqdmull_laneq<mode>): Emit
-+ aarch64_sqdmull_laneq<mode>_internal insn.
-+ Replace VCON with VCONQ.
-+ (aarch64_sqdmull2_laneq<mode>): Emit
-+ aarch64_sqdmull2_laneq<mode>_internal insn.
-+ (aarch64_sqdmlsl_laneq<mode>): Replace VCON usage with VCONQ.
-+ * config/aarch64/arm_neon.h (vqdmlal_high_lane_s16): Change type
-+ of 3rd argument to int16x4_t.
-+ (vqdmlalh_lane_s16): Likewise.
-+ (vqdmlslh_lane_s16): Likewise.
-+ (vqdmull_high_lane_s16): Likewise.
-+ (vqdmullh_lane_s16): Change type of 2nd argument to int16x4_t.
-+ (vqdmlal_lane_s16): Don't create temporary int16x8_t value.
-+ (vqdmlsl_lane_s16): Likewise.
-+ (vqdmull_lane_s16): Don't create temporary int16x8_t value.
-+ (vqdmlal_high_lane_s32): Change type 3rd argument to int32x2_t.
-+ (vqdmlals_lane_s32): Likewise.
-+ (vqdmlsls_lane_s32): Likewise.
-+ (vqdmull_high_lane_s32): Change type 2nd argument to int32x2_t.
-+ (vqdmulls_lane_s32): Likewise.
-+ (vqdmlal_lane_s32): Don't create temporary int32x4_t value.
-+ (vqdmlsl_lane_s32): Likewise.
-+ (vqdmull_lane_s32): Don't create temporary int32x4_t value.
-+ (vqdmulhh_lane_s16): Change type of second argument to int16x4_t.
-+ (vqrdmulhh_lane_s16): Likewise.
-+ (vqdmlsl_high_lane_s16): Likewise.
-+ (vqdmulhs_lane_s32): Change type of second argument to int32x2_t.
-+ (vqdmlsl_high_lane_s32): Likewise.
-+ (vqrdmulhs_lane_s32): Likewise.
-+
-+2014-06-30 Thomas Preud'homme <thomas.preudhomme@arm.com>
-+
-+ Backport from Mainline
-+ 2014-06-20 Jakub Jelinek <jakub@redhat.com>
-+ 2014-06-11 Thomas Preud'homme <thomas.preudhomme@arm.com>
-+
-+ PR tree-optimization/61306
-+ * tree-ssa-math-opts.c (struct symbolic_number): Store type of
-+ expression instead of its size.
-+ (do_shift_rotate): Adapt to change in struct symbolic_number. Return
-+ false to prevent optimization when the result is unpredictable due to
-+ arithmetic right shift of signed type with highest byte is set.
-+ (verify_symbolic_number_p): Adapt to change in struct symbolic_number.
-+ (find_bswap_1): Likewise. Return NULL to prevent optimization when the
-+ result is unpredictable due to sign extension.
-+ (find_bswap): Adapt to change in struct symbolic_number.
-+
-+2014-06-27 Martin Jambor <mjambor@suse.cz>
-+
-+ PR ipa/61160
-+ * cgraphclones.c (duplicate_thunk_for_node): Removed parameter
-+ args_to_skip, use those from node instead. Copy args_to_skip and
-+ combined_args_to_skip from node to the new thunk.
-+ (redirect_edge_duplicating_thunks): Removed parameter args_to_skip.
-+ (cgraph_create_virtual_clone): Moved computation of
-+ combined_args_to_skip...
-+ (cgraph_clone_node): ...here, simplify it to bitmap_ior..
-+
-+2014-06-27 Uros Bizjak <ubizjak@gmail.com>
-+
-+ Backport from mainline
-+ 2014-06-26 Uros Bizjak <ubizjak@gmail.com>
-+
-+ PR target/61586
-+ * config/alpha/alpha.c (alpha_handle_trap_shadows): Handle BARRIER RTX.
-+
-+2014-06-26 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
-+
-+ PR target/61542
-+ * config/rs6000/vsx.md (vsx_extract_v4sf): Fix bug with element
-+ extraction other than index 3.
-+
-+2014-06-26 Marc Glisse <marc.glisse@inria.fr>
-+
-+ PR target/61503
-+ * config/i386/i386.md (x86_64_shrd, x86_shrd,
-+ ix86_rotr<dwi>3_doubleword): Replace ashiftrt with lshiftrt.
-+
-+2014-06-26 Martin Jambor <mjambor@suse.cz>
-+
-+ Backport from mainline
-+ * ipa-prop.c (ipa_impossible_devirt_target): No longer static,
-+ renamed to ipa_impossible_devirt_target. Fix typo.
-+ * ipa-prop.h (ipa_impossible_devirt_target): Declare.
-+ * ipa-cp.c (ipa_get_indirect_edge_target_1): Use
-+ ipa_impossible_devirt_target.
-+
-+2014-06-24 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR target/61570
-+ * config/i386/driver-i386.c (host_detect_local_cpu): For unknown
-+ model family 6 CPU with has_longmode never use a CPU without
-+ 64-bit support.
-+
-+ * gimplify.c (gimplify_omp_for): For #pragma omp for simd iterator
-+ not mentioned in clauses use private clause if the iterator is
-+ declared in #pragma omp for simd, and when adding lastprivate
-+ instead, add it to the outer #pragma omp for too. Diagnose
-+ if the variable is private in outer context. For simd collapse > 1
-+ loops, replace all iterators with temporaries.
-+ * omp-low.c (lower_rec_input_clauses): Handle LINEAR clause the
-+ same even in collapse > 1 loops.
-+
-+2014-06-23 Alan Modra <amodra@gmail.com>
-+
-+ PR bootstrap/61583
-+ * tree-vrp.c (remove_range_assertions): Do not set is_unreachable
-+ to zero on debug statements.
-+
-+2014-06-10 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
-+
-+ * config/aarch64/aarch64-simd.md (aarch64_sqdmulh_lane<mode>):
-+ New expander.
-+ (aarch64_sqrdmulh_lane<mode>): Likewise.
-+ (aarch64_sq<r>dmulh_lane<mode>): Rename to...
-+ (aarch64_sq<r>dmulh_lane<mode>_interna): ...this.
-+ (aarch64_sqdmulh_laneq<mode>): New expander.
-+ (aarch64_sqrdmulh_laneq<mode>): Likewise.
-+ (aarch64_sq<r>dmulh_laneq<mode>): Rename to...
-+ (aarch64_sq<r>dmulh_laneq<mode>_internal): ...this.
-+ (aarch64_sqdmulh_lane<mode>): New expander.
-+ (aarch64_sqrdmulh_lane<mode>): Likewise.
-+ (aarch64_sq<r>dmulh_lane<mode>): Rename to...
-+ (aarch64_sq<r>dmulh_lane<mode>_internal): ...this.
-+ (aarch64_sqdmlal_lane<mode>): Add lane flip for big-endian.
-+ (aarch64_sqdmlal_laneq<mode>): Likewise.
-+ (aarch64_sqdmlsl_lane<mode>): Likewise.
-+ (aarch64_sqdmlsl_laneq<mode>): Likewise.
-+ (aarch64_sqdmlal2_lane<mode>): Likewise.
-+ (aarch64_sqdmlal2_laneq<mode>): Likewise.
-+ (aarch64_sqdmlsl2_lane<mode>): Likewise.
-+ (aarch64_sqdmlsl2_laneq<mode>): Likewise.
-+ (aarch64_sqdmull_lane<mode>): Likewise.
-+ (aarch64_sqdmull_laneq<mode>): Likewise.
-+ (aarch64_sqdmull2_lane<mode>): Likewise.
-+ (aarch64_sqdmull2_laneq<mode>): Likewise.
-+
-+2014-06-20 Martin Jambor <mjambor@suse.cz>
-+
-+ PR ipa/61540
-+ * ipa-prop.c (impossible_devirt_target): New function.
-+ (try_make_edge_direct_virtual_call): Use it, also instead of
-+ asserting.
-+
-+2014-06-20 Martin Jambor <mjambor@suse.cz>
-+
-+ PR ipa/61211
-+ * cgraph.c (clone_of_p): Allow skipped_branch to deal with
-+ expanded clones.
-+
-+2014-06-20 Chung-Lin Tang <cltang@codesourcery.com>
-+
-+ Backport from mainline
-+
-+ 2014-06-20 Julian Brown <julian@codesourcery.com>
-+ Chung-Lin Tang <cltang@codesourcery.com>
-+
-+ * config/arm/arm.c (arm_output_mi_thunk): Fix offset for
-+ TARGET_THUMB1_ONLY. Add comments.
-+
-+2014-06-18 Uros Bizjak <ubizjak@gmail.com>
-+
-+ Backport from mainline
-+ 2014-06-16 Uros Bizjak <ubizjak@gmail.com>
-+
-+ * config/i386/i386.c (decide_alg): Correctly handle
-+ maximum size of stringop algorithm.
-+
-+2014-06-18 Richard Henderson <rth@redhat.com>
-+
-+ PR target/61545
-+ * config/aarch64/aarch64.md (tlsdesc_small): Clobber CC_REGNUM.
-+
-+2014-06-17 Yufeng Zhang <yufeng.zhang@arm.com>
-+
-+ PR target/61483
-+ * config/aarch64/aarch64.c (aarch64_layout_arg): Add new local
-+ variable 'size'; calculate 'size' right in the front; use
-+ 'size' to compute 'nregs' (when 'allocate_ncrn != 0') and
-+ pcum->aapcs_stack_words.
-+
-+2014-06-17 Nick Clifton <nickc@redhat.com>
-+
-+ * config/msp430/msp430.md (mulhisi3): Add a NOP after the DINT.
-+ (umulhi3, mulsidi3, umulsidi3): Likewise.
-+
-+2014-06-17 Uros Bizjak <ubizjak@gmail.com>
-+
-+ Backport from mainline
-+ 2014-06-06 Uros Bizjak <ubizjak@gmail.com>
-+
-+ PR target/61423
-+ * config/i386/i386.md (*floatunssi<mode>2_i387_with_xmm): New
-+ define_insn_and_split pattern, merged from *floatunssi<mode>2_1
-+ and corresponding splitters. Zero extend general register
-+ or memory input operand to XMM temporary. Enable for
-+ TARGET_SSE2 and TARGET_INTER_UNIT_MOVES_TO_VEC only.
-+ (floatunssi<mode>2): Update expander predicate.
-+
-+2014-06-16 Vladimir Makarov <vmakarov@redhat.com>
-+
-+ PR rtl-optimization/61325
-+ * lra-constraints.c (valid_address_p): Add forward declaration.
-+ (simplify_operand_subreg): Check address validity before and after
-+ alter_reg of memory subreg.
-+
-+2014-06-18 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR plugins/45078
-+ * config.gcc (arm*-*-linux-*): Include vxworks-dummy.h in tm_file.
-+
-+2014-06-13 Peter Bergner <bergner@vnet.ibm.com>
-+
-+ Backport from mainline
-+
-+ 2014-06-13 Peter Bergner <bergner@vnet.ibm.com>
-+ PR target/61415
-+ * config/rs6000/rs6000-builtin.def (BU_MISC_1): Delete.
-+ (BU_MISC_2): Rename to ...
-+ (BU_LDBL128_2): ... this.
-+ * config/rs6000/rs6000.h (RS6000_BTM_LDBL128): New define.
-+ (RS6000_BTM_COMMON): Add RS6000_BTM_LDBL128.
-+ * config/rs6000/rs6000.c (rs6000_builtin_mask_calculate): Handle
-+ RS6000_BTM_LDBL128.
-+ (rs6000_invalid_builtin): Add long double 128-bit builtin support.
-+ (rs6000_builtin_mask_names): Add RS6000_BTM_LDBL128.
-+ * config/rs6000/rs6000.md (unpacktf_0): Remove define)expand.
-+ (unpacktf_1): Likewise.
-+ * doc/extend.texi (__builtin_longdouble_dw0): Remove documentation.
-+ (__builtin_longdouble_dw1): Likewise.
-+ * doc/sourcebuild.texi (longdouble128): Document.
-+
-+2014-06-13 Jeff Law <law@redhat.com>
-+
-+ Backports from mainline:
-+ 2014-06-13 Jeff Law <law@redhat.com>
-+
-+ PR rtl-optimization/61094
-+ PR rtl-optimization/61446
-+ * ree.c (combine_reaching_defs): Get the mode for the copy from
-+ the extension insn rather than the defining insn.
-+
-+ 2014-06-02 Jeff Law <law@redhat.com>
-+
-+ PR rtl-optimization/61094
-+ * ree.c (combine_reaching_defs): Do not reextend an insn if it
-+ was marked as do_no_reextend. If a copy is needed to eliminate
-+ an extension, then mark it as do_not_reextend.
-+
-+2014-06-13 Martin Jambor <mjambor@suse.cz>
-+
-+ PR ipa/61186
-+ * ipa-devirt.c (possible_polymorphic_call_targets): Store NULL to
-+ cache_token if returning early.
-+
-+2014-06-12 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR middle-end/61486
-+ * gimplify.c (struct gimplify_omp_ctx): Add distribute field.
-+ (gimplify_adjust_omp_clauses): Don't or in GOVD_LASTPRIVATE
-+ if outer combined construct is distribute.
-+ (gimplify_omp_for): For OMP_DISTRIBUTE set
-+ gimplify_omp_ctxp->distribute.
-+ * omp-low.c (scan_sharing_clauses) <case OMP_CLAUSE_SHARED>: For
-+ GIMPLE_OMP_TEAMS, if decl isn't global in outer context, record
-+ mapping into decl map.
-+
-+2014-06-12 Jeff Law <law@redhat.com>
-+
-+ Backports from mainline:
-+
-+ 2014-06-12 Jeff Law <law@redhat.com>
-+
-+ PR tree-optimization/61009
-+ * tree-ssa-threadedge.c (thread_through_normal_block): Correct return
-+ value when we stop processing a block due to problematic PHIs.
-+
-+ 2014-06-05 Jeff Law <law@redhat.com>
-+
-+ PR tree-optimization/61289
-+ * tree-ssa-threadedge.c (invalidate_equivalences): Remove SRC_MAP and
-+ DST_MAP parameters. Invalidate by walking all the SSA_NAME_VALUES
-+ looking for those which match LHS. All callers changed.
-+ (record_temporary_equivalences_from_phis): Remove SRC_MAP and DST_MAP
-+ parameters and code which manipulated them. All callers changed.
-+ (record_temporary_equivalences_from_stmts_at_dest): Remove SRC_MAP
-+ and DST_MAP parameters. Simplify invalidation code by just calling
-+ invalidate_equivalences. All callers changed.
-+ (thread_across_edge): Simplify now that we don't need to maintain
-+ the map of equivalences to invalidate.
-+
-+2014-06-12 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ * tree-core.h (DECL_NONALIASED): Use proper spelling in comment.
-+
-+2014-06-12 Georg-Johann Lay <avr@gjlay.de>
-+
-+ Backport from 2014-05-14 trunk r210418
-+ * config/avr/avr.h (REG_CLASS_CONTENTS): Use unsigned suffix for
-+ shifted values to avoid build warning.
-+
-+2014-06-12 Georg-Johann Lay <avr@gjlay.de>
-+
-+ Backport from 2014-05-09 trunk r210272
-+
-+ * config/avr/avr-fixed.md (round<mode>3): Use -1U instead of -1 in
-+ unsigned int initializers for regno_in, regno_out.
-+
-+ Backport from 2014-06-12 trunk r211491
-+
-+ PR target/61443
-+ * config/avr/avr.md (push<mode>1): Avoid (subreg(mem)) when
-+ loading from address spaces.
-+
-+2014-06-12 Alan Modra <amodra@gmail.com>
-+
-+ PR target/61300
-+ * doc/tm.texi.in (INCOMING_REG_PARM_STACK_SPACE): Document.
-+ * doc/tm.texi: Regenerate.
-+ * function.c (INCOMING_REG_PARM_STACK_SPACE): Provide default.
-+ Use throughout in place of REG_PARM_STACK_SPACE.
-+ * config/rs6000/rs6000.c (rs6000_reg_parm_stack_space): Add
-+ "incoming" param. Pass to rs6000_function_parms_need_stack.
-+ (rs6000_function_parms_need_stack): Add "incoming" param, ignore
-+ prototype_p when incoming. Use function decl when incoming
-+ to handle K&R style functions.
-+ * config/rs6000/rs6000.h (REG_PARM_STACK_SPACE): Adjust.
-+ (INCOMING_REG_PARM_STACK_SPACE): Define.
-+
-+2014-06-11 Richard Biener <rguenther@suse.de>
-+
-+ PR tree-optimization/61452
-+ * tree-ssa-sccvn.c (visit_phi): Remove pointless setting of
-+ expr and has_constants in case we found a leader.
-+ (simplify_binary_expression): Always valueize operands first.
-+ (simplify_unary_expression): Likewise.
-+
-+2014-06-11 Richard Biener <rguenther@suse.de>
-+
-+ PR middle-end/61456
-+ * tree-ssa-alias.c (nonoverlapping_component_refs_of_decl_p):
-+ Do not use the main variant for the type comparison.
-+
-+2014-06-10 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
-+
-+ * doc/arm-acle-intrinsics.texi: Specify when CRC32 intrinsics are
-+ available.
-+ Simplify description of __crc32d and __crc32cd intrinsics.
-+ * doc/extend.texi (ARM ACLE Intrinsics): Remove comment about CRC32
-+ availability.
-+
-+2014-06-07 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ * tree-ssa-tail-merge.c (same_succ_hash): Hash the static chain of a
-+ call statement, if any.
-+ (gimple_equal_p) <GIMPLE_CALL>: Compare the static chain of the call
-+ statements, if any. Tidy up.
-+
-+2014-06-06 Michael Meissner <meissner@linux.vnet.ibm.com>
-+
-+ Back port from trunk
-+ 2014-06-06 Michael Meissner <meissner@linux.vnet.ibm.com>
-+
-+ PR target/61431
-+ * config/rs6000/vsx.md (VSX_LE): Split VSX_D into 2 separate
-+ iterators, VSX_D that handles 64-bit types, and VSX_LE that
-+ handles swapping the two 64-bit double words on little endian
-+ systems. Include V1TImode and optionally TImode in VSX_LE so that
-+ these types are properly swapped. Change all of the insns and
-+ splits that do the 64-bit swaps to use VSX_LE.
-+ (vsx_le_perm_load_<mode>): Likewise.
-+ (vsx_le_perm_store_<mode>): Likewise.
-+ (splitters for little endian memory operations): Likewise.
-+ (vsx_xxpermdi2_le_<mode>): Likewise.
-+ (vsx_lxvd2x2_le_<mode>): Likewise.
-+ (vsx_stxvd2x2_le_<mode>): Likewise.
-+
-+2014-06-06 Vladimir Makarov <vmakarov@redhat.com>
-+
-+ PR rtl-optimization/61325
-+ * lra-constraints.c (process_address_1): Check scale equal to one
-+ to prevent transformation: base + scale * index => base + new_reg.
-+
-+2014-06-05 Martin Jambor <mjambor@suse.cz>
-+
-+ PR ipa/61393
-+ * ipa-cp.c (determine_versionability): Pretend that tm_clones are
-+ not versionable.
-+
-+2014-06-04 Richard Biener <rguenther@suse.de>
-+
-+ PR tree-optimization/61383
-+ * tree-ssa-ifcombine.c (bb_no_side_effects_p): Make sure
-+ stmts can't trap.
-+
-+2014-06-02 Jason Merrill <jason@redhat.com>
-+
-+ PR c++/61020
-+ * varpool.c (ctor_for_folding): Handle uninitialized vtables.
-+
-+2014-06-03 Martin Jambor <mjambor@suse.cz>
-+
-+ PR ipa/61160
-+ * ipa-cp.c (cgraph_edge_brings_value_p): Handle edges leading to
-+ thunks.
-+
-+2014-06-03 Andrey Belevantsev <abel@ispras.ru>
-+
-+ Backport from mainline
-+ 2014-05-14 Andrey Belevantsev <abel@ispras.ru>
-+
-+ PR rtl-optimization/60866
-+ * sel-sched-ir (sel_init_new_insn): New parameter old_seqno.
-+ Default it to -1. Pass it down to init_simplejump_data.
-+ (init_simplejump_data): New parameter old_seqno. Pass it down
-+ to get_seqno_for_a_jump.
-+ (get_seqno_for_a_jump): New parameter old_seqno. Use it for
-+ initializing new jump seqno as a last resort. Add comment.
-+ (sel_redirect_edge_and_branch): Save old seqno of the conditional
-+ jump and pass it down to sel_init_new_insn.
-+ (sel_redirect_edge_and_branch_force): Likewise.
-+
-+2014-06-03 Andrey Belevantsev <abel@ispras.ru>
-+
-+ Backport from mainline
-+ 2014-05-14 Andrey Belevantsev <abel@ispras.ru>
-+
-+ PR rtl-optimization/60901
-+ * config/i386/i386.c (ix86_dependencies_evaluation_hook): Check that
-+ bb predecessor belongs to the same scheduling region. Adjust comment.
-+
-+2014-06-03 Uros Bizjak <ubizjak@gmail.com>
-+
-+ Backport from mainline
-+ 2014-06-02 Uros Bizjak <ubizjak@gmail.com>
-+
-+ PR target/61239
-+ * config/i386/i386.c (ix86_expand_vec_perm) [case V32QImode]: Use
-+ GEN_INT (-128) instead of GEN_INT (128) to set MSB of QImode constant.
-+
-+2014-05-29 Vladimir Makarov <vmakarov@redhat.com>
-+
-+ PR rtl-optimization/61325
-+ * lra-constraints.c (process_address): Rename to
-+ process_address_1.
-+ (process_address): New function.
-+
-+2014-05-29 Uros Bizjak <ubizjak@gmail.com>
-+
-+ Backport from mainline
-+ 2014-05-26 Uros Bizjak <ubizjak@gmail.com>
-+
-+ PR target/61271
-+ * config/i386/i386.c (ix86_rtx_costs)
-+ <case CONST_INT, case CONST, case LABEL_REF, case SYMBOL_REF>:
-+ Fix condition.
-+
-+2014-05-28 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ Backport from mainline
-+ 2014-05-27 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ * double-int.c (div_and_round_double) <ROUND_DIV_EXPR>: Use the proper
-+ predicate to detect a negative quotient.
-+
-+2014-05-28 Richard Biener <rguenther@suse.de>
-+
-+ Backport from mainline
-+ 2014-05-28 Richard Biener <rguenther@suse.de>
-+
-+ PR middle-end/61045
-+ * fold-const.c (fold_comparison): When folding
-+ X +- C1 CMP Y +- C2 to X CMP Y +- C2 +- C1 also ensure
-+ the sign of the remaining constant operand stays the same.
-+
-+ 2014-05-05 Richard Biener <rguenther@suse.de>
-+
-+ PR middle-end/61010
-+ * fold-const.c (fold_binary_loc): Consistently avoid
-+ canonicalizing X & CST away from a CST that is the mask
-+ of a mode.
-+
-+ 2014-04-28 Richard Biener <rguenther@suse.de>
-+
-+ PR tree-optimization/60979
-+ * graphite-scop-detection.c (scopdet_basic_block_info): Reject
-+ SCOPs that end in a block with a successor with abnormal
-+ predecessors.
-+
-+2014-05-28 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
-+
-+ * configure.ac ($gcc_cv_ld_clearcap): New test.
-+ * configure: Regenerate.
-+ * config.in: Regenerate.
-+ * config/sol2.opt (mclear-hwcap): New option.
-+ * config/sol2.h (LINK_CLEARCAP_SPEC): Define.
-+ * config/sol2-clearcap.map: Moved here from
-+ testsuite/gcc.target/i386/clearcap.map.
-+ * config/sol2-clearcapv2.map: Move here from
-+ gcc.target/i386/clearcapv2.map.
-+ * config/t-sol2 (install): Depend on install-clearcap-map.
-+ (install-clearcap-map): New target.
-+ * doc/invoke.texi (Option Summary, Solaris 2 Options): Document
-+ -mclear-hwcap.
-+
-+2014-05-28 Georg-Johann Lay <avr@gjlay.de>
-+
-+ PR libgcc/61152
-+ * config/dbx.h (License): Add Runtime Library Exception.
-+ * config/newlib-stdint.h (License): Same.
-+ * config/rtems.h (License): Same
-+ * config/initfini-array.h (License): Same
-+ * config/v850/v850.h (License): Same.
-+ * config/v850/v850-opts.h (License): Same
-+ * config/v850/rtems.h (License): Same.
-+
-+2014-05-28 Georg-Johann Lay <avr@gjlay.de>
-+
-+ PR target/61044
-+ * doc/extend.texi (Local Labels): Note that label differences are
-+ not supported for AVR.
-+
-+2014-05-27 Georg-Johann Lay <avr@gjlay.de>
-+
-+ Backport from 2014-05-12 mainline r210322.
-+ Backport from 2014-05-27 mainline r210959, r210969.
-+
-+ PR libgcc/61152
-+ * config/arm/arm.h (License): Add GCC Runtime Library Exception.
-+ * config/arm/arm-cores.def (License): Same.
-+ * config/arm/arm-opts.h (License): Same.
-+ * config/arm/aout.h (License): Same.
-+ * config/arm/bpabi.h (License): Same.
-+ * config/arm/elf.h (License): Same.
-+ * config/arm/linux-elf.h (License): Same.
-+ * config/arm/linux-gas.h (License): Same.
-+ * config/arm/netbsd-elf.h (License): Same.
-+ * config/arm/uclinux-eabi.h (License): Same.
-+ * config/arm/uclinux-elf.h (License): Same.
-+ * config/arm/vxworks.h (License): Same.
-+
-+2014-05-26 Michael Tautschnig <mt@debian.org>
-+
-+ PR target/61249
-+ * doc/extend.texi (X86 Built-in Functions): Fix parameter lists of
-+ __builtin_ia32_vfrczs[sd] and __builtin_ia32_mpsadbw256.
-+
-+2014-05-22 Vladimir Makarov <vmakarov@redhat.com>
-+
-+ PR rtl-optimization/61215
-+ * lra-elelimination.c (lra_eliminate_regs_1): Don't use
-+ simplify_gen_subreg until final substitution.
-+
-+2014-05-23 Alan Modra <amodra@gmail.com>
-+
-+ PR target/61231
-+ * config/rs6000/rs6000.c (mem_operand_gpr): Handle SImode.
-+ * config/rs6000/rs6000.md (extendsidi2_lfiwax, extendsidi2_nocell):
-+ Use "Y" constraint rather than "m".
-+
-+2014-05-22 Vladimir Makarov <vmakarov@redhat.com>
-+
-+ PR rtl-optimization/60969
-+ * ira-costs.c (record_reg_classes): Process NO_REGS for matching
-+ constraints. Set up mem cost for NO_REGS case.
-+
-+2014-05-22 Peter Bergner <bergner@vnet.ibm.com>
-+
-+ * config/rs6000/htm.md (ttest): Use correct shift value to get CR0.
-+
-+2014-05-22 Richard Earnshaw <rearnsha@arm.com>
-+
-+ PR target/61208
-+ * arm.md (arm_cmpdi_unsigned): Fix length calculation for Thumb2.
-+
-+2014-05-22 Nick Clifton <nickc@redhat.com>
-+
-+ * config/msp430/msp430.h (ASM_SPEC): Add spaces after inserted options.
-+
-+2014-05-22 Jakub Jelinek <jakub@redhat.com>
-+
-+ * tree-streamer-in.c (unpack_ts_real_cst_value_fields): Make sure
-+ all padding bits in REAL_VALUE_TYPE are cleared.
-+
-+2014-05-21 Guozhi Wei <carrot@google.com>
-+
-+ PR target/61202
-+ * config/aarch64/arm_neon.h (vqdmulh_n_s16): Change the last operand's
-+ constraint.
-+ (vqdmulhq_n_s16): Likewise.
-+
-+2014-05-21 Martin Jambor <mjambor@suse.cz>
-+
-+ * doc/invoke.texi (Optimize Options): Document parameters
-+ ipa-cp-eval-threshold, ipa-max-agg-items, ipa-cp-loop-hint-bonus and
-+ ipa-cp-array-index-hint-bonus.
-+
-+2014-05-21 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR middle-end/61252
-+ * omp-low.c (handle_simd_reference): New function.
-+ (lower_rec_input_clauses): Use it. Defer adding reference
-+ initialization even for reduction without placeholder if in simd,
-+ handle it properly later on.
-+
-+2014-05-20 Jan Hubicka <hubicka@ucw.cz>
-+
-+ PR bootstrap/60984
-+ * ipa-inline-transform.c (inline_call): Use add CALLEE_REMOVED
-+ parameter.
-+ * ipa-inline.c (inline_to_all_callers): If callee was removed; return.
-+ (ipa_inline): Loop inline_to_all_callers until no more aliases
-+ are removed.
-+
-+2014-05-20 Jan Hubicka <hubicka@ucw.cz>
-+
-+ PR lto/60820
-+ * varpool.c (varpool_remove_node): Do not alter decls when streaming.
-+
-+2014-05-20 DJ Delorie <dj@redhat.com>
-+
-+ * config/msp430/msp430.md (split): Don't allow subregs when
-+ splitting SImode adds.
-+ (andneghi): Fix subtraction logic.
-+ * config/msp430/predicates.md (msp430_nonsubreg_or_imm_operand): New.
-+
-+2014-05-20 Nick Clifton <nickc@redhat.com>
-+
-+ * config/msp430/msp430.c (TARGET_GIMPLIFY_VA_ARG_EXPR): Define.
-+ (msp430_gimplify_va_arg_expr): New function.
-+ (msp430_print_operand): Handle (CONST (ZERO_EXTRACT)).
-+
-+ * config/msp430/msp430.md (zero_extendpsisi2): Use + constraint on
-+ operand 0 in order to prevent confusion about the number of
-+ registers involved.
-+
-+2014-05-20 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
-+
-+ * config/arm/arm.md (arith_shiftsi): Do not predicate for
-+ arm_restrict_it.
-+
-+2014-05-19 Richard Earnshaw <rearnsha@arm.com>
-+
-+ * arm.c (thumb1_reorg): When scanning backwards skip anything
-+ that's not a proper insn.
-+
-+2014-05-17 Jan Hubicka <hubicka@ucw.cz>
-+
-+ * ipa.c (symtab_remove_unreachable_nodes): Remove
-+ symbol from comdat group if its body was eliminated.
-+ (comdat_can_be_unshared_p_1): Static symbols can always be privatized.
-+ * symtab.c (symtab_remove_from_same_comdat_group): Break out from ...
-+ (symtab_unregister_node): ... this one.
-+ (verify_symtab_base): More strict checking of comdats.
-+ * cgraph.h (symtab_remove_from_same_comdat_group): Declare.
-+
-+2014-05-17 Jan Hubicka <hubicka@ucw.cz>
-+
-+ * opts.c (common_handle_option): Disable -fipa-reference coorectly
-+ with -fuse-profile.
-+
-+2014-05-17 Jan Hubicka <hubicka@ucw.cz>
-+
-+ PR ipa/60854
-+ * ipa.c (symtab_remove_unreachable_nodes): Mark targets of
-+ external aliases alive, too.
-+
-+2014-05-17 Uros Bizjak <ubizjak@gmail.com>
-+
-+ * doc/invoke.texi (free): Mention Alpha. Also enabled at -Os.
-+
-+2014-05-17 Uros Bizjak <ubizjak@gmail.com>
-+
-+ Backport from mainline
-+ 2014-04-25 H.J. Lu <hongjiu.lu@intel.com>
-+
-+ PR target/60969
-+ * config/i386/i386.md (*movsf_internal): Set MODE to SI for
-+ alternative 12.
-+
-+2014-05-16 Vladimir Makarov <vmakarov@redhat.com>
-+
-+ PR rtl-optimization/60969
-+ * ira-costs.c (record_reg_classes): Allow only memory for pseudo.
-+ Calculate costs for this case.
-+
-+2014-05-15 Peter Bergner <bergner@vnet.ibm.com>
-+
-+ PR target/61193
-+ * config/rs6000/htmxlintrin.h (_HTM_TBEGIN_STARTED): New define.
-+ (__TM_simple_begin): Use it.
-+ (__TM_begin): Likewise.
-+
-+2014-05-15 Martin Jambor <mjambor@suse.cz>
-+
-+ PR ipa/61085
-+ * ipa-prop.c (update_indirect_edges_after_inlining): Check
-+ type_preserved flag when the indirect edge is polymorphic.
-+
-+2014-05-15 Martin Jambor <mjambor@suse.cz>
-+
-+ PR ipa/60897
-+ * ipa-prop.c (ipa_modify_formal_parameters): Reset DECL_LANG_SPECIFIC.
-+
-+2014-05-15 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR tree-optimization/61158
-+ * fold-const.c (fold_binary_loc): If X is zero-extended and
-+ shiftc >= prec, make sure zerobits is all ones instead of
-+ invoking undefined behavior.
-+
-+2014-05-14 Cary Coutant <ccoutant@google.com>
-+
-+ PR debug/61013
-+ * opts.c (common_handle_option): Don't special-case "-g".
-+ (set_debug_level): Default to at least level 2 with "-g".
-+
-+2014-05-14 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ * config/sparc/sparc-protos.h (sparc_absnegfloat_split_legitimate):
-+ Delete.
-+ * config/sparc/sparc.c (sparc_absnegfloat_split_legitimate): Likewise.
-+ * config/sparc/sparc.md (fptype_ut699): New attribute.
-+ (in_branch_delay): Return false if -mfix-ut699 is specified and
-+ fptype_ut699 is set to single.
-+ (truncdfsf2): Add fptype_ut699 attribute.
-+ (fix_truncdfsi2): Likewise.
-+ (floatsisf2): Change fptype attribute.
-+ (fix_truncsfsi2): Likewise.
-+ (negtf2_notv9): Delete.
-+ (negtf2_v9): Likewise.
-+ (negtf2_hq): New instruction.
-+ (negtf2): New instruction and splitter.
-+ (negdf2_notv9): Rewrite.
-+ (abstf2_notv9): Delete.
-+ (abstf2_hq_v9): Likewise.
-+ (abstf2_v9): Likewise.
-+ (abstf2_hq): New instruction.
-+ (abstf2): New instruction and splitter.
-+ (absdf2_notv9): Rewrite.
-+
-+2014-05-14 Matthias Klose <doko@ubuntu.com>
-+
-+ Revert:
-+ 2014-05-08 Manuel López-Ibáñez <manu@gcc.gnu.org>
-+ Matthias Klose <doko@ubuntu.com>
-+
-+ PR driver/61106
-+ * optc-gen.awk: Fix option handling for -Wunused-parameter.
-+
-+2014-05-13 Peter Bergner <bergner@vnet.ibm.com>
-+
-+ * doc/sourcebuild.texi: (dfp_hw): Document.
-+ (p8vector_hw): Likewise.
-+ (powerpc_eabi_ok): Likewise.
-+ (powerpc_elfv2): Likewise.
-+ (powerpc_htm_ok): Likewise.
-+ (ppc_recip_hw): Likewise.
-+ (vsx_hw): Likewise.
-+
-+2014-05-13 Jeff Law <law@redhat.com>
-+
-+ Backports fromm mainline:
-+
-+ 2014-05-08 Jeff Law <law@redhat.com>
-+
-+ PR tree-optimization/61009
-+ * tree-ssa-threadedge.c (thread_through_normal_block): Return a
-+ tri-state rather than a boolean. When a block is too big to
-+ thread through, inform caller via negative return value.
-+ (thread_across_edge): If a block was too big for normal threading,
-+ then it's too big for a joiner too, so remove temporary equivalences
-+ and return immediately.
-+
-+ 2014-04-28 Jeff Law <law@redhat.com>
-+
-+ PR tree-optimization/60902
-+ * tree-ssa-threadedge.c
-+ (record_temporary_equivalences_from_stmts_at_dest): Only iterate
-+ over real defs when invalidating outputs from statements that do not
-+ produce useful outputs for threading.
-+
-+ 2014-04-23 Jeff Law <law@redhat.com>
-+
-+ PR tree-optimization/60902
-+ * tree-ssa-threadedge.c
-+ (record_temporary_equivalences_from_stmts_at_dest): Make sure to
-+ invalidate outputs from statements that do not produce useful
-+ outputs for threading.
-+
-+2014-05-13 Richard Biener <rguenther@suse.de>
-+
-+ PR ipa/60973
-+ * tree-inline.c (remap_gimple_stmt): Clear tail call flag,
-+ it needs revisiting whether the call still may be tail-called.
-+
-+2014-05-13 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR target/61060
-+ * config/i386/i386.c (ix86_expand_set_or_movmem): If count_exp
-+ is const0_rtx, return immediately. Don't test count == 0 when
-+ it is always true.
-+
-+2014-05-12 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
-+
-+ Backport from mainline
-+ 2014-05-12 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
-+
-+ PR target/60991
-+ * config/avr/avr.c (avr_out_store_psi): Use correct constant
-+ to restore Y.
-+
-+2014-05-09 Uros Bizjak <ubizjak@gmail.com>
-+
-+ Backport from mainline
-+ 2014-05-08 Uros Bizjak <ubizjak@gmail.com>
-+
-+ PR target/61092
-+ * config/alpha/alpha.c: Include gimple-iterator.h.
-+ (alpha_gimple_fold_builtin): New function. Move
-+ ALPHA_BUILTIN_UMULH folding from ...
-+ (alpha_fold_builtin): ... here.
-+ (TARGET_GIMPLE_FOLD_BUILTIN): New define.
-+
-+2014-05-09 Pitchumani Sivanupandi <Pitchumani.S@atmel.com>
-+
-+ Backport from 2014-04-16 trunk r209446
-+ 2014-04-16 Pitchumani Sivanupandi <Pitchumani.S@atmel.com>
-+
-+ * config/avr/avr-mcus.def: Correct typo for atxmega256a3bu macro.
-+
-+2014-05-09 Georg-Johann Lay <avr@gjlay.de>
-+
-+ Backport from 2014-05-09 trunk r210267
-+
-+ PR target/61055
-+ * config/avr/avr.md (cc): Add new attribute set_vzn.
-+ (addqi3, addqq3, adduqq3, subqi3, subqq3, subuqq3, negqi2) [cc]:
-+ Set cc insn attribute to set_vzn instead of set_zn for alternatives
-+ with INC, DEC or NEG.
-+ * config/avr/avr.c (avr_notice_update_cc): Handle SET_VZN.
-+ (avr_out_plus_1): ADIW sets cc0 to CC_SET_CZN.
-+ INC, DEC and ADD+ADC set cc0 to CC_CLOBBER.
-+
-+2014-05-08 Manuel López-Ibáñez <manu@gcc.gnu.org>
-+ Matthias Klose <doko@ubuntu.com>
-+
-+ PR driver/61106
-+ * optc-gen.awk: Fix option handling for -Wunused-parameter.
-+
-+2014-05-08 Uros Bizjak <ubizjak@gmail.com>
-+
-+ PR target/59952
-+ * config/i386/i386.c (PTA_HASWELL): Remove PTA_RTM.
-+
-+2014-05-05 Marek Polacek <polacek@redhat.com>
-+
-+ Back port from mainline
-+ 2014-05-05 Marek Polacek <polacek@redhat.com>
-+
-+ PR driver/61065
-+ * opts.c (common_handle_option): Call error_at instead of warning_at.
-+
-+2014-05-04 Jan Hubicka <hubicka@ucw.cz>
-+
-+ PR ipa/60965
-+ * ipa-devirt.c (get_class_context): Allow POD to change to non-POD.
-+
-+2014-05-04 Peter Bergner <bergner@vnet.ibm.com>
-+
-+ * config/rs6000/rs6000.h (RS6000_BTM_HARD_FLOAT): New define.
-+ (RS6000_BTM_COMMON): Add RS6000_BTM_HARD_FLOAT.
-+ (TARGET_EXTRA_BUILTINS): Add TARGET_HARD_FLOAT.
-+ * config/rs6000/rs6000-builtin.def (BU_MISC_1):
-+ Use RS6000_BTM_HARD_FLOAT.
-+ (BU_MISC_2): Likewise.
-+ * config/rs6000/rs6000.c (rs6000_builtin_mask_calculate): Handle
-+ RS6000_BTM_HARD_FLOAT.
-+ (rs6000_option_override_internal): Enforce -mhard-float if -mhard-dfp
-+ is explicitly used.
-+ (rs6000_invalid_builtin): Add hard floating builtin support.
-+ (rs6000_expand_builtin): Relax the gcc_assert to allow the new
-+ hard float builtins.
-+ (rs6000_builtin_mask_names): Add RS6000_BTM_HARD_FLOAT.
-+
-+2014-05-03 Joey Ye <joey.ye@arm.com>
-+
-+ Backport from mainline r209463
-+ 2014-04-17 Joey Ye <joey.ye@arm.com>
-+
-+ * opts.c (OPT_fif_conversion, OPT_fif_conversion2): Disable for Og.
-+
-+2014-05-03 Oleg Endo <olegendo@gcc.gnu.org>
-+
-+ Back port from mainline
-+ PR target/61026
-+ * config/sh/sh.c: Include stdlib headers before everything else.
-+
-+2014-05-02 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
-+
-+ PR tree-optimization/60930
-+ * gimple-ssa-strength-reduction.c (create_mul_imm_cand): Reject
-+ creating a multiply candidate by folding two constant
-+ multiplicands when the result overflows.
-+
-+2014-05-02 Jakub Jelinek <jakub@redhat.com>
-+
-+ * gimplify.c (gimplify_adjust_omp_clauses_1): Handle
-+ GOVD_FIRSTPRIVATE | GOVD_LASTPRIVATE.
-+ (gimplify_adjust_omp_clauses): Simd region is never
-+ directly nested in combined parallel. Instead, for linear
-+ with copyin/copyout, if in combined for simd loop, make decl
-+ firstprivate/lastprivate on OMP_FOR.
-+ * omp-low.c (expand_omp_for_generic, expand_omp_for_static_nochunk,
-+ expand_omp_for_static_chunk): When setting endvar, also set
-+ fd->loop.v to the same value.
-+
-+2014-05-02 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
-+
-+ Back port from mainline
-+ 2014-04-24 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
-+
-+ * config/aarch64/aarch64.h (TARGET_CPU_CPP_BUILTINS): Check
-+ TARGET_SIMD rather than TARGET_GENERAL_REGS_ONLY.
-+ (TARGET_SIMD): Take AARCH64_ISA_SIMD into account.
-+ (TARGET_FLOAT): Take AARCH64_ISA_FP into account.
-+ (TARGET_CRYPTO): Take TARGET_SIMD into account.
-+
-+2014-04-30 Michael Meissner <meissner@linux.vnet.ibm.com>
-+
-+ Back port from mainline
-+ 2014-04-24 Michael Meissner <meissner@linux.vnet.ibm.com>
-+
-+ * doc/extend.texi (PowerPC Built-in Functions): Document new
-+ powerpc extended divide, bcd, pack/unpack 128-bit, builtin
-+ functions.
-+ (PowerPC AltiVec/VSX Built-in Functions): Likewise.
-+
-+ * config/rs6000/predicates.md (const_0_to_3_operand): New
-+ predicate to match 0..3 integer constants.
-+
-+ * config/rs6000/rs6000-builtin.def (BU_DFP_MISC_1): Add new macros
-+ to support adding miscellaneous builtin functions.
-+ (BU_DFP_MISC_2): Likewise.
-+ (BU_P7_MISC_1): Likewise.
-+ (BU_P7_MISC_2): Likewise.
-+ (BU_P8V_MISC_3): Likewise.
-+ (BU_MISC_1): Likewise.
-+ (BU_MISC_2): Likewise.
-+ (DIVWE): Add extended divide builtin functions.
-+ (DIVWEO): Likewise.
-+ (DIVWEU): Likewise.
-+ (DIVWEUO): Likewise.
-+ (DIVDE): Likewise.
-+ (DIVDEO): Likewise.
-+ (DIVDEU): Likewise.
-+ (DIVDEUO): Likewise.
-+ (DXEX): Add decimal floating-point builtin functions.
-+ (DXEXQ): Likewise.
-+ (DDEDPD): Likewise.
-+ (DDEDPDQ): Likewise.
-+ (DENBCD): Likewise.
-+ (DENBCDQ): Likewise.
-+ (DIEX): Likewise.
-+ (DIEXQ): Likewise.
-+ (DSCLI): Likewise.
-+ (DSCLIQ): Likewise.
-+ (DSCRI): Likewise.
-+ (DSCRIQ): Likewise.
-+ (CDTBCD): Add new BCD builtin functions.
-+ (CBCDTD): Likewise.
-+ (ADDG6S): Likewise.
-+ (BCDADD): Likewise.
-+ (BCDADD_LT): Likewise.
-+ (BCDADD_EQ): Likewise.
-+ (BCDADD_GT): Likewise.
-+ (BCDADD_OV): Likewise.
-+ (BCDSUB): Likewise.
-+ (BCDSUB_LT): Likewise.
-+ (BCDSUB_EQ): Likewise.
-+ (BCDSUB_GT): Likewise.
-+ (BCDSUB_OV): Likewise.
-+ (PACK_TD): Add new pack/unpack 128-bit type builtin functions.
-+ (UNPACK_TD): Likewise.
-+ (PACK_TF): Likewise.
-+ (UNPACK_TF): Likewise.
-+ (UNPACK_TF_0): Likewise.
-+ (UNPACK_TF_1): Likewise.
-+ (PACK_V1TI): Likewise.
-+ (UNPACK_V1TI): Likewise.
-+
-+ * config/rs6000/rs6000.c (rs6000_builtin_mask_calculate): Add
-+ support for decimal floating point builtin functions.
-+ (rs6000_expand_ternop_builtin): Add checks for the new builtin
-+ functions that take constant arguments.
-+ (rs6000_invalid_builtin): Add decimal floating point builtin
-+ support.
-+ (rs6000_init_builtins): Setup long double, _Decimal64, and
-+ _Decimal128 types for new builtin functions.
-+ (builtin_function_type): Set the unsigned flags appropriately for
-+ the new builtin functions.
-+ (rs6000_opt_masks): Add support for decimal floating point builtin
-+ functions.
-+
-+ * config/rs6000/rs6000.h (RS6000_BTM_DFP): Add support for decimal
-+ floating point builtin functions.
-+ (RS6000_BTM_COMMON): Likewise.
-+ (RS6000_BTI_long_double): Likewise.
-+ (RS6000_BTI_dfloat64): Likewise.
-+ (RS6000_BTI_dfloat128): Likewise.
-+ (long_double_type_internal_node): Likewise.
-+ (dfloat64_type_internal_node): Likewise.
-+ (dfloat128_type_internal_node): Likewise.
-+
-+ * config/rs6000/altivec.h (UNSPEC_BCDADD): Add support for ISA
-+ 2.07 bcd arithmetic instructions.
-+ (UNSPEC_BCDSUB): Likewise.
-+ (UNSPEC_BCD_OVERFLOW): Likewise.
-+ (UNSPEC_BCD_ADD_SUB): Likewise.
-+ (bcd_add_sub): Likewise.
-+ (BCD_TEST): Likewise.
-+ (bcd<bcd_add_sub>): Likewise.
-+ (bcd<bcd_add_sub>_test): Likewise.
-+ (bcd<bcd_add_sub>_test2): Likewise.
-+ (bcd<bcd_add_sub>_<code>): Likewise.
-+ (peephole2 for combined bcd ops): Likewise.
-+
-+ * config/rs6000/dfp.md (UNSPEC_DDEDPD): Add support for new
-+ decimal floating point builtin functions.
-+ (UNSPEC_DENBCD): Likewise.
-+ (UNSPEC_DXEX): Likewise.
-+ (UNSPEC_DIEX): Likewise.
-+ (UNSPEC_DSCLI): Likewise.
-+ (UNSPEC_DSCRI): Likewise.
-+ (D64_D128): Likewise.
-+ (dfp_suffix): Likewise.
-+ (dfp_ddedpd_<mode>): Likewise.
-+ (dfp_denbcd_<mode>): Likewise.
-+ (dfp_dxex_<mode>): Likewise.
-+ (dfp_diex_<mode>): Likewise.
-+ (dfp_dscli_<mode>): Likewise.
-+ (dfp_dscri_<mode>): Likewise.
-+
-+ * config/rs6000/rs6000.md (UNSPEC_ADDG6S): Add support for new BCD
-+ builtin functions.
-+ (UNSPEC_CDTBCD): Likewise.
-+ (UNSPEC_CBCDTD): Likewise.
-+ (UNSPEC_DIVE): Add support for new extended divide builtin
-+ functions.
-+ (UNSPEC_DIVEO): Likewise.
-+ (UNSPEC_DIVEU): Likewise.
-+ (UNSPEC_DIVEUO): Likewise.
-+ (UNSPEC_UNPACK_128BIT): Add support for new builtin functions to
-+ pack/unpack 128-bit types.
-+ (UNSPEC_PACK_128BIT): Likewise.
-+ (idiv_ldiv): New mode attribute to set the 32/64-bit divide type.
-+ (udiv<mode>3): Use idiv_ldiv mode attribute.
-+ (div<mode>3): Likewise.
-+ (addg6s): Add new BCD builtin functions.
-+ (cdtbcd): Likewise.
-+ (cbcdtd): Likewise.
-+ (UNSPEC_DIV_EXTEND): Add support for new extended divide
-+ instructions.
-+ (div_extend): Likewise.
-+ (div<div_extend>_<mode>"): Likewise.
-+ (FP128_64): Add support for new builtin functions to pack/unpack
-+ 128-bit types.
-+ (unpack<mode>): Likewise.
-+ (unpacktf_0): Likewise.
-+ (unpacktf_1): Likewise.
-+ (unpack<mode>_dm): Likewise.
-+ (unpack<mode>_nodm): Likewise.
-+ (pack<mode>): Likewise.
-+ (unpackv1ti): Likewise.
-+ (packv1ti): Likewise.
-+
-+2014-04-29 Pat Haugen <pthaugen@us.ibm.com>
-+
-+ Backport from mainline
-+ 2014-04-17 Pat Haugen <pthaugen@us.ibm.com>
-+
-+ * config/rs6000/rs6000.md (addti3, subti3): New.
-+
-+2014-04-29 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR tree-optimization/60971
-+ * tree-tailcall.c (process_assignment): Reject conversions which
-+ reduce precision.
-+
-+2014-04-29 Nick Clifton <nickc@redhat.com>
-+
-+ * config/msp430/msp430.md (umulsidi): Fix typo.
-+ (mulhisi3): Enable even inside interrupt handlers.
-+ * config/msp430/msp430.c (msp430_print_operand): %O: Allow for the
-+ bigger return address pushed in large mode.
-+
-+2014-04-28 Pat Haugen <pthaugen@us.ibm.com>
-+
-+ * config/rs6000/sync.md (AINT mode_iterator): Move definition.
-+ (loadsync_<mode>): Change mode.
-+ (load_quadpti, store_quadpti): New.
-+ (atomic_load<mode>, atomic_store<mode>): Add support for TI mode.
-+ * config/rs6000/rs6000.md (unspec enum): Add UNSPEC_LSQ.
-+
-+2014-04-28 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ * configure.ac: Tweak GAS check for LEON instructions on SPARC.
-+ * configure: Regenerate.
-+ * config/sparc/sparc.opt (muser-mode): New option.
-+ * config/sparc/sync.md (atomic_compare_and_swap<mode>_1): Do not enable
-+ for LEON3.
-+ (atomic_compare_and_swap_leon3_1): New instruction for LEON3.
-+ * doc/invoke.texi (SPARC options): Document -muser-mode.
-+
-+2014-04-26 Markus Trippelsdorf <markus@trippelsdorf.de>
-+
-+ * doc/install.texi (Building with profile feedback): Remove
-+ outdated sentence.
-+
-+2014-04-26 Tom de Vries <tom@codesourcery.com>
-+
-+ * config/i386/i386.md (define_expand "ldexpxf3"): Fix out-of-bounds
-+ array accesses.
-+
-+2014-04-25 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR tree-optimization/60960
-+ * tree-vect-generic.c (expand_vector_operation): Only call
-+ expand_vector_divmod if type's mode satisfies VECTOR_MODE_P.
-+
-+2014-04-25 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ PR target/60941
-+ * config/sparc/sparc.md (ashlsi3_extend): Delete.
-+
-+2014-04-25 Richard Biener <rguenther@suse.de>
-+
-+ PR ipa/60912
-+ * tree-ssa-structalias.c (ipa_pta_execute): Compute direct
-+ call stmt use/clobber sets during stmt walk instead of
-+ walking the possibly incomplete set of caller edges.
-+
-+2014-04-25 Richard Biener <rguenther@suse.de>
-+
-+ PR ipa/60911
-+ * passes.c (apply_ipa_transforms): Inline into only caller ...
-+ (execute_one_pass): ... here. Properly bring in function
-+ bodies for nodes we want to apply IPA transforms to.
-+
-+2014-04-24 Jakub Jelinek <jakub@redhat.com>
-+
-+ * tree.h (OMP_CLAUSE_LINEAR_GIMPLE_SEQ): Define.
-+ * gimplify.c (omp_is_private): Change last argument's type to int.
-+ Only diagnose lastprivate if the simd argument is 1, only diagnose
-+ linear if the simd argument is 2.
-+ (gimplify_omp_for): Adjust omp_is_private callers. When adding
-+ lastprivate or private, add the clause to OMP_FOR_CLAUSES. Pass
-+ GOVD_EXPLICIT to omp_add_variable. For simd with collapse == 1
-+ create OMP_CLAUSE_LINEAR rather than OMP_CLAUSE_PRIVATE for var.
-+ If var != decl and decl is in OMP_CLAUSE_LINEAR, gimplify decl
-+ increment to OMP_CLAUSE_LINEAR_GIMPLE_SEQ.
-+ * omp-low.c (scan_sharing_clauses, lower_lastprivate_clauses): Handle
-+ OMP_CLAUSE_LINEAR_GIMPLE_SEQ.
-+ * tree-nested.c (convert_nonlocal_omp_clauses,
-+ convert_local_omp_clauses): Handle OMP_CLAUSE_LINEAR.
-+
-+2014-04-23 Uros Bizjak <ubizjak@gmail.com>
-+
-+ Backport from mainline
-+ 2014-04-21 Uros Bizjak <ubizjak@gmail.com>
-+
-+ PR target/60909
-+ * config/i386/i386.c (ix86_expand_builtin)
-+ <case IX86_BUILTIN_RDRAND{16,32,64}_STEP>: Use temporary
-+ register for target RTX.
-+ <case IX86_BUILTIN_RDSEED{16,32,64}_STEP>: Ditto.
-+
-+2014-04-23 Richard Biener <rguenther@suse.de>
-+
-+ PR tree-optimization/60903
-+ * tree-ssa-loop-im.c (analyze_memory_references): Remove
-+ commented code block.
-+ (execute_sm_if_changed): Properly apply IRREDUCIBLE_LOOP
-+ loop flags to newly created BBs and edges.
-+
-+2014-04-23 Nick Clifton <nickc@redhat.com>
-+
-+ * config/msp430/msp430.c (msp430_handle_option): Move function
-+ to msp430-common.c
-+ (msp430_option_override): Simplify mcu and mcpu option handling.
-+ (msp430_is_f5_mcu): Rename to msp430_use_f5_series_hwmult. Add
-+ support for -mhwmult command line option.
-+ (has_32bit_hwmult): Rename to use_32bit_hwmult. Add support for
-+ -mhwmult command line option.
-+ (msp430_hwmult_enabled): Delete.
-+ (msp43o_output_labelref): Add support for -mhwmult command line
-+ option.
-+ * config/msp430/msp430.md (mulhisi3, umulhisi3, mulsidi3)
-+ (umulsidi3): Likewise.
-+ * config/msp430/msp430.opt (mmcu): Add Report attribute.
-+ (mcpu, mlarge, msmall): Likewise.
-+ (mhwmult): New option.
-+ * config/msp430/msp430-protos.h (msp430_hwmult_enabled): Remove
-+ prototype.
-+ (msp430_is_f5_mcu): Remove prototype.
-+ (msp430_use_f5_series_hwmult): Add prototype.
-+ * config/msp430/msp430-opts.h: New file.
-+ * common/config/msp430: New directory.
-+ * common/config/msp430/msp430-common.c: New file.
-+ * config.gcc (msp430): Remove target_has_targetm_common.
-+ * doc/invoke.texi: Document -mhwmult command line option.
-+
-+2014-04-23 Nick Clifton <nickc@redhat.com>
-+
-+ * config/i386/cygwin.h (ENDFILE_SPEC): Include
-+ default-manifest.o if it can be found in the search path.
-+ * config/i386/mingw32.h (ENDFILE_SPEC): Likewise.
-+
-+2014-04-23 Richard Biener <rguenther@suse.de>
-+
-+ Backport from mainline
-+ 2014-04-14 Richard Biener <rguenther@suse.de>
-+
-+ PR lto/60720
-+ * lto-streamer-out.c (wrap_refs): New function.
-+ (lto_output): Wrap symbol references in global initializes in
-+ type-preserving MEM_REFs.
-+
-+2014-04-23 Richard Biener <rguenther@suse.de>
-+
-+ PR middle-end/60895
-+ * tree-inline.c (declare_return_variable): Use mark_addressable.
-+
-+2014-04-23 Richard Biener <rguenther@suse.de>
-+
-+ PR middle-end/60891
-+ * loop-init.c (loop_optimizer_init): Make sure to apply
-+ LOOPS_MAY_HAVE_MULTIPLE_LATCHES before fixing up loops.
-+
-+2014-04-22 Michael Meissner <meissner@linux.vnet.ibm.com>
-+
-+ Backport from mainline
-+ 2014-04-21 Michael Meissner <meissner@linux.vnet.ibm.com>
-+
-+ PR target/60735
-+ * config/rs6000/rs6000.md (mov<mode>_softfloat32, FMOVE64 case):
-+ If mode is DDmode and TARGET_E500_DOUBLE allow move.
-+
-+ * config/rs6000/rs6000.c (rs6000_debug_reg_global): Print some
-+ more debug information for E500 if -mdebug=reg.
-+
-+2014-04-22 H.J. Lu <hongjiu.lu@intel.com>
-+
-+ Backport from mainline
-+ 2014-04-22 H.J. Lu <hongjiu.lu@intel.com>
-+
-+ PR target/60868
-+ * config/i386/i386.c (ix86_expand_set_or_movmem): Call counter_mode
-+ on count_exp to get mode.
-+
-+2014-04-22 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
-+
-+ * config/rs6000/vsx.md (vsx_xxmrghw_<mode>): Adjust for
-+ little-endian.
-+ (vsx_xxmrglw_<mode>): Likewise.
-+
-+2014-04-22 Richard Biener <rguenther@suse.de>
-+
-+ Backport from mainline
-+ 2014-04-14 Richard Biener <rguenther@suse.de>
-+
-+ PR middle-end/55022
-+ * fold-const.c (negate_expr_p): Don't negate directional rounding
-+ division.
-+ (fold_negate_expr): Likewise.
-+
-+2014-04-22 Richard Biener <rguenther@suse.de>
-+
-+ Backport from mainline
-+ 2014-04-17 Richard Biener <rguenther@suse.de>
-+
-+ PR middle-end/60849
-+ * tree-ssa-propagate.c (valid_gimple_rhs_p): Only allow effective
-+ boolean results for comparisons.
-+
-+2014-04-22 Richard Biener <rguenther@suse.de>
-+
-+ Backport from mainline
-+ 2014-04-17 Richard Biener <rguenther@suse.de>
-+
-+ PR tree-optimization/60841
-+ * tree-vect-data-refs.c (vect_analyze_data_refs): Count stmts.
-+ * tree-vect-loop.c (vect_analyze_loop_2): Pass down number
-+ of stmts to SLP build.
-+ * tree-vect-slp.c (vect_slp_analyze_bb_1): Likewise.
-+ (vect_analyze_slp): Likewise.
-+ (vect_analyze_slp_instance): Likewise.
-+ (vect_build_slp_tree): Limit overall SLP tree growth.
-+ * tree-vectorizer.h (vect_analyze_data_refs,
-+ vect_analyze_slp): Adjust prototypes.
-+
-+2014-04-22 Richard Biener <rguenther@suse.de>
-+
-+ Backport from mainline
-+ 2014-04-17 Richard Biener <rguenther@suse.de>
-+
-+ PR tree-optimization/60836
-+ * tree-vect-loop.c (vect_create_epilog_for_reduction): Force
-+ initial PHI args to be gimple values.
-+
-+2014-04-22 Richard Biener <rguenther@suse.de>
-+
-+ Backport from mainline
-+ 2014-04-14 Richard Biener <rguenther@suse.de>
-+
-+ PR tree-optimization/59817
-+ PR tree-optimization/60453
-+ * graphite-scop-detection.c (graphite_can_represent_scev): Complete
-+ recursion to catch all CHRECs in the scalar evolution and restrict
-+ the predicate for the remains appropriately.
-+
-+2014-04-22 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR tree-optimization/60823
-+ * omp-low.c (ipa_simd_modify_function_body): Go through
-+ all SSA_NAMEs and for those refering to vector arguments
-+ which are going to be replaced adjust SSA_NAME_VAR and,
-+ if it is a default definition, change it into a non-default
-+ definition assigned at the beginning of function from new_decl.
-+ (ipa_simd_modify_stmt_ops): Rewritten.
-+ * tree-dfa.c (set_ssa_default_def): When removing default def,
-+ check for NULL loc instead of NULL *loc.
-+
-+2014-04-22 Lin Zuojian <manjian2006@gmail.com>
-+
-+ PR middle-end/60281
-+ * asan.c (asan_emit_stack_protection): Force the base to align to
-+ appropriate bits if STRICT_ALIGNMENT. Set shadow_mem align to
-+ appropriate bits if STRICT_ALIGNMENT.
-+ * cfgexpand.c (expand_stack_vars): Set base_align appropriately
-+ when asan is on.
-+ (expand_used_vars): Leave a space in the stack frame for alignment
-+ if STRICT_ALIGNMENT.
-+
-+2014-04-22 Jakub Jelinek <jakub@redhat.com>
-+
-+ Backported from mainline
-+ 2014-04-16 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR tree-optimization/60844
-+ * tree-ssa-reassoc.c (reassoc_remove_stmt): New function.
-+ (propagate_op_to_single_use, remove_visited_stmt_chain,
-+ linearize_expr, repropagate_negates, reassociate_bb): Use it
-+ instead of gsi_remove.
-+
- 2014-04-22 Release Manager
-
- * GCC 4.9.0 released.
-@@ -59,8 +1704,7 @@
- 2014-04-11 Tobias Burnus <burnus@net-b.de>
-
- PR other/59055
-- * doc/bugreport.texi (Bugs): Remove nodes pointing to the
-- nirvana.
-+ * doc/bugreport.texi (Bugs): Remove nodes pointing to the nirvana.
- * doc/gcc.texi (Service): Update description in the @menu
- * doc/invoke.texi (Option Summary): Remove misplaced and
- duplicated @menu.
-@@ -86,15 +1730,14 @@
- 2014-04-11 Jakub Jelinek <jakub@redhat.com>
-
- PR rtl-optimization/60663
-- * cse.c (cse_insn): Set src_volatile on ASM_OPERANDS in
-- PARALLEL.
-+ * cse.c (cse_insn): Set src_volatile on ASM_OPERANDS in PARALLEL.
-
- 2014-04-10 Jan Hubicka <hubicka@ucw.cz>
- Jakub Jelinek <jakub@redhat.com>
-
- PR lto/60567
-- * ipa.c (function_and_variable_visibility): Copy forced_by_abi flag from
-- decl_node to node.
-+ * ipa.c (function_and_variable_visibility): Copy forced_by_abi
-+ flag from decl_node to node.
-
- 2014-04-10 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
-
-@@ -212,9 +1855,10 @@
-
- 2014-04-05 Pitchumani Sivanupandi <Pitchumani.S@atmel.com>
-
-- * config/avr/avr-arch.h (avr_mcu_t): Add dev_attribute field to have device
-- specific ISA/ feature information. Remove short_sp and errata_skip ds.
-- Add avr_device_specific_features enum to have device specific info.
-+ * config/avr/avr-arch.h (avr_mcu_t): Add dev_attribute field to have
-+ device specific ISA/ feature information. Remove short_sp and
-+ errata_skip ds. Add avr_device_specific_features enum to have device
-+ specific info.
- * config/avr/avr-c.c (avr_cpu_cpp_builtins): use dev_attribute to check
- errata_skip. Add __AVR_ISA_RMW__ builtin macro if RMW ISA available.
- * config/avr/avr-devices.c (avr_mcu_types): Update AVR_MCU macro for
-@@ -282,21 +1926,21 @@
- 2014-04-04 Martin Jambor <mjambor@suse.cz>
-
- PR ipa/60640
-- * cgraph.h (cgraph_clone_node): New parameter added to declaration.
-- Adjust all callers.
-+ * cgraph.h (cgraph_clone_node): New parameter added to declaration.
-+ Adjust all callers.
- * cgraph.c (clone_of_p): Also return true if thunks match.
- (verify_edge_corresponds_to_fndecl): Removed extraneous call to
- cgraph_function_or_thunk_node and an obsolete comment.
-- * cgraphclones.c (build_function_type_skip_args): Moved upwards in the
-- file.
-- (build_function_decl_skip_args): Likewise.
-+ * cgraphclones.c (build_function_type_skip_args): Moved upwards in the
-+ file.
-+ (build_function_decl_skip_args): Likewise.
- (set_new_clone_decl_and_node_flags): New function.
-- (duplicate_thunk_for_node): Likewise.
-- (redirect_edge_duplicating_thunks): Likewise.
-- (cgraph_clone_node): New parameter args_to_skip, pass it to
-- redirect_edge_duplicating_thunks which is called instead of
-- cgraph_redirect_edge_callee.
-- (cgraph_create_virtual_clone): Pass args_to_skip to cgraph_clone_node,
-+ (duplicate_thunk_for_node): Likewise.
-+ (redirect_edge_duplicating_thunks): Likewise.
-+ (cgraph_clone_node): New parameter args_to_skip, pass it to
-+ redirect_edge_duplicating_thunks which is called instead of
-+ cgraph_redirect_edge_callee.
-+ (cgraph_create_virtual_clone): Pass args_to_skip to cgraph_clone_node,
- moved setting of a lot of flags to set_new_clone_decl_and_node_flags.
-
- 2014-04-04 Jeff Law <law@redhat.com>
-@@ -334,8 +1978,8 @@
-
- PR tree-optimization/60505
- * tree-vectorizer.h (struct _stmt_vec_info): Add th field as the
-- threshold of number of iterations below which no vectorization will be
-- done.
-+ threshold of number of iterations below which no vectorization
-+ will be done.
- * tree-vect-loop.c (new_loop_vec_info):
- Initialize LOOP_VINFO_COST_MODEL_THRESHOLD.
- * tree-vect-loop.c (vect_analyze_loop_operations):
-@@ -347,8 +1991,7 @@
-
- 2014-04-03 Richard Biener <rguenther@suse.de>
-
-- * tree-streamer.h (struct streamer_tree_cache_d): Add next_idx
-- member.
-+ * tree-streamer.h (struct streamer_tree_cache_d): Add next_idx member.
- (streamer_tree_cache_create): Adjust.
- * tree-streamer.c (streamer_tree_cache_add_to_node_array): Adjust
- to allow optional nodes array.
-@@ -359,8 +2002,7 @@
- * lto-streamer-out.c (create_output_block): Avoid maintaining
- the node array in the writer cache.
- (DFS_write_tree): Remove assertion.
-- (produce_asm_for_decls): Free the out decl state hash table
-- early.
-+ (produce_asm_for_decls): Free the out decl state hash table early.
- * lto-streamer-in.c (lto_data_in_create): Adjust for
- streamer_tree_cache_create prototype change.
-
-@@ -381,24 +2023,6 @@
- (Weffc++): Remove Scott's numbering, merge lists and reference
- Wnon-virtual-dtor.
-
-- c-family/
--
-- cp/
-- * class.c (accessible_nvdtor_p): New.
-- (check_bases): Don't check base destructor here ...
-- (check_bases_and_members): ... check them here. Trigger on
-- Wnon-virtual-dtor flag.
-- (finish_struct_1): Use accessible_nvdtor_p.
--
-- testsuite/
-- * g++.dg/warn/Wnvdtor.C: Add non-polymorphic case.
-- * g++.dg/warn/Wnvdtor-2.C: New.
-- * g++.dg/warn/Wnvdtor-3.C: New.
-- * g++.dg/warn/Wnvdtor-4.C: New.
-- * g++.dg/warn/Weff1.C: Delete.
-- * g++.old-deja/g++.benjamin/15309-1.C: Delete.
-- * g++.old-deja/g++.benjamin/15309-2.C: Delete.
--
- 2014-04-03 Nick Clifton <nickc@redhat.com>
-
- * config/rl78/rl78-expand.md (movqi): Handle (SUBREG (SYMBOL_REF))
-@@ -414,8 +2038,8 @@
- 2014-04-02 Jan Hubicka <hubicka@ucw.cz>
-
- PR ipa/60659
-- * ipa-devirt.c (get_polymorphic_call_info): Do not ICE on type inconsistent
-- code and instead mark the context inconsistent.
-+ * ipa-devirt.c (get_polymorphic_call_info): Do not ICE on type
-+ inconsistent code and instead mark the context inconsistent.
- (possible_polymorphic_call_targets): For inconsistent contexts
- return empty complete list.
-
-@@ -519,8 +2143,7 @@
-
- 2014-04-01 Richard Biener <rguenther@suse.de>
-
-- * gimple.h (struct gimple_statement_base): Align subcode to
-- 16 bits.
-+ * gimple.h (struct gimple_statement_base): Align subcode to 16 bits.
-
- 2014-04-01 Sebastian Huber <sebastian.huber@embedded-brains.de>
-
-@@ -1031,10 +2654,10 @@
-
- PR tree-optimization/60577
- * tree-core.h (struct tree_base): Document nothrow_flag use
-- in VAR_DECL_NONALIASED.
-- * tree.h (VAR_DECL_NONALIASED): New.
-+ in DECL_NONALIASED.
-+ * tree.h (DECL_NONALIASED): New.
- (may_be_aliased): Adjust.
-- * coverage.c (build_var): Set VAR_DECL_NONALIASED.
-+ * coverage.c (build_var): Set DECL_NONALIASED.
-
- 2014-03-20 Eric Botcazou <ebotcazou@adacore.com>
-
-Index: gcc/testsuite/gcc.target/powerpc/dfp-builtin-1.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/powerpc/dfp-builtin-1.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/powerpc/dfp-builtin-1.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,88 @@
-+/* { dg-do compile { target { powerpc*-*-linux* } } } */
-+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
-+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
-+/* { dg-require-effective-target powerpc_vsx_ok } */
-+/* { dg-options "-mcpu=power7 -O2" } */
-+/* { dg-final { scan-assembler-times "ddedpd " 4 } } */
-+/* { dg-final { scan-assembler-times "denbcd " 2 } } */
-+/* { dg-final { scan-assembler-times "dxex " 1 } } */
-+/* { dg-final { scan-assembler-times "diex " 1 } } */
-+/* { dg-final { scan-assembler-times "dscli " 2 } } */
-+/* { dg-final { scan-assembler-times "dscri " 2 } } */
-+/* { dg-final { scan-assembler-not "bl __builtin" } } */
-+/* { dg-final { scan-assembler-not "dctqpq" } } */
-+/* { dg-final { scan-assembler-not "drdpq" } } */
-+/* { dg-final { scan-assembler-not "stfd" } } */
-+/* { dg-final { scan-assembler-not "lfd" } } */
-+
-+_Decimal64
-+do_dedpd_0 (_Decimal64 a)
-+{
-+ return __builtin_ddedpd (0, a);
-+}
-+
-+_Decimal64
-+do_dedpd_1 (_Decimal64 a)
-+{
-+ return __builtin_ddedpd (1, a);
-+}
-+
-+_Decimal64
-+do_dedpd_2 (_Decimal64 a)
-+{
-+ return __builtin_ddedpd (2, a);
-+}
-+
-+_Decimal64
-+do_dedpd_3 (_Decimal64 a)
-+{
-+ return __builtin_ddedpd (3, a);
-+}
-+
-+_Decimal64
-+do_enbcd_0 (_Decimal64 a)
-+{
-+ return __builtin_denbcd (0, a);
-+}
-+
-+_Decimal64
-+do_enbcd_1 (_Decimal64 a)
-+{
-+ return __builtin_denbcd (1, a);
-+}
-+
-+_Decimal64
-+do_xex (_Decimal64 a)
-+{
-+ return __builtin_dxex (a);
-+}
-+
-+_Decimal64
-+do_iex (_Decimal64 a, _Decimal64 b)
-+{
-+ return __builtin_diex (a, b);
-+}
-+
-+_Decimal64
-+do_scli_1 (_Decimal64 a)
-+{
-+ return __builtin_dscli (a, 1);
-+}
-+
-+_Decimal64
-+do_scli_10 (_Decimal64 a)
-+{
-+ return __builtin_dscli (a, 10);
-+}
-+
-+_Decimal64
-+do_scri_1 (_Decimal64 a)
-+{
-+ return __builtin_dscri (a, 1);
-+}
-+
-+_Decimal64
-+do_scri_10 (_Decimal64 a)
-+{
-+ return __builtin_dscri (a, 10);
-+}
-Index: gcc/testsuite/gcc.target/powerpc/dfp-builtin-2.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/powerpc/dfp-builtin-2.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/powerpc/dfp-builtin-2.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,88 @@
-+/* { dg-do compile { target { powerpc*-*-linux* } } } */
-+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
-+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
-+/* { dg-require-effective-target powerpc_vsx_ok } */
-+/* { dg-options "-mcpu=power7 -O2" } */
-+/* { dg-final { scan-assembler-times "ddedpdq " 4 } } */
-+/* { dg-final { scan-assembler-times "denbcdq " 2 } } */
-+/* { dg-final { scan-assembler-times "dxexq " 1 } } */
-+/* { dg-final { scan-assembler-times "diexq " 1 } } */
-+/* { dg-final { scan-assembler-times "dscliq " 2 } } */
-+/* { dg-final { scan-assembler-times "dscriq " 2 } } */
-+/* { dg-final { scan-assembler-not "bl __builtin" } } */
-+/* { dg-final { scan-assembler-not "dctqpq" } } */
-+/* { dg-final { scan-assembler-not "drdpq" } } */
-+/* { dg-final { scan-assembler-not "stfd" } } */
-+/* { dg-final { scan-assembler-not "lfd" } } */
-+
-+_Decimal128
-+do_dedpdq_0 (_Decimal128 a)
-+{
-+ return __builtin_ddedpdq (0, a);
-+}
-+
-+_Decimal128
-+do_dedpdq_1 (_Decimal128 a)
-+{
-+ return __builtin_ddedpdq (1, a);
-+}
-+
-+_Decimal128
-+do_dedpdq_2 (_Decimal128 a)
-+{
-+ return __builtin_ddedpdq (2, a);
-+}
-+
-+_Decimal128
-+do_dedpdq_3 (_Decimal128 a)
-+{
-+ return __builtin_ddedpdq (3, a);
-+}
-+
-+_Decimal128
-+do_enbcdq_0 (_Decimal128 a)
-+{
-+ return __builtin_denbcdq (0, a);
-+}
-+
-+_Decimal128
-+do_enbcdq_1 (_Decimal128 a)
-+{
-+ return __builtin_denbcdq (1, a);
-+}
-+
-+_Decimal128
-+do_xexq (_Decimal128 a)
-+{
-+ return __builtin_dxexq (a);
-+}
-+
-+_Decimal128
-+do_iexq (_Decimal128 a, _Decimal128 b)
-+{
-+ return __builtin_diexq (a, b);
-+}
-+
-+_Decimal128
-+do_scliq_1 (_Decimal128 a)
-+{
-+ return __builtin_dscliq (a, 1);
-+}
-+
-+_Decimal128
-+do_scliq_10 (_Decimal128 a)
-+{
-+ return __builtin_dscliq (a, 10);
-+}
-+
-+_Decimal128
-+do_scriq_1 (_Decimal128 a)
-+{
-+ return __builtin_dscriq (a, 1);
-+}
-+
-+_Decimal128
-+do_scriq_10 (_Decimal128 a)
-+{
-+ return __builtin_dscriq (a, 10);
-+}
-Index: gcc/testsuite/gcc.target/powerpc/bcd-1.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/powerpc/bcd-1.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/powerpc/bcd-1.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,27 @@
-+/* { dg-do compile { target { powerpc*-*-linux* } } } */
-+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
-+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
-+/* { dg-require-effective-target powerpc_vsx_ok } */
-+/* { dg-options "-mcpu=power7 -O2" } */
-+/* { dg-final { scan-assembler-times "cdtbcd " 1 } } */
-+/* { dg-final { scan-assembler-times "cbcdtd " 1 } } */
-+/* { dg-final { scan-assembler-times "addg6s " 1 } } */
-+/* { dg-final { scan-assembler-not "bl __builtin" } } */
-+
-+unsigned int
-+to_bcd (unsigned int a)
-+{
-+ return __builtin_cdtbcd (a);
-+}
-+
-+unsigned int
-+from_bcd (unsigned int a)
-+{
-+ return __builtin_cbcdtd (a);
-+}
-+
-+unsigned int
-+bcd_arith (unsigned int a, unsigned int b)
-+{
-+ return __builtin_addg6s (a, b);
-+}
-Index: gcc/testsuite/gcc.target/powerpc/pr60735.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/powerpc/pr60735.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/powerpc/pr60735.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,11 @@
-+/* { dg-do compile } */
-+/* { dg-options "-mcpu=8548 -mspe -mabi=spe -O2" } */
-+/* { dg-skip-if "not an SPE target" { ! powerpc_spe_nocache } { "*" } { "" } } */
-+
-+/* In PR60735, the type _Decimal64 generated an insn not found message. */
-+
-+void
-+pr60735 (_Decimal64 *p, _Decimal64 *q)
-+{
-+ *p = *q;
-+}
-Index: gcc/testsuite/gcc.target/powerpc/extend-divide-1.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/powerpc/extend-divide-1.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/powerpc/extend-divide-1.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,34 @@
-+/* { dg-do compile { target { powerpc*-*-linux* } } } */
-+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
-+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
-+/* { dg-require-effective-target powerpc_vsx_ok } */
-+/* { dg-options "-mcpu=power7 -O2" } */
-+/* { dg-final { scan-assembler-times "divwe " 1 } } */
-+/* { dg-final { scan-assembler-times "divweo " 1 } } */
-+/* { dg-final { scan-assembler-times "divweu " 1 } } */
-+/* { dg-final { scan-assembler-times "divweuo " 1 } } */
-+/* { dg-final { scan-assembler-not "bl __builtin" } } */
-+
-+int
-+div_we (int a, int b)
-+{
-+ return __builtin_divwe (a, b);
-+}
-+
-+int
-+div_weo (int a, int b)
-+{
-+ return __builtin_divweo (a, b);
-+}
-+
-+unsigned int
-+div_weu (unsigned int a, unsigned int b)
-+{
-+ return __builtin_divweu (a, b);
-+}
-+
-+unsigned int
-+div_weuo (unsigned int a, unsigned int b)
-+{
-+ return __builtin_divweuo (a, b);
-+}
-Index: gcc/testsuite/gcc.target/powerpc/bcd-2.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/powerpc/bcd-2.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/powerpc/bcd-2.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,44 @@
-+/* { dg-do compile { target { powerpc*-*-linux* && lp64 } } } */
-+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
-+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
-+/* { dg-require-effective-target powerpc_p8vector_ok } */
-+/* { dg-options "-mcpu=power8 -O2" } */
-+/* { dg-final { scan-assembler-times "bcdadd\[.\] " 2 } } */
-+/* { dg-final { scan-assembler-times "bcdsub\[.\] " 2 } } */
-+/* { dg-final { scan-assembler-not "bl __builtin" } } */
-+/* { dg-final { scan-assembler-not "mtvsr" } } */
-+/* { dg-final { scan-assembler-not "mfvsr" } } */
-+/* { dg-final { scan-assembler-not "lvx" } } */
-+/* { dg-final { scan-assembler-not "lxvw4x" } } */
-+/* { dg-final { scan-assembler-not "lxvd2x" } } */
-+/* { dg-final { scan-assembler-not "stvx" } } */
-+/* { dg-final { scan-assembler-not "stxvw4x" } } */
-+/* { dg-final { scan-assembler-not "stxvd2x" } } */
-+
-+typedef __int128_t __attribute__((__vector_size__(16))) vector_128_t;
-+typedef __int128_t scalar_128_t;
-+typedef unsigned long long scalar_64_t;
-+
-+vector_128_t
-+do_add_0 (vector_128_t a, vector_128_t b)
-+{
-+ return __builtin_bcdadd (a, b, 0);
-+}
-+
-+vector_128_t
-+do_add_1 (vector_128_t a, vector_128_t b)
-+{
-+ return __builtin_bcdadd (a, b, 1);
-+}
-+
-+vector_128_t
-+do_sub_0 (vector_128_t a, vector_128_t b)
-+{
-+ return __builtin_bcdsub (a, b, 0);
-+}
-+
-+vector_128_t
-+do_sub_1 (vector_128_t a, vector_128_t b)
-+{
-+ return __builtin_bcdsub (a, b, 1);
-+}
-Index: gcc/testsuite/gcc.target/powerpc/extend-divide-2.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/powerpc/extend-divide-2.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/powerpc/extend-divide-2.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,34 @@
-+/* { dg-do compile { target { powerpc*-*-linux* && lp64 } } } */
-+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
-+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
-+/* { dg-require-effective-target powerpc_vsx_ok } */
-+/* { dg-options "-mcpu=power7 -O2" } */
-+/* { dg-final { scan-assembler-times "divde " 1 } } */
-+/* { dg-final { scan-assembler-times "divdeo " 1 } } */
-+/* { dg-final { scan-assembler-times "divdeu " 1 } } */
-+/* { dg-final { scan-assembler-times "divdeuo " 1 } } */
-+/* { dg-final { scan-assembler-not "bl __builtin" } } */
-+
-+long
-+div_de (long a, long b)
-+{
-+ return __builtin_divde (a, b);
-+}
-+
-+long
-+div_deo (long a, long b)
-+{
-+ return __builtin_divdeo (a, b);
-+}
-+
-+unsigned long
-+div_deu (unsigned long a, unsigned long b)
-+{
-+ return __builtin_divdeu (a, b);
-+}
-+
-+unsigned long
-+div_deuo (unsigned long a, unsigned long b)
-+{
-+ return __builtin_divdeuo (a, b);
-+}
-Index: gcc/testsuite/gcc.target/powerpc/pack01.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/powerpc/pack01.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/powerpc/pack01.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,91 @@
-+/* { dg-do run { target { powerpc*-*-linux* && lp64 } } } */
-+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
-+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
-+/* { dg-require-effective-target p8vector_hw } */
-+/* { dg-options "-mcpu=power8 -O2" } */
-+
-+#include <stddef.h>
-+#include <stdlib.h>
-+#include <altivec.h>
-+
-+#ifdef DEBUG
-+#include <stdio.h>
-+#endif
-+
-+typedef __int128_t __attribute__((__vector_size__(16))) vector_128_t;
-+typedef __int128_t scalar_128_t;
-+typedef unsigned long long scalar_64_t;
-+
-+volatile scalar_64_t one = 1;
-+volatile scalar_64_t two = 2;
-+
-+int
-+main (void)
-+{
-+ scalar_128_t a = (((scalar_128_t)one) << 64) | ((scalar_128_t)two);
-+ vector_128_t v1 = (vector_128_t) { a };
-+ vector_128_t v2 = __builtin_pack_vector_int128 (one, two);
-+ scalar_64_t x0 = __builtin_unpack_vector_int128 (v1, 0);
-+ scalar_64_t x1 = __builtin_unpack_vector_int128 (v1, 1);
-+ vector_128_t v3 = __builtin_pack_vector_int128 (x0, x1);
-+
-+ size_t i;
-+ union {
-+ scalar_128_t i128;
-+ vector_128_t v128;
-+ scalar_64_t u64;
-+ unsigned char uc[sizeof (scalar_128_t)];
-+ char c[sizeof (scalar_128_t)];
-+ } u, u2;
-+
-+#ifdef DEBUG
-+ {
-+ printf ("a = 0x");
-+ u.i128 = a;
-+ for (i = 0; i < sizeof (scalar_128_t); i++)
-+ printf ("%.2x", u.uc[i]);
-+
-+ printf ("\nv1 = 0x");
-+ u.v128 = v1;
-+ for (i = 0; i < sizeof (scalar_128_t); i++)
-+ printf ("%.2x", u.uc[i]);
-+
-+ printf ("\nv2 = 0x");
-+ u.v128 = v2;
-+ for (i = 0; i < sizeof (scalar_128_t); i++)
-+ printf ("%.2x", u.uc[i]);
-+
-+ printf ("\nv3 = 0x");
-+ u.v128 = v3;
-+ for (i = 0; i < sizeof (scalar_128_t); i++)
-+ printf ("%.2x", u.uc[i]);
-+
-+ printf ("\nx0 = 0x");
-+ u.u64 = x0;
-+ for (i = 0; i < sizeof (scalar_64_t); i++)
-+ printf ("%.2x", u.uc[i]);
-+
-+ printf ("\nx1 = 0x");
-+ u.u64 = x1;
-+ for (i = 0; i < sizeof (scalar_64_t); i++)
-+ printf ("%.2x", u.uc[i]);
-+
-+ printf ("\n");
-+ }
-+#endif
-+
-+ u2.i128 = a;
-+ u.v128 = v1;
-+ if (memcmp (u.c, u2.c, sizeof (scalar_128_t)) != 0)
-+ abort ();
-+
-+ u.v128 = v2;
-+ if (memcmp (u.c, u2.c, sizeof (scalar_128_t)) != 0)
-+ abort ();
-+
-+ u.v128 = v3;
-+ if (memcmp (u.c, u2.c, sizeof (scalar_128_t)) != 0)
-+ abort ();
-+
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.target/powerpc/bcd-3.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/powerpc/bcd-3.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/powerpc/bcd-3.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,103 @@
-+/* { dg-do compile { target { powerpc*-*-linux* && lp64 } } } */
-+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
-+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
-+/* { dg-require-effective-target powerpc_p8vector_ok } */
-+/* { dg-options "-mcpu=power8 -O2" } */
-+/* { dg-final { scan-assembler-times "bcdadd\[.\] " 4 } } */
-+/* { dg-final { scan-assembler-times "bcdsub\[.\] " 4 } } */
-+/* { dg-final { scan-assembler-not "bl __builtin" } } */
-+/* { dg-final { scan-assembler-not "mtvsr" } } */
-+/* { dg-final { scan-assembler-not "mfvsr" } } */
-+/* { dg-final { scan-assembler-not "lvx" } } */
-+/* { dg-final { scan-assembler-not "lxvw4x" } } */
-+/* { dg-final { scan-assembler-not "lxvd2x" } } */
-+/* { dg-final { scan-assembler-not "stvx" } } */
-+/* { dg-final { scan-assembler-not "stxvw4x" } } */
-+/* { dg-final { scan-assembler-not "stxvd2x" } } */
-+
-+typedef __int128_t __attribute__((__vector_size__(16))) vector_128_t;
-+typedef __int128_t scalar_128_t;
-+typedef unsigned long long scalar_64_t;
-+
-+/* Test whether the peephole works to allow folding a bcdadd, with a
-+ bcdadd_<test> into a single instruction. */
-+
-+vector_128_t
-+do_add_lt (vector_128_t a, vector_128_t b, int *p)
-+{
-+ vector_128_t ret = __builtin_bcdadd (a, b, 0);
-+ if (__builtin_bcdadd_lt (a, b, 0))
-+ *p = 1;
-+
-+ return ret;
-+}
-+
-+vector_128_t
-+do_add_eq (vector_128_t a, vector_128_t b, int *p)
-+{
-+ vector_128_t ret = __builtin_bcdadd (a, b, 0);
-+ if (__builtin_bcdadd_eq (a, b, 0))
-+ *p = 1;
-+
-+ return ret;
-+}
-+
-+vector_128_t
-+do_add_gt (vector_128_t a, vector_128_t b, int *p)
-+{
-+ vector_128_t ret = __builtin_bcdadd (a, b, 0);
-+ if (__builtin_bcdadd_gt (a, b, 0))
-+ *p = 1;
-+
-+ return ret;
-+}
-+
-+vector_128_t
-+do_add_ov (vector_128_t a, vector_128_t b, int *p)
-+{
-+ vector_128_t ret = __builtin_bcdadd (a, b, 0);
-+ if (__builtin_bcdadd_ov (a, b, 0))
-+ *p = 1;
-+
-+ return ret;
-+}
-+
-+vector_128_t
-+do_sub_lt (vector_128_t a, vector_128_t b, int *p)
-+{
-+ vector_128_t ret = __builtin_bcdsub (a, b, 0);
-+ if (__builtin_bcdsub_lt (a, b, 0))
-+ *p = 1;
-+
-+ return ret;
-+}
-+
-+vector_128_t
-+do_sub_eq (vector_128_t a, vector_128_t b, int *p)
-+{
-+ vector_128_t ret = __builtin_bcdsub (a, b, 0);
-+ if (__builtin_bcdsub_eq (a, b, 0))
-+ *p = 1;
-+
-+ return ret;
-+}
-+
-+vector_128_t
-+do_sub_gt (vector_128_t a, vector_128_t b, int *p)
-+{
-+ vector_128_t ret = __builtin_bcdsub (a, b, 0);
-+ if (__builtin_bcdsub_gt (a, b, 0))
-+ *p = 1;
-+
-+ return ret;
-+}
-+
-+vector_128_t
-+do_sub_ov (vector_128_t a, vector_128_t b, int *p)
-+{
-+ vector_128_t ret = __builtin_bcdsub (a, b, 0);
-+ if (__builtin_bcdsub_ov (a, b, 0))
-+ *p = 1;
-+
-+ return ret;
-+}
-Index: gcc/testsuite/gcc.target/powerpc/tfmode_off.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/powerpc/tfmode_off.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/powerpc/tfmode_off.c (.../branches/gcc-4_9-branch)
-@@ -1,6 +1,7 @@
- /* { dg-do assemble } */
- /* { dg-skip-if "" { powerpc-ibm-aix* } { "*" } { "" } } */
- /* { dg-skip-if "no TFmode" { powerpc-*-eabi* } { "*" } { "" } } */
-+/* { dg-require-effective-target longdouble128 } */
- /* { dg-options "-O2 -fno-align-functions -mtraceback=no -save-temps" } */
-
- typedef float TFmode __attribute__ ((mode (TF)));
-Index: gcc/testsuite/gcc.target/powerpc/pack02.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/powerpc/pack02.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/powerpc/pack02.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,96 @@
-+/* { dg-do run { target { powerpc*-*-linux* } } } */
-+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
-+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
-+/* { dg-require-effective-target powerpc_fprs } */
-+/* { dg-require-effective-target longdouble128 } */
-+/* { dg-options "-O2 -mhard-float" } */
-+
-+#include <stddef.h>
-+#include <stdlib.h>
-+#include <math.h>
-+
-+#ifdef DEBUG
-+#include <stdio.h>
-+#endif
-+
-+int
-+main (void)
-+{
-+ double high = pow (2.0, 60);
-+ double low = 2.0;
-+ long double a = ((long double)high) + ((long double)low);
-+ double x0 = __builtin_unpack_longdouble (a, 0);
-+ double x1 = __builtin_unpack_longdouble (a, 1);
-+ long double b = __builtin_pack_longdouble (x0, x1);
-+
-+#ifdef DEBUG
-+ {
-+ size_t i;
-+ union {
-+ long double ld;
-+ double d;
-+ unsigned char uc[sizeof (long double)];
-+ char c[sizeof (long double)];
-+ } u;
-+
-+ printf ("a = 0x");
-+ u.ld = a;
-+ for (i = 0; i < sizeof (long double); i++)
-+ printf ("%.2x", u.uc[i]);
-+
-+ printf (", %Lg\n", a);
-+
-+ printf ("b = 0x");
-+ u.ld = b;
-+ for (i = 0; i < sizeof (long double); i++)
-+ printf ("%.2x", u.uc[i]);
-+
-+ printf (", %Lg\n", b);
-+
-+ printf ("hi = 0x");
-+ u.d = high;
-+ for (i = 0; i < sizeof (double); i++)
-+ printf ("%.2x", u.uc[i]);
-+
-+ printf (",%*s %g\n", (int)(2 * (sizeof (long double) - sizeof (double))), "", high);
-+
-+ printf ("lo = 0x");
-+ u.d = low;
-+ for (i = 0; i < sizeof (double); i++)
-+ printf ("%.2x", u.uc[i]);
-+
-+ printf (",%*s %g\n", (int)(2 * (sizeof (long double) - sizeof (double))), "", low);
-+
-+ printf ("x0 = 0x");
-+ u.d = x0;
-+ for (i = 0; i < sizeof (double); i++)
-+ printf ("%.2x", u.uc[i]);
-+
-+ printf (",%*s %g\n", (int)(2 * (sizeof (long double) - sizeof (double))), "", x0);
-+
-+ printf ("x1 = 0x");
-+ u.d = x1;
-+ for (i = 0; i < sizeof (double); i++)
-+ printf ("%.2x", u.uc[i]);
-+
-+ printf (",%*s %g\n", (int)(2 * (sizeof (long double) - sizeof (double))), "", x1);
-+ }
-+#endif
-+
-+ if (high != x0)
-+ abort ();
-+
-+ if (low != x1)
-+ abort ();
-+
-+ if (a != b)
-+ abort ();
-+
-+ if (x0 != high)
-+ abort ();
-+
-+ if (x1 != low)
-+ abort ();
-+
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.target/powerpc/htm-ttest.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/powerpc/htm-ttest.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/powerpc/htm-ttest.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,14 @@
-+/* { dg-do compile { target { powerpc*-*-* } } } */
-+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
-+/* { dg-require-effective-target powerpc_htm_ok } */
-+/* { dg-options "-O2 -mhtm" } */
-+
-+/* { dg-final { scan-assembler "rlwinm r?\[0-9\]+,r?\[0-9\]+,3,30,31" { target { ilp32 } } } } */
-+/* { dg-final { scan-assembler "rldicl r?\[0-9\]+,r?\[0-9\]+,35,62" { target { lp64 } } } } */
-+
-+#include <htmintrin.h>
-+long
-+ttest (void)
-+{
-+ return _HTM_STATE(__builtin_ttest());
-+}
-Index: gcc/testsuite/gcc.target/powerpc/pack03.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/powerpc/pack03.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/powerpc/pack03.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,88 @@
-+/* { dg-do run { target { powerpc*-*-linux* } } } */
-+/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
-+/* { dg-skip-if "" { powerpc*-*-*spe* } { "*" } { "" } } */
-+/* { dg-require-effective-target dfp_hw } */
-+/* { dg-options "-O2 -mhard-dfp" } */
-+
-+#include <stddef.h>
-+#include <stdlib.h>
-+#include <math.h>
-+
-+#ifdef DEBUG
-+#include <stdio.h>
-+#endif
-+
-+int
-+main (void)
-+{
-+ _Decimal128 one = (_Decimal128)1.0;
-+ _Decimal128 two = (_Decimal128)2.0;
-+ _Decimal128 ten = (_Decimal128)10.0;
-+ _Decimal128 a = one;
-+ _Decimal128 b;
-+ _Decimal128 c;
-+ unsigned long long x0;
-+ unsigned long long x1;
-+ size_t i;
-+
-+ for (i = 0; i < 25; i++)
-+ a *= ten;
-+
-+ a += two;
-+
-+ x0 = __builtin_unpack_dec128 (a, 0);
-+ x1 = __builtin_unpack_dec128 (a, 1);
-+ b = __builtin_pack_dec128 (x0, x1);
-+ c = __builtin_dscliq (one, 25) + two;
-+
-+#ifdef DEBUG
-+ {
-+ union {
-+ _Decimal128 d;
-+ unsigned long long ull;
-+ unsigned char uc[sizeof (_Decimal128)];
-+ } u;
-+
-+ printf ("a = 0x");
-+ u.d = a;
-+ for (i = 0; i < sizeof (_Decimal128); i++)
-+ printf ("%.2x", u.uc[i]);
-+
-+ printf (", %Lg\n", (long double)a);
-+
-+ printf ("b = 0x");
-+ u.d = b;
-+ for (i = 0; i < sizeof (_Decimal128); i++)
-+ printf ("%.2x", u.uc[i]);
-+
-+ printf (", %Lg\n", (long double)b);
-+
-+ printf ("c = 0x");
-+ u.d = c;
-+ for (i = 0; i < sizeof (_Decimal128); i++)
-+ printf ("%.2x", u.uc[i]);
-+
-+ printf (", %Lg\n", (long double)c);
-+
-+ printf ("x0 = 0x");
-+ u.ull = x0;
-+ for (i = 0; i < sizeof (unsigned long long); i++)
-+ printf ("%.2x", u.uc[i]);
-+
-+ printf ("\nx1 = 0x");
-+ u.ull = x1;
-+ for (i = 0; i < sizeof (unsigned long long); i++)
-+ printf ("%.2x", u.uc[i]);
-+
-+ printf ("\n");
-+ }
-+#endif
-+
-+ if (a != b)
-+ abort ();
-+
-+ if (a != c)
-+ abort ();
-+
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.target/powerpc/ti_math1.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/powerpc/ti_math1.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/powerpc/ti_math1.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,20 @@
-+/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
-+/* { dg-options "-O2" } */
-+/* { dg-final { scan-assembler-times "addc" 1 } } */
-+/* { dg-final { scan-assembler-times "adde" 1 } } */
-+/* { dg-final { scan-assembler-times "subfc" 1 } } */
-+/* { dg-final { scan-assembler-times "subfe" 1 } } */
-+/* { dg-final { scan-assembler-not "subf " } } */
-+
-+__int128
-+add_128 (__int128 *ptr, __int128 val)
-+{
-+ return (*ptr + val);
-+}
-+
-+__int128
-+sub_128 (__int128 *ptr, __int128 val)
-+{
-+ return (*ptr - val);
-+}
-+
-Index: gcc/testsuite/gcc.target/powerpc/ti_math2.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/powerpc/ti_math2.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/powerpc/ti_math2.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,73 @@
-+/* { dg-do run { target { powerpc*-*-* && lp64 } } } */
-+/* { dg-options "-O2 -fno-inline" } */
-+
-+union U {
-+ __int128 i128;
-+ struct {
-+ long l1;
-+ long l2;
-+ } s;
-+};
-+
-+union U u1,u2;
-+
-+__int128
-+create_128 (long most_sig, long least_sig)
-+{
-+ union U u;
-+
-+#if __LITTLE_ENDIAN__
-+ u.s.l1 = least_sig;
-+ u.s.l2 = most_sig;
-+#else
-+ u.s.l1 = most_sig;
-+ u.s.l2 = least_sig;
-+#endif
-+ return u.i128;
-+}
-+
-+long most_sig (union U * u)
-+{
-+#if __LITTLE_ENDIAN__
-+ return (*u).s.l2;
-+#else
-+ return (*u).s.l1;
-+#endif
-+}
-+
-+long least_sig (union U * u)
-+{
-+#if __LITTLE_ENDIAN__
-+ return (*u).s.l1;
-+#else
-+ return (*u).s.l2;
-+#endif
-+}
-+
-+__int128
-+add_128 (__int128 *ptr, __int128 val)
-+{
-+ return (*ptr + val);
-+}
-+
-+__int128
-+sub_128 (__int128 *ptr, __int128 val)
-+{
-+ return (*ptr - val);
-+}
-+
-+int
-+main (void)
-+{
-+ /* Do a simple add/sub to make sure carry is happening between the dwords
-+ and that dwords are in correct endian order. */
-+ u1.i128 = create_128 (1, -1);
-+ u2.i128 = add_128 (&u1.i128, 1);
-+ if ((most_sig (&u2) != 2) || (least_sig (&u2) != 0))
-+ __builtin_abort ();
-+ u2.i128 = sub_128 (&u2.i128, 1);
-+ if ((most_sig (&u2) != 1) || (least_sig (&u2) != -1))
-+ __builtin_abort ();
-+ return 0;
-+}
-+
-Index: gcc/testsuite/gcc.target/arm/pr48252.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/arm/pr48252.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/arm/pr48252.c (.../branches/gcc-4_9-branch)
-@@ -15,7 +15,6 @@
- uint8x8x2_t vd1, vd2;
- union {uint8x8_t v; uint8_t buf[8];} d1, d2, d3, d4;
- int i;
-- uint8_t odd, even;
-
- vd1 = vzip_u8(v1, vdup_n_u8(0));
- vd2 = vzip_u8(v2, vdup_n_u8(0));
-@@ -25,17 +24,9 @@
- vst1_u8(d3.buf, vd2.val[0]);
- vst1_u8(d4.buf, vd2.val[1]);
-
--#ifdef __ARMEL__
-- odd = 1;
-- even = 0;
--#else
-- odd = 0;
-- even = 1;
--#endif
--
- for (i = 0; i < 8; i++)
-- if ((i % 2 == even && d4.buf[i] != 2)
-- || (i % 2 == odd && d4.buf[i] != 0))
-+ if ((i % 2 == 0 && d4.buf[i] != 2)
-+ || (i % 2 == 1 && d4.buf[i] != 0))
- abort ();
-
- return 0;
-Index: gcc/testsuite/gcc.target/alpha/pr61586.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/alpha/pr61586.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/alpha/pr61586.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,10 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O2 -mieee" } */
-+
-+void foo (int *dimensions, double **params, int hh)
-+{
-+ if (params[hh])
-+ ;
-+ else if (dimensions[hh] > 0)
-+ params[hh][0] = 1.0f;
-+}
-Index: gcc/testsuite/gcc.target/aarch64/vqdmlsl_lane_s16.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmlsl_lane_s16.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmlsl_lane_s16.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmlsl_lane_s16 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int32x4_t
-+t_vqdmlsl_lane_s16 (int32x4_t a, int16x4_t b, int16x4_t c)
-+{
-+ return vqdmlsl_lane_s16 (a, b, c, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmlsl\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.4\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vector_intrinsics.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vector_intrinsics.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vector_intrinsics.c (.../branches/gcc-4_9-branch)
-@@ -1,7 +1,7 @@
- /* { dg-do compile } */
- /* { dg-options "-O2" } */
-
--#include "../../../config/aarch64/arm_neon.h"
-+#include "arm_neon.h"
-
-
- /* { dg-final { scan-assembler-times "\\tfmax\\tv\[0-9\]+\.2s, v\[0-9\].2s, v\[0-9\].2s" 1 } } */
-@@ -305,7 +305,7 @@
- /* { dg-final { scan-assembler-times "\\tsqdmlal2\\tv\[0-9\]+\.4s, v\[0-9\]+\.8h, v\[0-9\]+\.h" 3 } } */
-
- int32x4_t
--test_vqdmlal_high_lane_s16 (int32x4_t a, int16x8_t b, int16x8_t c)
-+test_vqdmlal_high_lane_s16 (int32x4_t a, int16x8_t b, int16x4_t c)
- {
- return vqdmlal_high_lane_s16 (a, b, c, 3);
- }
-@@ -361,7 +361,7 @@
- /* { dg-final { scan-assembler-times "\\tsqdmlal2\\tv\[0-9\]+\.2d, v\[0-9\]+\.4s, v\[0-9\]+\.s" 3 } } */
-
- int64x2_t
--test_vqdmlal_high_lane_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c)
-+test_vqdmlal_high_lane_s32 (int64x2_t __a, int32x4_t __b, int32x2_t __c)
- {
- return vqdmlal_high_lane_s32 (__a, __b, __c, 1);
- }
-@@ -417,7 +417,7 @@
- /* { dg-final { scan-assembler-times "\\tsqdmlsl2\\tv\[0-9\]+\.4s, v\[0-9\]+\.8h, v\[0-9\]+\.h" 3 } } */
-
- int32x4_t
--test_vqdmlsl_high_lane_s16 (int32x4_t a, int16x8_t b, int16x8_t c)
-+test_vqdmlsl_high_lane_s16 (int32x4_t a, int16x8_t b, int16x4_t c)
- {
- return vqdmlsl_high_lane_s16 (a, b, c, 3);
- }
-@@ -473,7 +473,7 @@
- /* { dg-final { scan-assembler-times "\\tsqdmlsl2\\tv\[0-9\]+\.2d, v\[0-9\]+\.4s, v\[0-9\]+\.s" 3 } } */
-
- int64x2_t
--test_vqdmlsl_high_lane_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c)
-+test_vqdmlsl_high_lane_s32 (int64x2_t __a, int32x4_t __b, int32x2_t __c)
- {
- return vqdmlsl_high_lane_s32 (__a, __b, __c, 1);
- }
-@@ -529,7 +529,7 @@
- /* { dg-final { scan-assembler-times "\\tsqdmull2\\tv\[0-9\]+\.4s, v\[0-9\]+\.8h, v\[0-9\]+\.h" 3 } } */
-
- int32x4_t
--test_vqdmull_high_lane_s16 (int16x8_t a, int16x8_t b)
-+test_vqdmull_high_lane_s16 (int16x8_t a, int16x4_t b)
- {
- return vqdmull_high_lane_s16 (a, b, 3);
- }
-@@ -585,7 +585,7 @@
- /* { dg-final { scan-assembler-times "\\tsqdmull2\\tv\[0-9\]+\.2d, v\[0-9\]+\.4s, v\[0-9\]+\.s" 3 } } */
-
- int64x2_t
--test_vqdmull_high_lane_s32 (int32x4_t __a, int32x4_t __b)
-+test_vqdmull_high_lane_s32 (int32x4_t __a, int32x2_t __b)
- {
- return vqdmull_high_lane_s32 (__a, __b, 1);
- }
-Index: gcc/testsuite/gcc.target/aarch64/vqdmlal_laneq_s16.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmlal_laneq_s16.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmlal_laneq_s16.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmlal_laneq_s16 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int32x4_t
-+t_vqdmlal_laneq_s16 (int32x4_t a, int16x4_t b, int16x8_t c)
-+{
-+ return vqdmlal_laneq_s16 (a, b, c, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmlal\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.4\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_lane_s16.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_lane_s16.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_lane_s16.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmlsl_high_lane_s16 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int32x4_t
-+t_vqdmlsl_high_lane_s16 (int32x4_t a, int16x8_t b, int16x4_t c)
-+{
-+ return vqdmlsl_high_lane_s16 (a, b, c, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmlsl2\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.8\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmull_lane_s16.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmull_lane_s16.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmull_lane_s16.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmull_lane_s16 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int32x4_t
-+t_vqdmull_lane_s16 (int16x4_t a, int16x4_t b)
-+{
-+ return vqdmull_lane_s16 (a, b, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmull\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.4\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmulhh_lane_s16.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmulhh_lane_s16.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmulhh_lane_s16.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,36 @@
-+/* Test the vqdmulhh_lane_s16 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do run } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+#include <stdio.h>
-+
-+extern void abort (void);
-+
-+int
-+main (void)
-+{
-+ int16_t arg1;
-+ int16x4_t arg2;
-+ int16_t result;
-+ int16_t actual;
-+ int16_t expected;
-+
-+ arg1 = -32768;
-+ arg2 = vcreate_s16 (0x0000ffff2489e398ULL);
-+ actual = vqdmulhh_lane_s16 (arg1, arg2, 2);
-+ expected = 1;
-+
-+ if (expected != actual)
-+ {
-+ fprintf (stderr, "Expected: %xd, got %xd\n", expected, actual);
-+ abort ();
-+ }
-+
-+ return 0;
-+}
-+
-+
-+/* { dg-final { scan-assembler-times "sqdmulh\[ \t\]+\[hH\]\[0-9\]+, ?\[hH\]\[0-9\]+, ?\[vV\]\[0-9\]+\.\[hH\]\\\[2\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmullh_lane_s16.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmullh_lane_s16.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmullh_lane_s16.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmullh_lane_s16 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int32x1_t
-+t_vqdmullh_lane_s16 (int16x1_t a, int16x4_t b)
-+{
-+ return vqdmullh_lane_s16 (a, b, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmull\[ \t\]+\[sS\]\[0-9\]+, ?\[hH\]\[0-9\]+, ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-14.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-14.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-14.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,35 @@
-+/* Test AAPCS64 layout and __builtin_va_start.
-+
-+ Pass named HFA/HVA argument on stack. */
-+
-+/* { dg-do run { target aarch64*-*-* } } */
-+
-+#ifndef IN_FRAMEWORK
-+#define AAPCS64_TEST_STDARG
-+#define TESTFILE "va_arg-14.c"
-+#include "type-def.h"
-+
-+struct hfa_fx2_t hfa_fx2 = {1.2f, 2.2f};
-+struct hfa_fx3_t hfa_fx3 = {3.2f, 4.2f, 5.2f};
-+vf4_t float32x4 = {6.2f, 7.2f, 8.2f, 9.2f};
-+vf4_t float32x4_2 = {10.2f, 11.2f, 12.2f, 13.2f};
-+
-+#include "abitest.h"
-+#else
-+ ARG (float, 1.0f, S0, 0)
-+ ARG (float, 2.0f, S1, 1)
-+ ARG (float, 3.0f, S2, 2)
-+ ARG (float, 4.0f, S3, 3)
-+ ARG (float, 5.0f, S4, 4)
-+ ARG (float, 6.0f, S5, 5)
-+ ARG (float, 7.0f, S6, 6)
-+ ARG (struct hfa_fx3_t, hfa_fx3, STACK, 7)
-+ /* Previous argument size has been rounded up to the nearest multiple of
-+ 8 bytes. */
-+ ARG (struct hfa_fx2_t, hfa_fx2, STACK + 16, 8)
-+ /* NSAA is rounded up to the nearest natural alignment of float32x4. */
-+ ARG (vf4_t, float32x4, STACK + 32, 9)
-+ ARG (vf4_t, float32x4_2, STACK + 48, LAST_NAMED_ARG_ID)
-+ DOTS
-+ LAST_ANON (double, 123456789.987, STACK + 64, 11)
-+#endif
-Index: gcc/testsuite/gcc.target/aarch64/aapcs64/type-def.h
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/aapcs64/type-def.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/aapcs64/type-def.h (.../branches/gcc-4_9-branch)
-@@ -34,6 +34,13 @@
- float b;
- };
-
-+struct hfa_fx3_t
-+{
-+ float a;
-+ float b;
-+ float c;
-+};
-+
- struct hfa_dx2_t
- {
- double a;
-Index: gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-13.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-13.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-13.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,59 @@
-+/* Test AAPCS64 layout and __builtin_va_start.
-+
-+ Pass named HFA/HVA argument on stack. */
-+
-+/* { dg-do run { target aarch64*-*-* } } */
-+
-+#ifndef IN_FRAMEWORK
-+#define AAPCS64_TEST_STDARG
-+#define TESTFILE "va_arg-13.c"
-+
-+struct float_float_t
-+{
-+ float a;
-+ float b;
-+} float_float;
-+
-+union float_int_t
-+{
-+ float b8;
-+ int b5;
-+} float_int;
-+
-+#define HAS_DATA_INIT_FUNC
-+void
-+init_data ()
-+{
-+ float_float.a = 1.2f;
-+ float_float.b = 2.2f;
-+
-+ float_int.b8 = 4983.80f;
-+}
-+
-+#include "abitest.h"
-+#else
-+ ARG (float, 1.0f, S0, 0)
-+ ARG (float, 2.0f, S1, 1)
-+ ARG (float, 3.0f, S2, 2)
-+ ARG (float, 4.0f, S3, 3)
-+ ARG (float, 5.0f, S4, 4)
-+ ARG (float, 6.0f, S5, 5)
-+ ARG (float, 7.0f, S6, 6)
-+ ARG (struct float_float_t, float_float, STACK, 7)
-+ ARG (int, 9, W0, 8)
-+ ARG (int, 10, W1, 9)
-+ ARG (int, 11, W2, 10)
-+ ARG (int, 12, W3, 11)
-+ ARG (int, 13, W4, 12)
-+ ARG (int, 14, W5, 13)
-+ ARG (int, 15, W6, LAST_NAMED_ARG_ID)
-+ DOTS
-+ /* Note on the reason of using 'X7' instead of 'W7' here:
-+ Using 'X7' makes sure the test works in the big-endian mode.
-+ According to PCS rules B.4 and C.10, the size of float_int is rounded
-+ to 8 bytes and prepared in the register X7 as if loaded via LDR from
-+ the memory, with the content of the other 4 bytes unspecified. The
-+ test framework will only compare the 4 relavent bytes. */
-+ ANON (union float_int_t, float_int, X7, 15)
-+ LAST_ANON (long long, 12683143434LL, STACK + 8, 16)
-+#endif
-Index: gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-15.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-15.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-15.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,39 @@
-+/* Test AAPCS64 layout and __builtin_va_start.
-+
-+ Pass named __128int argument on stack. */
-+
-+/* { dg-do run { target aarch64*-*-* } } */
-+
-+#ifndef IN_FRAMEWORK
-+#define AAPCS64_TEST_STDARG
-+#define TESTFILE "va_arg-15.c"
-+#include "type-def.h"
-+
-+union int128_t qword;
-+
-+#define HAS_DATA_INIT_FUNC
-+void
-+init_data ()
-+{
-+ /* Init signed quad-word integer. */
-+ qword.l64 = 0xfdb9753102468aceLL;
-+ qword.h64 = 0xeca8642013579bdfLL;
-+}
-+
-+#include "abitest.h"
-+#else
-+ ARG (int, 1, W0, 0)
-+ ARG (int, 2, W1, 1)
-+ ARG (int, 3, W2, 2)
-+ ARG (int, 4, W3, 3)
-+ ARG (int, 5, W4, 4)
-+ ARG (int, 6, W5, 5)
-+ ARG (int, 7, W6, 6)
-+ ARG (__int128, qword.i, STACK, LAST_NAMED_ARG_ID)
-+ DOTS
-+#ifndef __AAPCS64_BIG_ENDIAN__
-+ LAST_ANON (int, 8, STACK + 16, 8)
-+#else
-+ LAST_ANON (int, 8, STACK + 20, 8)
-+#endif
-+#endif
-Index: gcc/testsuite/gcc.target/aarch64/vqdmlalh_lane_s16.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmlalh_lane_s16.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmlalh_lane_s16.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmlalh_lane_s16 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int32x1_t
-+t_vqdmlalh_lane_s16 (int32x1_t a, int16x1_t b, int16x4_t c)
-+{
-+ return vqdmlalh_lane_s16 (a, b, c, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmlal\[ \t\]+\[sS\]\[0-9\]+, ?\[hH\]\[0-9\]+, ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/pr61325.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/pr61325.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/pr61325.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,19 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O2" } */
-+typedef unsigned int wchar_t;
-+typedef long unsigned int size_t;
-+
-+size_t
-+wcstombs(char *s , const wchar_t *pwcs , size_t n)
-+{
-+ int count = 0;
-+
-+ if (n != 0) {
-+ do {
-+ if ((*s++ = (char) *pwcs++) == 0)
-+ break;
-+ count++;
-+ } while (--n != 0);
-+ }
-+ return count;
-+}
-Index: gcc/testsuite/gcc.target/aarch64/vqdmlal_high_laneq_s32.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmlal_high_laneq_s32.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmlal_high_laneq_s32.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmlal_high_laneq_s32 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int64x2_t
-+t_vqdmlal_high_laneq_s32 (int64x2_t a, int32x4_t b, int32x4_t c)
-+{
-+ return vqdmlal_high_laneq_s32 (a, b, c, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmlal2\[ \t\]+\[vV\]\[0-9\]+\.2\[dD\], ?\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqrdmulhs_lane_s32.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqrdmulhs_lane_s32.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqrdmulhs_lane_s32.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,35 @@
-+/* Test the vqrdmulhs_lane_s32 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do run } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+#include <stdio.h>
-+
-+extern void abort (void);
-+
-+int
-+main (void)
-+{
-+ int32_t arg1;
-+ int32x2_t arg2;
-+ int32_t result;
-+ int32_t actual;
-+ int32_t expected;
-+
-+ arg1 = -2099281921;
-+ arg2 = vcreate_s32 (0x000080007fff0000ULL);
-+ actual = vqrdmulhs_lane_s32 (arg1, arg2, 1);
-+ expected = -32033;
-+
-+ if (expected != actual)
-+ {
-+ fprintf (stderr, "Expected: %xd, got %xd\n", expected, actual);
-+ abort ();
-+ }
-+
-+ return 0;
-+}
-+
-+/* { dg-final { scan-assembler-times "sqrdmulh\[ \t\]+\[sS\]\[0-9\]+, ?\[sS\]\[0-9\]+, ?\[vV\]\[0-9\]+\.\[sS\]\\\[1\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmlal_lane_s32.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmlal_lane_s32.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmlal_lane_s32.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmlal_lane_s32 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int64x2_t
-+t_vqdmlal_lane_s32 (int64x2_t a, int32x2_t b, int32x2_t c)
-+{
-+ return vqdmlal_lane_s32 (a, b, c, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmlal\[ \t\]+\[vV\]\[0-9\]+\.2\[dD\], ?\[vV\]\[0-9\]+\.2\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmlsls_lane_s32.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmlsls_lane_s32.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmlsls_lane_s32.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmlsls_lane_s32 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int64x1_t
-+t_vqdmlsls_lane_s32 (int64x1_t a, int32x1_t b, int32x2_t c)
-+{
-+ return vqdmlsls_lane_s32 (a, b, c, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmlsl\[ \t\]+\[dD\]\[0-9\]+, ?\[sS\]\[0-9\]+, ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmull_high_laneq_s32.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmull_high_laneq_s32.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmull_high_laneq_s32.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmull_high_laneq_s32 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int64x2_t
-+t_vqdmull_high_laneq_s32 (int32x4_t a, int32x4_t b)
-+{
-+ return vqdmull_high_laneq_s32 (a, b, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmull2\[ \t\]+\[vV\]\[0-9\]+\.2\[dD\], ?\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmlal_high_laneq_s16.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmlal_high_laneq_s16.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmlal_high_laneq_s16.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmlal_high_laneq_s16 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int32x4_t
-+t_vqdmlal_high_laneq_s16 (int32x4_t a, int16x8_t b, int16x8_t c)
-+{
-+ return vqdmlal_high_laneq_s16 (a, b, c, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmlal2\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.8\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmlal_lane_s16.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmlal_lane_s16.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmlal_lane_s16.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmlal_lane_s16 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int32x4_t
-+t_vqdmlal_lane_s16 (int32x4_t a, int16x4_t b, int16x4_t c)
-+{
-+ return vqdmlal_lane_s16 (a, b, c, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmlal\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.4\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmulhs_lane_s32.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmulhs_lane_s32.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmulhs_lane_s32.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,34 @@
-+/* Test the vqdmulhs_lane_s32 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do run } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+#include <stdio.h>
-+
-+extern void abort (void);
-+
-+int
-+main (void)
-+{
-+ int32_t arg1;
-+ int32x2_t arg2;
-+ int32_t result;
-+ int32_t actual;
-+ int32_t expected;
-+
-+ arg1 = 57336;
-+ arg2 = vcreate_s32 (0x55897fff7fff0000ULL);
-+ actual = vqdmulhs_lane_s32 (arg1, arg2, 0);
-+ expected = 57334;
-+
-+ if (expected != actual)
-+ {
-+ fprintf (stderr, "Expected: %xd, got %xd\n", expected, actual);
-+ abort ();
-+ }
-+
-+ return 0;
-+}
-+/* { dg-final { scan-assembler-times "sqdmulh\[ \t\]+\[sS\]\[0-9\]+, ?\[sS\]\[0-9\]+, ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmull_high_laneq_s16.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmull_high_laneq_s16.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmull_high_laneq_s16.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmull_high_laneq_s16 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int32x4_t
-+t_vqdmull_high_laneq_s16 (int16x8_t a, int16x8_t b)
-+{
-+ return vqdmull_high_laneq_s16 (a, b, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmull2\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.8\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmulls_lane_s32.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmulls_lane_s32.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmulls_lane_s32.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmulls_lane_s32 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int64x1_t
-+t_vqdmulls_lane_s32 (int32x1_t a, int32x2_t b)
-+{
-+ return vqdmulls_lane_s32 (a, b, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmull\[ \t\]+\[dD\]\[0-9\]+, ?\[sS\]\[0-9\]+, ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqrdmulh_laneq_s32.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqrdmulh_laneq_s32.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqrdmulh_laneq_s32.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqrdmulh_laneq_s32 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int32x2_t
-+t_vqrdmulh_laneq_s32 (int32x2_t a, int32x4_t b)
-+{
-+ return vqrdmulh_laneq_s32 (a, b, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqrdmulh\[ \t\]+\[vV\]\[0-9\]+\.2\[sS\], ?\[vV\]\[0-9\]+\.2\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_laneq_s32.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_laneq_s32.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_laneq_s32.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmlsl_high_laneq_s32 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int64x2_t
-+t_vqdmlsl_high_laneq_s32 (int64x2_t a, int32x4_t b, int32x4_t c)
-+{
-+ return vqdmlsl_high_laneq_s32 (a, b, c, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmlsl2\[ \t\]+\[vV\]\[0-9\]+\.2\[dD\], ?\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmlsl_laneq_s32.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmlsl_laneq_s32.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmlsl_laneq_s32.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmlsl_laneq_s32 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int64x2_t
-+t_vqdmlsl_lane_s32 (int64x2_t a, int32x2_t b, int32x4_t c)
-+{
-+ return vqdmlsl_laneq_s32 (a, b, c, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmlsl\[ \t\]+\[vV\]\[0-9\]+\.2\[dD\], ?\[vV\]\[0-9\]+\.2\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmull_high_lane_s32.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmull_high_lane_s32.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmull_high_lane_s32.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmull_high_lane_s32 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int64x2_t
-+t_vqdmull_high_lane_s32 (int32x4_t a, int32x2_t b)
-+{
-+ return vqdmull_high_lane_s32 (a, b, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmull2\[ \t\]+\[vV\]\[0-9\]+\.2\[dD\], ?\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmlals_lane_s32.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmlals_lane_s32.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmlals_lane_s32.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmlals_lane_s32 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int64x1_t
-+t_vqdmlals_lane_s32 (int64x1_t a, int32x1_t b, int32x2_t c)
-+{
-+ return vqdmlals_lane_s32 (a, b, c, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmlal\[ \t\]+\[dD\]\[0-9\]+, ?\[sS\]\[0-9\]+, ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqrdmulh_laneq_s16.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqrdmulh_laneq_s16.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqrdmulh_laneq_s16.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqrdmulh_laneq_s16 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int16x4_t
-+t_vqrdmulh_laneq_s16 (int16x4_t a, int16x8_t b)
-+{
-+ return vqrdmulh_laneq_s16 (a, b, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqrdmulh\[ \t\]+\[vV\]\[0-9\]+\.4\[hH\], ?\[vV\]\[0-9\]+\.4\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_laneq_s16.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_laneq_s16.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_laneq_s16.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmlsl_high_laneq_s16 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int32x4_t
-+t_vqdmlsl_high_laneq_s16 (int32x4_t a, int16x8_t b, int16x8_t c)
-+{
-+ return vqdmlsl_high_laneq_s16 (a, b, c, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmlsl2\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.8\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqrdmulhq_laneq_s32.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqrdmulhq_laneq_s32.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqrdmulhq_laneq_s32.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqrdmulhq_laneq_s32 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int32x4_t
-+t_vqrdmulhq_laneq_s32 (int32x4_t a, int32x4_t b)
-+{
-+ return vqrdmulhq_laneq_s32 (a, b, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqrdmulh\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c (.../branches/gcc-4_9-branch)
-@@ -387,7 +387,7 @@
- /* { dg-final { scan-assembler-times "\\tsqdmlal\\ts\[0-9\]+, h\[0-9\]+, v" 1 } } */
-
- int32x1_t
--test_vqdmlalh_lane_s16 (int32x1_t a, int16x1_t b, int16x8_t c)
-+test_vqdmlalh_lane_s16 (int32x1_t a, int16x1_t b, int16x4_t c)
- {
- return vqdmlalh_lane_s16 (a, b, c, 3);
- }
-@@ -403,7 +403,7 @@
- /* { dg-final { scan-assembler-times "\\tsqdmlal\\td\[0-9\]+, s\[0-9\]+, v" 1 } } */
-
- int64x1_t
--test_vqdmlals_lane_s32 (int64x1_t a, int32x1_t b, int32x4_t c)
-+test_vqdmlals_lane_s32 (int64x1_t a, int32x1_t b, int32x2_t c)
- {
- return vqdmlals_lane_s32 (a, b, c, 1);
- }
-@@ -419,7 +419,7 @@
- /* { dg-final { scan-assembler-times "\\tsqdmlsl\\ts\[0-9\]+, h\[0-9\]+, v" 1 } } */
-
- int32x1_t
--test_vqdmlslh_lane_s16 (int32x1_t a, int16x1_t b, int16x8_t c)
-+test_vqdmlslh_lane_s16 (int32x1_t a, int16x1_t b, int16x4_t c)
- {
- return vqdmlslh_lane_s16 (a, b, c, 3);
- }
-@@ -435,7 +435,7 @@
- /* { dg-final { scan-assembler-times "\\tsqdmlsl\\td\[0-9\]+, s\[0-9\]+, v" 1 } } */
-
- int64x1_t
--test_vqdmlsls_lane_s32 (int64x1_t a, int32x1_t b, int32x4_t c)
-+test_vqdmlsls_lane_s32 (int64x1_t a, int32x1_t b, int32x2_t c)
- {
- return vqdmlsls_lane_s32 (a, b, c, 1);
- }
-@@ -451,7 +451,7 @@
- /* { dg-final { scan-assembler-times "\\tsqdmulh\\th\[0-9\]+, h\[0-9\]+, v" 1 } } */
-
- int16x1_t
--test_vqdmulhh_lane_s16 (int16x1_t a, int16x8_t b)
-+test_vqdmulhh_lane_s16 (int16x1_t a, int16x4_t b)
- {
- return vqdmulhh_lane_s16 (a, b, 3);
- }
-@@ -467,9 +467,9 @@
- /* { dg-final { scan-assembler-times "\\tsqdmulh\\ts\[0-9\]+, s\[0-9\]+, v" 1 } } */
-
- int32x1_t
--test_vqdmulhs_lane_s32 (int32x1_t a, int32x4_t b)
-+test_vqdmulhs_lane_s32 (int32x1_t a, int32x2_t b)
- {
-- return vqdmulhs_lane_s32 (a, b, 3);
-+ return vqdmulhs_lane_s32 (a, b, 1);
- }
-
- /* { dg-final { scan-assembler-times "\\tsqdmull\\ts\[0-9\]+, h\[0-9\]+, h\[0-9\]+" 1 } } */
-@@ -483,7 +483,7 @@
- /* { dg-final { scan-assembler-times "\\tsqdmull\\ts\[0-9\]+, h\[0-9\]+, v" 1 } } */
-
- int32x1_t
--test_vqdmullh_lane_s16 (int16x1_t a, int16x8_t b)
-+test_vqdmullh_lane_s16 (int16x1_t a, int16x4_t b)
- {
- return vqdmullh_lane_s16 (a, b, 3);
- }
-@@ -499,7 +499,7 @@
- /* { dg-final { scan-assembler-times "\\tsqdmull\\td\[0-9\]+, s\[0-9\]+, v" 1 } } */
-
- int64x1_t
--test_vqdmulls_lane_s32 (int32x1_t a, int32x4_t b)
-+test_vqdmulls_lane_s32 (int32x1_t a, int32x2_t b)
- {
- return vqdmulls_lane_s32 (a, b, 1);
- }
-@@ -515,9 +515,9 @@
- /* { dg-final { scan-assembler-times "\\tsqrdmulh\\th\[0-9\]+, h\[0-9\]+, v" 1 } } */
-
- int16x1_t
--test_vqrdmulhh_lane_s16 (int16x1_t a, int16x8_t b)
-+test_vqrdmulhh_lane_s16 (int16x1_t a, int16x4_t b)
- {
-- return vqrdmulhh_lane_s16 (a, b, 6);
-+ return vqrdmulhh_lane_s16 (a, b, 3);
- }
-
- /* { dg-final { scan-assembler-times "\\tsqrdmulh\\ts\[0-9\]+, s\[0-9\]+, s\[0-9\]+" 1 } } */
-@@ -531,9 +531,9 @@
- /* { dg-final { scan-assembler-times "\\tsqrdmulh\\ts\[0-9\]+, s\[0-9\]+, v" 1 } } */
-
- int32x1_t
--test_vqrdmulhs_lane_s32 (int32x1_t a, int32x4_t b)
-+test_vqrdmulhs_lane_s32 (int32x1_t a, int32x2_t b)
- {
-- return vqrdmulhs_lane_s32 (a, b, 2);
-+ return vqrdmulhs_lane_s32 (a, b, 1);
- }
-
- /* { dg-final { scan-assembler-times "\\tsuqadd\\tb\[0-9\]+" 1 } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmull_high_lane_s16.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmull_high_lane_s16.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmull_high_lane_s16.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmull_high_lane_s16 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int32x4_t
-+t_vqdmull_high_lane_s16 (int16x8_t a, int16x4_t b)
-+{
-+ return vqdmull_high_lane_s16 (a, b, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmull2\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.8\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmlal_high_lane_s32.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmlal_high_lane_s32.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmlal_high_lane_s32.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmlal_high_lane_s32 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int64x2_t
-+t_vqdmlal_high_lane_s32 (int64x2_t a, int32x4_t b, int32x2_t c)
-+{
-+ return vqdmlal_high_lane_s32 (a, b, c, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmlal2\[ \t\]+\[vV\]\[0-9\]+\.2\[dD\], ?\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmulh_laneq_s32.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmulh_laneq_s32.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmulh_laneq_s32.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmulh_laneq_s32 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int32x2_t
-+t_vqdmulh_laneq_s32 (int32x2_t a, int32x4_t b)
-+{
-+ return vqdmulh_laneq_s32 (a, b, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmulh\[ \t\]+\[vV\]\[0-9\]+\.2\[sS\], ?\[vV\]\[0-9\]+\.2\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmull_laneq_s32.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmull_laneq_s32.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmull_laneq_s32.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmull_laneq_s32 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int64x2_t
-+t_vqdmull_laneq_s32 (int32x2_t a, int32x4_t b)
-+{
-+ return vqdmull_laneq_s32 (a, b, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmull\[ \t\]+\[vV\]\[0-9\]+\.2\[dD\], ?\[vV\]\[0-9\]+\.2\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmulhq_laneq_s32.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmulhq_laneq_s32.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmulhq_laneq_s32.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmulhq_laneq_s32 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int32x4_t
-+t_vqdmulhq_laneq_s32 (int32x4_t a, int32x4_t b)
-+{
-+ return vqdmulhq_laneq_s32 (a, b, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmulh\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqrdmulhq_laneq_s16.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqrdmulhq_laneq_s16.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqrdmulhq_laneq_s16.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqrdmulhq_laneq_s16 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int16x8_t
-+t_vqrdmulhq_laneq_s16 (int16x8_t a, int16x8_t b)
-+{
-+ return vqrdmulhq_laneq_s16 (a, b, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqrdmulh\[ \t\]+\[vV\]\[0-9\]+\.8\[hH\], ?\[vV\]\[0-9\]+\.8\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqrdmulhh_lane_s16.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqrdmulhh_lane_s16.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqrdmulhh_lane_s16.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,35 @@
-+/* Test the vqrdmulhh_lane_s16 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do run } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+#include <stdio.h>
-+
-+extern void abort (void);
-+
-+int
-+main (void)
-+{
-+ int16_t arg1;
-+ int16x4_t arg2;
-+ int16_t result;
-+ int16_t actual;
-+ int16_t expected;
-+
-+ arg1 = -32768;
-+ arg2 = vcreate_s16 (0xd78e000005d78000ULL);
-+ actual = vqrdmulhh_lane_s16 (arg1, arg2, 3);
-+ expected = 10354;
-+
-+ if (expected != actual)
-+ {
-+ fprintf (stderr, "Expected: %xd, got %xd\n", expected, actual);
-+ abort ();
-+ }
-+
-+ return 0;
-+}
-+
-+/* { dg-final { scan-assembler-times "sqrdmulh\[ \t\]+\[hH\]\[0-9\]+, ?\[hH\]\[0-9\]+, ?\[vV\]\[0-9\]+\.\[hH\]\\\[3\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmlsl_lane_s32.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmlsl_lane_s32.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmlsl_lane_s32.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmlsl_lane_s32 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int64x2_t
-+t_vqdmlsl_lane_s32 (int64x2_t a, int32x2_t b, int32x2_t c)
-+{
-+ return vqdmlsl_lane_s32 (a, b, c, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmlsl\[ \t\]+\[vV\]\[0-9\]+\.2\[dD\], ?\[vV\]\[0-9\]+\.2\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmlslh_lane_s16.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmlslh_lane_s16.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmlslh_lane_s16.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmlslh_lane_s16 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int32x1_t
-+t_vqdmlslh_lane_s16 (int32x1_t a, int16x1_t b, int16x4_t c)
-+{
-+ return vqdmlslh_lane_s16 (a, b, c, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmlsl\[ \t\]+\[sS\]\[0-9\]+, ?\[hH\]\[0-9\]+, ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmlal_high_lane_s16.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmlal_high_lane_s16.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmlal_high_lane_s16.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmlal_high_lane_s16 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int32x4_t
-+t_vqdmlal_high_lane_s16 (int32x4_t a, int16x8_t b, int16x4_t c)
-+{
-+ return vqdmlal_high_lane_s16 (a, b, c, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmlal2\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.8\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmulh_laneq_s16.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmulh_laneq_s16.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmulh_laneq_s16.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmulh_laneq_s16 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int16x4_t
-+t_vqdmulh_laneq_s16 (int16x4_t a, int16x8_t b)
-+{
-+ return vqdmulh_laneq_s16 (a, b, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmulh\[ \t\]+\[vV\]\[0-9\]+\.4\[hH\], ?\[vV\]\[0-9\]+\.4\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmull_laneq_s16.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmull_laneq_s16.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmull_laneq_s16.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmull_laneq_s16 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int32x4_t
-+t_vqdmull_laneq_s16 (int16x4_t a, int16x8_t b)
-+{
-+ return vqdmull_laneq_s16 (a, b, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmull\[ \t\]+\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.4\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmlal_laneq_s32.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmlal_laneq_s32.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmlal_laneq_s32.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmlal_laneq_s32 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int64x2_t
-+t_vqdmlal_laneq_s32 (int64x2_t a, int32x2_t b, int32x4_t c)
-+{
-+ return vqdmlal_laneq_s32 (a, b, c, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmlal\[ \t\]+\[vV\]\[0-9\]+\.2\[dD\], ?\[vV\]\[0-9\]+\.2\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_lane_s32.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_lane_s32.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmlsl_high_lane_s32.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmlsl_high_lane_s32 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int64x2_t
-+t_vqdmlsl_high_lane_s32 (int64x2_t a, int32x4_t b, int32x2_t c)
-+{
-+ return vqdmlsl_high_lane_s32 (a, b, c, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmlsl2\[ \t\]+\[vV\]\[0-9\]+\.2\[dD\], ?\[vV\]\[0-9\]+\.4\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmulhq_laneq_s16.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmulhq_laneq_s16.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmulhq_laneq_s16.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmulhq_laneq_s16 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int16x8_t
-+t_vqdmulhq_laneq_s16 (int16x8_t a, int16x8_t b)
-+{
-+ return vqdmulhq_laneq_s16 (a, b, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmulh\[ \t\]+\[vV\]\[0-9\]+\.8\[hH\], ?\[vV\]\[0-9\]+\.8\[hH\], ?\[vV\]\[0-9\]+\.\[hH\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/aarch64/vqdmull_lane_s32.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/aarch64/vqdmull_lane_s32.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vqdmull_lane_s32.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* Test the vqdmull_lane_s32 AArch64 SIMD intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-save-temps -O3 -fno-inline" } */
-+
-+#include "arm_neon.h"
-+
-+int64x2_t
-+t_vqdmull_lane_s32 (int32x2_t a, int32x2_t b)
-+{
-+ return vqdmull_lane_s32 (a, b, 0);
-+}
-+
-+/* { dg-final { scan-assembler-times "sqdmull\[ \t\]+\[vV\]\[0-9\]+\.2\[dD\], ?\[vV\]\[0-9\]+\.2\[sS\], ?\[vV\]\[0-9\]+\.\[sS\]\\\[0\\\]\n" 1 } } */
-+/* { dg-final { cleanup-saved-temps } } */
-Index: gcc/testsuite/gcc.target/avr/torture/pr61443.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/avr/torture/pr61443.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/avr/torture/pr61443.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,134 @@
-+/* { dg-do run } */
-+/* { dg-options "-std=gnu99" } */
-+
-+#include <stdlib.h>
-+#include <stdarg.h>
-+
-+#define NC __attribute__((noinline,noclone))
-+
-+void NC vfun (char n, ...)
-+{
-+ va_list ap;
-+
-+ va_start (ap, n);
-+
-+ switch (n)
-+ {
-+ default:
-+ abort();
-+ case 1:
-+ if (11 != va_arg (ap, int))
-+ abort();
-+ break;
-+ case 2:
-+ if (2222 != va_arg (ap, int))
-+ abort();
-+ break;
-+ case 3:
-+ if (333333 != va_arg (ap, __int24))
-+ abort();
-+ break;
-+ case 4:
-+ if (44444444 != va_arg (ap, long))
-+ abort();
-+ break;
-+ case 8:
-+ if (8888888888888888 != va_arg (ap, long long))
-+ abort();
-+ break;
-+ }
-+
-+ va_end (ap);
-+}
-+
-+
-+void NC boo_qi (const __flash char *p)
-+{
-+ vfun (1, *p);
-+}
-+
-+void NC boox_qi (const __memx char *p)
-+{
-+ vfun (1, *p);
-+}
-+
-+void NC boo_hi (const __flash int *p)
-+{
-+ vfun (2, *p);
-+}
-+
-+void NC boox_hi (const __memx int *p)
-+{
-+ vfun (2, *p);
-+}
-+
-+void NC boo_psi (const __flash __int24 *p)
-+{
-+ vfun (3, *p);
-+}
-+
-+void NC boox_psi (const __memx __int24 *p)
-+{
-+ vfun (3, *p);
-+}
-+
-+void NC boo_si (const __flash long *p)
-+{
-+ vfun (4, *p);
-+}
-+
-+void NC boox_si (const __memx long *p)
-+{
-+ vfun (4, *p);
-+}
-+
-+void NC boo_di (const __flash long long *p)
-+{
-+ vfun (8, *p);
-+}
-+
-+void NC boox_di (const __memx long long *p)
-+{
-+ vfun (8, *p);
-+}
-+
-+const __flash char f_qi = 11;
-+const __flash int f_hi = 2222;
-+const __flash __int24 f_psi = 333333;
-+const __flash long f_si = 44444444;
-+const __flash long long f_di = 8888888888888888;
-+
-+const __memx char x_qi = 11;
-+const __memx int x_hi = 2222;
-+const __memx __int24 x_psi = 333333;
-+const __memx long x_si = 44444444;
-+const __memx long long x_di = 8888888888888888;
-+
-+char r_qi = 11;
-+int r_hi = 2222;
-+__int24 r_psi = 333333;
-+long r_si = 44444444;
-+long long r_di = 8888888888888888;
-+
-+int main (void)
-+{
-+ boo_qi (&f_qi);
-+ boo_hi (&f_hi);
-+ boo_psi (&f_psi);
-+ boo_si (&f_si);
-+ boo_di (&f_di);
-+
-+ boox_qi (&x_qi);
-+ boox_hi (&x_hi);
-+ boox_psi (&x_psi);
-+ boox_si (&x_si);
-+ boox_di (&x_di);
-+
-+ boox_qi (&r_qi);
-+ boox_hi (&r_hi);
-+ boox_psi (&r_psi);
-+ boox_si (&r_si);
-+ boox_di (&r_di);
-+
-+ exit (0);
-+}
-Index: gcc/testsuite/gcc.target/avr/torture/pr61055.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/avr/torture/pr61055.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/avr/torture/pr61055.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,88 @@
-+/* { dg-do run } */
-+/* { dg-options { -fno-peephole2 } } */
-+
-+#include <stdlib.h>
-+
-+typedef __UINT16_TYPE__ uint16_t;
-+typedef __INT16_TYPE__ int16_t;
-+typedef __UINT8_TYPE__ uint8_t;
-+
-+uint8_t __attribute__((noinline,noclone))
-+fun_inc (uint8_t c0)
-+{
-+ register uint8_t c asm ("r15") = c0;
-+
-+ /* Force target value into R15 (lower register) */
-+ asm ("" : "+l" (c));
-+
-+ c++;
-+ if (c >= 0x80)
-+ c = 0;
-+
-+ asm ("" : "+l" (c));
-+
-+ return c;
-+}
-+
-+uint8_t __attribute__((noinline,noclone))
-+fun_dec (uint8_t c0)
-+{
-+ register uint8_t c asm ("r15") = c0;
-+
-+ /* Force target value into R15 (lower register) */
-+ asm ("" : "+l" (c));
-+
-+ c--;
-+ if (c < 0x80)
-+ c = 0;
-+
-+ asm ("" : "+l" (c));
-+
-+ return c;
-+}
-+
-+
-+uint8_t __attribute__((noinline,noclone))
-+fun_neg (uint8_t c0)
-+{
-+ register uint8_t c asm ("r15") = c0;
-+
-+ c = -c;
-+ if (c >= 0x80)
-+ c = 0;
-+
-+ return c;
-+}
-+
-+uint16_t __attribute__((noinline,noclone))
-+fun_adiw (uint16_t c0)
-+{
-+ register uint16_t c asm ("r24") = c0;
-+
-+ /* Force target value into R24 (for ADIW) */
-+ asm ("" : "+r" (c));
-+
-+ c += 2;
-+ if (c >= 0x8000)
-+ c = 0;
-+
-+ asm ("" : "+r" (c));
-+
-+ return c;
-+}
-+
-+
-+int main()
-+{
-+ if (fun_inc (0x7f) != 0)
-+ abort();
-+
-+ if (fun_neg (0x80) != 0)
-+ abort();
-+
-+ if (fun_adiw (0x7ffe) != 0)
-+ abort();
-+
-+ exit (0);
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.target/avr/pr60991.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/avr/pr60991.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/avr/pr60991.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,21 @@
-+/* { dg-do run } */
-+/* { dg-options "-O1" } */
-+
-+/* This testcase (simplified from the original bug report) exposes
-+ PR60991. The code generated for writing the __int24 value corrupts
-+ the frame pointer if the offset is <= 63 + MAX_LD_OFFSET */
-+
-+#include <stdlib.h>
-+
-+int main(void)
-+{
-+ volatile char junk[62];
-+ junk[0] = 5;
-+ volatile __int24 staticConfig = 0;
-+
-+ if (junk[0] != 5)
-+ abort();
-+
-+ exit(0);
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.target/i386/clearcap.map
-===================================================================
---- a/src/gcc/testsuite/gcc.target/i386/clearcap.map (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/i386/clearcap.map (.../branches/gcc-4_9-branch)
-@@ -1,3 +0,0 @@
--# clear all hardware capabilities emitted by Sun as: the tests here
--# guard against execution at runtime
--hwcap_1 = V0x0 OVERRIDE;
-Index: gcc/testsuite/gcc.target/i386/clearcapv2.map
-===================================================================
---- a/src/gcc/testsuite/gcc.target/i386/clearcapv2.map (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/i386/clearcapv2.map (.../branches/gcc-4_9-branch)
-@@ -1,7 +0,0 @@
--# clear all hardware capabilities emitted by Sun as: the tests here
--# guard against execution at runtime
--# uses mapfile v2 syntax which is the only way to clear AT_SUN_CAP_HW2 flags
--$mapfile_version 2
--CAPABILITY {
-- HW = ;
--};
-Index: gcc/testsuite/gcc.target/i386/i386.exp
-===================================================================
---- a/src/gcc/testsuite/gcc.target/i386/i386.exp (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/i386/i386.exp (.../branches/gcc-4_9-branch)
-@@ -23,6 +23,7 @@
-
- # Load support procs.
- load_lib gcc-dg.exp
-+load_lib clearcap.exp
-
- # Return 1 if attribute ms_hook_prologue is supported.
- proc check_effective_target_ms_hook_prologue { } {
-@@ -307,39 +308,6 @@
- } "-O2 -msha" ]
- }
-
--# If the linker used understands -M <mapfile>, pass it to clear hardware
--# capabilities set by the Sun assembler.
--# Try mapfile syntax v2 first which is the only way to clear hwcap_2 flags.
--set clearcap_ldflags "-Wl,-M,$srcdir/$subdir/clearcapv2.map"
--
--if ![check_no_compiler_messages mapfilev2 executable {
-- int main (void) { return 0; }
--} $clearcap_ldflags ] {
-- # If this doesn't work, fall back to the less capable v1 syntax.
-- set clearcap_ldflags "-Wl,-M,$srcdir/$subdir/clearcap.map"
--
-- if ![check_no_compiler_messages mapfile executable {
-- int main (void) { return 0; }
-- } $clearcap_ldflags ] {
-- unset clearcap_ldflags
-- }
--}
--
--if [info exists clearcap_ldflags] {
-- if { [info procs gcc_target_compile] != [list] \
-- && [info procs saved_gcc_target_compile] == [list] } {
-- rename gcc_target_compile saved_gcc_target_compile
--
-- proc gcc_target_compile { source dest type options } {
-- global clearcap_ldflags
-- # Always pass -Wl,-M,<mapfile>, but don't let it show up in gcc.sum.
-- lappend options "additional_flags=$clearcap_ldflags"
--
-- return [saved_gcc_target_compile $source $dest $type $options]
-- }
-- }
--}
--
- # If a testcase doesn't have special options, use these.
- global DEFAULT_CFLAGS
- if ![info exists DEFAULT_CFLAGS] then {
-@@ -348,6 +316,7 @@
-
- # Initialize `dg'.
- dg-init
-+clearcap-init
-
- # Special case compilation of vect-args.c so we don't have to
- # replicate it 10 times.
-@@ -367,4 +336,5 @@
- dg-runtest $tests "" $DEFAULT_CFLAGS
-
- # All done.
-+clearcap-finish
- dg-finish
-Index: gcc/testsuite/gcc.target/i386/avx2-pr57233.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/i386/avx2-pr57233.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/i386/avx2-pr57233.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,16 @@
-+/* PR tree-optimization/57233 */
-+/* { dg-do run { target avx2 } } */
-+/* { dg-options "-O2 -mavx2" } */
-+
-+#include "avx2-check.h"
-+
-+static void
-+avx2_test (void)
-+{
-+ do_main ();
-+}
-+
-+#undef main
-+#define main() do_main ()
-+
-+#include "../../gcc.dg/pr57233.c"
-Index: gcc/testsuite/gcc.target/i386/vec-may_alias.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/i386/vec-may_alias.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/i386/vec-may_alias.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,25 @@
-+/* { dg-do run } */
-+/* { dg-options "-O2 -w -Wno-abi" } */
-+
-+typedef int v2si __attribute__ ((vector_size (8)));
-+typedef short v4hi __attribute__ ((vector_size (8)));
-+typedef short v4hia __attribute__ ((vector_size (8), may_alias));
-+
-+__attribute__ ((noinline, noclone))
-+int f (v2si A, int N)
-+{ return ((v4hia)A)[N]; }
-+
-+__attribute__ ((noinline, noclone))
-+int g (v2si A, int N)
-+{ return ((v4hi)A)[N]; }
-+
-+int main()
-+{
-+ v2si x = { 0, 0 }, y = { 1, 1 };
-+ if (f (x, 0) || f (x, 1) || f (x, 2) || f (x, 3))
-+ __builtin_abort ();
-+ if (g (y, 0) != 1 || g (y, 1) || g (y, 2) != 1 || g (y, 3))
-+ __builtin_abort ();
-+ return 0;
-+}
-+
-Index: gcc/testsuite/gcc.target/i386/sse2-pr57233.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/i386/sse2-pr57233.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/i386/sse2-pr57233.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,16 @@
-+/* PR tree-optimization/57233 */
-+/* { dg-do run { target sse2 } } */
-+/* { dg-options "-O2 -msse2" } */
-+
-+#include "sse2-check.h"
-+
-+static void
-+sse2_test (void)
-+{
-+ do_main ();
-+}
-+
-+#undef main
-+#define main() do_main ()
-+
-+#include "../../gcc.dg/pr57233.c"
-Index: gcc/testsuite/gcc.target/i386/pr61423.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/i386/pr61423.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/i386/pr61423.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,38 @@
-+/* PR target/61423 */
-+/* { dg-do run { target ia32 } } */
-+/* { dg-options "-O1 -ftree-vectorize -msse2 -mfpmath=387 -mtune=core2" } */
-+
-+#define N 1024
-+static unsigned int A[N];
-+
-+double
-+__attribute__((noinline))
-+func (void)
-+{
-+ unsigned int sum = 0;
-+ unsigned i;
-+ double t;
-+
-+ for (i = 0; i < N; i++)
-+ sum += A[i];
-+
-+ t = sum;
-+ return t;
-+}
-+
-+int
-+main ()
-+{
-+ unsigned i;
-+ double d;
-+
-+ for(i = 0; i < N; i++)
-+ A[i] = 1;
-+
-+ d = func();
-+
-+ if (d != 1024.0)
-+ __builtin_abort ();
-+
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.target/i386/pr60868.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/i386/pr60868.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/i386/pr60868.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,10 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O0 -minline-all-stringops -minline-stringops-dynamically -march=core2" } */
-+
-+void bar (float *);
-+
-+void foo (void)
-+{
-+ float b[256] = {0};
-+ bar(b);
-+}
-Index: gcc/testsuite/gcc.target/i386/avx-pr57233.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/i386/avx-pr57233.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/i386/avx-pr57233.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,16 @@
-+/* PR tree-optimization/57233 */
-+/* { dg-do run { target avx } } */
-+/* { dg-options "-O2 -mavx" } */
-+
-+#include "avx-check.h"
-+
-+static void
-+avx_test (void)
-+{
-+ do_main ();
-+}
-+
-+#undef main
-+#define main() do_main ()
-+
-+#include "../../gcc.dg/pr57233.c"
-Index: gcc/testsuite/gcc.target/i386/pr60901.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/i386/pr60901.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/i386/pr60901.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,17 @@
-+/* { dg-options "-O -fselective-scheduling -fschedule-insns -fsel-sched-pipelining -fsel-sched-pipelining-outer-loops -fno-tree-dominator-opts" } */
-+
-+extern int n;
-+extern void bar (void);
-+extern int baz (int);
-+
-+void
-+foo (void)
-+{
-+ int i, j;
-+ for (j = 0; j < n; j++)
-+ {
-+ for (i = 1; i < j; i++)
-+ bar ();
-+ baz (0);
-+ }
-+}
-Index: gcc/testsuite/gcc.target/i386/pr57233.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/i386/pr57233.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/i386/pr57233.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* PR tree-optimization/57233 */
-+/* { dg-do compile { target avx } } */
-+/* { dg-options "-O2 -mavx -mno-xop" } */
-+
-+typedef unsigned V4 __attribute__((vector_size(4 * sizeof (int))));
-+V4 a;
-+
-+__attribute__((noinline)) void
-+foo (void)
-+{
-+ a = (a << 2) | (a >> 30);
-+}
-+
-+/* { dg-final { scan-assembler "vpsrld\[^\n\r]*30" } } */
-+/* { dg-final { scan-assembler "vpslld\[^\n\r]*2" } } */
-Index: gcc/testsuite/gcc.target/i386/pr60909-1.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/i386/pr60909-1.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/i386/pr60909-1.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,11 @@
-+/* { dg-do compile } */
-+/* { dg-options "-mrdrnd" } */
-+
-+extern void bar (int);
-+
-+void
-+foo (unsigned *u)
-+{
-+ int i = __builtin_ia32_rdrand32_step (u);
-+ bar (i);
-+}
-Index: gcc/testsuite/gcc.target/i386/xop-pr57233.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/i386/xop-pr57233.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/i386/xop-pr57233.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,16 @@
-+/* PR tree-optimization/57233 */
-+/* { dg-do run { target xop } } */
-+/* { dg-options "-O2 -mxop" } */
-+
-+#include "xop-check.h"
-+
-+static void
-+xop_test (void)
-+{
-+ do_main ();
-+}
-+
-+#undef main
-+#define main() do_main ()
-+
-+#include "../../gcc.dg/pr57233.c"
-Index: gcc/testsuite/gcc.target/i386/avx512f-pr57233.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/i386/avx512f-pr57233.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/i386/avx512f-pr57233.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,16 @@
-+/* PR tree-optimization/57233 */
-+/* { dg-do run { target avx512f } } */
-+/* { dg-options "-O2 -mavx512f" } */
-+
-+#include "avx512f-check.h"
-+
-+static void
-+avx512f_test (void)
-+{
-+ do_main ();
-+}
-+
-+#undef main
-+#define main() do_main ()
-+
-+#include "../../gcc.dg/pr57233.c"
-Index: gcc/testsuite/gcc.target/i386/pr60902.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/i386/pr60902.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/i386/pr60902.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,32 @@
-+/* { dg-do run } */
-+/* { dg-options "-O2" } */
-+extern void abort ();
-+extern void exit (int);
-+
-+int x;
-+
-+foo()
-+{
-+ static int count;
-+ count++;
-+ if (count > 1)
-+ abort ();
-+}
-+
-+static inline int
-+frob ()
-+{
-+ int a;
-+ __asm__ ("mov %1, %0\n\t" : "=r" (a) : "m" (x));
-+ x++;
-+ return a;
-+}
-+
-+int
-+main ()
-+{
-+ int i;
-+ for (i = 0; i < 10 && frob () == 0; i++)
-+ foo();
-+ exit (0);
-+}
-Index: gcc/testsuite/gcc.target/i386/pr61446.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/i386/pr61446.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/i386/pr61446.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,14 @@
-+/* PR rtl-optimization/61446 */
-+
-+/* { dg-do compile { target { ia32 } } } */
-+/* { dg-options "-O2 -march=corei7 -mfpmath=387" } */
-+
-+unsigned long long
-+foo (float a)
-+{
-+ const double dfa = a;
-+ const unsigned int hi = dfa / 0x1p32f;
-+ const unsigned int lo = dfa - (double) hi * 0x1p32f;
-+
-+ return ((unsigned long long) hi << (4 * (8))) | lo;
-+}
-Index: gcc/testsuite/gcc.target/i386/pr60909-2.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/i386/pr60909-2.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/i386/pr60909-2.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,11 @@
-+/* { dg-do compile } */
-+/* { dg-options "-mrdseed" } */
-+
-+extern void bar (int);
-+
-+void
-+foo (unsigned *u)
-+{
-+ int i = __builtin_ia32_rdseed_si_step (u);
-+ bar (i);
-+}
-Index: gcc/testsuite/gcc.target/x86_64/abi/avx512f/abi-avx512f.exp
-===================================================================
---- a/src/gcc/testsuite/gcc.target/x86_64/abi/avx512f/abi-avx512f.exp (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/avx512f/abi-avx512f.exp (.../branches/gcc-4_9-branch)
-@@ -20,6 +20,7 @@
- load_lib c-torture.exp
- load_lib target-supports.exp
- load_lib torture-options.exp
-+load_lib clearcap.exp
-
- if { (![istarget x86_64-*-*] && ![istarget i?86-*-*])
- || ![is-effective-target lp64]
-@@ -28,20 +29,10 @@
- }
-
-
--# If the linker used understands -M <mapfile>, pass it to clear hardware
--# capabilities set by the Sun assembler.
--set flags ""
--set clearcap_ldflags "-Wl,-M,$srcdir/gcc.target/i386/clearcap.map"
--
--if [check_no_compiler_messages mapfile executable {
-- int main (void) { return 0; }
-- } $clearcap_ldflags ] {
-- set flags $clearcap_ldflags
--}
--
- torture-init
-+clearcap-init
- set-torture-options $C_TORTURE_OPTIONS
--set additional_flags "-W -Wall -mavx512f $flags"
-+set additional_flags "-W -Wall -mavx512f"
-
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/test_*.c]] {
- if {[runtest_file_p $runtests $src]} {
-@@ -58,4 +49,5 @@
- }
- }
-
-+clearcap-finish
- torture-finish
-Index: gcc/testsuite/gcc.target/x86_64/abi/avx/abi-avx.exp
-===================================================================
---- a/src/gcc/testsuite/gcc.target/x86_64/abi/avx/abi-avx.exp (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/avx/abi-avx.exp (.../branches/gcc-4_9-branch)
-@@ -20,6 +20,7 @@
- load_lib c-torture.exp
- load_lib target-supports.exp
- load_lib torture-options.exp
-+load_lib clearcap.exp
-
- if { (![istarget x86_64-*-*] && ![istarget i?86-*-*])
- || ![is-effective-target lp64]
-@@ -28,20 +29,10 @@
- }
-
-
--# If the linker used understands -M <mapfile>, pass it to clear hardware
--# capabilities set by the Sun assembler.
--set flags ""
--set clearcap_ldflags "-Wl,-M,$srcdir/gcc.target/i386/clearcap.map"
--
--if [check_no_compiler_messages mapfile executable {
-- int main (void) { return 0; }
-- } $clearcap_ldflags ] {
-- set flags $clearcap_ldflags
--}
--
- torture-init
-+clearcap-init
- set-torture-options $C_TORTURE_OPTIONS
--set additional_flags "-W -Wall -mavx $flags"
-+set additional_flags "-W -Wall -mavx"
-
- foreach src [lsort [glob -nocomplain $srcdir/$subdir/test_*.c]] {
- if {[runtest_file_p $runtests $src]} {
-@@ -58,4 +49,5 @@
- }
- }
-
-+clearcap-finish
- torture-finish
-Index: gcc/testsuite/lib/clearcap.exp
-===================================================================
---- a/src/gcc/testsuite/lib/clearcap.exp (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/lib/clearcap.exp (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,58 @@
-+# Copyright (C) 2014 Free Software Foundation, Inc.
-+
-+# This program 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 of the License, or
-+# (at your option) any later version.
-+#
-+# This program 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 GCC; see the file COPYING3. If not see
-+# <http://www.gnu.org/licenses/>.
-+
-+# Clear hardware capabilities on Solaris.
-+if [istarget *-*-solaris2*] {
-+ set clearcap_ldflags "-mclear-hwcap"
-+}
-+
-+#
-+# clearcap-init -- called at the start of each subdir of tests
-+#
-+
-+proc clearcap-init { args } {
-+ global TEST_ALWAYS_FLAGS
-+ global ALWAYS_CXXFLAGS
-+ global clearcap_saved_TEST_ALWAYS_FLAGS
-+ global clearcap_ldflags
-+
-+ if [info exists TEST_ALWAYS_FLAGS] {
-+ set clearcap_saved_TEST_ALWAYS_FLAGS $TEST_ALWAYS_FLAGS
-+ }
-+ if [info exists clearcap_ldflags] {
-+ if [info exists ALWAYS_CXXFLAGS] {
-+ set ALWAYS_CXXFLAGS [concat "{ldflags=$clearcap_ldflags}" $ALWAYS_CXXFLAGS]
-+ } else {
-+ append TEST_ALWAYS_FLAGS " $clearcap_ldflags"
-+ }
-+ }
-+ return 0
-+}
-+
-+#
-+# clearcap-finish -- called at the start of each subdir of tests
-+#
-+
-+proc clearcap-finish { args } {
-+ global TEST_ALWAYS_FLAGS
-+ global clearcap_saved_TEST_ALWAYS_FLAGS
-+
-+ if [info exists clearcap_saved_TEST_ALWAYS_FLAGS] {
-+ set TEST_ALWAYS_FLAGS $clearcap_saved_TEST_ALWAYS_FLAGS
-+ } else {
-+ unset TEST_ALWAYS_FLAGS
-+ }
-+}
-Index: gcc/testsuite/lib/target-supports.exp
-===================================================================
---- a/src/gcc/testsuite/lib/target-supports.exp (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/lib/target-supports.exp (.../branches/gcc-4_9-branch)
-@@ -1862,6 +1862,15 @@
- }]
- }
-
-+# Return 1 if the target supports long double of 128 bits,
-+# 0 otherwise.
-+
-+proc check_effective_target_longdouble128 { } {
-+ return [check_no_compiler_messages longdouble128 object {
-+ int dummy[sizeof(long double) == 16 ? 1 : -1];
-+ }]
-+}
-+
- # Return 1 if the target supports double of 64 bits,
- # 0 otherwise.
-
-@@ -1956,6 +1965,32 @@
- }]
- }
-
-+# Return 1 if the target supports executing DFP hardware instructions,
-+# 0 otherwise. Cache the result.
-+
-+proc check_dfp_hw_available { } {
-+ return [check_cached_effective_target dfp_hw_available {
-+ # For now, disable on Darwin
-+ if { [istarget powerpc-*-eabi] || [istarget powerpc*-*-eabispe] || [istarget *-*-darwin*]} {
-+ expr 0
-+ } else {
-+ check_runtime_nocache dfp_hw_available {
-+ volatile _Decimal64 r;
-+ volatile _Decimal64 a = 4.0DD;
-+ volatile _Decimal64 b = 2.0DD;
-+ int main()
-+ {
-+ asm volatile ("dadd %0,%1,%2" : "=d" (r) : "d" (a), "d" (b));
-+ asm volatile ("dsub %0,%1,%2" : "=d" (r) : "d" (a), "d" (b));
-+ asm volatile ("dmul %0,%1,%2" : "=d" (r) : "d" (a), "d" (b));
-+ asm volatile ("ddiv %0,%1,%2" : "=d" (r) : "d" (a), "d" (b));
-+ return 0;
-+ }
-+ } "-mcpu=power6 -mhard-float"
-+ }
-+ }]
-+}
-+
- # Return 1 if the target supports compiling and assembling UCN, 0 otherwise.
-
- proc check_effective_target_ucn_nocache { } {
-@@ -4919,6 +4954,7 @@
- "vsx_hw" { set selected [check_vsx_hw_available] }
- "p8vector_hw" { set selected [check_p8vector_hw_available] }
- "ppc_recip_hw" { set selected [check_ppc_recip_hw_available] }
-+ "dfp_hw" { set selected [check_dfp_hw_available] }
- "named_sections" { set selected [check_named_sections_available] }
- "gc_sections" { set selected [check_gc_sections_available] }
- "cxa_atexit" { set selected [check_cxa_atexit_available] }
-@@ -4941,6 +4977,7 @@
- "vsx_hw" { return 1 }
- "p8vector_hw" { return 1 }
- "ppc_recip_hw" { return 1 }
-+ "dfp_hw" { return 1 }
- "named_sections" { return 1 }
- "gc_sections" { return 1 }
- "cxa_atexit" { return 1 }
-Index: gcc/testsuite/gfortran.dg/default_format_denormal_2.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/default_format_denormal_2.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/default_format_denormal_2.f90 (.../branches/gcc-4_9-branch)
-@@ -1,6 +1,6 @@
- ! { dg-require-effective-target fortran_large_real }
--! { dg-do run { xfail powerpc*-apple-darwin* powerpc*-*-linux* } }
--! Test XFAILed on these platforms because the system's printf() lacks
-+! { dg-do run { xfail powerpc*-apple-darwin* } }
-+! Test XFAILed on this platform because the system's printf() lacks
- ! proper support for denormalized long doubles. See PR24685
- !
- ! This tests that the default formats for formatted I/O of reals are
-Index: gcc/testsuite/gfortran.dg/gomp/udr8.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/gomp/udr8.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/gomp/udr8.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,351 @@
-+! { dg-do compile }
-+! { dg-options "-fmax-errors=1000 -fopenmp" }
-+
-+module m
-+contains
-+ function fn1 (x, y)
-+ integer, intent(in) :: x, y
-+ integer :: fn1
-+ fn1 = x + 2 * y
-+ end function
-+ subroutine sub1 (x, y)
-+ integer, intent(in) :: y
-+ integer, intent(out) :: x
-+ x = y
-+ end subroutine
-+ function fn2 (x)
-+ integer, intent(in) :: x
-+ integer :: fn2
-+ fn2 = x
-+ end function
-+ subroutine sub2 (x, y)
-+ integer, intent(in) :: y
-+ integer, intent(inout) :: x
-+ x = x + y
-+ end subroutine
-+ function fn3 (x, y)
-+ integer, intent(in) :: x(:), y(:)
-+ integer :: fn3(lbound(x, 1):ubound(x, 1))
-+ fn3 = x + 2 * y
-+ end function
-+ subroutine sub3 (x, y)
-+ integer, intent(in) :: y(:)
-+ integer, intent(out) :: x(:)
-+ x = y
-+ end subroutine
-+ function fn4 (x)
-+ integer, intent(in) :: x(:)
-+ integer :: fn4(lbound(x, 1):ubound(x, 1))
-+ fn4 = x
-+ end function
-+ subroutine sub4 (x, y)
-+ integer, intent(in) :: y(:)
-+ integer, intent(inout) :: x(:)
-+ x = x + y
-+ end subroutine
-+ function fn5 (x, y)
-+ integer, intent(in) :: x(10), y(10)
-+ integer :: fn5(10)
-+ fn5 = x + 2 * y
-+ end function
-+ subroutine sub5 (x, y)
-+ integer, intent(in) :: y(10)
-+ integer, intent(out) :: x(10)
-+ x = y
-+ end subroutine
-+ function fn6 (x)
-+ integer, intent(in) :: x(10)
-+ integer :: fn6(10)
-+ fn6 = x
-+ end function
-+ subroutine sub6 (x, y)
-+ integer, intent(in) :: y(10)
-+ integer, intent(inout) :: x(10)
-+ x = x + y
-+ end subroutine
-+ function fn7 (x, y)
-+ integer, allocatable, intent(in) :: x(:), y(:)
-+ integer, allocatable :: fn7(:)
-+ fn7 = x + 2 * y
-+ end function
-+ subroutine sub7 (x, y)
-+ integer, allocatable, intent(in) :: y(:)
-+ integer, allocatable, intent(out) :: x(:)
-+ x = y
-+ end subroutine
-+ function fn8 (x)
-+ integer, allocatable, intent(in) :: x(:)
-+ integer, allocatable :: fn8(:)
-+ fn8 = x
-+ end function
-+ subroutine sub8 (x, y)
-+ integer, allocatable, intent(in) :: y(:)
-+ integer, allocatable, intent(inout) :: x(:)
-+ x = x + y
-+ end subroutine
-+end module
-+subroutine test1
-+ use m
-+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
-+!$omp declare reduction (bar : integer : omp_out = fn1 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*scalar and rank-1" }
-+!$omp & initializer (sub1 (omp_priv, omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*scalar and rank-1" }
-+!$omp declare reduction (baz : integer : sub2 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*scalar and rank-1" }
-+!$omp initializer (omp_priv = fn2 (omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*scalar and rank-1" }
-+ integer :: a(10)
-+!$omp parallel reduction (foo : a)
-+!$omp end parallel
-+!$omp parallel reduction (bar : a)
-+!$omp end parallel
-+!$omp parallel reduction (baz : a)
-+!$omp end parallel
-+end subroutine test1
-+subroutine test2
-+ use m
-+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
-+!$omp declare reduction (bar : integer : omp_out = fn1 (omp_out, omp_in)) &
-+!$omp & initializer (sub1 (omp_priv, omp_orig))
-+!$omp declare reduction (baz : integer : sub2 (omp_out, omp_in)) &
-+!$omp initializer (omp_priv = fn2 (omp_orig))
-+ integer :: a
-+!$omp parallel reduction (foo : a)
-+!$omp end parallel
-+!$omp parallel reduction (bar : a)
-+!$omp end parallel
-+!$omp parallel reduction (baz : a)
-+!$omp end parallel
-+end subroutine test2
-+subroutine test3
-+ use m
-+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
-+!$omp declare reduction (bar : integer : omp_out = fn1 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*scalar and rank-1" }
-+!$omp & initializer (sub1 (omp_priv, omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*scalar and rank-1" }
-+!$omp declare reduction (baz : integer : sub2 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*scalar and rank-1" }
-+!$omp initializer (omp_priv = fn2 (omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*scalar and rank-1" }
-+ integer, allocatable :: a(:)
-+ allocate (a(10))
-+!$omp parallel reduction (foo : a)
-+!$omp end parallel
-+!$omp parallel reduction (bar : a)
-+!$omp end parallel
-+!$omp parallel reduction (baz : a)
-+!$omp end parallel
-+end subroutine test3
-+subroutine test4
-+ use m
-+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
-+!$omp declare reduction (bar : integer : omp_out = fn1 (omp_out, omp_in)) &
-+!$omp & initializer (sub1 (omp_priv, omp_orig))
-+!$omp declare reduction (baz : integer : sub2 (omp_out, omp_in)) &
-+!$omp initializer (omp_priv = fn2 (omp_orig))
-+ integer, allocatable :: a
-+ allocate (a)
-+!$omp parallel reduction (foo : a)
-+!$omp end parallel
-+!$omp parallel reduction (bar : a)
-+!$omp end parallel
-+!$omp parallel reduction (baz : a)
-+!$omp end parallel
-+end subroutine test4
-+subroutine test5
-+ use m
-+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
-+!$omp declare reduction (bar : integer : omp_out = fn3 (omp_out, omp_in)) &
-+!$omp & initializer (sub3 (omp_priv, omp_orig))
-+!$omp declare reduction (baz : integer : sub4 (omp_out, omp_in)) &
-+!$omp initializer (omp_priv = fn4 (omp_orig))
-+ integer :: a(10)
-+!$omp parallel reduction (foo : a)
-+!$omp end parallel
-+!$omp parallel reduction (bar : a)
-+!$omp end parallel
-+!$omp parallel reduction (baz : a)
-+!$omp end parallel
-+end subroutine test5
-+subroutine test6
-+ use m
-+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
-+!$omp declare reduction (bar : integer : omp_out = fn3 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar|Incompatible ranks 0 and 1 in assignment" }
-+!$omp & initializer (sub3 (omp_priv, omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar" }
-+!$omp declare reduction (baz : integer : sub4 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar" }
-+!$omp initializer (omp_priv = fn4 (omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar|Incompatible ranks 0 and 1 in assignment" }
-+ integer :: a
-+!$omp parallel reduction (foo : a)
-+!$omp end parallel
-+!$omp parallel reduction (bar : a)
-+!$omp end parallel
-+!$omp parallel reduction (baz : a)
-+!$omp end parallel
-+end subroutine test6
-+subroutine test7
-+ use m
-+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
-+!$omp declare reduction (bar : integer : omp_out = fn3 (omp_out, omp_in)) &
-+!$omp & initializer (sub3 (omp_priv, omp_orig))
-+!$omp declare reduction (baz : integer : sub4 (omp_out, omp_in)) &
-+!$omp initializer (omp_priv = fn4 (omp_orig))
-+ integer, allocatable :: a(:)
-+ allocate (a(10))
-+!$omp parallel reduction (foo : a)
-+!$omp end parallel
-+!$omp parallel reduction (bar : a)
-+!$omp end parallel
-+!$omp parallel reduction (baz : a)
-+!$omp end parallel
-+end subroutine test7
-+subroutine test8
-+ use m
-+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
-+!$omp declare reduction (bar : integer : omp_out = fn3 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar|Incompatible ranks 0 and 1 in assignment" }
-+!$omp & initializer (sub3 (omp_priv, omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar" }
-+!$omp declare reduction (baz : integer : sub4 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar" }
-+!$omp initializer (omp_priv = fn4 (omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar|Incompatible ranks 0 and 1 in assignment" }
-+ integer, allocatable :: a
-+ allocate (a)
-+!$omp parallel reduction (foo : a)
-+!$omp end parallel
-+!$omp parallel reduction (bar : a)
-+!$omp end parallel
-+!$omp parallel reduction (baz : a)
-+!$omp end parallel
-+end subroutine test8
-+subroutine test9
-+ use m
-+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
-+!$omp declare reduction (bar : integer : omp_out = fn5 (omp_out, omp_in)) &
-+!$omp & initializer (sub5 (omp_priv, omp_orig))
-+!$omp declare reduction (baz : integer : sub6 (omp_out, omp_in)) &
-+!$omp initializer (omp_priv = fn6 (omp_orig))
-+ integer :: a(10)
-+!$omp parallel reduction (foo : a)
-+!$omp end parallel
-+!$omp parallel reduction (bar : a)
-+!$omp end parallel
-+!$omp parallel reduction (baz : a)
-+!$omp end parallel
-+end subroutine test9
-+subroutine test10
-+ use m
-+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
-+!$omp declare reduction (bar : integer : omp_out = fn5 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar|Incompatible ranks 0 and 1 in assignment" }
-+!$omp & initializer (sub5 (omp_priv, omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar" }
-+!$omp declare reduction (baz : integer : sub6 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar" }
-+!$omp initializer (omp_priv = fn6 (omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar|Incompatible ranks 0 and 1 in assignment" }
-+ integer :: a
-+!$omp parallel reduction (foo : a)
-+!$omp end parallel
-+!$omp parallel reduction (bar : a)
-+!$omp end parallel
-+!$omp parallel reduction (baz : a)
-+!$omp end parallel
-+end subroutine test10
-+subroutine test11
-+ use m
-+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
-+!$omp declare reduction (bar : integer : omp_out = fn5 (omp_out, omp_in)) &
-+!$omp & initializer (sub5 (omp_priv, omp_orig))
-+!$omp declare reduction (baz : integer : sub6 (omp_out, omp_in)) &
-+!$omp initializer (omp_priv = fn6 (omp_orig))
-+ integer, allocatable :: a(:)
-+ allocate (a(10))
-+!$omp parallel reduction (foo : a)
-+!$omp end parallel
-+!$omp parallel reduction (bar : a)
-+!$omp end parallel
-+!$omp parallel reduction (baz : a)
-+!$omp end parallel
-+end subroutine test11
-+subroutine test12
-+ use m
-+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
-+!$omp declare reduction (bar : integer : omp_out = fn5 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar|Incompatible ranks 0 and 1 in assignment" }
-+!$omp & initializer (sub5 (omp_priv, omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar" }
-+!$omp declare reduction (baz : integer : sub6 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar" }
-+!$omp initializer (omp_priv = fn6 (omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar|Incompatible ranks 0 and 1 in assignment" }
-+ integer, allocatable :: a
-+ allocate (a)
-+!$omp parallel reduction (foo : a)
-+!$omp end parallel
-+!$omp parallel reduction (bar : a)
-+!$omp end parallel
-+!$omp parallel reduction (baz : a)
-+!$omp end parallel
-+end subroutine test12
-+subroutine test13
-+ use m
-+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
-+!$omp declare reduction (bar : integer : omp_out = & ! { dg-error "Different shape for array assignment at \[^\n\r]* on dimension 1 .9 and 10" }
-+!$omp & fn5 (omp_out, omp_in)) & ! { dg-warning "Actual argument contains too few elements for dummy argument \[^\n\r]* .9/10" }
-+!$omp & initializer (sub5 (omp_priv, omp_orig)) ! { dg-warning "Actual argument contains too few elements for dummy argument \[^\n\r]* .9/10" }
-+!$omp declare reduction (baz : integer : sub6 (omp_out, omp_in)) & ! { dg-warning "Actual argument contains too few elements for dummy argument \[^\n\r]* .9/10" }
-+!$omp initializer (omp_priv = & ! { dg-error "Different shape for array assignment at \[^\n\r]* on dimension 1 .9 and 10" }
-+!$omp & fn6 (omp_orig)) ! { dg-warning "Actual argument contains too few elements for dummy argument \[^\n\r]* .9/10" }
-+ integer :: a(9)
-+!$omp parallel reduction (foo : a)
-+!$omp end parallel
-+!$omp parallel reduction (bar : a)
-+!$omp end parallel
-+!$omp parallel reduction (baz : a)
-+!$omp end parallel
-+end subroutine test13
-+subroutine test14
-+ use m
-+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
-+!$omp declare reduction (bar : integer : omp_out = fn7 (omp_out, omp_in)) & ! { dg-error "Actual argument for \[^\n\r]* must be ALLOCATABLE" }
-+!$omp & initializer (sub7 (omp_priv, omp_orig)) ! { dg-error "Actual argument for \[^\n\r]* must be ALLOCATABLE" }
-+!$omp declare reduction (baz : integer : sub8 (omp_out, omp_in)) & ! { dg-error "Actual argument for \[^\n\r]* must be ALLOCATABLE" }
-+!$omp initializer (omp_priv = fn8 (omp_orig)) ! { dg-error "Actual argument for \[^\n\r]* must be ALLOCATABLE" }
-+ integer :: a(10)
-+!$omp parallel reduction (foo : a)
-+!$omp end parallel
-+!$omp parallel reduction (bar : a)
-+!$omp end parallel
-+!$omp parallel reduction (baz : a)
-+!$omp end parallel
-+end subroutine test14
-+subroutine test15
-+ use m
-+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
-+!$omp declare reduction (bar : integer : omp_out = fn7 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar|Incompatible ranks 0 and 1 in assignment" }
-+!$omp & initializer (sub7 (omp_priv, omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar" }
-+!$omp declare reduction (baz : integer : sub8 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar" }
-+!$omp initializer (omp_priv = fn8 (omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar|Incompatible ranks 0 and 1 in assignment" }
-+ integer :: a
-+!$omp parallel reduction (foo : a)
-+!$omp end parallel
-+!$omp parallel reduction (bar : a)
-+!$omp end parallel
-+!$omp parallel reduction (baz : a)
-+!$omp end parallel
-+end subroutine test15
-+subroutine test16
-+ use m
-+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
-+!$omp declare reduction (bar : integer : omp_out = fn7 (omp_out, omp_in)) &
-+!$omp & initializer (sub7 (omp_priv, omp_orig))
-+!$omp declare reduction (baz : integer : sub8 (omp_out, omp_in)) &
-+!$omp initializer (omp_priv = fn8 (omp_orig))
-+ integer, allocatable :: a(:)
-+ allocate (a(10))
-+!$omp parallel reduction (foo : a)
-+!$omp end parallel
-+!$omp parallel reduction (bar : a)
-+!$omp end parallel
-+!$omp parallel reduction (baz : a)
-+!$omp end parallel
-+end subroutine test16
-+subroutine test17
-+ use m
-+!$omp declare reduction (foo : integer : omp_out = omp_out + omp_in) initializer (omp_priv = 0)
-+!$omp declare reduction (bar : integer : omp_out = fn7 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar|Incompatible ranks 0 and 1 in assignment" }
-+!$omp & initializer (sub7 (omp_priv, omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar" }
-+!$omp declare reduction (baz : integer : sub8 (omp_out, omp_in)) & ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar" }
-+!$omp initializer (omp_priv = fn8 (omp_orig)) ! { dg-error "Rank mismatch in argument\[^\n\r]*rank-1 and scalar|Incompatible ranks 0 and 1 in assignment" }
-+ integer, allocatable :: a
-+ allocate (a)
-+!$omp parallel reduction (foo : a)
-+!$omp end parallel
-+!$omp parallel reduction (bar : a)
-+!$omp end parallel
-+!$omp parallel reduction (baz : a)
-+!$omp end parallel
-+end subroutine test17
-Index: gcc/testsuite/gfortran.dg/gomp/allocatable_components_1.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/gomp/allocatable_components_1.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/gomp/allocatable_components_1.f90 (.../branches/gcc-4_9-branch)
-@@ -14,7 +14,7 @@
- TYPE(t), SAVE :: a
-
- !$omp threadprivate(a)
-- !$omp parallel copyin(a) ! { dg-error "has ALLOCATABLE components" }
-+ !$omp parallel copyin(a)
- ! do something
- !$omp end parallel
- END SUBROUTINE
-@@ -22,7 +22,7 @@
- SUBROUTINE test_copyprivate()
- TYPE(t) :: a
-
-- !$omp single ! { dg-error "has ALLOCATABLE components" }
-+ !$omp single
- ! do something
- !$omp end single copyprivate (a)
- END SUBROUTINE
-@@ -30,7 +30,7 @@
- SUBROUTINE test_firstprivate
- TYPE(t) :: a
-
-- !$omp parallel firstprivate(a) ! { dg-error "has ALLOCATABLE components" }
-+ !$omp parallel firstprivate(a)
- ! do something
- !$omp end parallel
- END SUBROUTINE
-@@ -39,7 +39,7 @@
- TYPE(t) :: a
- INTEGER :: i
-
-- !$omp parallel do lastprivate(a) ! { dg-error "has ALLOCATABLE components" }
-+ !$omp parallel do lastprivate(a)
- DO i = 1, 1
- END DO
- !$omp end parallel do
-@@ -49,7 +49,7 @@
- TYPE(t) :: a(10)
- INTEGER :: i
-
-- !$omp parallel do reduction(+: a) ! { dg-error "must be of numeric type" }
-+ !$omp parallel do reduction(+: a) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- DO i = 1, SIZE(a)
- END DO
- !$omp end parallel do
-Index: gcc/testsuite/gfortran.dg/gomp/appendix-a/a.31.3.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/gomp/appendix-a/a.31.3.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/gomp/appendix-a/a.31.3.f90 (.../branches/gcc-4_9-branch)
-@@ -5,7 +5,7 @@
- !$OMP PARALLEL DO REDUCTION(MAX: M) ! MAX is no longer the
- ! intrinsic so this
- ! is non-conforming
--! { dg-error "is not INTRINSIC procedure name" "" { target *-*-* } 5 } */
-+! { dg-error "OMP DECLARE REDUCTION max not found" "" { target *-*-* } 5 } */
- DO I = 1, 100
- CALL SUB(M,I)
- END DO
-Index: gcc/testsuite/gfortran.dg/gomp/target1.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/gomp/target1.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/gomp/target1.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,520 @@
-+! { dg-do compile }
-+! { dg-options "-fopenmp" }
-+
-+module target1
-+ interface
-+ subroutine dosomething (a, n, m)
-+ integer :: a (:), n, m
-+ !$omp declare target
-+ end subroutine dosomething
-+ end interface
-+contains
-+ subroutine foo (n, o, p, q, r, pp)
-+ integer :: n, o, p, q, r, s, i, j
-+ integer :: a (2:o)
-+ integer, pointer :: pp
-+ !$omp target data device (n + 1) if (n .ne. 6) map (tofrom: n, r)
-+ !$omp target device (n + 1) if (n .ne. 6) map (from: n) map (alloc: a(2:o))
-+ call dosomething (a, n, 0)
-+ !$omp end target
-+ !$omp target teams device (n + 1) num_teams (n + 4) thread_limit (n * 2) &
-+ !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
-+ !$omp & private (p) firstprivate (q) shared (n) reduction (+: r)
-+ r = r + 1
-+ p = q
-+ call dosomething (a, n, p + q)
-+ !$omp end target teams
-+ !$omp target teams distribute device (n + 1) num_teams (n + 4) collapse (2) &
-+ !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
-+ !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
-+ !$omp & thread_limit (n * 2) dist_schedule (static, 4)
-+ do i = 1, 10
-+ do j = 1, 10
-+ r = r + 1
-+ p = q
-+ call dosomething (a, n, p + q)
-+ end do
-+ end do
-+ !$omp target teams distribute device (n + 1) num_teams (n + 4) &
-+ !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
-+ !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
-+ !$omp & thread_limit (n * 2) dist_schedule (static, 4)
-+ do i = 1, 10
-+ do j = 1, 10
-+ r = r + 1
-+ p = q
-+ call dosomething (a, n, p + q)
-+ end do
-+ end do
-+ !$omp end target teams distribute
-+ !$omp target teams distribute parallel do device (n + 1) num_teams (n + 4) &
-+ !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
-+ !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
-+ !$omp & thread_limit (n * 2) dist_schedule (static, 4) collapse (2) &
-+ !$omp & num_threads (n + 4) proc_bind (spread) lastprivate (s) &
-+ !$omp & ordered schedule (static, 8)
-+ do i = 1, 10
-+ do j = 1, 10
-+ r = r + 1
-+ p = q
-+ call dosomething (a, n, p + q)
-+ !$omp ordered
-+ p = q
-+ !$omp end ordered
-+ s = i * 10 + j
-+ end do
-+ end do
-+ !$omp target teams distribute parallel do device (n + 1) num_teams (n + 4) &
-+ !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
-+ !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
-+ !$omp & thread_limit (n * 2) dist_schedule (static, 4) num_threads (n + 4) &
-+ !$omp & proc_bind (master) lastprivate (s) ordered schedule (static, 8)
-+ do i = 1, 10
-+ do j = 1, 10
-+ r = r + 1
-+ p = q
-+ call dosomething (a, n, p + q)
-+ end do
-+ !$omp ordered
-+ p = q
-+ !$omp end ordered
-+ s = i * 10
-+ end do
-+ !$omp end target teams distribute parallel do
-+ !$omp target teams distribute parallel do simd device (n + 1) &
-+ !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
-+ !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
-+ !$omp & thread_limit (n * 2) dist_schedule (static, 4) collapse (2) &
-+ !$omp & num_threads (n + 4) proc_bind (spread) lastprivate (s) &
-+ !$omp & schedule (static, 8) num_teams (n + 4) safelen(8)
-+ do i = 1, 10
-+ do j = 1, 10
-+ r = r + 1
-+ p = q
-+ a(2+i*10+j) = p + q
-+ s = i * 10 + j
-+ end do
-+ end do
-+ !$omp target teams distribute parallel do simd device (n + 1) &
-+ !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
-+ !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
-+ !$omp & thread_limit (n * 2) dist_schedule (static, 4) num_threads (n + 4) &
-+ !$omp & proc_bind (master) lastprivate (s) schedule (static, 8) &
-+ !$omp & num_teams (n + 4) safelen(16) linear(i:1) aligned (pp:4)
-+ do i = 1, 10
-+ r = r + 1
-+ p = q
-+ a(1+i) = p + q
-+ s = i * 10
-+ end do
-+ !$omp end target teams distribute parallel do simd
-+ !$omp target teams distribute simd device (n + 1) &
-+ !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
-+ !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
-+ !$omp & thread_limit (n * 2) dist_schedule (static, 4) collapse (2) &
-+ !$omp & lastprivate (s) num_teams (n + 4) safelen(8)
-+ do i = 1, 10
-+ do j = 1, 10
-+ r = r + 1
-+ p = q
-+ a(2+i*10+j) = p + q
-+ s = i * 10 + j
-+ end do
-+ end do
-+ !$omp target teams distribute simd device (n + 1) &
-+ !$omp & if (n .ne. 6)map (from: n) map (alloc: a(2:o)) default(shared) &
-+ !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
-+ !$omp & thread_limit (n * 2) dist_schedule (static, 4) lastprivate (s) &
-+ !$omp & num_teams (n + 4) safelen(16) linear(i:1) aligned (pp:4)
-+ do i = 1, 10
-+ r = r + 1
-+ p = q
-+ a(1+i) = p + q
-+ s = i * 10
-+ end do
-+ !$omp end target teams distribute simd
-+ !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
-+ !$omp teams num_teams (n + 4) thread_limit (n * 2) default(shared) &
-+ !$omp & private (p) firstprivate (q) shared (n) reduction (+: r)
-+ r = r + 1
-+ p = q
-+ call dosomething (a, n, p + q)
-+ !$omp end teams
-+ !$omp end target
-+ !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
-+ !$omp teams distribute num_teams (n + 4) collapse (2) default(shared) &
-+ !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
-+ !$omp & thread_limit (n * 2) dist_schedule (static, 4)
-+ do i = 1, 10
-+ do j = 1, 10
-+ r = r + 1
-+ p = q
-+ call dosomething (a, n, p + q)
-+ end do
-+ end do
-+ !$omp end target
-+ !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
-+ !$omp teams distribute num_teams (n + 4) default(shared) &
-+ !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
-+ !$omp & thread_limit (n * 2) dist_schedule (static, 4)
-+ do i = 1, 10
-+ do j = 1, 10
-+ r = r + 1
-+ p = q
-+ call dosomething (a, n, p + q)
-+ end do
-+ end do
-+ !$omp end teams distribute
-+ !$omp end target
-+ !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
-+ !$omp teams distribute parallel do num_teams (n + 4) &
-+ !$omp & if (n .ne. 6) default(shared) ordered schedule (static, 8) &
-+ !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
-+ !$omp & thread_limit (n * 2) dist_schedule (static, 4) collapse (2) &
-+ !$omp & num_threads (n + 4) proc_bind (spread) lastprivate (s)
-+ do i = 1, 10
-+ do j = 1, 10
-+ r = r + 1
-+ p = q
-+ call dosomething (a, n, p + q)
-+ !$omp ordered
-+ p = q
-+ !$omp end ordered
-+ s = i * 10 + j
-+ end do
-+ end do
-+ !$omp end target
-+ !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
-+ !$omp teams distribute parallel do num_teams (n + 4)if(n.ne.6)default(shared)&
-+ !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
-+ !$omp & thread_limit (n * 2) dist_schedule (static, 4) num_threads (n + 4) &
-+ !$omp & proc_bind (master) lastprivate (s) ordered schedule (static, 8)
-+ do i = 1, 10
-+ do j = 1, 10
-+ r = r + 1
-+ p = q
-+ call dosomething (a, n, p + q)
-+ end do
-+ !$omp ordered
-+ p = q
-+ !$omp end ordered
-+ s = i * 10
-+ end do
-+ !$omp end teams distribute parallel do
-+ !$omp end target
-+ !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
-+ !$omp teams distribute parallel do simd if(n.ne.6)default(shared)&
-+ !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
-+ !$omp & thread_limit (n * 2) dist_schedule (static, 4) collapse (2) &
-+ !$omp & num_threads (n + 4) proc_bind (spread) lastprivate (s) &
-+ !$omp & schedule (static, 8) num_teams (n + 4) safelen(8)
-+ do i = 1, 10
-+ do j = 1, 10
-+ r = r + 1
-+ p = q
-+ a(2+i*10+j) = p + q
-+ s = i * 10 + j
-+ end do
-+ end do
-+ !$omp end target
-+ !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
-+ !$omp teams distribute parallel do simd if (n .ne. 6)default(shared) &
-+ !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
-+ !$omp & thread_limit (n * 2) dist_schedule (static, 4) num_threads (n + 4) &
-+ !$omp & proc_bind (master) lastprivate (s) schedule (static, 8) &
-+ !$omp & num_teams (n + 4) safelen(16) linear(i:1) aligned (pp:4)
-+ do i = 1, 10
-+ r = r + 1
-+ p = q
-+ a(1+i) = p + q
-+ s = i * 10
-+ end do
-+ !$omp end teams distribute parallel do simd
-+ !$omp end target
-+ !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
-+ !$omp teams distribute simd default(shared) safelen(8) &
-+ !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
-+ !$omp & thread_limit (n * 2) dist_schedule (static, 4) collapse (2) &
-+ !$omp & lastprivate (s) num_teams (n + 4)
-+ do i = 1, 10
-+ do j = 1, 10
-+ r = r + 1
-+ p = q
-+ a(2+i*10+j) = p + q
-+ s = i * 10 + j
-+ end do
-+ end do
-+ !$omp end target
-+ !$omp target device (n + 1) if (n .ne. 6)map (from: n) map (alloc: a(2:o))
-+ !$omp teams distribute simd default(shared) aligned (pp:4) &
-+ !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
-+ !$omp & thread_limit (n * 2) dist_schedule (static, 4) lastprivate (s)
-+ do i = 1, 10
-+ r = r + 1
-+ p = q
-+ a(1+i) = p + q
-+ s = i * 10
-+ end do
-+ !$omp end teams distribute simd
-+ !$omp end target
-+ !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
-+ !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
-+ !$omp & default(shared) shared(n) private (p) reduction ( + : r )
-+ !$omp distribute collapse (2) firstprivate (q) dist_schedule (static, 4)
-+ do i = 1, 10
-+ do j = 1, 10
-+ r = r + 1
-+ p = q
-+ call dosomething (a, n, p + q)
-+ end do
-+ end do
-+ !$omp end target teams
-+ !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
-+ !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
-+ !$omp & default(shared) shared(n) private (p) reduction(+:r)
-+ !$omp distribute firstprivate (q) dist_schedule (static, 4)
-+ do i = 1, 10
-+ do j = 1, 10
-+ r = r + 1
-+ p = q
-+ call dosomething (a, n, p + q)
-+ end do
-+ end do
-+ !$omp end distribute
-+ !$omp end target teams
-+ !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
-+ !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
-+ !$omp & default(shared) shared(n) private (p) reduction(+:r)
-+ !$omp distribute parallel do if (n .ne. 6) default(shared) &
-+ !$omp & ordered schedule (static, 8) private (p) firstprivate (q) &
-+ !$omp & shared(n)reduction(+:r)dist_schedule(static,4)collapse(2)&
-+ !$omp & num_threads (n + 4) proc_bind (spread) lastprivate (s)
-+ do i = 1, 10
-+ do j = 1, 10
-+ r = r + 1
-+ p = q
-+ call dosomething (a, n, p + q)
-+ !$omp ordered
-+ p = q
-+ !$omp end ordered
-+ s = i * 10 + j
-+ end do
-+ end do
-+ !$omp end target teams
-+ !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
-+ !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
-+ !$omp & default(shared) shared(n) private (p) reduction(+:r)
-+ !$omp distribute parallel do if(n.ne.6)default(shared)&
-+ !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
-+ !$omp & dist_schedule (static, 4) num_threads (n + 4) &
-+ !$omp & proc_bind (master) lastprivate (s) ordered schedule (static, 8)
-+ do i = 1, 10
-+ do j = 1, 10
-+ r = r + 1
-+ p = q
-+ call dosomething (a, n, p + q)
-+ end do
-+ !$omp ordered
-+ p = q
-+ !$omp end ordered
-+ s = i * 10
-+ end do
-+ !$omp end distribute parallel do
-+ !$omp end target teams
-+ !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
-+ !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
-+ !$omp & default(shared) shared(n) private (p) reduction(+:r)
-+ !$omp distribute parallel do simd if(n.ne.6)default(shared)&
-+ !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
-+ !$omp & dist_schedule (static, 4) collapse (2) safelen(8) &
-+ !$omp & num_threads (n + 4) proc_bind (spread) lastprivate (s) &
-+ !$omp & schedule (static, 8)
-+ do i = 1, 10
-+ do j = 1, 10
-+ r = r + 1
-+ p = q
-+ a(2+i*10+j) = p + q
-+ s = i * 10 + j
-+ end do
-+ end do
-+ !$omp end target teams
-+ !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
-+ !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
-+ !$omp & default(shared) shared(n) private (p) reduction(+:r)
-+ !$omp distribute parallel do simd if (n .ne. 6)default(shared) &
-+ !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
-+ !$omp & dist_schedule (static, 4) num_threads (n + 4) &
-+ !$omp & proc_bind (master) lastprivate (s) schedule (static, 8) &
-+ !$omp & safelen(16) linear(i:1) aligned (pp:4)
-+ do i = 1, 10
-+ r = r + 1
-+ p = q
-+ a(1+i) = p + q
-+ s = i * 10
-+ end do
-+ !$omp end distribute parallel do simd
-+ !$omp end target teams
-+ !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
-+ !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
-+ !$omp & default(shared) shared(n) private (p) reduction(+:r)
-+ !$omp distribute simd safelen(8) lastprivate(s) &
-+ !$omp & private (p) firstprivate (q) reduction (+: r) &
-+ !$omp & dist_schedule (static, 4) collapse (2)
-+ do i = 1, 10
-+ do j = 1, 10
-+ r = r + 1
-+ p = q
-+ a(2+i*10+j) = p + q
-+ s = i * 10 + j
-+ end do
-+ end do
-+ !$omp end target teams
-+ !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
-+ !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
-+ !$omp & default(shared) shared(n) private (p) reduction(+:r)
-+ !$omp distribute simd aligned (pp:4) &
-+ !$omp & private (p) firstprivate (q) reduction (+: r) &
-+ !$omp & dist_schedule (static, 4) lastprivate (s)
-+ do i = 1, 10
-+ r = r + 1
-+ p = q
-+ a(1+i) = p + q
-+ s = i * 10
-+ end do
-+ !$omp end distribute simd
-+ !$omp end target teams
-+ !$omp end target data
-+ end subroutine
-+ subroutine bar (n, o, p, r, pp)
-+ integer :: n, o, p, q, r, s, i, j
-+ integer :: a (2:o)
-+ integer, pointer :: pp
-+ common /blk/ i, j, q
-+ !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
-+ !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
-+ !$omp & default(shared) shared(n) private (p) reduction ( + : r )
-+ !$omp distribute collapse (2) firstprivate (q) dist_schedule (static, 4)
-+ do i = 1, 10
-+ do j = 1, 10
-+ r = r + 1
-+ p = q
-+ call dosomething (a, n, p + q)
-+ end do
-+ end do
-+ !$omp end target teams
-+ !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
-+ !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
-+ !$omp & default(shared) shared(n) private (p) reduction(+:r)
-+ !$omp distribute firstprivate (q) dist_schedule (static, 4)
-+ do i = 1, 10
-+ do j = 1, 10
-+ r = r + 1
-+ p = q
-+ call dosomething (a, n, p + q)
-+ end do
-+ end do
-+ !$omp end distribute
-+ !$omp end target teams
-+ !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
-+ !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
-+ !$omp & default(shared) shared(n) private (p) reduction(+:r)
-+ !$omp distribute parallel do if (n .ne. 6) default(shared) &
-+ !$omp & ordered schedule (static, 8) private (p) firstprivate (q) &
-+ !$omp & shared(n)reduction(+:r)dist_schedule(static,4)collapse(2)&
-+ !$omp & num_threads (n + 4) proc_bind (spread) lastprivate (s)
-+ do i = 1, 10
-+ do j = 1, 10
-+ r = r + 1
-+ p = q
-+ call dosomething (a, n, p + q)
-+ !$omp ordered
-+ p = q
-+ !$omp end ordered
-+ s = i * 10 + j
-+ end do
-+ end do
-+ !$omp end target teams
-+ !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
-+ !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
-+ !$omp & default(shared) shared(n) private (p) reduction(+:r)
-+ !$omp distribute parallel do if(n.ne.6)default(shared)&
-+ !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
-+ !$omp & dist_schedule (static, 4) num_threads (n + 4) &
-+ !$omp & proc_bind (master) lastprivate (s) ordered schedule (static, 8)
-+ do i = 1, 10
-+ do j = 1, 10
-+ r = r + 1
-+ p = q
-+ call dosomething (a, n, p + q)
-+ end do
-+ !$omp ordered
-+ p = q
-+ !$omp end ordered
-+ s = i * 10
-+ end do
-+ !$omp end distribute parallel do
-+ !$omp end target teams
-+ !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
-+ !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
-+ !$omp & default(shared) shared(n) private (p) reduction(+:r)
-+ !$omp distribute parallel do simd if(n.ne.6)default(shared)&
-+ !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
-+ !$omp & dist_schedule (static, 4) collapse (2) safelen(8) &
-+ !$omp & num_threads (n + 4) proc_bind (spread) lastprivate (s) &
-+ !$omp & schedule (static, 8)
-+ do i = 1, 10
-+ do j = 1, 10
-+ r = r + 1
-+ p = q
-+ a(2+i*10+j) = p + q
-+ s = i * 10 + j
-+ end do
-+ end do
-+ !$omp end target teams
-+ !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
-+ !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
-+ !$omp & default(shared) shared(n) private (p) reduction(+:r)
-+ !$omp distribute parallel do simd if (n .ne. 6)default(shared) &
-+ !$omp & private (p) firstprivate (q) shared (n) reduction (+: r) &
-+ !$omp & dist_schedule (static, 4) num_threads (n + 4) &
-+ !$omp & proc_bind (master) lastprivate (s) schedule (static, 8) &
-+ !$omp & safelen(16) linear(i:1) aligned (pp:4)
-+ do i = 1, 10
-+ r = r + 1
-+ p = q
-+ a(1+i) = p + q
-+ s = i * 10
-+ end do
-+ !$omp end distribute parallel do simd
-+ !$omp end target teams
-+ !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
-+ !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
-+ !$omp & default(shared) shared(n) private (p) reduction(+:r)
-+ !$omp distribute simd safelen(8) lastprivate(s) &
-+ !$omp & private (p) firstprivate (q) reduction (+: r) &
-+ !$omp & dist_schedule (static, 4) collapse (2)
-+ do i = 1, 10
-+ do j = 1, 10
-+ r = r + 1
-+ p = q
-+ a(2+i*10+j) = p + q
-+ s = i * 10 + j
-+ end do
-+ end do
-+ !$omp end target teams
-+ !$omp target teams device (n + 1) if (n .ne. 6)map (from: n) &
-+ !$omp & map (alloc: a(2:o)) num_teams (n + 4) thread_limit (n * 2) &
-+ !$omp & default(shared) shared(n) private (p) reduction(+:r)
-+ !$omp distribute simd aligned (pp:4) &
-+ !$omp & private (p) firstprivate (q) reduction (+: r) &
-+ !$omp & dist_schedule (static, 4) lastprivate (s)
-+ do i = 1, 10
-+ r = r + 1
-+ p = q
-+ a(1+i) = p + q
-+ s = i * 10
-+ end do
-+ !$omp end distribute simd
-+ !$omp end target teams
-+ end subroutine
-+end module
-Index: gcc/testsuite/gfortran.dg/gomp/target2.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/gomp/target2.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/gomp/target2.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,74 @@
-+! { dg-do compile }
-+! { dg-options "-fopenmp -ffree-line-length-160" }
-+
-+subroutine foo (n, s, t, u, v, w)
-+ integer :: n, i, s, t, u, v, w
-+ common /bar/ i
-+ !$omp simd safelen(s + 1)
-+ do i = 1, n
-+ end do
-+ !$omp do schedule (static, t * 2)
-+ do i = 1, n
-+ end do
-+ !$omp do simd safelen(s + 1) schedule (static, t * 2)
-+ do i = 1, n
-+ end do
-+ !$omp parallel do schedule (static, t * 2) num_threads (u - 1)
-+ do i = 1, n
-+ end do
-+ !$omp parallel do simd safelen(s + 1) schedule (static, t * 2) num_threads (u - 1)
-+ do i = 1, n
-+ end do
-+ !$omp distribute dist_schedule (static, v + 8)
-+ do i = 1, n
-+ end do
-+ !$omp distribute simd dist_schedule (static, v + 8) safelen(s + 1)
-+ do i = 1, n
-+ end do
-+ !$omp distribute parallel do simd dist_schedule (static, v + 8) safelen(s + 1) &
-+ !$omp & schedule (static, t * 2) num_threads (u - 1)
-+ do i = 1, n
-+ end do
-+ !$omp distribute parallel do dist_schedule (static, v + 8) num_threads (u - 1) &
-+ !$omp & schedule (static, t * 2)
-+ do i = 1, n
-+ end do
-+ !$omp target
-+ !$omp teams distribute dist_schedule (static, v + 8) num_teams (w + 8)
-+ do i = 1, n
-+ end do
-+ !$omp end target
-+ !$omp target
-+ !$omp teams distribute simd dist_schedule (static, v + 8) safelen(s + 1) &
-+ !$omp & num_teams (w + 8)
-+ do i = 1, n
-+ end do
-+ !$omp end target
-+ !$omp target
-+ !$omp teams distribute parallel do simd dist_schedule (static, v + 8) safelen(s + 1) &
-+ !$omp & schedule (static, t * 2) num_threads (u - 1) num_teams (w + 8)
-+ do i = 1, n
-+ end do
-+ !$omp end target
-+ !$omp target
-+ !$omp teams distribute parallel do dist_schedule (static, v + 8) num_threads (u - 1) &
-+ !$omp & schedule (static, t * 2) num_teams (w + 8)
-+ do i = 1, n
-+ end do
-+ !$omp end target
-+ !$omp target teams distribute dist_schedule (static, v + 8) num_teams (w + 8)
-+ do i = 1, n
-+ end do
-+ !$omp target teams distribute simd dist_schedule (static, v + 8) safelen(s + 1) &
-+ !$omp & num_teams (w + 8)
-+ do i = 1, n
-+ end do
-+ !$omp target teams distribute parallel do simd dist_schedule (static, v + 8) safelen(s + 1) &
-+ !$omp & schedule (static, t * 2) num_threads (u - 1) num_teams (w + 8)
-+ do i = 1, n
-+ end do
-+ !$omp target teams distribute parallel do dist_schedule (static, v + 8) num_threads (u - 1) &
-+ !$omp & schedule (static, t * 2) num_teams (w + 8)
-+ do i = 1, n
-+ end do
-+end subroutine
-Index: gcc/testsuite/gfortran.dg/gomp/target3.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/gomp/target3.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/gomp/target3.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,12 @@
-+! { dg-do compile }
-+! { dg-options "-fopenmp" }
-+
-+subroutine foo (r)
-+ integer :: i, r
-+ !$omp target
-+ !$omp target teams distribute parallel do reduction (+: r) ! { dg-warning "target construct inside of target region" }
-+ do i = 1, 10
-+ r = r + 1
-+ end do
-+ !$omp end target
-+end subroutine
-Index: gcc/testsuite/gfortran.dg/gomp/reduction1.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/gomp/reduction1.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/gomp/reduction1.f90 (.../branches/gcc-4_9-branch)
-@@ -60,73 +60,73 @@
- !$omp end parallel
- !$omp parallel reduction (*:ia1) ! { dg-error "Assumed size" }
- !$omp end parallel
--!$omp parallel reduction (+:l1) ! { dg-error "must be of numeric type, got LOGICAL" }
-+!$omp parallel reduction (+:l1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (*:la1) ! { dg-error "must be of numeric type, got LOGICAL" }
-+!$omp parallel reduction (*:la1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (-:a1) ! { dg-error "must be of numeric type, got CHARACTER" }
-+!$omp parallel reduction (-:a1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (+:t1) ! { dg-error "must be of numeric type, got TYPE" }
-+!$omp parallel reduction (+:t1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (*:ta1) ! { dg-error "must be of numeric type, got TYPE" }
-+!$omp parallel reduction (*:ta1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (.and.:i3) ! { dg-error "must be LOGICAL" }
-+!$omp parallel reduction (.and.:i3) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (.or.:ia2) ! { dg-error "must be LOGICAL" }
-+!$omp parallel reduction (.or.:ia2) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (.eqv.:r1) ! { dg-error "must be LOGICAL" }
-+!$omp parallel reduction (.eqv.:r1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (.neqv.:ra1) ! { dg-error "must be LOGICAL" }
-+!$omp parallel reduction (.neqv.:ra1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (.and.:d1) ! { dg-error "must be LOGICAL" }
-+!$omp parallel reduction (.and.:d1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (.or.:da1) ! { dg-error "must be LOGICAL" }
-+!$omp parallel reduction (.or.:da1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (.eqv.:c1) ! { dg-error "must be LOGICAL" }
-+!$omp parallel reduction (.eqv.:c1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (.neqv.:ca1) ! { dg-error "must be LOGICAL" }
-+!$omp parallel reduction (.neqv.:ca1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (.and.:a1) ! { dg-error "must be LOGICAL" }
-+!$omp parallel reduction (.and.:a1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (.or.:t1) ! { dg-error "must be LOGICAL" }
-+!$omp parallel reduction (.or.:t1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (.eqv.:ta1) ! { dg-error "must be LOGICAL" }
-+!$omp parallel reduction (.eqv.:ta1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (min:c1) ! { dg-error "must be INTEGER or REAL" }
-+!$omp parallel reduction (min:c1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (max:ca1) ! { dg-error "must be INTEGER or REAL" }
-+!$omp parallel reduction (max:ca1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (max:l1) ! { dg-error "must be INTEGER or REAL" }
-+!$omp parallel reduction (max:l1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (min:la1) ! { dg-error "must be INTEGER or REAL" }
-+!$omp parallel reduction (min:la1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (max:a1) ! { dg-error "must be INTEGER or REAL" }
-+!$omp parallel reduction (max:a1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (min:t1) ! { dg-error "must be INTEGER or REAL" }
-+!$omp parallel reduction (min:t1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (max:ta1) ! { dg-error "must be INTEGER or REAL" }
-+!$omp parallel reduction (max:ta1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (iand:r1) ! { dg-error "must be INTEGER" }
-+!$omp parallel reduction (iand:r1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (ior:ra1) ! { dg-error "must be INTEGER" }
-+!$omp parallel reduction (ior:ra1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (ieor:d1) ! { dg-error "must be INTEGER" }
-+!$omp parallel reduction (ieor:d1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (ior:da1) ! { dg-error "must be INTEGER" }
-+!$omp parallel reduction (ior:da1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (iand:c1) ! { dg-error "must be INTEGER" }
-+!$omp parallel reduction (iand:c1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (ior:ca1) ! { dg-error "must be INTEGER" }
-+!$omp parallel reduction (ior:ca1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (ieor:l1) ! { dg-error "must be INTEGER" }
-+!$omp parallel reduction (ieor:l1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (iand:la1) ! { dg-error "must be INTEGER" }
-+!$omp parallel reduction (iand:la1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (ior:a1) ! { dg-error "must be INTEGER" }
-+!$omp parallel reduction (ior:a1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (ieor:t1) ! { dg-error "must be INTEGER" }
-+!$omp parallel reduction (ieor:t1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
--!$omp parallel reduction (iand:ta1) ! { dg-error "must be INTEGER" }
-+!$omp parallel reduction (iand:ta1) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found for type" }
- !$omp end parallel
-
- end subroutine
-Index: gcc/testsuite/gfortran.dg/gomp/reduction3.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/gomp/reduction3.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/gomp/reduction3.f90 (.../branches/gcc-4_9-branch)
-@@ -16,7 +16,7 @@
- integer :: i, ior
- ior = 6
- i = 6
--!$omp parallel reduction (ior:i) ! { dg-error "is not INTRINSIC procedure name" }
-+!$omp parallel reduction (ior:i) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found" }
- !$omp end parallel
- end subroutine f1
- subroutine f2
-@@ -27,7 +27,7 @@
- end function
- end interface
- i = 6
--!$omp parallel reduction (ior:i) ! { dg-error "is not INTRINSIC procedure name" }
-+!$omp parallel reduction (ior:i) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found" }
- i = ior (i, 3)
- !$omp end parallel
- end subroutine f2
-@@ -50,7 +50,7 @@
- use mreduction3
- integer :: i
- i = 6
--!$omp parallel reduction (ior:i) ! { dg-error "is not INTRINSIC procedure name" }
-+!$omp parallel reduction (ior:i) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found" }
- i = ior (i, 7)
- !$omp end parallel
- end subroutine f5
-@@ -58,7 +58,7 @@
- use mreduction3
- integer :: i
- i = 6
--!$omp parallel reduction (iand:i) ! { dg-error "is not INTRINSIC procedure name" }
-+!$omp parallel reduction (iand:i) ! { dg-error "OMP DECLARE REDUCTION\[^\n\r\]*not found" }
- i = iand (i, 18)
- !$omp end parallel
- end subroutine f6
-Index: gcc/testsuite/gfortran.dg/gomp/declare-simd-1.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/gomp/declare-simd-1.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/gomp/declare-simd-1.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,9 @@
-+! { dg-do compile }
-+
-+subroutine fn1 (x)
-+ integer :: x
-+!$omp declare simd (fn1) inbranch notinbranch uniform (x) ! { dg-error "Unclassifiable OpenMP directive" }
-+end subroutine fn1
-+subroutine fn2 (x)
-+!$omp declare simd (fn100) ! { dg-error "should refer to containing procedure" }
-+end subroutine fn2
-Index: gcc/testsuite/gfortran.dg/gomp/associate1.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/gomp/associate1.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/gomp/associate1.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,83 @@
-+! { dg-do compile }
-+
-+program associate1
-+ type dl
-+ integer :: i
-+ end type
-+ type dt
-+ integer :: i
-+ real :: a(3, 3)
-+ type(dl) :: c(3, 3)
-+ end type
-+ integer :: v, i, j
-+ real :: a(3, 3)
-+ type(dt) :: b(3)
-+ i = 1
-+ j = 2
-+ associate(k => v, l => a(i, j), m => a(i, :))
-+ associate(n => b(j)%c(:, :)%i, o => a, p => b)
-+!$omp parallel shared (l) ! { dg-error "ASSOCIATE name" }
-+!$omp end parallel
-+!$omp parallel firstprivate (m) ! { dg-error "ASSOCIATE name" }
-+!$omp end parallel
-+!$omp parallel reduction (+: k) ! { dg-error "ASSOCIATE name" }
-+!$omp end parallel
-+!$omp parallel do firstprivate (k) ! { dg-error "ASSOCIATE name" }
-+ do i = 1, 10
-+ end do
-+!$omp parallel do lastprivate (n) ! { dg-error "ASSOCIATE name" }
-+ do i = 1, 10
-+ end do
-+!$omp parallel do private (o) ! { dg-error "ASSOCIATE name" }
-+ do i = 1, 10
-+ end do
-+!$omp parallel do shared (p) ! { dg-error "ASSOCIATE name" }
-+ do i = 1, 10
-+ end do
-+!$omp task private (k) ! { dg-error "ASSOCIATE name" }
-+!$omp end task
-+!$omp task shared (l) ! { dg-error "ASSOCIATE name" }
-+!$omp end task
-+!$omp task firstprivate (m) ! { dg-error "ASSOCIATE name" }
-+!$omp end task
-+!$omp do private (l) ! { dg-error "ASSOCIATE name" }
-+ do i = 1, 10
-+ end do
-+!$omp do reduction (*: k) ! { dg-error "ASSOCIATE name" }
-+ do i = 1, 10
-+ end do
-+!$omp sections private(o) ! { dg-error "ASSOCIATE name" }
-+!$omp section
-+!$omp section
-+!$omp end sections
-+!$omp parallel sections firstprivate(p) ! { dg-error "ASSOCIATE name" }
-+!$omp section
-+!$omp section
-+!$omp endparallelsections
-+!$omp parallelsections lastprivate(m) ! { dg-error "ASSOCIATE name" }
-+!$omp section
-+!$omp section
-+!$omp endparallelsections
-+!$omp sections reduction(+:k) ! { dg-error "ASSOCIATE name" }
-+!$omp section
-+!$omp section
-+!$omp end sections
-+!$omp simd private (l) ! { dg-error "ASSOCIATE name" }
-+ do i = 1, 10
-+ end do
-+ k = 1
-+!$omp simd lastprivate (m) ! { dg-error "ASSOCIATE name" }
-+ do i = 1, 10
-+ end do
-+ k = 1
-+!$omp simd reduction (+: k) ! { dg-error "ASSOCIATE name" }
-+ do i = 1, 10
-+ end do
-+ k = 1
-+!$omp simd linear (k : 2) ! { dg-error "ASSOCIATE name" }
-+ do i = 1, 10
-+ k = k + 2
-+ end do
-+ end associate
-+ end associate
-+end program
-Index: gcc/testsuite/gfortran.dg/gomp/openmp-simd-1.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/gomp/openmp-simd-1.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/gomp/openmp-simd-1.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,137 @@
-+! { dg-do compile }
-+! { dg-options "-fno-openmp -fopenmp-simd -fdump-tree-original -O2" }
-+
-+!$omp declare reduction (foo:integer:omp_out = omp_out + omp_in)
-+ interface
-+ integer function foo (x, y)
-+ integer, value :: x, y
-+!$omp declare simd (foo) linear (y : 2)
-+ end function foo
-+ end interface
-+ integer :: i, a(64), b, c
-+ integer, save :: d
-+!$omp threadprivate (d)
-+ d = 5
-+ a = 6
-+!$omp simd
-+ do i = 1, 64
-+ a(i) = foo (a(i), 2 * i)
-+ end do
-+ b = 0
-+ c = 0
-+!$omp simd reduction (+:b) reduction (foo:c)
-+ do i = 1, 64
-+ b = b + a(i)
-+ c = c + a(i) * 2
-+ end do
-+ print *, b
-+ b = 0
-+!$omp parallel
-+!$omp do simd schedule(static, 4) safelen (8) reduction (+:b)
-+ do i = 1, 64
-+ a(i) = a(i) + 1
-+ b = b + 1
-+ end do
-+!$omp end parallel
-+ print *, b
-+ b = 0
-+!$omp parallel do simd schedule(static, 4) safelen (8) &
-+!$omp num_threads (4) if (.true.) reduction (+:b)
-+ do i = 1, 64
-+ a(i) = a(i) + 1
-+ b = b + 1
-+ end do
-+ print *, b
-+ b = 0
-+!$omp parallel
-+!$omp do simd schedule(static, 4) safelen (8) reduction (+:b)
-+ do i = 1, 64
-+ a(i) = a(i) + 1
-+ b = b + 1
-+ end do
-+!$omp enddosimd
-+!$omp end parallel
-+ print *, b
-+ b = 0
-+!$omp parallel do simd schedule(static, 4) safelen (8) &
-+!$omp num_threads (4) if (.true.) reduction (+:b)
-+ do i = 1, 64
-+ a(i) = a(i) + 1
-+ b = b + 1
-+ end do
-+!$omp end parallel do simd
-+!$omp atomic seq_cst
-+ b = b + 1
-+!$omp end atomic
-+!$omp barrier
-+!$omp parallel private (i)
-+!$omp cancellation point parallel
-+!$omp critical (bar)
-+ b = b + 1
-+!$omp end critical (bar)
-+!$omp flush(b)
-+!$omp single
-+ b = b + 1
-+!$omp end single
-+!$omp do ordered
-+ do i = 1, 10
-+ !$omp atomic
-+ b = b + 1
-+ !$omp end atomic
-+ !$omp ordered
-+ print *, b
-+ !$omp end ordered
-+ end do
-+!$omp end do
-+!$omp master
-+ b = b + 1
-+!$omp end master
-+!$omp cancel parallel
-+!$omp end parallel
-+!$omp parallel do schedule(runtime) num_threads(8)
-+ do i = 1, 10
-+ print *, b
-+ end do
-+!$omp end parallel do
-+!$omp sections
-+!$omp section
-+ b = b + 1
-+!$omp section
-+ c = c + 1
-+!$omp end sections
-+ print *, b
-+!$omp parallel sections firstprivate (b) if (.true.)
-+!$omp section
-+ b = b + 1
-+!$omp section
-+ c = c + 1
-+!$omp endparallelsections
-+!$omp workshare
-+ b = 24
-+!$omp end workshare
-+!$omp parallel workshare num_threads (2)
-+ b = b + 1
-+ c = c + 1
-+!$omp end parallel workshare
-+ print *, b
-+!$omp parallel
-+!$omp single
-+!$omp taskgroup
-+!$omp task firstprivate (b)
-+ b = b + 1
-+!$omp taskyield
-+!$omp end task
-+!$omp task firstprivate (b)
-+ b = b + 1
-+!$omp end task
-+!$omp taskwait
-+!$omp end taskgroup
-+!$omp end single
-+!$omp end parallel
-+ print *, a, c
-+end
-+
-+! { dg-final { scan-tree-dump-times "pragma omp simd" 6 "original" } }
-+! { dg-final { scan-tree-dump-times "pragma omp" 6 "original" } }
-+! { dg-final { scan-tree-dump-times "__builtin_GOMP" 0 "original" } }
-+! { dg-final { cleanup-tree-dump "original" } }
-Index: gcc/testsuite/gfortran.dg/gomp/openmp-simd-2.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/gomp/openmp-simd-2.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/gomp/openmp-simd-2.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,28 @@
-+! { dg-do compile }
-+! { dg-options "-fopenmp -fopenmp-simd -fdump-tree-original -O2" }
-+
-+include 'openmp-simd-1.f90'
-+
-+! { dg-final { scan-tree-dump-times "pragma omp simd" 6 "original" } }
-+! { dg-final { scan-tree-dump-times "pragma omp" 39 "original" } }
-+! { dg-final { scan-tree-dump-times "pragma omp for" 6 "original" } }
-+! { dg-final { scan-tree-dump-times "pragma omp parallel" 9 "original" } }
-+! { dg-final { scan-tree-dump-times "pragma omp taskgroup" 1 "original" } }
-+! Includes the above taskgroup
-+! { dg-final { scan-tree-dump-times "pragma omp task" 3 "original" } }
-+! { dg-final { scan-tree-dump-times "pragma omp critical" 1 "original" } }
-+! { dg-final { scan-tree-dump-times "pragma omp atomic" 2 "original" } }
-+! { dg-final { scan-tree-dump-times "pragma omp sections" 2 "original" } }
-+! Includes the above sections
-+! { dg-final { scan-tree-dump-times "pragma omp section" 6 "original" } }
-+! { dg-final { scan-tree-dump-times "pragma omp single" 4 "original" } }
-+! { dg-final { scan-tree-dump-times "pragma omp ordered" 1 "original" } }
-+! { dg-final { scan-tree-dump-times "pragma omp master" 1 "original" } }
-+! { dg-final { scan-tree-dump-times "__builtin_GOMP" 5 "original" } }
-+! { dg-final { scan-tree-dump-times "__builtin_GOMP_barrier" 1 "original" } }
-+! { dg-final { scan-tree-dump-times "__builtin_GOMP_cancellation_point" 1 "original" } }
-+! Includes the above cancellation point
-+! { dg-final { scan-tree-dump-times "__builtin_GOMP_cancel" 2 "original" } }
-+! { dg-final { scan-tree-dump-times "__builtin_GOMP_taskyield" 1 "original" } }
-+! { dg-final { scan-tree-dump-times "__builtin_GOMP_taskwait" 1 "original" } }
-+! { dg-final { cleanup-tree-dump "original" } }
-Index: gcc/testsuite/gfortran.dg/gomp/openmp-simd-3.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/gomp/openmp-simd-3.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/gomp/openmp-simd-3.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,28 @@
-+! { dg-do compile }
-+! { dg-options "-fopenmp -fno-openmp-simd -fdump-tree-original -O2" }
-+
-+include 'openmp-simd-1.f90'
-+
-+! { dg-final { scan-tree-dump-times "pragma omp simd" 6 "original" } }
-+! { dg-final { scan-tree-dump-times "pragma omp" 39 "original" } }
-+! { dg-final { scan-tree-dump-times "pragma omp for" 6 "original" } }
-+! { dg-final { scan-tree-dump-times "pragma omp parallel" 9 "original" } }
-+! { dg-final { scan-tree-dump-times "pragma omp taskgroup" 1 "original" } }
-+! Includes the above taskgroup
-+! { dg-final { scan-tree-dump-times "pragma omp task" 3 "original" } }
-+! { dg-final { scan-tree-dump-times "pragma omp critical" 1 "original" } }
-+! { dg-final { scan-tree-dump-times "pragma omp atomic" 2 "original" } }
-+! { dg-final { scan-tree-dump-times "pragma omp sections" 2 "original" } }
-+! Includes the above sections
-+! { dg-final { scan-tree-dump-times "pragma omp section" 6 "original" } }
-+! { dg-final { scan-tree-dump-times "pragma omp single" 4 "original" } }
-+! { dg-final { scan-tree-dump-times "pragma omp ordered" 1 "original" } }
-+! { dg-final { scan-tree-dump-times "pragma omp master" 1 "original" } }
-+! { dg-final { scan-tree-dump-times "__builtin_GOMP" 5 "original" } }
-+! { dg-final { scan-tree-dump-times "__builtin_GOMP_barrier" 1 "original" } }
-+! { dg-final { scan-tree-dump-times "__builtin_GOMP_cancellation_point" 1 "original" } }
-+! Includes the above cancellation point
-+! { dg-final { scan-tree-dump-times "__builtin_GOMP_cancel" 2 "original" } }
-+! { dg-final { scan-tree-dump-times "__builtin_GOMP_taskyield" 1 "original" } }
-+! { dg-final { scan-tree-dump-times "__builtin_GOMP_taskwait" 1 "original" } }
-+! { dg-final { cleanup-tree-dump "original" } }
-Index: gcc/testsuite/gfortran.dg/gomp/depend-1.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/gomp/depend-1.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/gomp/depend-1.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,13 @@
-+! { dg-do compile }
-+
-+subroutine foo (x)
-+ integer :: x(5, *)
-+!$omp parallel
-+!$omp single
-+!$omp task depend(in:x(:,5))
-+!$omp end task
-+!$omp task depend(in:x(5,:)) ! { dg-error "Rightmost upper bound of assumed size array section|proper array section" }
-+!$omp end task
-+!$omp end single
-+!$omp end parallel
-+end
-Index: gcc/testsuite/gfortran.dg/gomp/affinity-1.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/gomp/affinity-1.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/gomp/affinity-1.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,19 @@
-+ integer :: i, j
-+ integer, dimension (10, 10) :: a
-+!$omp parallel do default(none)proc_bind(master)shared(a)
-+ do i = 1, 10
-+ j = 4
-+ do j = 1, 10
-+ a(i, j) = i + j
-+ end do
-+ j = 8
-+ end do
-+!$omp end parallel do
-+!$omp parallel proc_bind (close)
-+!$omp parallel default(none) proc_bind (spread) firstprivate(a) private (i)
-+ do i = 1, 10
-+ a(i, i) = i
-+ enddo
-+!$omp end parallel
-+!$omp endparallel
-+end
-Index: gcc/testsuite/gfortran.dg/gomp/intentin1.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/gomp/intentin1.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/gomp/intentin1.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,16 @@
-+! { dg-do compile }
-+
-+subroutine foo (x)
-+ integer, pointer, intent (in) :: x
-+ integer :: i
-+!$omp parallel private (x) ! { dg-error "INTENT.IN. POINTER" }
-+!$omp end parallel
-+!$omp parallel do lastprivate (x) ! { dg-error "INTENT.IN. POINTER" }
-+ do i = 1, 10
-+ end do
-+!$omp simd linear (x) ! { dg-error "INTENT.IN. POINTER" }
-+ do i = 1, 10
-+ end do
-+!$omp single ! { dg-error "INTENT.IN. POINTER" }
-+!$omp end single copyprivate (x)
-+end
-Index: gcc/testsuite/gfortran.dg/gomp/omp_do_concurrent.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/gomp/omp_do_concurrent.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/gomp/omp_do_concurrent.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,13 @@
-+! { dg-do compile }
-+! { dg-options "-fopenmp" }
-+!
-+! PR fortran/60127
-+!
-+! OpenMP 4.0 doesn't permit DO CONCURRENT (yet)
-+!
-+
-+!$omp do
-+do concurrent(i=1:5) ! { dg-error "OMP DO cannot be a DO CONCURRENT loop" }
-+print *, 'Hello'
-+end do
-+end
-Index: gcc/testsuite/gfortran.dg/gomp/proc_ptr_2.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/gomp/proc_ptr_2.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/gomp/proc_ptr_2.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,14 @@
-+! { dg-do compile }
-+ procedure(foo), pointer :: ptr
-+ integer :: i
-+ ptr => foo
-+!$omp do reduction (+ : ptr) ! { dg-error "Procedure pointer|not found" }
-+ do i = 1, 10
-+ end do
-+!$omp simd linear (ptr) ! { dg-error "must be INTEGER" }
-+ do i = 1, 10
-+ end do
-+contains
-+ subroutine foo
-+ end subroutine
-+end
-Index: gcc/testsuite/gfortran.dg/gomp/udr1.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/gomp/udr1.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/gomp/udr1.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,41 @@
-+! { dg-do compile }
-+
-+subroutine f1
-+!$omp declare reduction (.le.:integer:omp_out = omp_out + omp_in) ! { dg-error "Invalid operator for" }
-+end subroutine f1
-+subroutine f2
-+!$omp declare reduction (bar:real(kind=4):omp_out = omp_out + omp_in)
-+ real(kind=4) :: r
-+ integer :: i
-+ r = 0.0
-+!$omp parallel do reduction (bar:r)
-+ do i = 1, 10
-+ r = r + i
-+ end do
-+!$omp parallel do reduction (foo:r) ! { dg-error "foo not found" }
-+ do i = 1, 10
-+ r = r + i
-+ end do
-+!$omp parallel do reduction (.gt.:r) ! { dg-error "cannot be used as a defined operator" }
-+ do i = 1, 10
-+ r = r + i
-+ end do
-+end subroutine f2
-+subroutine f3
-+!$omp declare reduction (foo:blah:omp_out=omp_out + omp_in) ! { dg-error "Unclassifiable OpenMP directive" }
-+end subroutine f3
-+subroutine f4
-+!$omp declare reduction (foo:integer:a => null()) ! { dg-error "Invalid character in name" }
-+!$omp declare reduction (foo:integer:omp_out = omp_in + omp_out) &
-+!$omp & initializer(a => null()) ! { dg-error "Invalid character in name" }
-+end subroutine f4
-+subroutine f5
-+ integer :: a, b
-+!$omp declare reduction (foo:integer:a = b + 1) ! { dg-error "Variable other than OMP_OUT or OMP_IN used in combiner" }
-+!$omp declare reduction (bar:integer:omp_out = omp_out * omp_in) &
-+!$omp & initializer(b = a + 1) ! { dg-error "Variable other than OMP_PRIV or OMP_ORIG used in INITIALIZER clause" }
-+end subroutine f5
-+subroutine f6
-+!$omp declare reduction (foo:integer:omp_out=omp_out+omp_in) &
-+!$omp & initializer(omp_orig=omp_priv)
-+end subroutine f6
-Index: gcc/testsuite/gfortran.dg/gomp/udr2.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/gomp/udr2.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/gomp/udr2.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,53 @@
-+! { dg-do compile }
-+
-+subroutine f6
-+!$omp declare reduction (foo:real:omp_out (omp_in)) ! { dg-error "Unclassifiable OpenMP directive" }
-+!$omp declare reduction (bar:real:omp_out = omp_in * omp_out) & ! { dg-error "Unclassifiable OpenMP directive" }
-+!$omp & initializer (omp_priv (omp_orig))
-+end subroutine f6
-+subroutine f7
-+ integer :: a
-+!$omp declare reduction (foo:integer:a (omp_out, omp_in)) ! { dg-error "Unclassifiable OpenMP directive" }
-+!$omp declare reduction (bar:real:omp_out = omp_out.or.omp_in) ! { dg-error "Operands of logical operator" }
-+!$omp declare reduction (baz:real:omp_out = omp_out + omp_in)
-+!$omp & initializer (a (omp_priv, omp_orig)) ! { dg-error "Unclassifiable OpenMP directive" }
-+ real :: r
-+ r = 0.0
-+!$omp parallel reduction (bar:r)
-+!$omp end parallel
-+end subroutine f7
-+subroutine f8
-+ interface
-+ subroutine f8a (x)
-+ integer :: x
-+ end subroutine f8a
-+ end interface
-+!$omp declare reduction (baz:integer:omp_out = omp_out + omp_in) &
-+!$omp & initializer (f8a (omp_orig)) ! { dg-error "One of actual subroutine arguments in INITIALIZER clause" }
-+!$omp declare reduction (foo:integer:f8a) ! { dg-error "is not a variable" }
-+!$omp declare reduction (bar:integer:omp_out = omp_out - omp_in) &
-+!$omp & initializer (f8a) ! { dg-error "is not a variable" }
-+end subroutine f8
-+subroutine f9
-+ type dt ! { dg-error "which is not consistent with the CALL" }
-+ integer :: x = 0
-+ integer :: y = 0
-+ end type dt
-+ integer :: i
-+!$omp declare reduction (foo:integer:dt (omp_out, omp_in)) ! { dg-error "which is not consistent with the CALL" }
-+!$omp declare reduction (bar:integer:omp_out = omp_out + omp_in) &
-+!$omp & initializer (dt (omp_priv, omp_orig)) ! { dg-error "which is not consistent with the CALL" }
-+ i = 0
-+!$omp parallel reduction (foo : i)
-+!$omp end parallel
-+!$omp parallel reduction (bar : i)
-+!$omp end parallel
-+end subroutine f9
-+subroutine f10
-+ integer :: a, b
-+!$omp declare reduction(foo:character(len=64) &
-+!$omp & :omp_out(a:b) = omp_in(a:b)) ! { dg-error "Variable other than OMP_OUT or OMP_IN used in combiner" }
-+!$omp declare reduction(bar:character(len=16) &
-+!$omp & :omp_out = trim(omp_out) // omp_in) &
-+!$omp & initializer (omp_priv(a:b) = ' ') ! { dg-error "Variable other than OMP_PRIV or OMP_ORIG used in INITIALIZER clause" }
-+end subroutine f10
-Index: gcc/testsuite/gfortran.dg/gomp/udr3.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/gomp/udr3.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/gomp/udr3.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,75 @@
-+! { dg-do compile }
-+
-+subroutine f1
-+ type dt
-+ logical :: l = .false.
-+ end type
-+ type dt2
-+ logical :: l = .false.
-+ end type
-+!$omp declare reduction (foo:integer(kind = 4) & ! { dg-error "Previous !.OMP DECLARE REDUCTION" }
-+!$omp & :omp_out = omp_out + omp_in)
-+!$omp declare reduction (foo:integer(kind = 4) : & ! { dg-error "Redefinition of !.OMP DECLARE REDUCTION" }
-+!$omp & omp_out = omp_out + omp_in)
-+!$omp declare reduction (bar:integer, &
-+!$omp & real:omp_out = omp_out + omp_in)
-+!$omp declare reduction (baz:integer,real,integer & ! { dg-error "Redefinition of !.OMP DECLARE REDUCTION|Previous" }
-+!$omp & : omp_out = omp_out + omp_in)
-+!$omp declare reduction (id1:dt,dt2:omp_out%l=omp_out%l &
-+!$omp & .or.omp_in%l)
-+!$omp declare reduction (id2:dt,dt:omp_out%l=omp_out%l & ! { dg-error "Redefinition of !.OMP DECLARE REDUCTION|Previous" }
-+!$omp & .or.omp_in%l)
-+!$omp declare reduction (id3:dt2,dt:omp_out%l=omp_out%l & ! { dg-error "Previous !.OMP DECLARE REDUCTION" }
-+!$omp & .or.omp_in%l)
-+!$omp declare reduction (id3:dt2:omp_out%l=omp_out%l & ! { dg-error "Redefinition of !.OMP DECLARE REDUCTION" }
-+!$omp & .or.omp_in%l)
-+end subroutine f1
-+subroutine f2
-+ interface
-+ subroutine f2a (x, y, z)
-+ character (len = *) :: x, y
-+ logical :: z
-+ end subroutine
-+ end interface
-+ interface f2b
-+ subroutine f2b (x, y, z)
-+ character (len = *, kind = 1) :: x, y
-+ logical :: z
-+ end subroutine
-+ subroutine f2c (x, y, z)
-+ character (kind = 4, len = *) :: x, y
-+ logical :: z
-+ end subroutine
-+ end interface
-+!$omp declare reduction (foo:character(len=*): &
-+!$omp & f2a (omp_out, omp_in, .false.)) &
-+!$omp & initializer (f2a (omp_priv, omp_orig, .true.))
-+!$omp declare reduction (bar:character(len=:): &
-+!$omp & f2a (omp_out, omp_in, .false.)) &
-+!$omp & initializer (f2a (omp_priv, omp_orig, .true.))
-+!$omp declare reduction (baz:character(len=4): &
-+!$omp & f2a (omp_out, omp_in, .false.)) &
-+!$omp & initializer (f2a (omp_priv, omp_orig, .true.))
-+!$omp declare reduction (baz:character(len=5): &
-+!$omp & f2a (omp_out, omp_in, .false.)) &
-+!$omp & initializer (f2a (omp_priv, omp_orig, .true.))
-+!$omp declare reduction (baz:character(len=6): &
-+!$omp & f2a (omp_out, omp_in, .false.)) &
-+!$omp & initializer (f2a (omp_priv, omp_orig, .true.))
-+!$omp declare reduction (id:character(len=*): & ! { dg-error "Previous !.OMP DECLARE REDUCTION" }
-+!$omp & f2a (omp_out, omp_in, .false.)) &
-+!$omp & initializer (f2a (omp_priv, omp_orig, .true.))
-+!$omp declare reduction (id: & ! { dg-error "Redefinition of !.OMP DECLARE REDUCTION" }
-+!$omp & character(len=:) : f2a (omp_out, omp_in, .false.)) &
-+!$omp & initializer (f2a (omp_priv, omp_orig, .true.))
-+!$omp declare reduction & ! { dg-error "Redefinition of !.OMP DECLARE REDUCTION|Previous" }
-+!$omp (id2:character(len=*), character(len=:): &
-+!$omp f2a (omp_out, omp_in, .false.)) &
-+!$omp & initializer (f2a (omp_priv, omp_orig, .true.))
-+!$omp declare reduction (id3:character(len=*, kind = 1), character(kind=4, len=:): &
-+!$omp f2b (omp_out, omp_in, .false.)) &
-+!$omp & initializer (f2b (omp_priv, omp_orig, .true.))
-+!$omp declare reduction (id4:character(kind=4, len=4), character(kind =1, len=4): &
-+!$omp f2b (omp_out, omp_in, .false.)) &
-+!$omp & initializer (f2b (omp_priv, omp_orig, .true.))
-+end subroutine f2
-Index: gcc/testsuite/gfortran.dg/gomp/udr4.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/gomp/udr4.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/gomp/udr4.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,74 @@
-+! { dg-do compile }
-+
-+subroutine f3
-+!$omp declare reduction ! { dg-error "Unclassifiable OpenMP directive" }
-+!$omp declare reduction foo ! { dg-error "Unclassifiable OpenMP directive" }
-+!$omp declare reduction (foo) ! { dg-error "Unclassifiable OpenMP directive" }
-+!$omp declare reduction (foo:integer) ! { dg-error "Unclassifiable OpenMP directive" }
-+!$omp declare reduction (foo:integer:omp_out=omp_out+omp_in) &
-+!$omp & initializer(omp_priv=0) initializer(omp_priv=0) ! { dg-error "Unexpected junk after" }
-+end subroutine f3
-+subroutine f4
-+ implicit integer (o)
-+ implicit real (b)
-+!$omp declare reduction (foo:integer:omp_priv(omp_out,omp_in)) ! { dg-error "Implicitly declared subroutine omp_priv" }
-+!$omp declare reduction (foo:real:bar(omp_out,omp_in)) ! { dg-error "Implicitly declared subroutine bar used" }
-+!$omp declare reduction (bar:integer:omp_out=omp_out+omp_in) &
-+!$omp & initializer(omp_out (omp_priv)) ! { dg-error "Implicitly declared subroutine omp_out used" }
-+!$omp declare reduction (bar:real:omp_out=omp_out+omp_in) &
-+!$omp & initializer(bar (omp_priv, omp_orig)) ! { dg-error "Implicitly declared subroutine bar used" }
-+!$omp declare reduction (id1:integer:omp_out=omp_orig(omp_out,omp_in)) ! { dg-error "Implicitly declared function omp_orig used" }
-+!$omp declare reduction (id1:real:omp_out=foo(omp_out,omp_in)) ! { dg-error "Implicitly declared function foo used" }
-+!$omp declare reduction (id2:integer:omp_out=omp_out+omp_in) &
-+!$omp & initializer(omp_priv = omp_in (omp_orig)) ! { dg-error "Implicitly declared function omp_in used" }
-+!$omp declare reduction (id2:real:omp_out=omp_out+omp_in) &
-+!$omp & initializer(omp_priv = baz (omp_orig)) ! { dg-error "Implicitly declared function baz used" }
-+ integer :: i
-+ real :: r
-+ i = 0
-+ r = 0
-+!$omp parallel reduction (foo: i, r)
-+!$omp end parallel
-+!$omp parallel reduction (bar: i, r)
-+!$omp end parallel
-+!$omp parallel reduction (id1: i, r)
-+!$omp end parallel
-+!$omp parallel reduction (id2: i, r)
-+!$omp end parallel
-+end subroutine f4
-+subroutine f5
-+ interface
-+ subroutine f5a (x, *, y)
-+ double precision :: x, y
-+ end subroutine f5a
-+ end interface
-+!$omp declare reduction (foo:double precision: & ! { dg-error "Subroutine call with alternate returns in combiner" }
-+!$omp & f5a (omp_out, *10, omp_in))
-+!$omp declare reduction (bar:double precision: &
-+!$omp omp_out = omp_in + omp_out) &
-+!$omp & initializer (f5a (omp_priv, *20, omp_orig)) ! { dg-error "Subroutine call with alternate returns in INITIALIZER clause" }
-+10 continue
-+20 continue
-+end subroutine f5
-+subroutine f6
-+ integer :: a
-+!$omp declare reduction(foo:character(len=a*2) & ! { dg-error "cannot appear in the expression|not constant" }
-+!$omp & :omp_out=trim(omp_out)//omp_in) &
-+!$omp & initializer(omp_priv=' ')
-+end subroutine f6
-+subroutine f7
-+ type dt1
-+ integer :: a = 1
-+ integer :: b
-+ end type
-+ type dt2
-+ integer :: a = 2
-+ integer :: b = 3
-+ end type
-+ type dt3
-+ integer :: a
-+ integer :: b
-+ end type dt3
-+!$omp declare reduction(foo:dt1,dt2:omp_out%a=omp_out%a+omp_in%a)
-+!$omp declare reduction(foo:dt3:omp_out%a=omp_out%a+omp_in%a) ! { dg-error "Missing INITIALIZER clause for !.OMP DECLARE REDUCTION of derived type without default initializer" }
-+end subroutine f7
-Index: gcc/testsuite/gfortran.dg/gomp/udr5.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/gomp/udr5.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/gomp/udr5.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,59 @@
-+! { dg-do compile }
-+
-+module udr5m1
-+ type dt
-+ real :: r
-+ end type dt
-+end module udr5m1
-+module udr5m2
-+ use udr5m1
-+ interface operator(+)
-+ module procedure addm2
-+ end interface
-+!$omp declare reduction(+:dt:omp_out=omp_out+omp_in) &
-+!$omp & initializer(omp_priv=dt(0.0))
-+!$omp declare reduction(.myadd.:dt:omp_out=omp_out.myadd.omp_in) &
-+!$omp & initializer(omp_priv=dt(0.0))
-+ interface operator(.myadd.)
-+ module procedure addm2
-+ end interface
-+contains
-+ type(dt) function addm2 (x, y)
-+ type(dt), intent (in):: x, y
-+ addm2%r = x%r + y%r
-+ end function
-+end module udr5m2
-+module udr5m3
-+ use udr5m1
-+ interface operator(.myadd.)
-+ module procedure addm3
-+ end interface
-+!$omp declare reduction(+:dt:omp_out=omp_out+omp_in) &
-+!$omp & initializer(omp_priv=dt(0.0))
-+!$omp declare reduction(.myadd.:dt:omp_out=omp_out.myadd.omp_in) &
-+!$omp & initializer(omp_priv=dt(0.0))
-+ interface operator(+)
-+ module procedure addm3
-+ end interface
-+contains
-+ type(dt) function addm3 (x, y)
-+ type(dt), intent (in):: x, y
-+ addm3%r = x%r + y%r
-+ end function
-+end module udr5m3
-+subroutine f1
-+ use udr5m2
-+ type(dt) :: d, e
-+ integer :: i
-+ d=dt(0.0)
-+ e = dt (0.0)
-+!$omp parallel do reduction (+ : d) reduction ( .myadd. : e)
-+ do i=1,100
-+ d=d+dt(i)
-+ e=e+dt(i)
-+ end do
-+end subroutine f1
-+subroutine f2
-+ use udr5m3 ! { dg-error "Previous !.OMP DECLARE REDUCTION|Ambiguous interfaces" }
-+ use udr5m2 ! { dg-error "Ambiguous !.OMP DECLARE REDUCTION" }
-+end subroutine f2
-Index: gcc/testsuite/gfortran.dg/gomp/udr6.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/gomp/udr6.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/gomp/udr6.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,205 @@
-+! { dg-do compile }
-+! { dg-options "-fmax-errors=1000 -fopenmp -ffree-line-length-160" }
-+
-+module udr6
-+ type dt
-+ integer :: i
-+ end type
-+end module udr6
-+subroutine f1
-+ use udr6, only : dt
-+!$omp declare reduction (+:integer:omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (+:real(kind=4):omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (+:double precision:omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (+:integer(kind=8),integer(kind=1) & ! { dg-error "Redefinition of predefined" }
-+!$omp & :omp_out = omp_out + omp_in)
-+!$omp declare reduction (+:complex:omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (+:complex(kind=8):omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" }
-+ interface operator(+)
-+ function addf1 (x, y)
-+ use udr6, only : dt
-+ type(dt), intent (in) :: x, y
-+ type(dt) :: addf1
-+ end function
-+ end interface
-+end subroutine f1
-+subroutine f2
-+ use udr6, only : dt
-+ interface operator(-)
-+ function subf2 (x, y)
-+ use udr6, only : dt
-+ type(dt), intent (in) :: x, y
-+ type(dt) :: subf2
-+ end function
-+ end interface
-+!$omp declare reduction (-:integer:omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (-:real(kind=4):omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (-:double precision:omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (-:integer(kind=8),integer(kind=1) & ! { dg-error "Redefinition of predefined" }
-+!$omp & :omp_out = omp_out + omp_in)
-+!$omp declare reduction (-:complex:omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (-:complex(kind=8):omp_out = omp_out + omp_in) ! { dg-error "Redefinition of predefined" }
-+end subroutine f2
-+subroutine f3
-+ use udr6, only : dt
-+ interface operator(*)
-+ function mulf3 (x, y)
-+ use udr6, only : dt
-+ type(dt), intent (in) :: x, y
-+ type(dt) :: mulf3
-+ end function
-+ end interface
-+!$omp declare reduction (*:integer:omp_out = omp_out * omp_in) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (*:real(kind=4):omp_out = omp_out * omp_in) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (*:double precision:omp_out = omp_out * omp_in) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (*:integer(kind=8),integer(kind=1) & ! { dg-error "Redefinition of predefined" }
-+!$omp & :omp_out = omp_out * omp_in)
-+!$omp declare reduction (*:complex:omp_out = omp_out * omp_in) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (*:complex(kind=8):omp_out = omp_out * omp_in) ! { dg-error "Redefinition of predefined" }
-+end subroutine f3
-+subroutine f4
-+ use udr6, only : dt
-+ interface operator(.and.)
-+ function andf4 (x, y)
-+ use udr6, only : dt
-+ type(dt), intent (in) :: x, y
-+ type(dt) :: andf4
-+ end function
-+ end interface
-+!$omp declare reduction (.neqv.:logical:omp_out = omp_out .or. omp_in) ! { dg-error "Redefinition of predefined" }
-+ interface operator(.or.)
-+ function orf4 (x, y)
-+ use udr6, only : dt
-+ type(dt), intent (in) :: x, y
-+ type(dt) :: orf4
-+ end function
-+ end interface
-+!$omp declare reduction (.eqv.:logical:omp_out = omp_out .or. omp_in) ! { dg-error "Redefinition of predefined" }
-+ interface operator(.eqv.)
-+ function eqvf4 (x, y)
-+ use udr6, only : dt
-+ type(dt), intent (in) :: x, y
-+ type(dt) :: eqvf4
-+ end function
-+ end interface
-+!$omp declare reduction (.or.:logical:omp_out = omp_out .or. omp_in) ! { dg-error "Redefinition of predefined" }
-+ interface operator(.neqv.)
-+ function neqvf4 (x, y)
-+ use udr6, only : dt
-+ type(dt), intent (in) :: x, y
-+ type(dt) :: neqvf4
-+ end function
-+ end interface
-+!$omp declare reduction (.and.:logical:omp_out = omp_out .and. omp_in) ! { dg-error "Redefinition of predefined" }
-+end subroutine f4
-+subroutine f5
-+ use udr6, only : dt
-+ interface operator(.and.)
-+ function andf5 (x, y)
-+ use udr6, only : dt
-+ type(dt), intent (in) :: x, y
-+ type(dt) :: andf5
-+ end function
-+ end interface
-+!$omp declare reduction (.neqv.:logical(kind =4):omp_out = omp_out .neqv. omp_in) ! { dg-error "Redefinition of predefined" }
-+ interface operator(.or.)
-+ function orf5 (x, y)
-+ use udr6, only : dt
-+ type(dt), intent (in) :: x, y
-+ type(dt) :: orf5
-+ end function
-+ end interface
-+!$omp declare reduction (.eqv.:logical(kind= 4):omp_out = omp_out .eqv. omp_in) ! { dg-error "Redefinition of predefined" }
-+ interface operator(.eqv.)
-+ function eqvf5 (x, y)
-+ use udr6, only : dt
-+ type(dt), intent (in) :: x, y
-+ type(dt) :: eqvf5
-+ end function
-+ end interface
-+!$omp declare reduction (.or.:logical(kind=4):omp_out = omp_out .or. omp_in) ! { dg-error "Redefinition of predefined" }
-+ interface operator(.neqv.)
-+ function neqvf5 (x, y)
-+ use udr6, only : dt
-+ type(dt), intent (in) :: x, y
-+ type(dt) :: neqvf5
-+ end function
-+ end interface
-+!$omp declare reduction (.and.:logical(kind = 4):omp_out = omp_out .and. omp_in) ! { dg-error "Redefinition of predefined" }
-+end subroutine f5
-+subroutine f6
-+!$omp declare reduction (min:integer:omp_out = min (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (max:integer:omp_out = max (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (iand:integer:omp_out = iand (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (ior:integer:omp_out = ior (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (ieor:integer:omp_out = ieor (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (min:real:omp_out = min (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (max:real:omp_out = max (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (min:double precision:omp_out = min (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (max:double precision:omp_out = max (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
-+end subroutine f6
-+subroutine f7
-+!$omp declare reduction (min:integer(kind=2):omp_out = min (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (max:integer(kind=4):omp_out = max (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (iand:integer(kind=1):omp_out = iand (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (ior:integer(kind=8):omp_out = ior (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (ieor:integer(kind=4):omp_out = ieor (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (min:real(kind=4):omp_out = min (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (max:real(kind=4):omp_out = max (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (min:double precision:omp_out = min (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
-+!$omp declare reduction (max:double precision:omp_out = max (omp_out, omp_in)) ! { dg-error "Redefinition of predefined" }
-+end subroutine f7
-+subroutine f8
-+ integer :: min
-+!$omp declare reduction (min:integer:omp_out = omp_out + omp_in)
-+!$omp declare reduction (min:real:omp_out = omp_out + omp_in)
-+!$omp declare reduction (min:double precision:omp_out = omp_out + omp_in)
-+end subroutine f8
-+subroutine f9
-+ integer :: max
-+!$omp declare reduction (max:integer:omp_out = omp_out + omp_in)
-+!$omp declare reduction (max:real:omp_out = omp_out + omp_in)
-+!$omp declare reduction (max:double precision:omp_out = omp_out + omp_in)
-+end subroutine f9
-+subroutine f10
-+ integer :: iand
-+!$omp declare reduction (iand:integer:omp_out = omp_out + omp_in)
-+!$omp declare reduction (iand:real:omp_out = omp_out + omp_in)
-+end subroutine f10
-+subroutine f11
-+ integer :: ior
-+!$omp declare reduction (ior:integer:omp_out = omp_out + omp_in)
-+!$omp declare reduction (ior:real:omp_out = omp_out + omp_in)
-+end subroutine f11
-+subroutine f12
-+ integer :: ieor
-+!$omp declare reduction (ieor:integer:omp_out = omp_out + omp_in)
-+!$omp declare reduction (ieor:real:omp_out = omp_out + omp_in)
-+end subroutine f12
-+subroutine f13
-+!$omp declare reduction (min:integer:omp_out = omp_out + omp_in)
-+!$omp declare reduction (min:real:omp_out = omp_out + omp_in)
-+!$omp declare reduction (min:double precision:omp_out = omp_out + omp_in)
-+ integer :: min
-+end subroutine f13
-+subroutine f14
-+!$omp declare reduction (max:integer:omp_out = omp_out + omp_in)
-+!$omp declare reduction (max:real:omp_out = omp_out + omp_in)
-+!$omp declare reduction (max:double precision:omp_out = omp_out + omp_in)
-+ integer :: max
-+end subroutine f14
-+subroutine f15
-+!$omp declare reduction (iand:integer:omp_out = omp_out + omp_in)
-+!$omp declare reduction (iand:real:omp_out = omp_out + omp_in)
-+ integer :: iand
-+end subroutine f15
-+subroutine f16
-+!$omp declare reduction (ior:integer:omp_out = omp_out + omp_in)
-+!$omp declare reduction (ior:real:omp_out = omp_out + omp_in)
-+ integer :: ior
-+end subroutine f16
-+subroutine f17
-+!$omp declare reduction (ieor:integer:omp_out = omp_out + omp_in)
-+!$omp declare reduction (ieor:real:omp_out = omp_out + omp_in)
-+ integer :: ieor
-+end subroutine f17
-Index: gcc/testsuite/gfortran.dg/gomp/udr7.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/gomp/udr7.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/gomp/udr7.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,90 @@
-+! { dg-do compile }
-+
-+module udr7m1
-+ type dt
-+ real :: r
-+ end type dt
-+end module udr7m1
-+module udr7m2
-+ use udr7m1
-+ interface operator(+)
-+ module procedure addm2
-+ end interface
-+!$omp declare reduction(+:dt:omp_out=omp_out+omp_in) &
-+!$omp & initializer(omp_priv=dt(0.0))
-+!$omp declare reduction(.myadd.:dt:omp_out=omp_out.myadd.omp_in) &
-+!$omp & initializer(omp_priv=dt(0.0))
-+ interface operator(.myadd.)
-+ module procedure addm2
-+ end interface
-+ private
-+ public :: operator(+), operator(.myadd.), dt
-+contains
-+ type(dt) function addm2 (x, y)
-+ type(dt), intent (in):: x, y
-+ addm2%r = x%r + y%r
-+ end function
-+end module udr7m2
-+module udr7m3
-+ use udr7m1
-+ private
-+ public :: operator(.myadd.), operator(+), dt
-+ interface operator(.myadd.)
-+ module procedure addm3
-+ end interface
-+!$omp declare reduction(+:dt:omp_out=omp_out+omp_in) &
-+!$omp & initializer(omp_priv=dt(0.0))
-+!$omp declare reduction(.myadd.:dt:omp_out=omp_out.myadd.omp_in) &
-+!$omp & initializer(omp_priv=dt(0.0))
-+ interface operator(+)
-+ module procedure addm3
-+ end interface
-+contains
-+ type(dt) function addm3 (x, y)
-+ type(dt), intent (in):: x, y
-+ addm3%r = x%r + y%r
-+ end function
-+end module udr7m3
-+module udr7m4
-+ use udr7m1
-+ private
-+ interface operator(.myadd.)
-+ module procedure addm4
-+ end interface
-+!$omp declare reduction(+:dt:omp_out=omp_out+omp_in) &
-+!$omp & initializer(omp_priv=dt(0.0))
-+!$omp declare reduction(.myadd.:dt:omp_out=omp_out.myadd.omp_in) &
-+!$omp & initializer(omp_priv=dt(0.0))
-+ interface operator(+)
-+ module procedure addm4
-+ end interface
-+contains
-+ type(dt) function addm4 (x, y)
-+ type(dt), intent (in):: x, y
-+ addm4%r = x%r + y%r
-+ end function
-+end module udr7m4
-+subroutine f1
-+ use udr7m2
-+ type(dt) :: d, e
-+ integer :: i
-+ d=dt(0.0)
-+ e = dt (0.0)
-+!$omp parallel do reduction (+ : d) reduction ( .myadd. : e)
-+ do i=1,100
-+ d=d+dt(i)
-+ e=e+dt(i)
-+ end do
-+end subroutine f1
-+subroutine f2
-+ use udr7m3 ! { dg-error "Previous !.OMP DECLARE REDUCTION|Ambiguous interfaces" }
-+ use udr7m2 ! { dg-error "Ambiguous !.OMP DECLARE REDUCTION" }
-+end subroutine f2
-+subroutine f3
-+ use udr7m4
-+ use udr7m2
-+end subroutine f3
-+subroutine f4
-+ use udr7m3
-+ use udr7m4
-+end subroutine f4
-Index: gcc/testsuite/gfortran.dg/cray_pointers_10.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/cray_pointers_10.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/cray_pointers_10.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,18 @@
-+! { dg-do run }
-+! { dg-options "-fcray-pointer" }
-+!
-+! PR fortran/45187
-+!
-+module foo
-+ implicit none
-+ real :: a
-+ pointer(c_a, a)
-+end module foo
-+
-+program test
-+ use foo
-+ real :: z
-+ c_a = loc(z)
-+ a = 42
-+ if (z /= 42) call abort
-+end program test
-Index: gcc/testsuite/gfortran.dg/arrayio_14.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/arrayio_14.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/arrayio_14.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,18 @@
-+! { dg-do run }
-+! PR61173.f90 Bogus END condition
-+module bd
-+ character(len=25, kind=1), dimension(:), allocatable, save :: source
-+ contains
-+ subroutine init_data
-+ allocate(source(2))
-+ source=[" 1 1 1 ", " 4 4 4 "]
-+ end subroutine init_data
-+end module bd
-+program read_internal
-+ use bd
-+ integer :: x(6),i
-+
-+ call init_data
-+ read(source,*) (x(i), i=1,6)
-+ if (any(x/=[1,1,1,4,4,4])) call abort
-+end program read_internal
-Index: gcc/testsuite/gfortran.dg/arrayio_16.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/arrayio_16.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/arrayio_16.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,13 @@
-+! { dg-do run }
-+! PR61640 KIND=4 Character Array Internal Unit Read Fail
-+program read_internal
-+ integer :: x(9),i
-+ integer :: y(9)
-+ character(kind=4,len=30), dimension(3) :: source
-+
-+ y = reshape ((/ 1,1,-1,1,-1,1,-1,1,1 /), shape(x))
-+ source=[4_" 1 1 -1",4_" 1 -1 1",4_" -1 1 1"]
-+ !print *, (trim(source(i)), i=1,3)
-+ read(source,*) (x(i), i=1,9) ! This read fails for KIND=4 character
-+ if (any(x /= y )) call abort
-+end program read_internal
-Index: gcc/testsuite/gfortran.dg/oldstyle_5.f
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/oldstyle_5.f (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/oldstyle_5.f (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,8 @@
-+C { dg-do compile }
-+ TYPE T
-+ INTEGER A(2)/1,2/ ! { dg-error "Invalid old style initialization for derived type component" }
-+ END TYPE
-+ TYPE S
-+ INTEGER B/1/ ! { dg-error "Invalid old style initialization for derived type component" }
-+ END TYPE
-+ END
-Index: gcc/testsuite/gfortran.dg/nint_2.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/nint_2.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/nint_2.f90 (.../branches/gcc-4_9-branch)
-@@ -4,7 +4,8 @@
- ! http://gcc.gnu.org/ml/fortran/2005-04/msg00139.html
- !
- ! { dg-do run }
--! { dg-xfail-run-if "PR 33271, math library bug" { powerpc-ibm-aix* powerpc*-*-linux* *-*-mingw* } { "-O0" } { "" } }
-+! { dg-xfail-run-if "PR 33271, math library bug" { powerpc-ibm-aix* powerpc-*-linux* powerpc64-*-linux* *-*-mingw* } { "-O0" } { "" } }
-+! Note that this doesn't fail on powerpc64le-*-linux*.
- real(kind=8) :: a
- integer(kind=8) :: i1, i2
- real :: b
-Index: gcc/testsuite/gfortran.dg/openmp-define-3.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/openmp-define-3.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/openmp-define-3.f90 (.../branches/gcc-4_9-branch)
-@@ -6,6 +6,6 @@
- # error _OPENMP not defined
- #endif
-
--#if _OPENMP != 201107
-+#if _OPENMP != 201307
- # error _OPENMP defined to wrong value
- #endif
-Index: gcc/testsuite/gfortran.dg/associate_17.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/associate_17.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/associate_17.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,12 @@
-+! { dg-do run }
-+! Test the fix for PR61406
-+! Contributed by Adam Hirst <adam@aphirst.karoo.co.uk>
-+program test
-+ implicit none
-+ real :: theta = 1.0
-+
-+ associate (n => [cos(theta), sin(theta)])
-+ if (abs (norm2(n) - 1.0) .gt. 1.0e-4) call abort
-+ end associate
-+
-+end program test
-Index: gcc/testsuite/gfortran.dg/graphite/pr59817.f
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/graphite/pr59817.f (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/graphite/pr59817.f (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,14 @@
-+! { dg-do compile }
-+! { dg-options "-O2 -floop-interchange" }
-+ SUBROUTINE PREPD(ICAST,ICAS,ICASX,ICAS1,ICAS2,NDET,NM,III,IMP,
-+ * CASMIN)
-+ LOGICAL CASMIN
-+ DIMENSION ICAST(NDET,NM),IMP(NM)
-+ IF(CASMIN) THEN
-+ DO K=1,NDET
-+ DO L=1,NM
-+ IF(L.EQ.K-1) ICAST(K,L) = 1
-+ END DO
-+ END DO
-+ END IF
-+ END SUBROUTINE
-Index: gcc/testsuite/gfortran.dg/finalize_25.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/finalize_25.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/finalize_25.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,55 @@
-+! { dg-do run }
-+!
-+! PR fortran/58880
-+! PR fortran/60495
-+!
-+! Contributed by Andrew Benson and Janus Weil
-+!
-+
-+module gn
-+ implicit none
-+ type sl
-+ integer, allocatable, dimension(:) :: lv
-+ contains
-+ final :: sld
-+ end type
-+ type :: nde
-+ type(sl) :: r
-+ end type nde
-+
-+ integer :: cnt = 0
-+
-+contains
-+
-+ subroutine sld(s)
-+ type(sl) :: s
-+ cnt = cnt + 1
-+ ! print *,'Finalize sl'
-+ end subroutine
-+ subroutine ndm(s)
-+ type(nde), intent(inout) :: s
-+ type(nde) :: i
-+ i=s
-+ end subroutine ndm
-+end module
-+
-+program main
-+ use gn
-+ type :: nde2
-+ type(sl) :: r
-+ end type nde2
-+ type(nde) :: x
-+
-+ cnt = 0
-+ call ndm(x)
-+ if (cnt /= 2) call abort()
-+
-+ cnt = 0
-+ call ndm2()
-+ if (cnt /= 3) call abort()
-+contains
-+ subroutine ndm2
-+ type(nde2) :: s,i
-+ i=s
-+ end subroutine ndm2
-+end program main
-Index: gcc/testsuite/gfortran.dg/arrayio_15.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/arrayio_15.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/arrayio_15.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,11 @@
-+! { dg-do run }
-+! PR61499
-+program read_internal
-+
-+ integer :: x(9),i,iostat
-+ character(len=512) :: iomsg
-+ character(kind=1,len=30), dimension(:), allocatable, save :: source
-+ allocate(source(3))
-+ source=[" 1 1 -1"," 1 -1 1"," -1 1 1"] !This fails
-+ read(source,*) (x(i), i=1,6)
-+end program read_internal
-Index: gcc/testsuite/gfortran.dg/allocatable_function_8.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/allocatable_function_8.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/allocatable_function_8.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,59 @@
-+! { dg-do run }
-+! Test the fix for PR61459 and PR58883.
-+!
-+! Contributed by John Wingate <johnww@tds.net>
-+! and Tao Song <songtao.thu@gmail.com>
-+!
-+module a
-+
-+ implicit none
-+ private
-+ public :: f_segfault, f_segfault_plus, f_workaround
-+ integer, dimension(2,2) :: b = reshape([1,-1,1,1],[2,2])
-+
-+contains
-+
-+ function f_segfault(x)
-+ real, dimension(:), allocatable :: f_segfault
-+ real, dimension(:), intent(in) :: x
-+ allocate(f_segfault(2))
-+ f_segfault = matmul(b,x)
-+ end function f_segfault
-+
-+! Sefaulted without the ALLOCATE as well.
-+ function f_segfault_plus(x)
-+ real, dimension(:), allocatable :: f_segfault_plus
-+ real, dimension(:), intent(in) :: x
-+ f_segfault_plus = matmul(b,x)
-+ end function f_segfault_plus
-+
-+ function f_workaround(x)
-+ real, dimension(:), allocatable :: f_workaround
-+ real, dimension(:), intent(in) :: x
-+ real, dimension(:), allocatable :: tmp
-+ allocate(f_workaround(2),tmp(2))
-+ tmp = matmul(b,x)
-+ f_workaround = tmp
-+ end function f_workaround
-+
-+end module a
-+
-+program main
-+ use a
-+ implicit none
-+ real, dimension(2) :: x = 1.0, y
-+! PR61459
-+ y = f_workaround (x)
-+ if (any (f_segfault (x) .ne. y)) call abort
-+ if (any (f_segfault_plus (x) .ne. y)) call abort
-+! PR58883
-+ if (any (foo () .ne. reshape([1,2,3,4,5,6,7,8],[2,4]))) call abort
-+contains
-+ function foo()
-+ integer, allocatable :: foo(:,:)
-+ integer, allocatable :: temp(:)
-+
-+ temp = [1,2,3,4,5,6,7,8]
-+ foo = reshape(temp,[2,4])
-+ end function
-+end program main
-Index: gcc/testsuite/gfortran.dg/class_array_15.f03
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/class_array_15.f03 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/class_array_15.f03 (.../branches/gcc-4_9-branch)
-@@ -1,4 +1,5 @@
- ! { dg-do run }
-+! { dg-options "-fdump-tree-original" }
- !
- ! Tests the fixes for three bugs with the same underlying cause. All are regressions
- ! that come about because class array elements end up with a different tree type
-@@ -114,3 +115,5 @@
- bh => bhGet(b,instance=2)
- if (loc (b) .ne. loc(bh%hostNode)) call abort
- end
-+! { dg-final { scan-tree-dump-times "builtin_free" 12 "original" } }
-+! { dg-final { cleanup-tree-dump "original" } }
-Index: gcc/testsuite/gfortran.dg/associate_16.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/associate_16.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/associate_16.f90 (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,23 @@
-+! { dg-do compile }
-+! PR 60834 - this used to ICE.
-+
-+module m
-+ implicit none
-+ type :: t
-+ real :: diffusion=1.
-+ end type
-+contains
-+ subroutine solve(this, x)
-+ class(t), intent(in) :: this
-+ real, intent(in) :: x(:)
-+ integer :: i
-+ integer, parameter :: n(1:5)=[(i,i=1, 5)]
-+
-+ associate( nu=>this%diffusion)
-+ associate( exponential=>exp(-(x(i)-n) ))
-+ do i = 1, size(x)
-+ end do
-+ end associate
-+ end associate
-+ end subroutine solve
-+end module m
-Index: gcc/testsuite/gfortran.dg/list_read_13.f
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/list_read_13.f (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/list_read_13.f (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,13 @@
-+c { dg-do run }
-+c PR61049, reduced test case by Dominique d'Humieres
-+ character(len=30) :: buff = ", (2.0, 3.0),,6.0D0, 2*,"
-+ DOUBLE PRECISION AVD, BVD, CVD, DVCORR
-+ COMPLEX AVC, BVC, CVC, ZVCORR
-+
-+ read(buff, *, err=10) AVD, AVC, BVC, BVD, CVC, CVD
-+ goto 20
-+ 10 call abort
-+ 20 continue
-+ end
-+
-+
-Index: gcc/testsuite/gfortran.dg/round_4.f90
-===================================================================
---- a/src/gcc/testsuite/gfortran.dg/round_4.f90 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gfortran.dg/round_4.f90 (.../branches/gcc-4_9-branch)
-@@ -1,6 +1,7 @@
- ! { dg-do run }
- ! { dg-add-options ieee }
- ! { dg-skip-if "PR libfortran/58015" { *-*-solaris2.9* hppa*-*-hpux* } }
-+! { dg-skip-if "IBM long double 31 bits of precision, test requires 38" { powerpc*-*-linux* } }
- !
- ! PR fortran/35862
- !
-Index: gcc/testsuite/gcc.c-torture/execute/pr61306-1.c
-===================================================================
---- a/src/gcc/testsuite/gcc.c-torture/execute/pr61306-1.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr61306-1.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,39 @@
-+#ifdef __INT32_TYPE__
-+typedef __INT32_TYPE__ int32_t;
-+#else
-+typedef int int32_t;
-+#endif
-+
-+#ifdef __UINT32_TYPE__
-+typedef __UINT32_TYPE__ uint32_t;
-+#else
-+typedef unsigned uint32_t;
-+#endif
-+
-+#define __fake_const_swab32(x) ((uint32_t)( \
-+ (((uint32_t)(x) & (uint32_t)0x000000ffUL) << 24) | \
-+ (((uint32_t)(x) & (uint32_t)0x0000ff00UL) << 8) | \
-+ (((uint32_t)(x) & (uint32_t)0x00ff0000UL) >> 8) | \
-+ (( (int32_t)(x) & (int32_t)0xff000000UL) >> 24)))
-+
-+/* Previous version of bswap optimization failed to consider sign extension
-+ and as a result would replace an expression *not* doing a bswap by a
-+ bswap. */
-+
-+__attribute__ ((noinline, noclone)) uint32_t
-+fake_bswap32 (uint32_t in)
-+{
-+ return __fake_const_swab32 (in);
-+}
-+
-+int
-+main(void)
-+{
-+ if (sizeof (int32_t) * __CHAR_BIT__ != 32)
-+ return 0;
-+ if (sizeof (uint32_t) * __CHAR_BIT__ != 32)
-+ return 0;
-+ if (fake_bswap32 (0x87654321) != 0xffffff87)
-+ __builtin_abort ();
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.c-torture/execute/pr61306-3.c
-===================================================================
---- a/src/gcc/testsuite/gcc.c-torture/execute/pr61306-3.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr61306-3.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,13 @@
-+short a = -1;
-+int b;
-+char c;
-+
-+int
-+main ()
-+{
-+ c = a;
-+ b = a | c;
-+ if (b != -1)
-+ __builtin_abort ();
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.c-torture/execute/pr61725.c
-===================================================================
---- a/src/gcc/testsuite/gcc.c-torture/execute/pr61725.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr61725.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,14 @@
-+/* PR tree-optimization/61725 */
-+
-+int
-+main ()
-+{
-+ int x;
-+ for (x = -128; x <= 128; x++)
-+ {
-+ int a = __builtin_ffs (x);
-+ if (x == 0 && a != 0)
-+ __builtin_abort ();
-+ }
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.c-torture/execute/20140425-1.c
-===================================================================
---- a/src/gcc/testsuite/gcc.c-torture/execute/20140425-1.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.c-torture/execute/20140425-1.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,23 @@
-+/* PR target/60941 */
-+/* Reported by Martin Husemann <martin@netbsd.org> */
-+
-+extern void abort (void);
-+
-+static void __attribute__((noinline))
-+set (unsigned long *l)
-+{
-+ *l = 31;
-+}
-+
-+int main (void)
-+{
-+ unsigned long l;
-+ int i;
-+
-+ set (&l);
-+ i = (int) l;
-+ l = (unsigned long)(2U << i);
-+ if (l != 0)
-+ abort ();
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.c-torture/execute/pr61306-2.c
-===================================================================
---- a/src/gcc/testsuite/gcc.c-torture/execute/pr61306-2.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr61306-2.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,40 @@
-+#ifdef __INT16_TYPE__
-+typedef __INT16_TYPE__ int16_t;
-+#else
-+typedef short int16_t;
-+#endif
-+
-+#ifdef __UINT32_TYPE__
-+typedef __UINT32_TYPE__ uint32_t;
-+#else
-+typedef unsigned uint32_t;
-+#endif
-+
-+#define __fake_const_swab32(x) ((uint32_t)( \
-+ (((uint32_t) (x) & (uint32_t)0x000000ffUL) << 24) | \
-+ (((uint32_t)(int16_t)(x) & (uint32_t)0x00ffff00UL) << 8) | \
-+ (((uint32_t) (x) & (uint32_t)0x00ff0000UL) >> 8) | \
-+ (((uint32_t) (x) & (uint32_t)0xff000000UL) >> 24)))
-+
-+
-+/* Previous version of bswap optimization failed to consider sign extension
-+ and as a result would replace an expression *not* doing a bswap by a
-+ bswap. */
-+
-+__attribute__ ((noinline, noclone)) uint32_t
-+fake_bswap32 (uint32_t in)
-+{
-+ return __fake_const_swab32 (in);
-+}
-+
-+int
-+main(void)
-+{
-+ if (sizeof (uint32_t) * __CHAR_BIT__ != 32)
-+ return 0;
-+ if (sizeof (int16_t) * __CHAR_BIT__ != 16)
-+ return 0;
-+ if (fake_bswap32 (0x81828384) != 0xff838281)
-+ __builtin_abort ();
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.c-torture/execute/pr60960.c
-===================================================================
---- a/src/gcc/testsuite/gcc.c-torture/execute/pr60960.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr60960.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,38 @@
-+/* PR tree-optimization/60960 */
-+
-+typedef unsigned char v4qi __attribute__ ((vector_size (4)));
-+
-+__attribute__((noinline, noclone)) v4qi
-+f1 (v4qi v)
-+{
-+ return v / 2;
-+}
-+
-+__attribute__((noinline, noclone)) v4qi
-+f2 (v4qi v)
-+{
-+ return v / (v4qi) { 2, 2, 2, 2 };
-+}
-+
-+__attribute__((noinline, noclone)) v4qi
-+f3 (v4qi x, v4qi y)
-+{
-+ return x / y;
-+}
-+
-+int
-+main ()
-+{
-+ v4qi x = { 5, 5, 5, 5 };
-+ v4qi y = { 2, 2, 2, 2 };
-+ v4qi z = f1 (x);
-+ if (__builtin_memcmp (&y, &z, sizeof (y)) != 0)
-+ __builtin_abort ();
-+ z = f2 (x);
-+ if (__builtin_memcmp (&y, &z, sizeof (y)) != 0)
-+ __builtin_abort ();
-+ z = f3 (x, y);
-+ if (__builtin_memcmp (&y, &z, sizeof (y)) != 0)
-+ __builtin_abort ();
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.c-torture/execute/pr61673.c
-===================================================================
---- a/src/gcc/testsuite/gcc.c-torture/execute/pr61673.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr61673.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,50 @@
-+/* PR rtl-optimization/61673 */
-+
-+char e;
-+
-+__attribute__((noinline, noclone)) void
-+bar (char x)
-+{
-+ if (x != 0x54 && x != (char) 0x87)
-+ __builtin_abort ();
-+}
-+
-+__attribute__((noinline, noclone)) void
-+foo (const char *x)
-+{
-+ char d = x[0];
-+ int c = d;
-+ if ((c >= 0 && c <= 0x7f) == 0)
-+ e = d;
-+ bar (d);
-+}
-+
-+__attribute__((noinline, noclone)) void
-+baz (const char *x)
-+{
-+ char d = x[0];
-+ int c = d;
-+ if ((c >= 0 && c <= 0x7f) == 0)
-+ e = d;
-+}
-+
-+int
-+main ()
-+{
-+ const char c[] = { 0x54, 0x87 };
-+ e = 0x21;
-+ foo (c);
-+ if (e != 0x21)
-+ __builtin_abort ();
-+ foo (c + 1);
-+ if (e != (char) 0x87)
-+ __builtin_abort ();
-+ e = 0x21;
-+ baz (c);
-+ if (e != 0x21)
-+ __builtin_abort ();
-+ baz (c + 1);
-+ if (e != (char) 0x87)
-+ __builtin_abort ();
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.c-torture/compile/pr61684.c
-===================================================================
---- a/src/gcc/testsuite/gcc.c-torture/compile/pr61684.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.c-torture/compile/pr61684.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* PR tree-optimization/61684 */
-+
-+int a, c;
-+static int *b = 0;
-+short d;
-+static short **e = 0;
-+
-+void
-+foo ()
-+{
-+ for (; c < 1; c++)
-+ ;
-+ *e = &d;
-+ a = d && (c && 1) & *b;
-+}
-Index: gcc/testsuite/gnat.dg/opt38.adb
-===================================================================
---- a/src/gcc/testsuite/gnat.dg/opt38.adb (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gnat.dg/opt38.adb (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,9 @@
-+-- { dg-do run }
-+-- { dg-options "-O2 -gnatn" }
-+
-+with Opt38_Pkg; use Opt38_Pkg;
-+
-+procedure Opt38 is
-+begin
-+ Test (-1);
-+end;
-Index: gcc/testsuite/gnat.dg/opt39.adb
-===================================================================
---- a/src/gcc/testsuite/gnat.dg/opt39.adb (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gnat.dg/opt39.adb (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,31 @@
-+-- { dg-do compile }
-+-- { dg-options "-O2 -fno-inline -fdump-tree-optimized" }
-+
-+procedure Opt39 (I : Integer) is
-+
-+ type Rec is record
-+ I1 : Integer;
-+ I2 : Integer;
-+ I3 : Integer;
-+ I4 : Integer;
-+ I5 : Integer;
-+ end record;
-+
-+ procedure Set (A : access Rec; I : Integer) is
-+ Tmp : Rec := A.all;
-+ begin
-+ Tmp.I1 := I;
-+ A.all := Tmp;
-+ end;
-+
-+ R : aliased Rec;
-+
-+begin
-+ Set (R'Access, I);
-+ if R.I1 /= I then
-+ raise Program_Error;
-+ end if;
-+end;
-+
-+-- { dg-final { scan-tree-dump-times "MEM" 1 "optimized" } }
-+-- { dg-final { cleanup-tree-dump "optimized" } }
-Index: gcc/testsuite/gnat.dg/overflow_fixed.adb
-===================================================================
---- a/src/gcc/testsuite/gnat.dg/overflow_fixed.adb (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gnat.dg/overflow_fixed.adb (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,19 @@
-+-- { dg-do run }
-+-- { dg-options "-gnato -O" }
-+
-+procedure Overflow_Fixed is
-+
-+ type Unsigned_8_Bit is mod 2**8;
-+
-+ procedure Fixed_To_Eight (Value : Duration) is
-+ Item : Unsigned_8_Bit;
-+ begin
-+ Item := Unsigned_8_Bit(Value);
-+ raise Program_Error;
-+ exception
-+ when Constraint_Error => null; -- expected case
-+ end;
-+
-+begin
-+ Fixed_To_Eight (-0.5);
-+end;
-Index: gcc/testsuite/gnat.dg/opt38_pkg.adb
-===================================================================
---- a/src/gcc/testsuite/gnat.dg/opt38_pkg.adb (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gnat.dg/opt38_pkg.adb (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,33 @@
-+package body Opt38_Pkg is
-+
-+ procedure Proc (I : Integer);
-+ pragma Inline (Proc);
-+
-+ procedure Proc (I : Integer) is
-+
-+ procedure Inner;
-+ pragma No_Inline (Inner);
-+
-+ procedure Inner is
-+ begin
-+ if I /= 110 then
-+ raise Program_Error;
-+ end if;
-+ end;
-+
-+ begin
-+ if I > 0 then
-+ Inner;
-+ end if;
-+ end;
-+
-+ procedure Test (I : Integer) is
-+ begin
-+ if I > -1 then
-+ Proc (I);
-+ else
-+ Proc (I + 111);
-+ end if;
-+ end;
-+
-+end Opt38_Pkg;
-Index: gcc/testsuite/gnat.dg/opt38_pkg.ads
-===================================================================
---- a/src/gcc/testsuite/gnat.dg/opt38_pkg.ads (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gnat.dg/opt38_pkg.ads (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,5 @@
-+package Opt38_Pkg is
-+
-+ procedure Test (I : Integer);
-+
-+end Opt38_Pkg;
-Index: gcc/testsuite/gnat.dg/enum3.adb
-===================================================================
---- a/src/gcc/testsuite/gnat.dg/enum3.adb (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gnat.dg/enum3.adb (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,23 @@
-+-- { dg-do run }
-+
-+procedure Enum3 is
-+ type Enum is (Aaa, Bbb, Ccc);
-+ for Enum use (1,2,4);
-+begin
-+ for Lo in Enum loop
-+ for Hi in Enum loop
-+ declare
-+ subtype S is Enum range Lo .. Hi;
-+ type Vector is array (S) of Integer;
-+ Vec : Vector;
-+ begin
-+ for I in S loop
-+ Vec (I) := 0;
-+ end loop;
-+ if Vec /= (S => 0) then
-+ raise Program_Error;
-+ end if;
-+ end;
-+ end loop;
-+ end loop;
-+end;
-Index: gcc/testsuite/gnat.dg/aliasing1.adb
-===================================================================
---- a/src/gcc/testsuite/gnat.dg/aliasing1.adb (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gnat.dg/aliasing1.adb (.../branches/gcc-4_9-branch)
-@@ -18,5 +18,5 @@
-
- end Aliasing1;
-
---- { dg-final { scan-tree-dump-not "__gnat_rcheck" "optimized" } }
-+-- { dg-final { scan-tree-dump-not "gnat_rcheck" "optimized" } }
- -- { dg-final { cleanup-tree-dump "optimized" } }
-Index: gcc/testsuite/gcc.dg/pr60866.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/pr60866.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/pr60866.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,18 @@
-+/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
-+/* { dg-options "-O -fselective-scheduling -fno-if-conversion -fschedule-insns" } */
-+
-+int n;
-+
-+void
-+foo (int w, int **dnroot, int **dn)
-+{
-+ int *child;
-+ int *xchild = xchild;
-+ for (; w < n; w++)
-+ if (!dnroot)
-+ {
-+ dnroot = dn;
-+ for (child = *dn; child; child = xchild)
-+ ;
-+ }
-+}
-Index: gcc/testsuite/gcc.dg/typeof-2.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/typeof-2.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/typeof-2.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,28 @@
-+/* Test qualifier discard of typeof for atomic types. */
-+/* { dg-do compile } */
-+/* { dg-options "-std=c11" } */
-+
-+extern int i;
-+
-+extern int * p;
-+
-+extern int _Atomic const ci;
-+extern __typeof (ci) i;
-+
-+extern int _Atomic volatile vi;
-+extern __typeof (vi) i;
-+
-+extern int * _Atomic restrict ri;
-+extern __typeof (ri) p;
-+
-+void f(void)
-+{
-+ __auto_type aci = ci;
-+ int *paci = &aci;
-+
-+ __auto_type avi = vi;
-+ int *pavi = &avi;
-+
-+ __auto_type ari = ri;
-+ int **pari = &ari;
-+}
-Index: gcc/testsuite/gcc.dg/vmx/merge-vsx-be-order.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/vmx/merge-vsx-be-order.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/vmx/merge-vsx-be-order.c (.../branches/gcc-4_9-branch)
-@@ -21,10 +21,19 @@
- vector long long vlb = {0,1};
- vector double vda = {-2.0,-1.0};
- vector double vdb = {0.0,1.0};
-+ vector unsigned int vuia = {0,1,2,3};
-+ vector unsigned int vuib = {4,5,6,7};
-+ vector signed int vsia = {-4,-3,-2,-1};
-+ vector signed int vsib = {0,1,2,3};
-+ vector float vfa = {-4.0,-3.0,-2.0,-1.0};
-+ vector float vfb = {0.0,1.0,2.0,3.0};
-
- /* Result vectors. */
- vector long long vlh, vll;
- vector double vdh, vdl;
-+ vector unsigned int vuih, vuil;
-+ vector signed int vsih, vsil;
-+ vector float vfh, vfl;
-
- /* Expected result vectors. */
- #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
-@@ -32,11 +41,23 @@
- vector long long vlrl = {0,-2};
- vector double vdrh = {1.0,-1.0};
- vector double vdrl = {0.0,-2.0};
-+ vector unsigned int vuirh = {6,2,7,3};
-+ vector unsigned int vuirl = {4,0,5,1};
-+ vector signed int vsirh = {2,-2,3,-1};
-+ vector signed int vsirl = {0,-4,1,-3};
-+ vector float vfrh = {2.0,-2.0,3.0,-1.0};
-+ vector float vfrl = {0.0,-4.0,1.0,-3.0};
- #else
- vector long long vlrh = {-2,0};
- vector long long vlrl = {-1,1};
- vector double vdrh = {-2.0,0.0};
- vector double vdrl = {-1.0,1.0};
-+ vector unsigned int vuirh = {0,4,1,5};
-+ vector unsigned int vuirl = {2,6,3,7};
-+ vector signed int vsirh = {-4,0,-3,1};
-+ vector signed int vsirl = {-2,2,-1,3};
-+ vector float vfrh = {-4.0,0.0,-3.0,1.0};
-+ vector float vfrl = {-2.0,2.0,-1.0,3.0};
- #endif
-
- vlh = vec_mergeh (vla, vlb);
-@@ -43,9 +64,21 @@
- vll = vec_mergel (vla, vlb);
- vdh = vec_mergeh (vda, vdb);
- vdl = vec_mergel (vda, vdb);
-+ vuih = vec_mergeh (vuia, vuib);
-+ vuil = vec_mergel (vuia, vuib);
-+ vsih = vec_mergeh (vsia, vsib);
-+ vsil = vec_mergel (vsia, vsib);
-+ vfh = vec_mergeh (vfa, vfb );
-+ vfl = vec_mergel (vfa, vfb );
-
- check (vec_long_long_eq (vlh, vlrh), "vlh");
- check (vec_long_long_eq (vll, vlrl), "vll");
- check (vec_double_eq (vdh, vdrh), "vdh" );
- check (vec_double_eq (vdl, vdrl), "vdl" );
-+ check (vec_all_eq (vuih, vuirh), "vuih");
-+ check (vec_all_eq (vuil, vuirl), "vuil");
-+ check (vec_all_eq (vsih, vsirh), "vsih");
-+ check (vec_all_eq (vsil, vsirl), "vsil");
-+ check (vec_all_eq (vfh, vfrh), "vfh");
-+ check (vec_all_eq (vfl, vfrl), "vfl");
- }
-Index: gcc/testsuite/gcc.dg/vmx/merge-vsx.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/vmx/merge-vsx.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/vmx/merge-vsx.c (.../branches/gcc-4_9-branch)
-@@ -21,10 +21,19 @@
- vector long long vlb = {0,1};
- vector double vda = {-2.0,-1.0};
- vector double vdb = {0.0,1.0};
-+ vector unsigned int vuia = {0,1,2,3};
-+ vector unsigned int vuib = {4,5,6,7};
-+ vector signed int vsia = {-4,-3,-2,-1};
-+ vector signed int vsib = {0,1,2,3};
-+ vector float vfa = {-4.0,-3.0,-2.0,-1.0};
-+ vector float vfb = {0.0,1.0,2.0,3.0};
-
- /* Result vectors. */
- vector long long vlh, vll;
- vector double vdh, vdl;
-+ vector unsigned int vuih, vuil;
-+ vector signed int vsih, vsil;
-+ vector float vfh, vfl;
-
- /* Expected result vectors. */
- vector long long vlrh = {-2,0};
-@@ -31,14 +40,32 @@
- vector long long vlrl = {-1,1};
- vector double vdrh = {-2.0,0.0};
- vector double vdrl = {-1.0,1.0};
-+ vector unsigned int vuirh = {0,4,1,5};
-+ vector unsigned int vuirl = {2,6,3,7};
-+ vector signed int vsirh = {-4,0,-3,1};
-+ vector signed int vsirl = {-2,2,-1,3};
-+ vector float vfrh = {-4.0,0.0,-3.0,1.0};
-+ vector float vfrl = {-2.0,2.0,-1.0,3.0};
-
- vlh = vec_mergeh (vla, vlb);
- vll = vec_mergel (vla, vlb);
- vdh = vec_mergeh (vda, vdb);
- vdl = vec_mergel (vda, vdb);
-+ vuih = vec_mergeh (vuia, vuib);
-+ vuil = vec_mergel (vuia, vuib);
-+ vsih = vec_mergeh (vsia, vsib);
-+ vsil = vec_mergel (vsia, vsib);
-+ vfh = vec_mergeh (vfa, vfb );
-+ vfl = vec_mergel (vfa, vfb );
-
- check (vec_long_long_eq (vlh, vlrh), "vlh");
- check (vec_long_long_eq (vll, vlrl), "vll");
- check (vec_double_eq (vdh, vdrh), "vdh" );
- check (vec_double_eq (vdl, vdrl), "vdl" );
-+ check (vec_all_eq (vuih, vuirh), "vuih");
-+ check (vec_all_eq (vuil, vuirl), "vuil");
-+ check (vec_all_eq (vsih, vsirh), "vsih");
-+ check (vec_all_eq (vsil, vsirl), "vsil");
-+ check (vec_all_eq (vfh, vfrh), "vfh");
-+ check (vec_all_eq (vfl, vfrl), "vfl");
- }
-Index: gcc/testsuite/gcc.dg/graphite/pr55022.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/graphite/pr55022.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/graphite/pr55022.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,27 @@
-+/* { dg-do run } */
-+/* { dg-options "-O2 -fgraphite-identity" } */
-+
-+extern void abort (void);
-+
-+void __attribute__((noinline,noclone))
-+f(int *limit, int minLen, int maxLen)
-+{
-+ int i;
-+
-+ for (i = minLen; i <= maxLen; i++) {
-+ limit[i] = i;
-+ }
-+}
-+
-+int main()
-+{
-+ int limit[256], i;
-+ f (limit, 0, 255);
-+ for (i = 0; i < 256; ++i)
-+ {
-+ if (limit[i] != i)
-+ abort ();
-+ __asm__ volatile ("" : : : "memory");
-+ }
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.dg/graphite/pr59817-2.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/graphite/pr59817-2.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/graphite/pr59817-2.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O2 -floop-interchange" } */
-+
-+void
-+xl(void)
-+{
-+ static int j3;
-+ for (j3 = 0; j3 < 1; ++j3) {
-+ static int f2;
-+ static int w7;
-+ short int b5;
-+ int ok;
-+ f2 = (b5 += ok) ? (w7 = 0): (w7 ? 0 : (f2 = ok));
-+ }
-+}
-Index: gcc/testsuite/gcc.dg/graphite/pr60979.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/graphite/pr60979.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/graphite/pr60979.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,37 @@
-+/* { dg-options "-O -fgraphite-identity" } */
-+
-+#include <setjmp.h>
-+
-+struct x;
-+
-+typedef struct x **(*a)(struct x *);
-+
-+struct x {
-+ union {
-+ struct {
-+ union {
-+ a *i;
-+ } l;
-+ int s;
-+ } y;
-+ } e;
-+};
-+
-+jmp_buf c;
-+
-+void
-+b(struct x *r)
-+{
-+ int f;
-+ static int w = 0;
-+ volatile jmp_buf m;
-+ f = (*(((struct x *)r)->e.y.l.i[2]((struct x *)r)))->e.y.s;
-+ if (w++ != 0)
-+ __builtin_memcpy((char *)m, (const char *)c, sizeof(jmp_buf));
-+ if (setjmp (c) == 0) {
-+ int z;
-+ for (z = 0; z < 0; ++z)
-+ ;
-+ }
-+ d((const char *)m);
-+}
-Index: gcc/testsuite/gcc.dg/graphite/pr59817-1.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/graphite/pr59817-1.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/graphite/pr59817-1.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,16 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O2 -floop-interchange" } */
-+
-+int kd;
-+
-+void
-+n2(void)
-+{
-+ static int so;
-+ static short int i5;
-+ int wj;
-+ int *il;
-+ int *nk = &so;
-+ for (wj = 0; wj < 2; ++wj)
-+ *nk = ((i5 += *il) || kd );
-+}
-Index: gcc/testsuite/gcc.dg/pr61045.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/pr61045.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/pr61045.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,12 @@
-+/* { dg-do run } */
-+/* { dg-options "-fstrict-overflow" } */
-+
-+int main ()
-+{
-+ int a = 0;
-+ int b = __INT_MAX__;
-+ int t = (a - 2) > (b - 1);
-+ if (t != 0)
-+ __builtin_abort();
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.dg/pr61158.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/pr61158.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/pr61158.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,12 @@
-+/* PR tree-optimization/61158 */
-+/* { dg-do compile } */
-+/* { dg-options "-O2 -fdump-tree-original" } */
-+
-+unsigned long long
-+foo (unsigned int x)
-+{
-+ return ((unsigned long long) x & 0x00ff000000000000ULL) >> 40;
-+}
-+
-+/* { dg-final { scan-tree-dump "return 0;" "original" { target { ilp32 || lp64 } } } } */
-+/* { dg-final { cleanup-tree-dump "original" } } */
-Index: gcc/testsuite/gcc.dg/lto/pr60720_0.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/lto/pr60720_0.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/lto/pr60720_0.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* { dg-lto-do run } */
-+/* { dg-extra-ld-options { -w } } */
-+
-+/* ??? lto.exp does not allow to scan for
-+ :1:12: warning: type of 'x' does not match original declaration
-+ extern int x[];
-+ ^
-+ :1:5: note: previously declared here
-+ int x;
-+ ^ */
-+
-+extern int x[];
-+int *foo[] = { &x[0] };
-+
-+int main() { return *foo[0]; }
-Index: gcc/testsuite/gcc.dg/lto/pr60720_1.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/lto/pr60720_1.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/lto/pr60720_1.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1 @@
-+int x;
-Index: gcc/testsuite/gcc.dg/lto/pr60911_0.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/lto/pr60911_0.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/lto/pr60911_0.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,21 @@
-+// { dg-lto-do run }
-+// { dg-lto-options { { -O2 -flto -fipa-pta } } }
-+
-+int __attribute__ ((__noinline__)) f (unsigned *p, int *x)
-+{
-+ int y = *p++ & 0xfff;
-+ *x++ = y;
-+ *x = *p;
-+ return y;
-+}
-+
-+int
-+main ()
-+{
-+ unsigned u[2] = { 0x3aad, 0x5ad1 };
-+ int x[2] = { 17689, 23456 };
-+
-+ if (f (u, x) != 0xaad || x[0] != 0xaad || x[1] != 0x5ad1)
-+ __builtin_abort ();
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.dg/lto/pr61526_0.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/lto/pr61526_0.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/lto/pr61526_0.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,6 @@
-+/* { dg-lto-do link } */
-+/* { dg-lto-options { { -fPIC -flto -flto-partition=1to1 } } } */
-+/* { dg-extra-ld-options { -shared } } */
-+
-+static void *master;
-+void *foo () { return master; }
-Index: gcc/testsuite/gcc.dg/lto/pr61526_1.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/lto/pr61526_1.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/lto/pr61526_1.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,2 @@
-+extern void *master;
-+void *bar () { return master; }
-Index: gcc/testsuite/gcc.dg/pr57233.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/pr57233.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/pr57233.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,171 @@
-+/* PR tree-optimization/57233 */
-+/* { dg-do run { target { ilp32 || lp64 } } } */
-+/* { dg-options "-O2" } */
-+
-+typedef unsigned V4 __attribute__((vector_size(4 * sizeof (int))));
-+typedef unsigned V8 __attribute__((vector_size(8 * sizeof (int))));
-+typedef unsigned V16 __attribute__((vector_size(16 * sizeof (int))));
-+V4 a, b, g;
-+V8 c, d, h;
-+V16 e, f, j;
-+
-+__attribute__((noinline)) void
-+f1 (void)
-+{
-+ a = (a << 2) | (a >> 30);
-+}
-+
-+__attribute__((noinline)) void
-+f2 (void)
-+{
-+ a = (a << 30) | (a >> 2);
-+}
-+
-+__attribute__((noinline)) void
-+f3 (void)
-+{
-+ a = (a << b) | (a >> (32 - b));
-+}
-+
-+__attribute__((noinline, noclone)) void
-+f4 (int x)
-+{
-+ a = (a << x) | (a >> (32 - x));
-+}
-+
-+__attribute__((noinline)) void
-+f5 (void)
-+{
-+ c = (c << 2) | (c >> 30);
-+}
-+
-+__attribute__((noinline)) void
-+f6 (void)
-+{
-+ c = (c << 30) | (c >> 2);
-+}
-+
-+__attribute__((noinline)) void
-+f7 (void)
-+{
-+ c = (c << d) | (c >> (32 - d));
-+}
-+
-+__attribute__((noinline, noclone)) void
-+f8 (int x)
-+{
-+ c = (c << x) | (c >> (32 - x));
-+}
-+
-+__attribute__((noinline)) void
-+f9 (void)
-+{
-+ e = (e << 2) | (e >> 30);
-+}
-+
-+__attribute__((noinline)) void
-+f10 (void)
-+{
-+ e = (e << 30) | (e >> 2);
-+}
-+
-+__attribute__((noinline)) void
-+f11 (void)
-+{
-+ e = (e << f) | (e >> (32 - f));
-+}
-+
-+__attribute__((noinline, noclone)) void
-+f12 (int x)
-+{
-+ e = (e << x) | (e >> (32 - x));
-+}
-+
-+unsigned
-+r (void)
-+{
-+ static unsigned x = 0xdeadbeefU;
-+ static unsigned y = 0x12347654U;
-+ static unsigned z = 0x1a2b3c4dU;
-+ static unsigned w = 0x87654321U;
-+ unsigned t = x ^ (x << 11);
-+ x = y;
-+ y = z;
-+ z = w;
-+ w = w ^ (w >> 19) ^ t ^ (t >> 8);
-+ return w;
-+}
-+
-+void
-+init (unsigned int *p, int count, int mod)
-+{
-+ int i;
-+ for (i = 0; i < count; i++)
-+ {
-+ unsigned int v = r ();
-+ if (mod)
-+ v = (v % 31) + 1;
-+ p[i] = v;
-+ }
-+}
-+
-+void
-+check (unsigned int *p, unsigned int *q, int count, unsigned int *s, int ss)
-+{
-+ int i;
-+ for (i = 0; i < count; i++)
-+ {
-+ if (s)
-+ ss = s[i];
-+ if (p[i] != ((q[i] << ss) | (q[i] >> (32 - ss))))
-+ __builtin_abort ();
-+ }
-+}
-+
-+int
-+main ()
-+{
-+ init ((unsigned int *) &a, 4, 0);
-+ init ((unsigned int *) &b, 4, 1);
-+ init ((unsigned int *) &c, 8, 0);
-+ init ((unsigned int *) &d, 8, 1);
-+ init ((unsigned int *) &e, 16, 0);
-+ init ((unsigned int *) &f, 16, 1);
-+ g = a;
-+ h = c;
-+ j = e;
-+ f1 ();
-+ f5 ();
-+ f9 ();
-+ check ((unsigned int *) &a, (unsigned int *) &g, 4, 0, 2);
-+ check ((unsigned int *) &c, (unsigned int *) &h, 8, 0, 2);
-+ check ((unsigned int *) &e, (unsigned int *) &j, 16, 0, 2);
-+ g = a;
-+ h = c;
-+ j = e;
-+ f2 ();
-+ f6 ();
-+ f10 ();
-+ check ((unsigned int *) &a, (unsigned int *) &g, 4, 0, 30);
-+ check ((unsigned int *) &c, (unsigned int *) &h, 8, 0, 30);
-+ check ((unsigned int *) &e, (unsigned int *) &j, 16, 0, 30);
-+ g = a;
-+ h = c;
-+ j = e;
-+ f3 ();
-+ f7 ();
-+ f11 ();
-+ check ((unsigned int *) &a, (unsigned int *) &g, 4, (unsigned int *) &b, 0);
-+ check ((unsigned int *) &c, (unsigned int *) &h, 8, (unsigned int *) &d, 0);
-+ check ((unsigned int *) &e, (unsigned int *) &j, 16, (unsigned int *) &f, 0);
-+ g = a;
-+ h = c;
-+ j = e;
-+ f4 (5);
-+ f8 (5);
-+ f12 (5);
-+ check ((unsigned int *) &a, (unsigned int *) &g, 4, 0, 5);
-+ check ((unsigned int *) &c, (unsigned int *) &h, 8, 0, 5);
-+ check ((unsigned int *) &e, (unsigned int *) &j, 16, 0, 5);
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.dg/pr61060.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/pr61060.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/pr61060.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,19 @@
-+/* PR target/61060 */
-+/* { dg-do compile } */
-+/* { dg-options "-O0 -ftree-ter" } */
-+
-+typedef __SIZE_TYPE__ size_t;
-+
-+extern inline __attribute__ ((gnu_inline, always_inline, artificial))
-+void *memset (void *dest, int ch, size_t len)
-+{
-+ return __builtin_memset (dest, ch, len);
-+}
-+
-+char buf[10];
-+
-+void
-+foo (void)
-+{
-+ memset (buf, sizeof (buf), 0);
-+}
-Index: gcc/testsuite/gcc.dg/pr61583.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/pr61583.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/pr61583.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,18 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O2 -fcompare-debug" } */
-+
-+void
-+f1 (int n, int b)
-+{
-+ extern void f2 (int);
-+ int j;
-+
-+ if (b)
-+ n = 1;
-+
-+ if (n < 1)
-+ __builtin_unreachable ();
-+
-+ for (j = 0; j < n; j++)
-+ f2 (j);
-+}
-Index: gcc/testsuite/gcc.dg/torture/pr60891.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/torture/pr60891.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/torture/pr60891.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,23 @@
-+/* { dg-do compile } */
-+/* { dg-additional-options "-fno-tree-ch -fno-tree-cselim -fno-tree-dominator-opts" } */
-+
-+int a, b, c, d, e, f;
-+
-+void foo (int x)
-+{
-+ for (;;)
-+ {
-+ int g = c;
-+ if (x)
-+ {
-+ if (e)
-+ while (a)
-+ --f;
-+ }
-+ for (b = 5; b; b--)
-+ {
-+ }
-+ if (!g)
-+ x = 0;
-+ }
-+}
-Index: gcc/testsuite/gcc.dg/torture/pr61010.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/torture/pr61010.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/torture/pr61010.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,8 @@
-+/* { dg-do compile } */
-+
-+int main (void)
-+{
-+ int a = 0;
-+ unsigned b = (a * 64 & 192) | 63U;
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.dg/torture/pr61452.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/torture/pr61452.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/torture/pr61452.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,31 @@
-+/* { dg-do run } */
-+
-+int a, b;
-+short c, d;
-+char e, f;
-+
-+int
-+fn1 (int p1, char p2)
-+{
-+ return p1 || p2 ? 0 : p2;
-+}
-+
-+void
-+fn2 ()
-+{
-+ for (; a;)
-+ {
-+ int g;
-+ g = c = e;
-+ for (; a;)
-+ b = fn1 (g = d = e, g);
-+ f = g;
-+ }
-+}
-+
-+int
-+main ()
-+{
-+ fn2 ();
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.dg/torture/pr61383-1.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/torture/pr61383-1.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/torture/pr61383-1.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,35 @@
-+/* { dg-do run } */
-+
-+int a, b = 1, c, d, e, f, g;
-+
-+int
-+fn1 ()
-+{
-+ int h;
-+ for (;;)
-+ {
-+ g = b;
-+ g = g ? 0 : 1 % g;
-+ e = a + 1;
-+ for (; d < 1; d = e)
-+ {
-+ if (f == 0)
-+ h = 0;
-+ else
-+ h = 1 % f;
-+ if (f < 1)
-+ c = 0;
-+ else if (h)
-+ break;
-+ }
-+ if (b)
-+ return 0;
-+ }
-+}
-+
-+int
-+main ()
-+{
-+ fn1 ();
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.dg/torture/pr60903.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/torture/pr60903.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/torture/pr60903.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,22 @@
-+/* { dg-do compile } */
-+
-+extern int a, b, k, q;
-+
-+void
-+foo ()
-+{
-+ if (a)
-+ {
-+ while (q)
-+ {
-+ lbl:
-+ if (a)
-+ {
-+ a = 0;
-+ goto lbl;
-+ }
-+ }
-+ b = k;
-+ }
-+ goto lbl;
-+}
-Index: gcc/testsuite/gcc.dg/torture/pr60930.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/torture/pr60930.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/torture/pr60930.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,22 @@
-+/* { dg-do run } */
-+
-+int x = 1;
-+
-+__attribute__((noinline, noclone)) void
-+foo (unsigned long long t)
-+{
-+ asm volatile ("" : : "r" (&t));
-+ if (t == 1)
-+ __builtin_abort ();
-+}
-+
-+int
-+main ()
-+{
-+#if __SIZEOF_LONG_LONG__ >= 8
-+ unsigned long long t = 0xffffffffffffffffULL * (0xffffffffUL * x);
-+ if (t != 0xffffffff00000001ULL)
-+ foo (t);;
-+#endif
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.dg/torture/pr61681.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/torture/pr61681.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/torture/pr61681.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,37 @@
-+/* { dg-do run } */
-+
-+extern void abort (void);
-+
-+int a = 1, *e = &a, **f = &e, *l, *p, j;
-+static int b;
-+long d;
-+short g;
-+
-+void
-+fn1 (int *p)
-+{
-+ int m;
-+ if (!(*p & j))
-+ {
-+ int *n = &m;
-+ for (d = 6; d; d--)
-+ {
-+ for (g = 0; g < 1; g++)
-+ {
-+ n = l = *f;
-+ b = *p;
-+ }
-+ *n = 0;
-+ }
-+ }
-+}
-+
-+int
-+main ()
-+{
-+ p = *f;
-+ fn1 (p);
-+ if (b != 0)
-+ abort ();
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.dg/torture/pr57864.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/torture/pr57864.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/torture/pr57864.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,37 @@
-+/* { dg-do compile } */
-+
-+union U {
-+ double val;
-+ union U *ptr;
-+};
-+
-+union U *d;
-+double a;
-+int b;
-+int c;
-+
-+static void fn1(union U *p1, int p2, _Bool p3)
-+{
-+ union U *e;
-+
-+ if (p2 == 0)
-+ a = ((union U*)((unsigned long)p1 & ~1))->val;
-+
-+ if (b) {
-+ e = p1;
-+ } else if (c) {
-+ e = ((union U*)((unsigned long)p1 & ~1))->ptr;
-+ d = e;
-+ } else {
-+ e = 0;
-+ d = ((union U*)0)->ptr;
-+ }
-+
-+ fn1 (e, 0, 0);
-+ fn1 (0, 0, p3);
-+}
-+
-+void fn2 (void)
-+{
-+ fn1 (0, 0, 0);
-+}
-Index: gcc/testsuite/gcc.dg/unused-8b.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/unused-8b.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/unused-8b.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,4 @@
-+/* { dg-do compile } */
-+/* { dg-options "-Wall -Wno-unused -Wextra" } */
-+
-+void foo(int x) { }
-Index: gcc/testsuite/gcc.dg/pr61053.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/pr61053.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/pr61053.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,75 @@
-+/* PR c/61053 */
-+/* { dg-do compile { target i?86-*-* x86_64-*-* } } */
-+/* { dg-options "-std=c11 -pedantic-errors" } */
-+
-+_Alignas (char) char cc;
-+_Alignas (short int) char cs;
-+_Alignas (int) char ci;
-+_Alignas (long int) char cl;
-+_Alignas (long long int) char cll;
-+_Alignas (float) char cf;
-+_Alignas (double) char cd;
-+_Alignas (long double) char cld;
-+
-+_Alignas (char) short int sc; /* { dg-error "cannot reduce alignment" } */
-+_Alignas (short int) short int ss;
-+_Alignas (int) short int si;
-+_Alignas (long int) short int sl;
-+_Alignas (long long int) short int sll;
-+_Alignas (float) short int sf;
-+_Alignas (double) short int sd;
-+_Alignas (long double) short int sld;
-+
-+_Alignas (char) int ic; /* { dg-error "cannot reduce alignment" } */
-+_Alignas (short int) int is; /* { dg-error "cannot reduce alignment" } */
-+_Alignas (int) int ii;
-+_Alignas (long int) int il;
-+_Alignas (long long int) int ill;
-+_Alignas (float) int if_;
-+_Alignas (double) int id;
-+_Alignas (long double) int ild;
-+
-+_Alignas (char) long int lic; /* { dg-error "cannot reduce alignment" } */
-+_Alignas (short int) long int lis; /* { dg-error "cannot reduce alignment" } */
-+_Alignas (int) long int lii; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
-+_Alignas (long int) long int lil;
-+_Alignas (long long int) long int lill;
-+_Alignas (float) long int lif; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
-+_Alignas (double) long int lid;
-+_Alignas (long double) long int lild;
-+
-+_Alignas (char) long long int llic; /* { dg-error "cannot reduce alignment" } */
-+_Alignas (short int) long long int llis; /* { dg-error "cannot reduce alignment" } */
-+_Alignas (int) long long int llii; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
-+_Alignas (long int) long long int llil;
-+_Alignas (long long int) long long int llill;
-+_Alignas (float) long long int llif; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
-+_Alignas (double) long long int llid;
-+_Alignas (long double) long long int llild;
-+
-+_Alignas (char) float fc; /* { dg-error "cannot reduce alignment" } */
-+_Alignas (short int) float fs; /* { dg-error "cannot reduce alignment" } */
-+_Alignas (int) float fi;
-+_Alignas (long int) float fl;
-+_Alignas (long long int) float fll;
-+_Alignas (float) float ff;
-+_Alignas (double) float fd;
-+_Alignas (long double) float fld;
-+
-+_Alignas (char) double dc; /* { dg-error "cannot reduce alignment" } */
-+_Alignas (short int) double ds; /* { dg-error "cannot reduce alignment" } */
-+_Alignas (int) double di; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
-+_Alignas (long int) double dl;
-+_Alignas (long long int) double dll;
-+_Alignas (float) double df; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
-+_Alignas (double) double dd;
-+_Alignas (long double) double dld;
-+
-+_Alignas (char) long double ldc; /* { dg-error "cannot reduce alignment" } */
-+_Alignas (short int) long double lds; /* { dg-error "cannot reduce alignment" } */
-+_Alignas (int) long double ldi; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
-+_Alignas (long int) long double ldl; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
-+_Alignas (long long int) long double ldll; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
-+_Alignas (float) long double ldf; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
-+_Alignas (double) long double ldd; /* { dg-error "cannot reduce alignment" "" { target { ! { ia32 } } } } */
-+_Alignas (long double) long double ldld;
-Index: gcc/testsuite/gcc.dg/tree-ssa/alias-30.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/tree-ssa/alias-30.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/tree-ssa/alias-30.c (.../branches/gcc-4_9-branch)
-@@ -1,5 +1,5 @@
- /* { dg-do compile } */
--/* { dg-options "-O -fdump-tree-fre-details" } */
-+/* { dg-options "-O -fdump-tree-fre1-details" } */
-
- extern int posix_memalign(void **memptr,
- __SIZE_TYPE__ alignment, __SIZE_TYPE__ size);
-Index: gcc/testsuite/gcc.dg/tree-ssa/vrp93.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/tree-ssa/vrp93.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/tree-ssa/vrp93.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,36 @@
-+/* PR target/29776 */
-+/* PR tree-optimization/61725 */
-+/* { dg-do compile } */
-+/* { dg-options "-O2 -fdump-tree-vrp1" } */
-+/* { dg-final { scan-tree-dump-not "link_error" "vrp1"} } */
-+/* { dg-final { cleanup-tree-dump "vrp1" } } */
-+
-+#define A(fn, arg, min, max) \
-+ if (__builtin_##fn (arg) < min || __builtin_##fn (arg) > max) \
-+ link_error ();
-+#define B(fn, min, max) \
-+ A (fn, a, min, max) A (fn##l, b, min, max) A (fn##ll, c, min, max)
-+#define C(fn, min, sub) \
-+ A (fn, a, min, ((int) sizeof (a) * __CHAR_BIT__ - sub)) \
-+ A (fn##l, b, min, ((int) sizeof (b) * __CHAR_BIT__ - sub)) \
-+ A (fn##ll, c, min, ((int) sizeof (c) * __CHAR_BIT__ - sub))
-+
-+extern void link_error (void);
-+
-+unsigned int d;
-+unsigned long e;
-+unsigned long long f;
-+
-+void
-+foo (int a, long b, long long c)
-+{
-+ C (ffs, 0, 0)
-+ a &= 63; b &= 63; c &= 63;
-+ B (ffs, 0, 6)
-+ a++; b++; c++;
-+ B (ffs, 1, 7)
-+ a -= 2; b -= 2; c -= 2;
-+ C (ffs, 0, 0)
-+ a -= 63; b -= 63; c -= 63;
-+ C (ffs, 1, 0)
-+}
-Index: gcc/testsuite/gcc.dg/pr60844.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/pr60844.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/pr60844.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,16 @@
-+/* PR tree-optimization/60844 */
-+/* { dg-do compile } */
-+/* { dg-options "-O2 -g" } */
-+/* { dg-additional-options "-mtune=atom" { target { i?86-*-* x86_64-*-* } } } */
-+
-+void
-+foo (int *x, int y, int z)
-+{
-+ int b, c = x[0], d = x[1];
-+ for (b = 0; b < 1; b++)
-+ {
-+ int e = (y ? 1 : 0) | (d ? 2 : 0) | (z ? 1 : 0);
-+ e |= (c ? 2 : 0) | ((1 >> b) ? 1 : 0);
-+ x[2 + b] = e;
-+ }
-+}
-Index: gcc/testsuite/gcc.dg/vect/pr60505.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/vect/pr60505.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/vect/pr60505.c (.../branches/gcc-4_9-branch)
-@@ -10,3 +10,5 @@
- out[i] = (ovec[i] = in[i]);
- out[num] = ovec[num/2];
- }
-+
-+/* { dg-final { cleanup-tree-dump "vect" } } */
-Index: gcc/testsuite/gcc.dg/vect/vect-singleton_1.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/vect/vect-singleton_1.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/vect/vect-singleton_1.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,38 @@
-+/* PR target/59843 ICE on function taking/returning vector of one float64_t. */
-+
-+/* { dg-do compile } */
-+/* { dg-options "-Warray-bounds -O2 -fno-inline -std=c99" } */
-+
-+#define TEST(BASETYPE, VECTYPE, SUFFIX) \
-+ typedef BASETYPE VECTYPE \
-+ __attribute__ ((__vector_size__ (sizeof (BASETYPE)))); \
-+ VECTYPE \
-+ test_vadd_##SUFFIX (VECTYPE a, VECTYPE b) \
-+ { \
-+ return a + b; \
-+ } \
-+ \
-+ void \
-+ test_##SUFFIX (BASETYPE val) \
-+ { \
-+ VECTYPE var = { val }; \
-+ BASETYPE v0 = var[0]; \
-+ BASETYPE v1 = var[1]; /* { dg-warning "index value is out of bound" } */ \
-+ }
-+
-+TEST (double, float64x1_t, f64)
-+
-+/* Original bug was for above type;
-+ in a nod to completeness, test other types too. */
-+
-+TEST (long long, int64x1_t, s64)
-+
-+TEST (float, float32x1_t, f32)
-+
-+TEST (long, longx1_t, l)
-+
-+TEST (int, intx1_t, i)
-+
-+TEST (short, int16x1_t, s16)
-+
-+TEST (char, int8x1_t, s8)
-Index: gcc/testsuite/gcc.dg/vect/pr60841.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/vect/pr60841.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/vect/pr60841.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,183 @@
-+/* { dg-do compile } */
-+/* { dg-additional-options "-ffast-math" } */
-+
-+/* This testcase shouldn't consume much memory or produce a 1GB vectorizer
-+ dump file due to SLP tree explosion. */
-+
-+struct S { int f1, f2, f3, f4; } a;
-+struct T { short f3, f2, f1, f4; };
-+int b, c, d, e, f, g;
-+unsigned long z;
-+
-+void
-+foo (struct T *p, struct T *q, int x, int w)
-+{
-+ for (; x; x++)
-+ {
-+ struct S h;
-+ int i;
-+ struct T j;
-+ struct T *r;
-+ h = a;
-+ g = 0;
-+ r = p + 2 * (c + 4) + 1;
-+ j = *r;
-+ r = p;
-+ f = r->f1 - 1;
-+ b = +1.0 + f * f;
-+ i = (r->f2 + j.f2) / 2;
-+ f = r->f3 - 1;
-+ b += 1.0 - i * f * f;
-+ f = r->f4 - 1;
-+ if (b)
-+ b += -1.0 - i * f;
-+ if (b / w)
-+ {
-+ h.f1 += 8.0 * r->f1;
-+ h.f2 += 8.0 * r->f2;
-+ h.f3 += 8.0 * r->f3;
-+ h.f4 += 8.0 * r->f4;
-+ g = 1;
-+ }
-+ r++;
-+ f = r->f1;
-+ i = (r->f2 + j.f2) / 2;
-+ f = r->f3 - 1;
-+ b += 1.0 - i * f * f;
-+ i = (r->f4);
-+ if (b * 65535UL / w)
-+ {
-+ h.f1 += 10.0 * r->f1;
-+ h.f2 += 10.0 * r->f2;
-+ h.f3 += 10.0 * r->f3;
-+ h.f4 += 10.0 * r->f4;
-+ g += 10.0;
-+ }
-+ r++;
-+ f = r->f1;
-+ z = 5UL * i;
-+ f = r->f2;
-+ i = (r->f3 + j.f3) / 2;
-+ b = -i * f * f;
-+ i = (r->f4 + j.f4) / 2;
-+ if (b * 65535UL / 25.0f)
-+ {
-+ h.f1 += 8.0 * r->f1;
-+ h.f2 += 8.0 * r->f2;
-+ h.f3 += 8.0 * r->f3;
-+ h.f4 += 8.0 * r->f4;
-+ g += 8.0;
-+ }
-+ r++;
-+ f = r->f1 - j.f1;
-+ b = 1 * 2.0 * i * f * f;
-+ f = r->f2;
-+ b += 4.0 * f;
-+ i = r->f3 / 2;
-+ f = r->f4 - 1;
-+ if (b * 1)
-+ {
-+ h.f1 += 8.0 * r->f1;
-+ h.f2 += 8.0 * r->f2;
-+ h.f3 += 8.0 * r->f3;
-+ h.f4 += 8.0 * r->f4;
-+ g += 8.0;
-+ }
-+ b = 4.0 * 1 * f;
-+ if (b * 65535UL / 25.0f)
-+ {
-+ h.f1 += 20.0 * r->f1;
-+ h.f2 += 20.0 * r->f2;
-+ h.f3 += 20.0 * r->f3;
-+ h.f4 += 20.0 * r->f4;
-+ g += 20.0;
-+ }
-+ b = 5 * (0.0 - i);
-+ if (b < 0)
-+ {
-+ h.f1 += 8.0 * r->f1;
-+ h.f2 += 8.0 * r->f2;
-+ h.f3 += 8.0 * r->f3;
-+ h.f4 += 8.0 * r->f4;
-+ g += 8.0;
-+ }
-+ r = p + 2 * (c + 4);
-+ i = (r->f1 + j.f1);
-+ b = 1 * 2.0 * i * 1;
-+ f = r->f2 - 1;
-+ i = (r->f3 + j.f3) / 2;
-+ b = 5 * (0.0 - i) * f * f;
-+ i = (r->f4 + j.f4) / 2;
-+ if (b * 65535UL / 25.0f)
-+ {
-+ h.f1 += 10.0 * r->f1;
-+ h.f2 += 10.0 * r->f2;
-+ h.f3 += 10.0 * r->f3;
-+ h.f4 += 10.0 * r->f4;
-+ g += 10.0;
-+ }
-+ r++;
-+ f = r->f1;
-+ b = 5UL * i * f;
-+ i = (r->f2 + j.f2) / 2;
-+ f = r->f3 - 1;
-+ b = 5 * (0.0 - i) * f * f;
-+ f = r->f4 - 1;
-+ if (b * 65535UL / 25.0f)
-+ {
-+ h.f1 += 40.0 * r->f1;
-+ h.f2 += 40.0 * r->f2;
-+ h.f3 += 40.0 * r->f3;
-+ h.f4 += 40.0 * r->f4;
-+ g += 40.0;
-+ }
-+ r++;
-+ i = (r->f1 + j.f1);
-+ b = 5 * i * f;
-+ f = r->f2;
-+ b = 4.0 * f * f;
-+ f = r->f3;
-+ i = (r->f4 + j.f4) / 2;
-+ b = 5 * (0.0 - i) * f * f;
-+ if (b * 25.0f)
-+ {
-+ h.f1 += 8.0 * r->f1;
-+ h.f2 += 8.0 * r->f2;
-+ h.f3 += 8.0 * r->f3;
-+ h.f4 += 8.0 * r->f4;
-+ g += 8.0;
-+ }
-+ r = p + 4 * (c + 4);
-+ i = r->f1 / 2;
-+ b = 5 * (1.0 + i);
-+ i = r->f2 + j.f2;
-+ f = r->f3 - 1;
-+ b = 5 * (0.0 - i) * f * f;
-+ i = (r->f4 + j.f4) / 2;
-+ if (b * 65535UL / 25.0f)
-+ {
-+ h.f1 += 5.0 * r->f1;
-+ h.f2 += 5.0 * r->f2;
-+ h.f3 += 5.0 * r->f3;
-+ h.f4 += 5.0 * r->f4;
-+ g += 5.0;
-+ }
-+ b = 5 * (1.0 + i);
-+ if (b < 0)
-+ {
-+ h.f1 += 5.0 * r->f1;
-+ h.f2 += 5.0 * r->f2;
-+ h.f3 += 5.0 * r->f3;
-+ h.f4 += 5.0 * r->f4;
-+ g += 5.0;
-+ }
-+ q->f1 = (h.f1 + g / 2 - 1) / g;
-+ q->f2 = (h.f2 + g / 2 - 1) / g;
-+ q->f3 = (h.f3 + g / 2 - 1) / g;
-+ q->f4 = (h.f4 + g / 2 - 1) / g;
-+ p++;
-+ q++;
-+ }
-+}
-+
-+/* { dg-final { cleanup-tree-dump "vect" } } */
-Index: gcc/testsuite/gcc.dg/vect/pr61680.c
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/vect/pr61680.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/vect/pr61680.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,51 @@
-+/* { dg-do run } */
-+
-+#include "tree-vect.h"
-+
-+double v[4096][4];
-+
-+__attribute__((noinline, noclone)) void
-+bar (double p[][4])
-+{
-+ int i;
-+ double d = 172.0;
-+ for (i = 0; i < 4096; i++)
-+ {
-+ if (p[i][0] != 6.0 || p[i][1] != 6.0 || p[i][2] != 10.0)
-+ __builtin_abort ();
-+ if (__builtin_fabs (p[i][3] - d) > 0.25)
-+ __builtin_abort ();
-+ }
-+}
-+
-+__attribute__((noinline, noclone)) void
-+foo (void)
-+{
-+ int i;
-+ double w[4096][4], t;
-+ for (i = 0; i < 4096; i++)
-+ {
-+ w[i][0] = v[i][0] + 2.0;
-+ w[i][1] = v[i][1] + 1.0;
-+ w[i][2] = v[i][2] + 4.0;
-+ w[i][3] = (w[i][0] * w[i][0] + w[i][1] * w[i][1] + w[i][2] * w[i][2]);
-+ }
-+ bar (w);
-+}
-+
-+int
-+main ()
-+{
-+ int i;
-+
-+ check_vect ();
-+
-+ for (i = 0; i < 4096; i++)
-+ {
-+ v[i][0] = 4.0;
-+ v[i][1] = 5.0;
-+ v[i][2] = 6.0;
-+ }
-+ foo ();
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.dg/vect/vect.exp
-===================================================================
---- a/src/gcc/testsuite/gcc.dg/vect/vect.exp (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/gcc.dg/vect/vect.exp (.../branches/gcc-4_9-branch)
-@@ -18,6 +18,7 @@
-
- # Load support procs.
- load_lib gcc-dg.exp
-+load_lib clearcap.exp
-
- # Set up flags used for tests that don't specify options.
- global DEFAULT_VECTCFLAGS
-@@ -41,30 +42,9 @@
- # These flags are used for all targets.
- lappend DEFAULT_VECTCFLAGS "-ftree-vectorize" "-fno-vect-cost-model" "-fno-common"
-
--# If the linker used understands -M <mapfile>, pass it to clear hardware
--# capabilities set by the Sun assembler.
--# Try mapfile syntax v2 first which is the only way to clear hwcap_2 flags.
--set clearcap_ldflags "-Wl,-M,$srcdir/gcc.target/i386/clearcapv2.map"
--
--if ![check_no_compiler_messages mapfilev2 executable {
-- int main (void) { return 0; }
--} $clearcap_ldflags ] {
-- # If this doesn't work, fall back to the less capable v1 syntax.
-- set clearcap_ldflags "-Wl,-M,$srcdir/gcc.target/i386/clearcap.map"
--
-- if ![check_no_compiler_messages mapfile executable {
-- int main (void) { return 0; }
-- } $clearcap_ldflags ] {
-- unset clearcap_ldflags
-- }
--}
--
--if [info exists clearcap_ldflags] {
-- lappend DEFAULT_VECTCFLAGS $clearcap_ldflags
--}
--
- # Initialize `dg'.
- dg-init
-+clearcap-init
-
- global VEC_FLAGS
- set VEC_FLAGS $DEFAULT_VECTCFLAGS
-@@ -308,4 +288,5 @@
- set dg-do-what-default ${save-dg-do-what-default}
-
- # All done.
-+clearcap-finish
- dg-finish
-Index: gcc/testsuite/ChangeLog
-===================================================================
---- a/src/gcc/testsuite/ChangeLog (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/ChangeLog (.../branches/gcc-4_9-branch)
-@@ -1,3 +1,874 @@
-+2014-07-10 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ * gnat.dg/opt39.adb: New test.
-+
-+2014-07-09 Edward Smith-Rowland <3dw4rd@verizon.net>
-+
-+ PR c++/58155 - -Wliteral-suffix warns about tokens which are skipped
-+ g++.dg/cpp0x/pr58155.C: New.
-+
-+2014-07-09 Alan Lawrence <alan.lawrence@arm.com>
-+
-+ Backport r211369 from trunk.
-+ 2014-06-09 Alan Lawrence <alan.lawrence@arm.com>
-+
-+ PR target/61062
-+ * gcc.target/arm/pr48252.c (main): Expect same result as endian-neutral.
-+
-+2014-07-08 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR rtl-optimization/61673
-+ * gcc.c-torture/execute/pr61673.c: New test.
-+
-+2014-07-08 Richard Biener <rguenther@suse.de>
-+
-+ PR tree-optimization/61680
-+ * gcc.dg/vect/pr61680.c: New testcase.
-+
-+ PR tree-optimization/61681
-+ * gcc.dg/torture/pr61681.c: New testcase.
-+
-+2014-07-08 Alan Lawrence <alan.lawrence@arm.com>
-+
-+ Backport r211502 from mainline.
-+ 2014-06-10 Alan Lawrence <alan.lawrence@arm.com>
-+
-+ PR target/59843
-+ * gcc.dg/vect/vect-singleton_1.c: New file.
-+
-+2014-07-08 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR tree-optimization/61725
-+ * gcc.dg/tree-ssa/vrp93.c: New test.
-+ * gcc.c-torture/execute/pr61725.c: New test.
-+
-+2014-07-07 Paul Thomas <pault@gcc.gnu.org>
-+
-+ PR fortran/61459
-+ PR fortran/58883
-+ * gfortran.dg/allocatable_function_8.f90 : New test
-+
-+2014-07-07 Dominique d'Humieres <dominiq@lps.ens.fr>
-+ Mikael Morin <mikael@gcc.gnu.org>
-+
-+ PR fortran/41936
-+ * gfortran.dg/class_array_15.f03: Check memory leaks.
-+
-+2014-07-06 Jerry DeLisle <jvdelisle@gcc.gnu.org>
-+
-+ Backport from mainline.
-+ PR libgfortran/61640
-+ * gfortran.dg/arrayio_16.f90: New test.
-+
-+2014-07-04 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR middle-end/61654
-+ * g++.dg/opt/pr61654.C: New test.
-+
-+ PR tree-optimization/61684
-+ * gcc.c-torture/compile/pr61684.c: New test.
-+
-+ PR c++/61382
-+ Backport from mainline
-+ 2014-06-05 Andreas Schwab <schwab@suse.de>
-+
-+ * g++.dg/cpp0x/initlist86.C (main): Initialize i.
-+
-+2014-07-02 Jakub Jelinek <jakub@redhat.com>
-+ Fritz Reese <Reese-Fritz@zai.com>
-+
-+ * gfortran.dg/oldstyle_5.f: New test.
-+
-+2014-07-01 Paul Pluzhnikov <ppluzhnikov@google.com>
-+
-+ PR c++/58753
-+ PR c++/58930
-+ PR c++/58704
-+
-+ Backported from mainline
-+ 2014-05-20 Paolo Carlini <paolo.carlini@oracle.com>
-+
-+ * g++.dg/cpp0x/nsdmi-template11.C: New.
-+ * g++.dg/cpp0x/nsdmi-template12.C: Likewise.
-+ * g++.dg/cpp0x/nsdmi-template13.C: Likewise.
-+
-+2014-06-28 Edward Smith-Rowland <3dw4rd@verizon.net>
-+
-+ PR c++/58781
-+ PR c++/60249
-+ PR c++/59867
-+ * testsuite/g++.dg/cpp0x/pr58781.C: New.
-+ * testsuite/g++.dg/cpp0x/pr60249.C: New.
-+ * testsuite/g++.dg/cpp1y/pr59867.C: New.
-+
-+2014-06-30 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
-+
-+ * gfortran.dg/round_4.f90: Skip for powerpc*-*-linux* since the
-+ test requires greater precision than the current PowerPC long
-+ double implementation supports.
-+
-+2014-06-30 Jakub Jelinek <jakub@redhat.com>
-+
-+ Backported from mainline
-+ 2014-06-27 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR tree-optimization/57233
-+ PR tree-optimization/61299
-+ * gcc.dg/pr57233.c: New test.
-+ * gcc.target/i386/pr57233.c: New test.
-+ * gcc.target/i386/sse2-pr57233.c: New test.
-+ * gcc.target/i386/avx-pr57233.c: New test.
-+ * gcc.target/i386/avx2-pr57233.c: New test.
-+ * gcc.target/i386/avx512f-pr57233.c: New test.
-+ * gcc.target/i386/xop-pr57233.c: New test.
-+
-+ 2014-06-24 Jakub Jelinek <jakub@redhat.com>
-+
-+ * gfortran.dg/gomp/udr2.f90 (f7, f9): Add !$omp parallel with
-+ reduction clause.
-+ * gfortran.dg/gomp/udr4.f90 (f4): Likewise.
-+ Remove Label is never defined expected error.
-+ * gfortran.dg/gomp/udr8.f90: New test.
-+
-+ 2014-06-18 Jakub Jelinek <jakub@redhat.com>
-+
-+ * gfortran.dg/gomp/declare-simd-1.f90: New test.
-+ * gfortran.dg/gomp/depend-1.f90: New test.
-+ * gfortran.dg/gomp/target1.f90: New test.
-+ * gfortran.dg/gomp/target2.f90: New test.
-+ * gfortran.dg/gomp/target3.f90: New test.
-+ * gfortran.dg/gomp/udr4.f90: Adjust expected diagnostics.
-+ * gfortran.dg/openmp-define-3.f90: Expect _OPENMP 201307 instead of
-+ 201107.
-+
-+ 2014-06-10 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR fortran/60928
-+ * gfortran.dg/gomp/allocatable_components_1.f90: Remove dg-error
-+ directives.
-+ * gfortran.dg/gomp/associate1.f90: New test.
-+ * gfortran.dg/gomp/intentin1.f90: New test.
-+ * gfortran.dg/gomp/openmp-simd-1.f90: New test.
-+ * gfortran.dg/gomp/openmp-simd-2.f90: New test.
-+ * gfortran.dg/gomp/openmp-simd-3.f90: New test.
-+ * gfortran.dg/gomp/proc_ptr_2.f90: New test.
-+
-+ 2014-06-09 Jakub Jelinek <jakub@redhat.com>
-+
-+ * gfortran.dg/gomp/udr6.f90 (f1, f2, f3): Use complex(kind=8)
-+ instead of complex(kind=16).
-+
-+ 2014-06-06 Jakub Jelinek <jakub@redhat.com>
-+
-+ * gfortran.dg/gomp/allocatable_components_1.f90: Adjust for
-+ reduction clause diagnostic changes.
-+ * gfortran.dg/gomp/appendix-a/a.31.3.f90: Likewise.
-+ * gfortran.dg/gomp/reduction1.f90: Likewise.
-+ * gfortran.dg/gomp/reduction3.f90: Likewise.
-+ * gfortran.dg/gomp/udr1.f90: New test.
-+ * gfortran.dg/gomp/udr2.f90: New test.
-+ * gfortran.dg/gomp/udr3.f90: New test.
-+ * gfortran.dg/gomp/udr4.f90: New test.
-+ * gfortran.dg/gomp/udr5.f90: New test.
-+ * gfortran.dg/gomp/udr6.f90: New test.
-+ * gfortran.dg/gomp/udr7.f90: New test.
-+
-+ 2014-05-12 Tobias Burnus <burnus@net-b.de>
-+
-+ PR fortran/60127
-+ * gfortran.dg/gomp/omp_do_concurrent.f90: New.
-+
-+ 2014-05-11 Jakub Jelinek <jakub@redhat.com>
-+
-+ * gfortran.dg/gomp/affinity-1.f90: New test.
-+
-+2014-06-30 Sebastian Huber <sebastian.huber@embedded-brains.de>
-+
-+ * gcc.dg/typeof-2.c: New testcase.
-+
-+2014-06-30 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
-+
-+ * gcc.target/aarch64/vqdmulhh_lane_s16.c: New test.
-+ * gcc.target/aarch64/vqdmulhs_lane_s32.c: Likewise.
-+ * gcc.target/aarch64/vqrdmulhh_lane_s16.c: Likewise.
-+ * gcc.target/aarch64/vqrdmulhs_lane_s32.c: Likewise.
-+ * gcc.target/aarch64/vqdmlal_high_lane_s16.c: New test.
-+ * gcc.target/aarch64/vqdmlal_high_lane_s32.c: Likewise.
-+ * gcc.target/aarch64/vqdmlal_high_laneq_s16.c: Likewise.
-+ * gcc.target/aarch64/vqdmlal_high_laneq_s32.c: Likewise.
-+ * gcc.target/aarch64/vqdmlal_lane_s16.c: Likewise.
-+ * gcc.target/aarch64/vqdmlal_lane_s32.c: Likewise.
-+ * gcc.target/aarch64/vqdmlal_laneq_s16.c: Likewise.
-+ * gcc.target/aarch64/vqdmlal_laneq_s32.c: Likewise.
-+ * gcc.target/aarch64/vqdmlalh_lane_s16.c: Likewise.
-+ * gcc.target/aarch64/vqdmlals_lane_s32.c: Likewise.
-+ * gcc.target/aarch64/vqdmlsl_high_lane_s16.c: Likewise.
-+ * gcc.target/aarch64/vqdmlsl_high_lane_s32.c: Likewise.
-+ * gcc.target/aarch64/vqdmlsl_high_laneq_s16.c: Likewise.
-+ * gcc.target/aarch64/vqdmlsl_high_laneq_s32.c: Likewise.
-+ * gcc.target/aarch64/vqdmlsl_lane_s16.c: Likewise.
-+ * gcc.target/aarch64/vqdmlsl_lane_s32.c: Likewise.
-+ * gcc.target/aarch64/vqdmlsl_laneq_s32.c: Likewise.
-+ * gcc.target/aarch64/vqdmlslh_lane_s16.c: Likewise.
-+ * gcc.target/aarch64/vqdmlsls_lane_s32.c: Likewise.
-+ * gcc.target/aarch64/vqdmulh_laneq_s16.c: Likewise.
-+ * gcc.target/aarch64/vqdmulh_laneq_s32.c: Likewise.
-+ * gcc.target/aarch64/vqdmulhq_laneq_s16.c: Likewise.
-+ * gcc.target/aarch64/vqdmulhq_laneq_s32.c: Likewise.
-+ * gcc.target/aarch64/vqdmull_high_lane_s16.c: Likewise.
-+ * gcc.target/aarch64/vqdmull_high_lane_s32.c: Likewise.
-+ * gcc.target/aarch64/vqdmull_high_laneq_s16.c: Likewise.
-+ * gcc.target/aarch64/vqdmull_high_laneq_s32.c: Likewise.
-+ * gcc.target/aarch64/vqdmull_lane_s16.c: Likewise.
-+ * gcc.target/aarch64/vqdmull_lane_s32.c: Likewise.
-+ * gcc.target/aarch64/vqdmull_laneq_s16.c: Likewise.
-+ * gcc.target/aarch64/vqdmull_laneq_s32.c: Likewise.
-+ * gcc.target/aarch64/vqdmullh_lane_s16.c: Likewise.
-+ * gcc.target/aarch64/vqdmulls_lane_s32.c: Likewise.
-+ * gcc.target/aarch64/vqrdmulh_laneq_s16.c: Likewise.
-+ * gcc.target/aarch64/vqrdmulh_laneq_s32.c: Likewise.
-+ * gcc.target/aarch64/vqrdmulhq_laneq_s16.c: Likewise.
-+ * gcc.target/aarch64/vqrdmulhq_laneq_s32.c: Likewise.
-+ * gcc.target/aarch64/vector_intrinsics.c: Simplify arm_neon.h include.
-+ (test_vqdmlal_high_lane_s16): Fix parameter type.
-+ (test_vqdmlal_high_lane_s32): Likewise.
-+ (test_vqdmull_high_lane_s16): Likewise.
-+ (test_vqdmull_high_lane_s32): Likewise.
-+ (test_vqdmlsl_high_lane_s32): Likewise.
-+ (test_vqdmlsl_high_lane_s16): Likewise.
-+ * gcc.target/aarch64/scalar_intrinsics.c (test_vqdmlalh_lane_s16):
-+ Fix argument type.
-+ (test_vqdmlals_lane_s32): Likewise.
-+ (test_vqdmlslh_lane_s16): Likewise.
-+ (test_vqdmlsls_lane_s32): Likewise.
-+ (test_vqdmulhh_lane_s16): Likewise.
-+ (test_vqdmulhs_lane_s32): Likewise.
-+ (test_vqdmullh_lane_s16): Likewise.
-+ (test_vqdmulls_lane_s32): Likewise.
-+ (test_vqrdmulhh_lane_s16): Likewise.
-+ (test_vqrdmulhs_lane_s32): Likewise.
-+
-+2014-06-30 Igor Zamyatin <igor.zamyatin@intel.com>
-+
-+ PR middle-end/57541
-+ * c-c++-common/cilk-plus/AN/pr57541.c: New case added.
-+ * c-c++-common/cilk-plus/AN/pr57541-2.c: New test.
-+
-+2014-06-30 Thomas Preud'homme <thomas.preudhomme@arm.com>
-+
-+ Backport from mainline
-+ 2014-06-11 Thomas Preud'homme <thomas.preudhomme@arm.com>
-+
-+ PR tree-optimization/61306
-+ * gcc.c-torture/execute/pr61306-1.c: New test.
-+ * gcc.c-torture/execute/pr61306-2.c: Likewise.
-+ * gcc.c-torture/execute/pr61306-3.c: Likewise.
-+
-+2014-06-27 Jerry DeLisle <jvdelisle@gcc.gnu.org>
-+
-+ Backport from mainline.
-+ PR libgfortran/61499
-+ * gfortran.dg/arrayio_15.f90: New test.
-+
-+2014-06-27 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
-+
-+ * gfortran.dg/nint_2.f90: Don't XFAIL for powerpc64le-*-linux*.
-+
-+2014-06-27 Paolo Carlini <paolo.carlini@oracle.com>
-+
-+ PR c++/61614
-+ * g++.dg/ext/complit14.C: New.
-+
-+2014-06-27 Martin Jambor <mjambor@suse.cz>
-+
-+ PR ipa/61160
-+ * g++.dg/ipa/pr61160-2.C: New test.
-+ * g++.dg/ipa/pr61160-3.C: Likewise.
-+
-+2014-06-27 Uros Bizjak <ubizjak@gmail.com>
-+
-+ Backport from mainline
-+ 2014-06-26 Uros Bizjak <ubizjak@gmail.com>
-+
-+ PR target/61586
-+ * gcc.target/alpha/pr61586.c: New test.
-+
-+2014-06-26 Adam Butcher <adam@jessamine.co.uk>
-+
-+ PR c++/61537
-+ * g++.dg/template/pr61537.C: New testcase.
-+
-+2014-06-26 Martin Jambor <mjambor@suse.cz>
-+
-+ * g++.dg/ipa/pr60600.C: Fix typo.
-+ * g++.dg/ipa/devirt-25.C: Likewise.
-+ * g++.dg/ipa/pr61540.C: Likewise.
-+
-+2014-06-26 Martin Jambor <mjambor@suse.cz>
-+
-+ * g++.dg/ipa/pr61540.C: Remove dumping test.
-+
-+2014-06-25 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
-+
-+ * gfortran.dg/default_format_denormal_2.f90: Remove xfail for
-+ powerpc*-*-linux*.
-+
-+2014-06-23 Alan Modra <amodra@gmail.com>
-+
-+ * gcc.dg/pr61583.c: New.
-+
-+2014-06-20 Martin Jambor <mjambor@suse.cz>
-+
-+ PR ipa/61540
-+ * g++.dg/ipa/pr61540.C: New test.
-+
-+2014-06-17 Yufeng Zhang <yufeng.zhang@arm.com>
-+
-+ PR target/61483
-+ * gcc.target/aarch64/aapcs64/type-def.h (struct hfa_fx2_t): New type.
-+ * gcc.target/aarch64/aapcs64/va_arg-13.c: New test.
-+ * gcc.target/aarch64/aapcs64/va_arg-14.c: Ditto.
-+ * gcc.target/aarch64/aapcs64/va_arg-15.c: Ditto.
-+
-+2014-06-17 Richard Biener <rguenther@suse.de>
-+
-+ PR lto/61012
-+ * gcc.dg/lto/pr61526_0.c: New testcase.
-+ * gcc.dg/lto/pr61526_1.c: Likewise.
-+
-+2014-06-17 Uros Bizjak <ubizjak@gmail.com>
-+
-+ Backport from mainline
-+ 2014-06-06 Uros Bizjak <ubizjak@gmail.com>
-+
-+ PR target/61423
-+ * gcc.target/i386/pr61423.c: New test.
-+
-+2014-06-15 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
-+
-+ Backport from trunk.
-+ PR fortran/45187
-+ * gfortran.dg/cray_pointers_10.f90: New file.
-+
-+2014-06-13 Peter Bergner <bergner@vnet.ibm.com>
-+
-+ Backport from mainline
-+
-+ 2014-06-13 Peter Bergner <bergner@vnet.ibm.com>
-+ PR target/61415
-+ * lib/target-supports.exp (check_effective_target_longdouble128): New.
-+ * gcc.target/powerpc/pack02.c: Use it.
-+ * gcc.target/powerpc/tfmode_off.c: Likewise.
-+
-+2014-06-13 Jeff Law <law@redhat.com>
-+
-+ Backports from mainline:
-+
-+ 2014-06-13 Ilya Enkovich <ilya.enkovich@intel.com>
-+
-+ PR rtl-optimization/61094
-+ PR rtl-optimization/61446
-+ * gcc.target/i386/pr61446.c : New.
-+
-+ 2014-06-02 Jeff Law <law@redhat.com>
-+
-+ PR rtl-optimization/61094
-+ * g++.dg/pr61094: New test.
-+
-+2014-06-12 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR middle-end/61486
-+ * c-c++-common/gomp/pr61486-1.c: New test.
-+ * c-c++-common/gomp/pr61486-2.c: New test.
-+
-+2014-06-12 Jeff Law <law@redhat.com>
-+
-+ Backports from mainline:
-+ 2014-06-05 Jeff Law <law@redhat.com>
-+
-+ PR tree-optimization/61289
-+ * g++.dg/pr61289.C: New test.
-+ * g++.dg/pr61289-2.C: New test.
-+
-+2014-06-12 Georg-Johann Lay <avr@gjlay.de>
-+
-+ Backport from 2014-06-12 trunk r211491
-+
-+ PR target/61443
-+ * gcc.target/avr/torture/pr61443.c: New test.
-+
-+2014-06-11 Richard Biener <rguenther@suse.de>
-+
-+ PR tree-optimization/61452
-+ * gcc.dg/torture/pr61452.c: New testcase.
-+
-+2014-06-11 Richard Biener <rguenther@suse.de>
-+
-+ PR middle-end/61456
-+ * g++.dg/opt/pr61456.C: New testcase.
-+
-+2014-06-09 Paul Thomas <pault@gcc.gnu.org>
-+
-+ Backport from trunk.
-+ PR fortran/61406
-+ * gfortran.dg/associate_17.f90 : New test
-+
-+2014-06-07 Jerry DeLisle <jvdelisle@gcc.gnu>
-+
-+ Backport from trunk.
-+ PR libfortran/61173
-+ * gfortran.dg/arrayio_14.f90: New test.
-+
-+2014-06-07 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ * gnat.dg/opt38.adb: New test.
-+ * gnat.dg/opt38_pkg.ad[sb]: New helper.
-+
-+2014-06-04 Richard Biener <rguenther@suse.de>
-+
-+ PR tree-optimization/61383
-+ * gcc.dg/torture/pr61383-1.c: New testcase.
-+
-+2014-06-04 Igor Zamyatin <igor.zamyatin@intel.com>
-+
-+ PR c/58942
-+ * c-c++-common/cilk-plus/AN/pr58942.c: Check for correct handling of
-+ the case with a pointer.
-+
-+2014-06-04 Marek Polacek <polacek@redhat.com>
-+
-+ Backport from mainline
-+ 2014-05-08 Marek Polacek <polacek@redhat.com>
-+
-+ PR c/61053
-+ * gcc.dg/pr61053.c: New test.
-+
-+2014-06-03 Martin Jambor <mjambor@suse.cz>
-+
-+ PR ipa/61160
-+ * g++.dg/ipa/pr61160-1.C: New test.
-+
-+2014-06-03 Andrey Belevantsev <abel@ispras.ru>
-+
-+ Backport from mainline
-+ 2014-05-14 Andrey Belevantsev <abel@ispras.ru>
-+
-+ PR rtl-optimization/60866
-+ * gcc.dg/pr60866.c: New test.
-+
-+2014-06-03 Andrey Belevantsev <abel@ispras.ru>
-+
-+ Backport from mainline
-+ 2014-05-14 Andrey Belevantsev <abel@ispras.ru>
-+
-+ PR rtl-optimization/60901
-+ * gcc.target/i386/pr60901.c: New test.
-+
-+2014-06-01 Uros Bizjak <ubizjak@gmail.com>
-+
-+ * g++.dg/pr60969.C (dg-do compile): Change ilp32 target to ia32.
-+
-+2014-05-29 Vladimir Makarov <vmakarov@redhat.com>
-+
-+ PR rtl-optimization/61325
-+ * gcc.target/aarch64/pr61325.c: New.
-+
-+2014-05-29 Thomas Koenig <tkoenig@gcc.gnu.org>
-+
-+ PR fortran/60834
-+ Backport from mainline
-+ * gfortran.dg/associate_16.f90: New test.
-+
-+2014-05-28 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ Backport from mainline
-+ 2014-05-27 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ * gnat.dg/overflow_fixed.adb: New test.
-+
-+2014-05-28 Richard Biener <rguenther@suse.de>
-+
-+ Backport from mainline
-+ 2014-05-28 Richard Biener <rguenther@suse.de>
-+
-+ PR middle-end/61045
-+ * gcc.dg/pr61045.c: New testcase.
-+
-+ 2014-05-05 Richard Biener <rguenther@suse.de>
-+
-+ PR middle-end/61010
-+ * gcc.dg/torture/pr61010.c: New testcase.
-+
-+ 2014-04-28 Richard Biener <rguenther@suse.de>
-+
-+ PR tree-optimization/60979
-+ * gcc.dg/graphite/pr60979.c: New testcase.
-+
-+2014-05-28 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
-+
-+ * lib/clearcap.exp: New file.
-+ * gcc.dg/vect/vect.exp: Load clearcap.exp.
-+ Remove clearcap_ldflags handling.
-+ Call clearcap-init, clearcap-finish.
-+ * gcc.target/i386/i386.exp: Likewise.
-+ * gcc.target/i386/clearcap.map: Move to ../config/sol2-clearcap.map.
-+ * gcc.target/i386/clearcapv2.map: Move to
-+ ../config/sol2-clearcapv2.map.
-+ * gcc.target/x86_64/abi/avx/abi-avx.exp: Likewise.
-+ * gcc.target/x86_64/abi/avx512f/abi-avx512f.exp: Likewise.
-+
-+2014-05-27 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ * gnat.dg/aliasing1.adb (dg-final): Robustify pattern matching.
-+
-+2014-05-26 Uros Bizjak <ubizjak@gmail.com>
-+
-+ * c-c++-common/cilk-plus/AN/pr61191.c: Fix dg-error directives.
-+
-+2014-05-26 Igor Zamyatin <igor.zamyatin@intel.com>
-+
-+ PR c/61191
-+ * c-c++-common/cilk-plus/AN/pr61191.c: Check for correct handling of
-+ the case with syntax error.
-+
-+2014-05-22 Peter Bergner <bergner@vnet.ibm.com>
-+
-+ * gcc.target/powerpc/htm-ttest.c: New test.
-+
-+2014-05-21 Igor Zamyatin <igor.zamyatin@intel.com>
-+
-+ PR c++/60189
-+ * c-c++-common/cilk-plus/CK/invalid_sync.cc: New test.
-+
-+2014-05-18 Jan Hubicka <hubicka@ucw.cz>
-+
-+ PR middle-end/58094
-+ * g++.dg/ipa/devirt-11.C: Be lax about number of devirtualizations.
-+
-+2014-05-18 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ * gnat.dg/enum3.adb: New test.
-+
-+2014-04-16 Jan Hubicka <hubicka@ucw.cz>
-+
-+ PR ipa/60854
-+ * g++.dg/torture/pr60854.C: New testcase.
-+
-+2014-05-17 Uros Bizjak <ubizjak@gmail.com>
-+
-+ * g++.dg/pr60969.C: Compile for all ilp32 x86 targets.
-+ (dg-options): Add -mfpmath=387.
-+ (dg-final): Check that no MMX registers are used.
-+
-+2014-05-16 Vladimir Makarov <vmakarov@redhat.com>
-+
-+ PR rtl-optimization/60969
-+ * g++.dg/pr60969.C: New.
-+
-+2014-05-15 Martin Jambor <mjambor@suse.cz>
-+
-+ PR ipa/61085
-+ * g++.dg/ipa/pr61085.C: New test.
-+
-+2014-05-15 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR tree-optimization/61158
-+ * gcc.dg/pr61158.c: New test.
-+
-+2014-05-14 Matthias Klose <doko@ubuntu.com>
-+
-+ PR driver/61106
-+ * gcc-dg/unused-8a.c: Remove.
-+
-+2014-05-13 Peter Bergner <bergner@vnet.ibm.com>
-+
-+ * lib/target-support.exp (check_dfp_hw_available): New function.
-+ (is-effective-target): Check $arg for dfp_hw.
-+ (is-effective-target-keyword): Likewise.
-+ * gcc.target/powerpc/pack03.c: (dg-require-effective-target):
-+ Change target to dfp_hw.
-+
-+2014-05-13 Jeff Law <law@redhat.com>
-+
-+ Backports from mainline
-+
-+ 2014-05-08 Jeff Law <law@redhat.com>
-+
-+ PR tree-optimization/61009
-+ * g++.dg/tree-ssa/pr61009.C: New test.
-+
-+ 2014-04-23 Jeff Law <law@redhat.com>
-+
-+ PR tree-optimization/60902
-+ * gcc.target/i386/pr60902.c: New test.
-+
-+2014-05-13 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR target/61060
-+ * gcc.dg/pr61060.c: New test.
-+
-+2014-05-12 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
-+
-+ Backport from mainline
-+ 2014-05-12 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com>
-+
-+ PR target/60991
-+ * gcc.target/avr/pr60991.c: New testcase.
-+
-+2014-05-10 Jerry DeLisle <jvdelisle@gcc.gnu>
-+
-+ Backport from trunk.
-+ PR libfortran/61049
-+ * gfortran.dg/list_read_13.f: New test.
-+
-+2014-05-09 Georg-Johann Lay <avr@gjlay.de>
-+
-+ Backport from 2014-05-09 trunk r210267
-+
-+ PR target/61055
-+ * gcc.target/avr/torture/pr61055.c: New test.
-+
-+2014-05-08 Matthias Klose <doko@ubuntu.com>
-+
-+ PR driver/61106
-+ * gcc-dg/unused-8a.c: New.
-+ * gcc-dg/unused-8b.c: Likewise.
-+
-+2014-05-07 Paolo Carlini <paolo.carlini@oracle.com>
-+
-+ PR c++/61083
-+ * g++.dg/cpp0x/sfinae50.C: New.
-+
-+2014-05-07 Richard Biener <rguenther@suse.de>
-+
-+ PR tree-optimization/57864
-+ * gcc.dg/torture/pr57864.c: New testcase.
-+
-+2014-05-06 Paolo Carlini <paolo.carlini@oracle.com>
-+
-+ PR c++/60999
-+ * g++.dg/cpp0x/nsdmi-template9.C: New.
-+ * g++.dg/cpp0x/nsdmi-template10.C: Likewise.
-+
-+2014-05-04 Jan Hubicka <hubicka@ucw.cz>
-+
-+ PR ipa/60965
-+ * g++.dg/ipa/devirt-31.C: New testcase.
-+ * g++.dg/ipa/devirt-11.C: Adjust testcase.
-+
-+2014-05-04 Peter Bergner <bergner@vnet.ibm.com>
-+
-+ * gcc.target/powerpc/pack02.c (dg-options): Add -mhard-float.
-+ (dg-require-effective-target): Change target to powerpc_fprs.
-+ * gcc.target/powerpc/pack03.c (dg-options): Add -mhard-dfp.
-+ (dg-require-effective-target): Change target to dfprt.
-+
-+2014-05-02 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
-+
-+ PR tree-optimization/60930
-+ * gcc.dg/torture/pr60930.c: New test.
-+
-+2014-04-30 Michael Meissner <meissner@linux.vnet.ibm.com>
-+
-+ Back port from mainline
-+ 2014-04-24 Michael Meissner <meissner@linux.vnet.ibm.com>
-+
-+ * gcc.target/powerpc/pack01.c: New test to test the new pack and
-+ unpack builtin functionss for 128-bit types.
-+ * gcc.target/powerpc/pack02.c: Likewise.
-+ * gcc.target/powerpc/pack03.c: Likewise.
-+ * gcc.target/powerpc/extend-divide-1.c: New test to test extended
-+ divide builtin functionss.
-+ * gcc.target/powerpc/extend-divide-2.c: Likewise.
-+ * gcc.target/powerpc/bcd-1.c: New test for the new BCD builtin
-+ functions.
-+ * gcc.target/powerpc/bcd-2.c: Likewise.
-+ * gcc.target/powerpc/bcd-3.c: Likewise.
-+ * gcc.target/powerpc/dfp-builtin-1.c: New test for the new DFP
-+ builtin functionss.
-+ * gcc.target/powerpc/dfp-builtin-2.c: Likewise.
-+
-+2014-04-29 Pat Haugen <pthaugen@us.ibm.com>
-+
-+ Backport from mainline
-+ 2014-04-17 Pat Haugen <pthaugen@us.ibm.com>
-+
-+ * gcc.target/powerpc/ti_math1.c: New.
-+ * gcc.target/powerpc/ti_math2.c: New.
-+
-+2014-04-29 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR tree-optimization/60971
-+ * c-c++-common/turtore/pr60971.c: New test.
-+
-+2014-04-26 Uros Bizjak <ubizjak@gmail.com>
-+
-+ * gcc.dg/tree-ssa/alias-30.c (dg-options): Dump only fre1 details.
-+ * gcc.dg/vect/pr60505.c: Cleanup vect tree dump.
-+ * g++.dg/ipa/devirt-27.C (dg-options): Remove -fdump-ipa-devirt.
-+
-+2014-04-25 Uros Bizjak <ubizjak@gmail.com>
-+
-+ * c-c++-common/gomp/pr60823-2.c: Require effective target
-+ vect_simd_clones.
-+
-+2014-04-25 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR tree-optimization/60960
-+ * gcc.c-torture/execute/pr60960.c: New test.
-+
-+2014-04-25 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ * gcc.c-torture/execute/20140425-1.c: New test.
-+
-+2014-04-25 Richard Biener <rguenther@suse.de>
-+
-+ PR ipa/60912
-+ * g++.dg/opt/pr60912.C: New testcase.
-+
-+2014-04-25 Richard Biener <rguenther@suse.de>
-+
-+ PR ipa/60911
-+ * gcc.dg/lto/pr60911_0.c: New testcase.
-+
-+2014-04-24 Jakub Jelinek <jakub@redhat.com>
-+
-+ * c-c++-common/gomp/atomic-16.c: Remove all dg-error directives.
-+ Replace load with read and store with write.
-+
-+2014-04-23 Uros Bizjak <ubizjak@gmail.com>
-+
-+ Backport from mainline
-+ 2014-04-21 Uros Bizjak <ubizjak@gmail.com>
-+
-+ PR target/60909
-+ * gcc.target/i386/pr60909-1.c: New test.
-+ * gcc.target/i386/pr60909-2.c: Ditto.
-+
-+2014-04-23 Richard Biener <rguenther@suse.de>
-+
-+ PR tree-optimization/60903
-+ * gcc.dg/torture/pr60903.c: New testcase.
-+
-+2014-04-23 Richard Biener <rguenther@suse.de>
-+
-+ Backport from mainline
-+ 2014-04-14 Richard Biener <rguenther@suse.de>
-+
-+ PR lto/60720
-+ * gcc.dg/lto/pr60720_0.c: New testcase.
-+ * gcc.dg/lto/pr60720_1.c: Likewise.
-+
-+2014-04-23 Richard Biener <rguenther@suse.de>
-+
-+ PR middle-end/60895
-+ * g++.dg/torture/pr60895.C: New testcase.
-+
-+2014-04-23 Richard Biener <rguenther@suse.de>
-+
-+ PR middle-end/60891
-+ * gcc.dg/torture/pr60891.c: New testcase.
-+
-+2014-04-22 Michael Meissner <meissner@linux.vnet.ibm.com>
-+
-+ Backport from mainline
-+ 2014-04-21 Michael Meissner <meissner@linux.vnet.ibm.com>
-+
-+ PR target/60735
-+ * gcc.target/powerpc/pr60735.c: New test. Insure _Decimal64 does
-+ not cause errors if -mspe.
-+
-+2014-04-22 Tobias Burnus <burnus@net-b.de>
-+
-+ Backport from mainline
-+ 2014-04-11 Tobias Burnus <burnus@net-b.de>
-+
-+ PR fortran/58880
-+ PR fortran/60495
-+ * gfortran.dg/finalize_25.f90: New.
-+
-+2014-04-22 H.J. Lu <hongjiu.lu@intel.com>
-+
-+ Backport from mainline
-+ 2014-04-22 H.J. Lu <hongjiu.lu@intel.com>
-+
-+ * gcc.target/i386/pr60868.c: New testcase.
-+
-+2014-04-22 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR c/59073
-+ * c-c++-common/gomp/pr59073.c: New test.
-+
-+2014-04-22 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
-+
-+ * gcc.dg/vmx/merge-vsx.c: Add V4SI and V4SF tests.
-+ * gcc.dg/vmx/merge-vsx-be-order.c: Likewise.
-+
-+2014-04-22 Richard Biener <rguenther@suse.de>
-+
-+ Backport from mainline
-+ 2014-04-14 Richard Biener <rguenther@suse.de>
-+
-+ PR middle-end/55022
-+ * gcc.dg/graphite/pr55022.c: New testcase.
-+
-+2014-04-22 Richard Biener <rguenther@suse.de>
-+
-+ Backport from mainline
-+ 2014-04-17 Richard Biener <rguenther@suse.de>
-+
-+ PR middle-end/60849
-+ * g++.dg/opt/pr60849.C: New testcase.
-+
-+2014-04-22 Richard Biener <rguenther@suse.de>
-+
-+ Backport from mainline
-+ 2014-04-17 Richard Biener <rguenther@suse.de>
-+
-+ PR tree-optimization/60841
-+ * gcc.dg/vect/pr60841.c: New testcase.
-+
-+2014-04-22 Richard Biener <rguenther@suse.de>
-+
-+ Backport from mainline
-+ 2014-04-17 Richard Biener <rguenther@suse.de>
-+
-+ PR tree-optimization/60836
-+ * g++.dg/vect/pr60836.cc: New testcase.
-+
-+2014-04-22 Richard Biener <rguenther@suse.de>
-+
-+ Backport from mainline
-+ 2014-04-14 Richard Biener <rguenther@suse.de>
-+ Marc Glisse <marc.glisse@inria.fr>
-+
-+ PR c/60819
-+ * gcc.target/i386/vec-may_alias.c: New testcase.
-+
-+2014-04-22 Richard Biener <rguenther@suse.de>
-+
-+ Backport from mainline
-+ 2014-04-14 Richard Biener <rguenther@suse.de>
-+
-+ PR tree-optimization/59817
-+ PR tree-optimization/60453
-+ * gfortran.dg/graphite/pr59817.f: New testcase.
-+ * gcc.dg/graphite/pr59817-1.c: Likewise.
-+ * gcc.dg/graphite/pr59817-2.c: Likewise.
-+
-+2014-04-22 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR tree-optimization/60823
-+ * c-c++-common/gomp/pr60823-1.c: New test.
-+ * c-c++-common/gomp/pr60823-2.c: New test.
-+ * c-c++-common/gomp/pr60823-3.c: New test.
-+
-+ Backported from mainline
-+ 2014-04-16 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR tree-optimization/60844
-+ * gcc.dg/pr60844.c: New test.
-+
- 2014-04-22 Release Manager
-
- * GCC 4.9.0 released.
-@@ -51,7 +922,7 @@
- 2014-04-12 Jerry DeLisle <jvdelisle@gcc.gnu>
-
- PR libfortran/60810
-- gfortran.dg/arrayio_13.f90: New test.
-+ * gfortran.dg/arrayio_13.f90: New test.
-
- 2014-04-11 Steve Ellcey <sellcey@mips.com>
- Jakub Jelinek <jakub@redhat.com>
-@@ -135,8 +1006,7 @@
-
- 2014-04-08 Jason Merrill <jason@redhat.com>
-
-- * lib/gcc-dg.exp (dg-build-dso): Reset dg-do-what-default to
-- compile.
-+ * lib/gcc-dg.exp (dg-build-dso): Reset dg-do-what-default to compile.
-
- 2014-04-08 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
-
-@@ -256,10 +1126,10 @@
- 2014-04-04 Martin Jambor <mjambor@suse.cz>
-
- PR ipa/60640
-- * g++.dg/ipa/pr60640-1.C: New test.
-- * g++.dg/ipa/pr60640-2.C: Likewise.
-- * g++.dg/ipa/pr60640-3.C: Likewise.
-- * g++.dg/ipa/pr60640-4.C: Likewise.
-+ * g++.dg/ipa/pr60640-1.C: New test.
-+ * g++.dg/ipa/pr60640-2.C: Likewise.
-+ * g++.dg/ipa/pr60640-3.C: Likewise.
-+ * g++.dg/ipa/pr60640-4.C: Likewise.
-
- 2014-04-04 Jeff Law <law@redhat.com>
-
-@@ -371,7 +1241,7 @@
-
- 2014-04-01 Fabien Chêne <fabien@gcc.gnu.org>
-
-- * g++.dg/init/ctor4.C: Adjust.
-+ * g++.dg/init/ctor4.C: Adjust.
- * g++.dg/init/ctor4-1.C: New.
- * g++.dg/cpp0x/defaulted2.C: Adjust.
-
-@@ -459,8 +1329,8 @@
-
- 2014-03-27 Jeff Law <law@redhat.com>
-
-- PR target/60648
-- * g++.dg/pr60648.C: New test.
-+ PR target/60648
-+ * g++.dg/pr60648.C: New test.
-
- 2014-03-28 Adam Butcher <adam@jessamine.co.uk>
-
-@@ -493,14 +1363,13 @@
-
- 2014-03-28 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
-
-- * gcc.dg/tree-ssa/ssa-dom-thread-4.c: Remove s390 special
-- option.
-+ * gcc.dg/tree-ssa/ssa-dom-thread-4.c: Remove s390 special option.
- * lib/target-supports.exp: Return true for s390
-- in check_effective_logical_op_short_circuit.
-+ in check_effective_logical_op_short_circuit.
-
- 2014-03-28 Kirill Yukhin <kirill.yukhin@intel.com>
-
-- * gcc.target/i386/avx512f-vshuff32x4-2.c: Fix initialization
-+ * gcc.target/i386/avx512f-vshuff32x4-2.c: Fix initialization
- of second source operand.
- * gcc.target/i386/avx512f-vshuff64x2-2.c: Ditto.
- * gcc.target/i386/avx512f-vshufi32x4-2.c: Ditto.
-@@ -635,8 +1504,8 @@
-
- 2014-03-24 Marek Polacek <polacek@redhat.com>
-
-- * c-c++-common/ubsan/div-by-zero-4.c: Don't include limits.h. Define
-- INT_MIN.
-+ * c-c++-common/ubsan/div-by-zero-4.c: Don't include limits.h.
-+ Define INT_MIN.
- * c-c++-common/ubsan/overflow-1.c: Check for unwanted output.
- * c-c++-common/ubsan/overflow-add-1.c: Likewise.
- * c-c++-common/ubsan/overflow-mul-1.c: Likewise.
-@@ -721,8 +1590,7 @@
- 2014-03-21 Tobias Burnus <burnus@net-b.de>
-
- PR fortran/60599
-- * lib/gcc-dg.exp (scan-module): Uncompress .mod files for
-- reading.
-+ * lib/gcc-dg.exp (scan-module): Uncompress .mod files for reading.
-
- 2014-03-20 Jakub Jelinek <jakub@redhat.com>
-
-@@ -1540,8 +2408,7 @@
-
- 2014-02-19 Paul Pluzhnikov <ppluzhnikov@google.com>
-
-- * gcc.dg/vect/no-vfa-vect-depend-2.c (main1): Fix buffer
-- overflow.
-+ * gcc.dg/vect/no-vfa-vect-depend-2.c (main1): Fix buffer overflow.
-
- 2014-02-19 Jakub Jelinek <jakub@redhat.com>
-
-@@ -1850,8 +2717,7 @@
-
- 2014-02-10 Jakub Jelinek <jakub@redhat.com>
-
-- * gcc.dg/vect/pr59984.c: Require effective target
-- vect_simd_clones.
-+ * gcc.dg/vect/pr59984.c: Require effective target vect_simd_clones.
-
- 2014-02-09 Paul Thomas <pault@gcc.gnu.org>
-
-@@ -3098,8 +3964,8 @@
- * gfortran.dg/vect/fast-math-mgrid-resid.f: Change
- -fdump-tree-optimized to -fdump-tree-pcom-details in dg-options and
- cleanup-tree-dump from optimized to pcom. Remove scan-tree-dump-times
-- for vect_\[^\\n\]*\\+, add scan-tree-dump-times for no suitable chains and
-- Executing predictive commoning without unrolling.
-+ for vect_\[^\\n\]*\\+, add scan-tree-dump-times for no suitable
-+ chains and Executing predictive commoning without unrolling.
-
- 2014-01-14 Kirill Yukhin <kirill.yukhin@intel.com>
-
-Index: gcc/testsuite/g++.dg/debug/dwarf2/imported-decl-2.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/debug/dwarf2/imported-decl-2.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/debug/dwarf2/imported-decl-2.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,32 @@
-+// { dg-do compile }
-+// { dg-options "-gdwarf-2 -dA -O0 -fno-merge-debug-strings" }
-+
-+class AAAA
-+{
-+ public:
-+ int method (void);
-+ int a;
-+};
-+
-+int
-+AAAA::method (void)
-+{
-+ return a;
-+}
-+
-+class BBBB : public AAAA
-+{
-+ public:
-+ using AAAA::method;
-+
-+ int method (int b);
-+};
-+
-+int
-+BBBB::method (int b)
-+{
-+ return a + b;
-+}
-+
-+// { dg-final { scan-assembler-not "ascii \"BBBB\\\\0\".*ascii \"AAAA\\\\0\".*DW_TAG_imported_declaration" } }
-+// { dg-final { scan-assembler-times "ascii \"AAAA\\\\0\".*ascii \"BBBB\\\\0\".*DIE .0x\[0-9a-f\]*. DW_TAG_imported_declaration" 1 } }
-Index: gcc/testsuite/g++.dg/debug/dwarf2/pr61433.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/debug/dwarf2/pr61433.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/debug/dwarf2/pr61433.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,23 @@
-+// PR c++/61433
-+// { dg-do compile { target c++11 } }
-+// { dg-options "-O -fcompare-debug -fno-inline -fno-ipa-pure-const -fipa-sra" }
-+
-+template <class T>
-+struct A
-+{
-+ template <class V>
-+ struct B
-+ {
-+ int MEM;
-+ };
-+};
-+struct D {};
-+struct C: public A<int>::B<D>
-+{};
-+template <class T, class U, class V>
-+auto k(T t, U u, V v) -> decltype (t.U::template B<V>::MEM)
-+{}
-+int main()
-+{
-+ k( C(), A<int>(), D() );
-+}
-Index: gcc/testsuite/g++.dg/cpp1y/pr59867.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp1y/pr59867.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp1y/pr59867.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,52 @@
-+// PR c++/59867
-+// { dg-do compile { target c++1y } }
-+
-+#include <iostream>
-+using namespace std;
-+
-+// constant
-+template<typename T, T x>
-+ struct meta_value
-+ {
-+ typedef meta_value type;
-+ typedef T value_type;
-+ static const T value = x;
-+ };
-+
-+// array
-+template<typename T, T... data>
-+ struct meta_array
-+ {
-+ typedef meta_array type;
-+ typedef T item_type;
-+ };
-+
-+// static array -> runtime array conversion utility
-+template<typename T>
-+ struct array_gen;
-+
-+template<typename T, T... xs>
-+ struct array_gen<meta_array<T, xs...>>
-+ {
-+ static const T value[sizeof...(xs)];
-+ };
-+
-+template<typename T, T... xs>
-+ const T
-+ array_gen<meta_array<T, xs...>>::value[sizeof...(xs)] = {xs...};
-+
-+// static string
-+template<typename T, T... xs>
-+ constexpr meta_array<T, xs...>
-+ operator""_s()
-+ {
-+ static_assert(sizeof...(xs) == 3, "What's wrong with you?");
-+ return meta_array<T, xs...>();
-+ }
-+
-+int
-+main()
-+{
-+ auto a = "123"_s;
-+ const char (& xs)[3] = array_gen<decltype("123"_s)>::value;
-+}
-Index: gcc/testsuite/g++.dg/ext/complit14.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/ext/complit14.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/ext/complit14.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,11 @@
-+// PR c++/61614
-+// { dg-options "" }
-+
-+int Fn (...);
-+
-+void
-+Test ()
-+{
-+ int j = Fn ((const int[]) { 0 }); // OK
-+ unsigned long sz = sizeof Fn ((const int[]) { 0 }); // Error
-+}
-Index: gcc/testsuite/g++.dg/vect/pr60836.cc
-===================================================================
---- a/src/gcc/testsuite/g++.dg/vect/pr60836.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/vect/pr60836.cc (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,39 @@
-+// { dg-do compile }
-+
-+int a, b;
-+typedef double (*NormFunc) (const int &);
-+int &
-+max (int &p1, int &p2)
-+{
-+ if (p1 < p2)
-+ return p2;
-+ return p1;
-+}
-+
-+struct A
-+{
-+ int operator () (int p1, int p2)
-+ {
-+ return max (p1, p2);
-+ }
-+};
-+template < class, class > double
-+norm_ (const int &)
-+{
-+ char c, d;
-+ A e;
-+ for (; a; a++)
-+ {
-+ b = e (b, d);
-+ b = e (b, c);
-+ }
-+}
-+
-+void
-+norm ()
-+{
-+ static NormFunc f = norm_ < int, A >;
-+ f = 0;
-+}
-+
-+// { dg-final { cleanup-tree-dump "vect" } }
-Index: gcc/testsuite/g++.dg/opt/pr60849.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/opt/pr60849.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/opt/pr60849.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,13 @@
-+// { dg-do compile }
-+// { dg-options "-O2" }
-+
-+int g;
-+
-+extern "C" int isnan ();
-+
-+void foo(float a) {
-+ int (*xx)(...);
-+ xx = isnan;
-+ if (xx(a))
-+ g++;
-+}
-Index: gcc/testsuite/g++.dg/opt/pr61456.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/opt/pr61456.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/opt/pr61456.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,26 @@
-+// { dg-do compile }
-+// { dg-options "-O2 -std=c++11 -Werror=uninitialized" }
-+
-+int rand ();
-+
-+class Funcs
-+{
-+public:
-+ int *f1 ();
-+ int *f2 ();
-+};
-+typedef decltype (&Funcs::f1) pfunc;
-+
-+static int Set (Funcs * f, const pfunc & fp)
-+{
-+ (f->*fp) ();
-+}
-+
-+void
-+Foo ()
-+{
-+ pfunc fp = &Funcs::f1;
-+ if (rand ())
-+ fp = &Funcs::f2;
-+ Set (0, fp);
-+}
-Index: gcc/testsuite/g++.dg/opt/pr61654.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/opt/pr61654.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/opt/pr61654.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,27 @@
-+// PR middle-end/61654
-+// { dg-do compile }
-+
-+class A
-+{
-+ virtual int a (int, int = 0) = 0;
-+ int b (const int &);
-+ int c;
-+};
-+
-+class B : virtual A
-+{
-+ int d;
-+ int a (int, int);
-+};
-+
-+int
-+A::b (const int &)
-+{
-+ return a ('\0');
-+}
-+
-+int
-+B::a (int, int)
-+{
-+ return 0 ? 0 : d;
-+}
-Index: gcc/testsuite/g++.dg/opt/typeinfo1.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/opt/typeinfo1.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/opt/typeinfo1.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,27 @@
-+// PR c++/61020
-+// { dg-options "-O2" }
-+// { dg-do run }
-+
-+#include <typeinfo>
-+
-+struct Base {
-+ virtual ~Base() { }
-+};
-+
-+struct Derived : public Base {
-+};
-+
-+int compare(const Base& base)
-+{
-+ return typeid(base) == typeid(typeid(Derived));
-+}
-+
-+int main()
-+{
-+ Base base;
-+ Derived derived;
-+
-+ if (compare(base)) return 1;
-+ if (compare(derived)) return 2;
-+ return 0;
-+}
-Index: gcc/testsuite/g++.dg/opt/pr60912.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/opt/pr60912.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/opt/pr60912.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,18 @@
-+// { dg-do run }
-+// { dg-options "-O -fno-inline -fipa-pta" }
-+
-+struct IFoo
-+{
-+ virtual void Foo () = 0;
-+};
-+
-+struct Bar:IFoo
-+{
-+ void Foo () {}
-+};
-+
-+int main ()
-+{
-+ (new Bar ())->Foo ();
-+ return 0;
-+}
-Index: gcc/testsuite/g++.dg/pr61289-2.c
-===================================================================
---- a/src/gcc/testsuite/g++.dg/pr61289-2.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/pr61289-2.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,62 @@
-+/* { dg-do run } */
-+/* { dg-options "-O2 -fno-exceptions" } */
-+struct S
-+{
-+ inline int fn1 () const { return s; }
-+ __attribute__ ((noinline, noclone)) S *fn2 (int);
-+ __attribute__ ((noinline, noclone)) void fn3 ();
-+ __attribute__ ((noinline, noclone)) static S *fn4 (int);
-+ S (int i) : s (i) {}
-+ int s;
-+};
-+
-+int a = 0;
-+S *b = 0;
-+
-+S *
-+S::fn2 (int i)
-+{
-+ a++;
-+ if (a == 1)
-+ return b;
-+ if (a > 3)
-+ __builtin_abort ();
-+ b = this;
-+ return new S (i + s);
-+}
-+
-+S *
-+S::fn4 (int i)
-+{
-+ b = new S (i);
-+ return b;
-+}
-+
-+void
-+S::fn3 ()
-+{
-+ delete this;
-+}
-+
-+void
-+foo ()
-+{
-+ S *c = S::fn4 (20);
-+ for (int i = 0; i < 2;)
-+ {
-+ S *d = c->fn2 (c->fn1 () + 10);
-+ if (c != d)
-+{
-+ c->fn3 ();
-+ c = d;
-+ ++i;
-+}
-+ }
-+ c->fn3 ();
-+}
-+
-+int
-+main ()
-+{
-+ foo ();
-+}
-Index: gcc/testsuite/g++.dg/init/copy7.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/init/copy7.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/init/copy7.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,9 @@
-+// CWG 5
-+
-+struct C { };
-+C c;
-+struct A {
-+ A(const A&);
-+ A(const C&);
-+};
-+const volatile A a = c; // Okay
-Index: gcc/testsuite/g++.dg/pr61289.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/pr61289.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/pr61289.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,63 @@
-+/* { dg-do run } */
-+/* { dg-options "-O2 -fno-exceptions" } */
-+
-+struct S
-+{
-+ inline int fn1 () const { return s; }
-+ __attribute__ ((noinline, noclone)) S *fn2 (int);
-+ __attribute__ ((noinline, noclone)) void fn3 ();
-+ __attribute__ ((noinline, noclone)) static S *fn4 (int);
-+ S (int i) : s (i) {}
-+ int s;
-+};
-+
-+int a = 0;
-+S *b = 0;
-+
-+S *
-+S::fn2 (int i)
-+{
-+ a++;
-+ if (a == 1)
-+ return b;
-+ if (a > 3)
-+ __builtin_abort ();
-+ b = this;
-+ return new S (i + s);
-+}
-+
-+S *
-+S::fn4 (int i)
-+{
-+ b = new S (i);
-+ return b;
-+}
-+
-+void
-+S::fn3 ()
-+{
-+ delete this;
-+}
-+
-+void
-+foo ()
-+{
-+ S *c = S::fn4 (20);
-+ for (int i = 0; i < 2;)
-+ {
-+ S *d = c->fn2 (c->fn1 () + 10);
-+ if (d != c)
-+{
-+ c->fn3 ();
-+ c = d;
-+ ++i;
-+}
-+ }
-+ c->fn3 ();
-+}
-+
-+int
-+main ()
-+{
-+ foo ();
-+}
-Index: gcc/testsuite/g++.dg/tree-ssa/pr61009.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/tree-ssa/pr61009.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/tree-ssa/pr61009.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,53 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O2 -fno-tree-vrp -std=c++11 -fno-strict-aliasing -fdump-tree-dom1" } */
-+
-+#include <stdio.h>
-+struct Field {
-+ virtual int Compare(void*, void*);
-+};
-+extern int NKF, NR;
-+extern int idxs[];
-+extern Field* the_field;
-+extern int *incs;
-+extern char** fptrs;
-+inline int doCmp(int this_row_offset, int field_idx) {
-+ void *p = fptrs[field_idx] + this_row_offset * incs[field_idx];
-+ return the_field->Compare(p,0);
-+}
-+bool Test(void) {
-+
-+ int row_offset = 0;
-+
-+ for (; row_offset < NR; ++row_offset) {
-+
-+ bool is_different = false;
-+ for (int j = 0; j < NKF ; ++j) {
-+ int field_idx = idxs[j];
-+ int cmp = doCmp(row_offset, field_idx);
-+ fprintf (stderr, "cmp=%d\n",cmp);
-+
-+ if (cmp == 0) {
-+ continue;
-+ }
-+ if (cmp > 0) {
-+ is_different = true;
-+ break;
-+ } else {
-+ fprintf (stderr, "Incorrect\n");
-+ return false;
-+ }
-+ }
-+ if (!is_different) {
-+
-+ return false;
-+ }
-+ }
-+
-+ return true;
-+}
-+
-+// The block ending with cmp == 0 should not be threaded. ie,
-+// there should be a single == 0 comparison in the dump file.
-+
-+// { dg-final { scan-tree-dump-times "== 0" 1 "dom1" } }
-+// { dg-final { cleanup-tree-dump "dom1" } }
-Index: gcc/testsuite/g++.dg/tls/thread_local9.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/tls/thread_local9.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/tls/thread_local9.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,23 @@
-+// PR c++/61343
-+
-+// { dg-do run { target c++11 } }
-+// { dg-add-options tls }
-+// { dg-require-effective-target tls_runtime }
-+
-+struct Foo {
-+ int value;
-+
-+ Foo() noexcept {
-+ value = 12;
-+ }
-+};
-+
-+static thread_local Foo a{};
-+
-+static __attribute__((noinline)) void UseA() {
-+ if (a.value != 12) __builtin_abort();
-+}
-+
-+int main() {
-+ UseA();
-+}
-Index: gcc/testsuite/g++.dg/pr61094.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/pr61094.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/pr61094.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,31 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O3" } */
-+
-+template <typename> struct A {
-+ unsigned _width, _height, _depth, _spectrum;
-+ template <typename t> A(t p1) {
-+ int a = p1.size();
-+ if (a) {
-+ _width = p1._width;
-+ _depth = _height = _spectrum = p1._spectrum;
-+ }
-+ }
-+ long size() { return (long)_width * _height * _depth * _spectrum; }
-+};
-+
-+int d;
-+void fn1(void *);
-+A<int> *fn2();
-+void fn3() {
-+ int b;
-+ for (;;) {
-+ A<char> c(*fn2());
-+ fn1(&c);
-+ if (d || !b)
-+ throw;
-+ }
-+}
-+
-+
-+
-+
-Index: gcc/testsuite/g++.dg/pr60969.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/pr60969.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/pr60969.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,32 @@
-+/* { dg-do compile { target { { i?86-*-* x86_64-*-* } && ia32 } } } */
-+/* { dg-options "-O2 -ftree-vectorize -march=pentium4 -mfpmath=387" } */
-+
-+struct A
-+{
-+ float f, g, h, k;
-+ A () {}
-+ A (float v0, float x, float y) : f(v0), g(x), h(y), k(0.0f) {}
-+ A bar (A &a, float t) { return A (f + a.f * t, g + a.g * t, h + a.h * t); }
-+};
-+
-+A
-+baz (A &x, A &y, float t)
-+{
-+ return x.bar (y, t);
-+}
-+
-+A *
-+foo (A &s, A &t, A &u, A &v, int y, int z)
-+{
-+ A *x = new A[y * z];
-+ for (int i = 0; i < 7; i++)
-+ {
-+ A s = baz (s, u, i / (float) z);
-+ A t = baz (t, v, i / (float) z);
-+ for (int j = 0; j < 7; j++)
-+ x[i * y + j] = baz (s, t, j / (float) y);
-+ }
-+ return x;
-+}
-+
-+/* { dg-final { scan-assembler-not "%mm" } } */
-Index: gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template13.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template13.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-template13.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,20 @@
-+// PR c++/61566
-+// { dg-do compile { target c++11 } }
-+
-+struct function
-+{
-+ template < typename _Functor>
-+ function (_Functor);
-+};
-+
-+struct C
-+{
-+ template <typename T>
-+ void foo (T, function = [] {});
-+};
-+
-+void bar ()
-+{
-+ C c;
-+ c.foo (1);
-+}
-Index: gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const3.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const3.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-const3.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,38 @@
-+// PR c++/60992
-+// { dg-do compile { target c++11 } }
-+
-+struct ScopeGuardGenerator { };
-+
-+struct FF
-+{
-+ template < class F, class ... Ts >
-+ void
-+ operator () (F & ...)
-+ {
-+ const int n = sizeof ... (Ts) + 1;
-+ void *mutexes[n];
-+ auto _on_scope_exit_var_0 =
-+ ScopeGuardGenerator () + [&mutexes] { };
-+ }
-+};
-+
-+template < class F >
-+int operator+ (ScopeGuardGenerator, F) { return 1; }
-+
-+struct D
-+{
-+ template < class T0, class T1, class T2, class ... T >
-+ void
-+ operator () (T0, T1, const T2 & t2, T & ... t)
-+ {
-+ base (t2, t ...);
-+ }
-+ FF base;
-+};
-+
-+D run_with_locks;
-+
-+void Fn ()
-+{
-+ run_with_locks ([] { }, 0, 0);
-+}
-Index: gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this18.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this18.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-this18.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,30 @@
-+// PR c++/61151
-+// { dg-do compile { target c++11 } }
-+
-+struct B
-+{
-+ void foo () {}
-+};
-+
-+template <class>
-+struct A
-+{
-+ template <class> void bar ();
-+ B a;
-+};
-+
-+template <class T>
-+template <class U>
-+void
-+A<T>::bar ()
-+{
-+ auto f = [this] () { auto g = [=] () { a.foo (); }; g (); };
-+ f ();
-+}
-+
-+int
-+main ()
-+{
-+ A<int> a;
-+ a.bar <int> ();
-+}
-Index: gcc/testsuite/g++.dg/cpp0x/nsdmi-template9.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/nsdmi-template9.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/nsdmi-template9.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,16 @@
-+// PR c++/60999
-+// { dg-do compile { target c++11 } }
-+
-+template <typename A>
-+struct foo
-+{
-+};
-+
-+template<>
-+struct foo<int>
-+{
-+ static constexpr int code = 42;
-+ unsigned int bar = static_cast<unsigned int>(code);
-+};
-+
-+foo<int> a;
-Index: gcc/testsuite/g++.dg/cpp0x/variadic158.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/variadic158.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic158.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,24 @@
-+// PR c++/61134
-+// { dg-do compile { target c++11 } }
-+
-+struct Base { };
-+
-+template <typename>
-+struct Fixed {
-+ typedef const char* name;
-+};
-+
-+template <typename VT, typename... Fields>
-+void New(const char* name,
-+ typename Fixed<Fields>::name... field_names);
-+
-+template <typename VT, typename... Fields>
-+void CreateMetric(const char* name,
-+ typename Fixed<Fields>::name... field_names,
-+ const Base&) { }
-+
-+
-+void Fn()
-+{
-+ CreateMetric<int, const char*>("abcd", "def", Base());
-+}
-Index: gcc/testsuite/g++.dg/cpp0x/pr60249.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/pr60249.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/pr60249.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,6 @@
-+// PR c++/60249
-+// { dg-do compile { target c++11 } }
-+
-+decltype(""_) x; // { dg-error "unable to find string literal operator" }
-+
-+// { dg-error "invalid type in declaration before" "invalid" { target *-*-* } 4 }
-Index: gcc/testsuite/g++.dg/cpp0x/nsdmi-template11.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/nsdmi-template11.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/nsdmi-template11.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+// PR c++/58930
-+// { dg-do compile { target c++11 } }
-+
-+struct SampleModule
-+{
-+ explicit SampleModule (int);
-+};
-+
-+template < typename >
-+struct BaseHandler
-+{
-+ SampleModule module_ { 0 };
-+};
-+
-+BaseHandler<int> a;
-Index: gcc/testsuite/g++.dg/cpp0x/nsdmi-template13.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/nsdmi-template13.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/nsdmi-template13.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,11 @@
-+// PR c++/58704
-+// { dg-do compile { target c++11 } }
-+
-+struct A {};
-+
-+template<typename> struct B
-+{
-+ A a[1] = { };
-+};
-+
-+B<int> b;
-Index: gcc/testsuite/g++.dg/cpp0x/variadic160.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/variadic160.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic160.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,49 @@
-+// PR c++/61539
-+// { dg-do compile { target c++11 } }
-+
-+template <typename _CharT> class A;
-+template <typename> class B;
-+template <class charT> class C;
-+template <> class C<char>
-+{
-+ virtual void xparse (int &, const B<A<char> > &) const;
-+};
-+template <class T, class charT = char> class G : C<charT>
-+{
-+public:
-+ G (void *) {}
-+ void default_value (const T &);
-+ void xparse (int &, const B<A<charT> > &) const;
-+};
-+template <class T, class charT>
-+void validate (int &, const B<A<charT> > &, T *, int);
-+template <class T, class charT>
-+void G<T, charT>::xparse (int &p1, const B<A<charT> > &p2) const
-+{
-+ validate (p1, p2, (T *)0, 0);
-+}
-+template <class T> G<T> *value (T *) { return new G<T>(0); }
-+namespace Eigen
-+{
-+template <typename T> struct D;
-+template <typename, int, int, int = 0, int = 0, int = 0 > class F;
-+template <typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows,
-+ int _MaxCols>
-+struct D<F<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> >
-+{
-+ typedef _Scalar Scalar;
-+};
-+template <typename, int, int, int, int, int _MaxCols> class F
-+{
-+public:
-+ typedef typename Eigen::D<F>::Scalar Scalar;
-+ F (const Scalar &, const Scalar &, const Scalar &);
-+};
-+template <class... T>
-+void validate (int &, const B<A<char> > &, Eigen::F<T...> *);
-+}
-+int main (int, char *[])
-+{
-+ Eigen::F<double, 3, 1> a (0, 0, 0);
-+ value (&a)->default_value (Eigen::F<double, 3, 1>(0, 0, 0));
-+}
-Index: gcc/testsuite/g++.dg/cpp0x/pr58781.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/pr58781.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/pr58781.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,18 @@
-+// PR c++/58781
-+// { dg-do compile { target c++11 } }
-+
-+#include <cstddef>
-+
-+int
-+operator""_s(const char32_t *a, size_t b)
-+{
-+ return 0;
-+}
-+
-+int
-+f()
-+{
-+ using a = decltype(U"\x1181"_s);
-+ using b = decltype(U"\x8111"_s);
-+ using c = decltype(U" \x1181"_s);
-+}
-Index: gcc/testsuite/g++.dg/cpp0x/constexpr-aggr1.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/constexpr-aggr1.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/constexpr-aggr1.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,17 @@
-+// PR c++/60951
-+// { dg-do compile { target c++11 } }
-+
-+struct Foo {
-+ constexpr Foo(int x = 0) : memb(x) {}
-+ int memb;
-+};
-+
-+struct FooContainer {
-+ Foo foo[2];
-+};
-+
-+void fubar() {
-+ int nonConst = 0;
-+ FooContainer fooContainer;
-+ fooContainer = { { 0, nonConst } };
-+}
-Index: gcc/testsuite/g++.dg/cpp0x/pr58155.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/pr58155.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/pr58155.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,13 @@
-+// { dg-do compile { target c++11 } }
-+
-+#define BAZ "baz"
-+
-+#if 0
-+
-+"bar"BAZ
-+
-+R"(
-+ bar
-+)"BAZ
-+
-+#endif
-Index: gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem2.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem2.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/constexpr-ptrmem2.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,13 @@
-+// PR c++/61661
-+// { dg-do compile { target c++11 } }
-+
-+struct Outer {
-+
-+ void Bar();
-+
-+ struct Foo {
-+ void (Outer::*ptr)() ;
-+ };
-+
-+ static constexpr Foo foo = { &Outer::Bar };
-+};
-Index: gcc/testsuite/g++.dg/cpp0x/variadic159.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/variadic159.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic159.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,14 @@
-+// PR c++/61507
-+// { dg-do compile { target c++11 } }
-+
-+struct A {
-+ void foo(const int &);
-+ void foo(float);
-+};
-+
-+template <typename... Args>
-+void bar(void (A::*memfun)(Args...), Args... args);
-+
-+void go(const int& i) {
-+ bar<const int &>(&A::foo, i);
-+}
-Index: gcc/testsuite/g++.dg/cpp0x/defaulted49.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/defaulted49.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/defaulted49.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+// PR c++/60980
-+// { dg-do compile { target c++11 } }
-+
-+struct x0
-+{
-+ x0 () = default;
-+};
-+struct x1
-+{
-+ x0 x2[2];
-+ void x3 ()
-+ {
-+ x1 ();
-+ }
-+};
-Index: gcc/testsuite/g++.dg/cpp0x/ref-qual15.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/ref-qual15.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/ref-qual15.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,13 @@
-+// PR c++/59296
-+// { dg-do compile { target c++11 } }
-+
-+struct Type
-+{
-+ void get() const& { }
-+ void get() const&& { }
-+};
-+
-+int main()
-+{
-+ Type{}.get();
-+}
-Index: gcc/testsuite/g++.dg/cpp0x/nsdmi-template10.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/nsdmi-template10.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/nsdmi-template10.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,14 @@
-+// PR c++/60999
-+// { dg-do compile { target c++11 } }
-+
-+struct B
-+{
-+ template<int N, int M>
-+ struct A;
-+
-+ template<int M>
-+ struct A<1, M>
-+ {
-+ int X = M;
-+ };
-+};
-Index: gcc/testsuite/g++.dg/cpp0x/sfinae50.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/sfinae50.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/sfinae50.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,41 @@
-+// PR c++/61083
-+// { dg-do compile { target c++11 } }
-+
-+template<typename T> T declval();
-+
-+template<typename T, typename U>
-+struct is_same {
-+ static const bool value = false;
-+};
-+
-+template<typename T>
-+struct is_same<T, T> {
-+ static const bool value = true;
-+};
-+
-+struct true_type {};
-+struct false_type {};
-+
-+template <typename T>
-+struct is_foo {
-+private:
-+ template<typename U, U> struct helper {};
-+
-+ template <typename Z> static auto
-+ test(Z z) -> decltype(helper<void (Z::*)() const, &Z::foo>(), true_type());
-+
-+ template <typename> static auto test(...) -> false_type;
-+
-+public:
-+ enum { value = is_same<decltype(test<T>(declval<T>())), true_type>::value };
-+};
-+
-+struct A {
-+ int foo();
-+ void foo() const;
-+};
-+
-+struct A1 : public A {};
-+
-+static_assert (is_foo<A>::value == 1, "");
-+static_assert (is_foo<A1>::value == 0, "");
-Index: gcc/testsuite/g++.dg/cpp0x/nsdmi-template12.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/nsdmi-template12.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/nsdmi-template12.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,17 @@
-+// PR c++/58753
-+// { dg-do compile { target c++11 } }
-+
-+#include <initializer_list>
-+
-+template <class T>
-+struct X {X(std::initializer_list<int>) {}};
-+
-+template <class zomg>
-+class T {
-+ X<T> x{1};
-+};
-+
-+int main()
-+{
-+ T<int> t;
-+}
-Index: gcc/testsuite/g++.dg/cpp0x/initlist84.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/initlist84.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/initlist84.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,17 @@
-+// PR c++/61242
-+// { dg-do compile { target c++11 } }
-+
-+struct Foo
-+{
-+ struct A
-+ {
-+ const int &container;
-+ const int &args;
-+ };
-+ static void Create (const A &);
-+};
-+
-+int main ()
-+{
-+ Foo::Create ({{}, {}});
-+}
-Index: gcc/testsuite/g++.dg/cpp0x/initlist86.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/initlist86.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/initlist86.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,18 @@
-+// PR c++/61382
-+// { dg-do run { target c++11 } }
-+
-+struct A
-+{
-+ int i,j;
-+ A(int i,int j):i(i),j(j){}
-+};
-+
-+extern "C" int printf (const char *, ...);
-+
-+int main()
-+{
-+ int i = 0;
-+ A a{i++,i++};
-+ if (a.i != 0 || a.j != 1)
-+ __builtin_abort();
-+}
-Index: gcc/testsuite/g++.dg/cpp0x/constexpr-template7.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/constexpr-template7.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/constexpr-template7.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,32 @@
-+// PR c++/61556
-+// { dg-do compile { target c++11 } }
-+
-+class ValueType {
-+public:
-+ constexpr operator int() const {return m_ID;};
-+ constexpr ValueType(const int v)
-+ : m_ID(v) {}
-+private:
-+ int m_ID;
-+};
-+
-+class ValueTypeEnum {
-+public:
-+ static constexpr ValueType doubleval = ValueType(1);
-+};
-+
-+template <int format>
-+class ValueTypeInfo {
-+};
-+
-+template <typename Format>
-+class FillFunctor {
-+public:
-+ FillFunctor() {
-+ ValueTypeInfo<ValueTypeEnum::doubleval> v;
-+ }
-+};
-+
-+int main() {
-+ ValueTypeInfo<ValueTypeEnum::doubleval> v;
-+}
-Index: gcc/testsuite/g++.dg/torture/pr60895.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/torture/pr60895.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/torture/pr60895.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,32 @@
-+// { dg-do compile }
-+
-+struct C
-+{
-+ double elems[3];
-+};
-+
-+C
-+foo ()
-+{
-+ C a;
-+ double *f = a.elems;
-+ int b;
-+ for (; b;)
-+ {
-+ *f = 0;
-+ ++f;
-+ }
-+ return a;
-+}
-+
-+struct J
-+{
-+ C c;
-+ __attribute__((always_inline)) J () : c (foo ()) {}
-+};
-+
-+void
-+bar ()
-+{
-+ J ();
-+}
-Index: gcc/testsuite/g++.dg/torture/pr60854.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/torture/pr60854.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/torture/pr60854.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,13 @@
-+template <typename T>
-+class MyClass
-+{
-+public:
-+ __attribute__ ((__always_inline__)) inline MyClass () { ; }
-+};
-+
-+extern template class MyClass<double>;
-+
-+void Func()
-+{
-+ MyClass<double> x;
-+}
-Index: gcc/testsuite/g++.dg/ipa/pr61160-1.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/ipa/pr61160-1.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/ipa/pr61160-1.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,31 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O3" } */
-+
-+struct CBase {
-+ virtual void BaseFunc () {}
-+};
-+
-+struct MMixin {
-+ virtual void * MixinFunc (int, void *) = 0;
-+};
-+
-+struct CExample: CBase, public MMixin
-+{
-+ void *MixinFunc (int arg, void *arg2)
-+ {
-+ if (arg != 1 || arg2)
-+ return 0;
-+ return this;
-+ }
-+};
-+
-+void *test (MMixin & anExample)
-+{
-+ return anExample.MixinFunc (1, 0);
-+}
-+
-+int main ()
-+{
-+ CExample c;
-+ return (test (c) != &c);
-+}
-Index: gcc/testsuite/g++.dg/ipa/devirt-31.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/ipa/devirt-31.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/ipa/devirt-31.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,23 @@
-+/* { dg-options "-O2 -std=c++11 -fdump-ipa-inline" } */
-+#include <new>
-+
-+class EmbeddedObject {
-+public:
-+ virtual int val() { return 2; }
-+};
-+
-+class Container {
-+ alignas(EmbeddedObject) char buffer[sizeof(EmbeddedObject)];
-+public:
-+ EmbeddedObject *obj() { return (EmbeddedObject*)buffer; }
-+ Container() { new (buffer) EmbeddedObject(); }
-+};
-+
-+Container o;
-+
-+int main()
-+{
-+ __builtin_printf("%d\n", o.obj()->val());
-+}
-+/* { dg-final { scan-ipa-dump-not "__builtin_unreachable" "inline" } } */
-+/* { dg-final { cleanup-ipa-dump "inline" } } */
-Index: gcc/testsuite/g++.dg/ipa/pr61160-3.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/ipa/pr61160-3.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/ipa/pr61160-3.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,37 @@
-+/* { dg-do run } */
-+/* { dg-options "-O3" } */
-+
-+struct A {
-+ void *p;
-+ A (void *q) : p (q) {}
-+ A (const A &) : p () {}
-+};
-+
-+struct CBase {
-+ virtual void BaseFunc () {}
-+};
-+
-+struct MMixin {
-+ virtual A MixinFunc (int, A) = 0;
-+};
-+
-+struct CExample: CBase, public MMixin
-+{
-+ A MixinFunc (int arg, A arg2)
-+ {
-+ if (arg != 1 || arg2.p)
-+ return 0;
-+ return this;
-+ }
-+};
-+
-+void *test (MMixin & anExample)
-+{
-+ return anExample.MixinFunc (1, (0)).p;
-+}
-+
-+int main ()
-+{
-+ CExample c;
-+ return (test (c) != &c);
-+}
-Index: gcc/testsuite/g++.dg/ipa/pr61085.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/ipa/pr61085.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/ipa/pr61085.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,33 @@
-+/* { dg-do run } */
-+/* { dg-options "-O2 -fno-early-inlining" } */
-+
-+struct A {};
-+struct B : virtual A {
-+ unsigned m_i;
-+ B() : m_i () {}
-+ virtual A *m_virt ()
-+ {
-+ return 0;
-+ }
-+ ~B ()
-+ {
-+ m_foo ();
-+ while (m_i)
-+ ;
-+ }
-+ void m_foo ()
-+ {
-+ m_virt ();
-+ }
-+};
-+
-+class C : B {
-+ A *m_virt () {
-+ __builtin_abort ();
-+ }
-+};
-+
-+int main ()
-+{
-+ C c;
-+}
-Index: gcc/testsuite/g++.dg/ipa/pr60600.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/ipa/pr60600.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/ipa/pr60600.C (.../branches/gcc-4_9-branch)
-@@ -30,5 +30,5 @@
- test(d);
- }
-
--/* { dg-final { scan-ipa-dump "Type inconsident devirtualization" "cp" } } */
-+/* { dg-final { scan-ipa-dump "Type inconsistent devirtualization" "cp" } } */
- /* { dg-final { cleanup-ipa-dump "cp" } } */
-Index: gcc/testsuite/g++.dg/ipa/devirt-25.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/ipa/devirt-25.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/ipa/devirt-25.C (.../branches/gcc-4_9-branch)
-@@ -22,5 +22,5 @@
- dpr_Job jobL;
- dpr_run(jobL);
- }
--/* { dg-final { scan-ipa-dump "Type inconsident devirtualization" "cp" } } */
-+/* { dg-final { scan-ipa-dump "Type inconsistent devirtualization" "cp" } } */
- /* { dg-final { cleanup-ipa-dump "cp" } } */
-Index: gcc/testsuite/g++.dg/ipa/devirt-27.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/ipa/devirt-27.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/ipa/devirt-27.C (.../branches/gcc-4_9-branch)
-@@ -1,5 +1,5 @@
- /* { dg-do compile } */
--/* { dg-options "-O3 -fdump-ipa-devirt -fdump-tree-optimized" } */
-+/* { dg-options "-O3 -fdump-tree-optimized" } */
- struct A
- {
- int a;
-Index: gcc/testsuite/g++.dg/ipa/devirt-11.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/ipa/devirt-11.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/ipa/devirt-11.C (.../branches/gcc-4_9-branch)
-@@ -45,5 +45,5 @@
- /* While inlining function called once we should devirtualize a new call to fn2
- and two to fn3. While doing so the new symbol for fn2 needs to be
- introduced. */
--/* { dg-final { scan-ipa-dump-times "Discovered a virtual call to a known target" 3 "inline" } } */
-+/* { dg-final { scan-ipa-dump "Discovered a virtual call to a known target" "inline" } } */
- /* { dg-final { cleanup-ipa-dump "inline" } } */
-Index: gcc/testsuite/g++.dg/ipa/pr61160-2.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/ipa/pr61160-2.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/ipa/pr61160-2.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,43 @@
-+/* { dg-do run } */
-+/* { dg-options "-O3 --param ipa-cp-eval-threshold=1" } */
-+
-+extern "C" void abort (void);
-+
-+struct CBase {
-+ virtual void BaseFunc () {}
-+};
-+
-+struct MMixin {
-+ virtual void * MixinFunc (int, void *) = 0;
-+};
-+
-+struct CExample: CBase, public MMixin
-+{
-+ int stuff, magic, more_stuff;
-+
-+ CExample ()
-+ {
-+ stuff = 0;
-+ magic = 0xbeef;
-+ more_stuff = 0;
-+ }
-+ void *MixinFunc (int arg, void *arg2)
-+ {
-+ if (arg != 1 || arg2)
-+ return 0;
-+ if (magic != 0xbeef)
-+ abort();
-+ return this;
-+ }
-+};
-+
-+void *test (MMixin & anExample)
-+{
-+ return anExample.MixinFunc (1, 0);
-+}
-+
-+int main ()
-+{
-+ CExample c;
-+ return (test (c) != &c);
-+}
-Index: gcc/testsuite/g++.dg/ipa/pr61540.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/ipa/pr61540.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/ipa/pr61540.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,38 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O3 -fno-early-inlining" } */
-+
-+struct data {
-+ data(int) {}
-+};
-+
-+struct top {
-+ virtual int topf() {}
-+};
-+
-+struct intermediate: top {
-+ int topf() /* override */ { return 0; }
-+};
-+
-+struct child1: top {
-+ void childf()
-+ {
-+ data d(topf());
-+ }
-+};
-+
-+struct child2: intermediate {};
-+
-+void test(top& t)
-+{
-+ child1& c = static_cast<child1&>(t);
-+ c.childf();
-+ child2 d;
-+ test(d);
-+}
-+
-+int main (int argc, char **argv)
-+{
-+ child1 c;
-+ test (c);
-+ return 0;
-+}
-Index: gcc/testsuite/g++.dg/template/local-fn1.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/template/local-fn1.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/template/local-fn1.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,8 @@
-+// PR c++/60605
-+
-+template <typename T = int>
-+struct Foo {
-+ void bar() {
-+ void bug();
-+ }
-+};
-Index: gcc/testsuite/g++.dg/template/ptrmem28.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/template/ptrmem28.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/template/ptrmem28.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,10 @@
-+// PR c++/61488
-+
-+struct A {
-+ typedef int (A::*cont_func)();
-+ template <A::cont_func> void wait(int);
-+ int notify();
-+
-+ void fix() { wait<&A::notify>(0); } // OK
-+ template <int> void repair() { wait<&A::notify>(0); }
-+};
-Index: gcc/testsuite/g++.dg/template/conv14.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/template/conv14.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/template/conv14.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,30 @@
-+// PR c++/61647
-+
-+class XX;
-+
-+template<typename Container, typename Key>
-+struct Accessor;
-+
-+template<typename Container, typename Key, typename KeyStore = Key>
-+class Variant {
-+protected:
-+ KeyStore index;
-+ Container state;
-+public:
-+ Variant(Container st, const Key& i) : index(i), state(st) {}
-+
-+ template<typename T>
-+ operator T() const {
-+ return Accessor<Container, KeyStore>::template get<T>(state, index);
-+ }
-+};
-+
-+class AutoCleanVariant : public Variant<XX*, int> {
-+public:
-+ AutoCleanVariant(XX* st, int i) : Variant<XX*,int>(st,i) {}
-+
-+ template<typename T>
-+ operator T() const {
-+ return Variant<XX*, int>::operator T();
-+ }
-+};
-Index: gcc/testsuite/g++.dg/template/pr61537.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/template/pr61537.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/template/pr61537.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,23 @@
-+// PR c++/61537
-+// { dg-do compile }
-+
-+struct A {};
-+
-+template <typename T>
-+struct B
-+{
-+ template <typename U>
-+ void f(U, struct A);
-+};
-+
-+template <typename T>
-+template <typename U>
-+void B<T>::f(U, struct A)
-+{
-+}
-+
-+int main()
-+{
-+ B<char> b;
-+ b.f(42, A());
-+}
-Index: gcc/testsuite/g++.dg/template/ptrmem27.C
-===================================================================
---- a/src/gcc/testsuite/g++.dg/template/ptrmem27.C (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/g++.dg/template/ptrmem27.C (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,22 @@
-+// PR c++/61500
-+
-+struct X {
-+ int i;
-+ int j;
-+
-+ int foo(int X::* ptr);
-+
-+ template <int X::* ptr>
-+ int bar();
-+};
-+
-+int X::foo(int X::* ptr) {
-+ int* p = &(this->*ptr); // OK.
-+ return *p;
-+}
-+
-+template <int X::* ptr>
-+int X::bar() {
-+ int* p = &(this->*ptr); // gcc 4.9.0: OK in C++98 mode, fails in C++11 mode.
-+ return *p;
-+}
-Index: gcc/testsuite/c-c++-common/cilk-plus/CK/invalid_sync.cc
-===================================================================
---- a/src/gcc/testsuite/c-c++-common/cilk-plus/CK/invalid_sync.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/c-c++-common/cilk-plus/CK/invalid_sync.cc (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,9 @@
-+/* PR c/60189 */
-+/* { dg-do compile } */
-+/* { dg-options "-fcilkplus" } */
-+
-+int main (void)
-+{
-+ _Cilk_sync return; /* { dg-error " expected ';' before 'return'" } */
-+ return 0;
-+}
-Index: gcc/testsuite/c-c++-common/cilk-plus/AN/pr57541-2.c
-===================================================================
---- a/src/gcc/testsuite/c-c++-common/cilk-plus/AN/pr57541-2.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/c-c++-common/cilk-plus/AN/pr57541-2.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,15 @@
-+/* PR middle-end/57541 */
-+/* { dg-do compile } */
-+/* { dg-options "-fcilkplus" } */
-+
-+int foo1 ()
-+{
-+ int a;
-+ a = __sec_reduce_add (1); /* { dg-error "Invalid builtin arguments" } */
-+}
-+
-+int foo2 ()
-+{
-+ int a;
-+ a = __sec_reduce_add (); /* { dg-error "Invalid builtin arguments" } */
-+}
-Index: gcc/testsuite/c-c++-common/cilk-plus/AN/pr57541.c
-===================================================================
---- a/src/gcc/testsuite/c-c++-common/cilk-plus/AN/pr57541.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/c-c++-common/cilk-plus/AN/pr57541.c (.../branches/gcc-4_9-branch)
-@@ -1,9 +1,10 @@
-+/* PR middle-end/57541 */
- /* { dg-do compile } */
- /* { dg-options "-fcilkplus" } */
-
- int A[10];
-
--int main () {
-+int foo () {
-
- /* C compiler uses the term "undeclared" whereas C++ compiler uses
- "not declared". Thus, grepping for declared seem to be the easiest. */
-@@ -13,5 +14,13 @@
- A[l:s:c];
- }
-
--/* { dg-message "note: each" "defined" { target c } 10 } */
-+int foo1 (int N) {
-
-+ char c = (char)N;
-+ short s = (short)N;
-+ A[l:s:c]; /* { dg-error "declared" } */
-+}
-+
-+
-+/* { dg-message "note: each" "defined" { target c } 11 } */
-+
-Index: gcc/testsuite/c-c++-common/cilk-plus/AN/pr61191.c
-===================================================================
---- a/src/gcc/testsuite/c-c++-common/cilk-plus/AN/pr61191.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/c-c++-common/cilk-plus/AN/pr61191.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,10 @@
-+/* PR c/61191 */
-+/* { dg-do compile } */
-+/* { dg-options "-fcilkplus" } */
-+
-+double f(double * A, double * B)
-+{
-+ return __sec_reduce_add((B[0:500])(; /* { dg-error "called object" "" { target c } } */
-+/* { dg-error "expected expression before ';' token" "" { target c } 7 } */
-+/* { dg-error "expected primary-expression before ';' token" "" { target c++ } 7 } */
-+} /* { dg-error "expected" "" { target c } } */
-Index: gcc/testsuite/c-c++-common/cilk-plus/AN/pr58942.c
-===================================================================
---- a/src/gcc/testsuite/c-c++-common/cilk-plus/AN/pr58942.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/c-c++-common/cilk-plus/AN/pr58942.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,8 @@
-+/* PR c/58942 */
-+/* { dg-do compile } */
-+/* { dg-options "-fcilkplus" } */
-+
-+int foo (int*p, int i)
-+{
-+ return __sec_reduce_max_ind(p[1:i]);
-+}
-Index: gcc/testsuite/c-c++-common/torture/pr60971.c
-===================================================================
---- a/src/gcc/testsuite/c-c++-common/torture/pr60971.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/c-c++-common/torture/pr60971.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,34 @@
-+/* PR tree-optimization/60971 */
-+/* { dg-do run } */
-+
-+#ifndef __cplusplus
-+#define bool _Bool
-+#endif
-+
-+volatile unsigned char c;
-+
-+__attribute__((noinline)) unsigned char
-+foo (void)
-+{
-+ return c;
-+}
-+
-+__attribute__((noinline)) bool
-+bar (void)
-+{
-+ return foo () & 1;
-+}
-+
-+int
-+main ()
-+{
-+ c = 0x41;
-+ c = bar ();
-+ if (c != 1)
-+ __builtin_abort ();
-+ c = 0x20;
-+ c = bar ();
-+ if (c != 0)
-+ __builtin_abort ();
-+ return 0;
-+}
-Index: gcc/testsuite/c-c++-common/gomp/atomic-16.c
-===================================================================
---- a/src/gcc/testsuite/c-c++-common/gomp/atomic-16.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/c-c++-common/gomp/atomic-16.c (.../branches/gcc-4_9-branch)
-@@ -7,28 +7,28 @@
- foo ()
- {
- int v;
-- #pragma omp atomic seq_cst load /* { dg-error "expected end of line" } */
-- v = x; /* { dg-error "invalid form" } */
-- #pragma omp atomic seq_cst, load /* { dg-error "expected end of line" } */
-- v = x; /* { dg-error "invalid form" } */
-- #pragma omp atomic seq_cst store /* { dg-error "expected end of line" } */
-- x = v; /* { dg-error "invalid form" } */
-- #pragma omp atomic seq_cst ,store /* { dg-error "expected end of line" } */
-- x = v; /* { dg-error "invalid form" } */
-- #pragma omp atomic seq_cst update /* { dg-error "expected end of line" } */
-+ #pragma omp atomic seq_cst read
-+ v = x;
-+ #pragma omp atomic seq_cst, read
-+ v = x;
-+ #pragma omp atomic seq_cst write
-+ x = v;
-+ #pragma omp atomic seq_cst ,write
-+ x = v;
-+ #pragma omp atomic seq_cst update
- x += v;
-- #pragma omp atomic seq_cst , update /* { dg-error "expected end of line" } */
-+ #pragma omp atomic seq_cst , update
- x += v;
-- #pragma omp atomic seq_cst capture /* { dg-error "expected end of line" } */
-- v = x += 2; /* { dg-error "invalid form" } */
-- #pragma omp atomic seq_cst, capture /* { dg-error "expected end of line" } */
-- v = x += 2; /* { dg-error "invalid form" } */
-- #pragma omp atomic load , seq_cst /* { dg-error "expected end of line" } */
-- v = x; /* { dg-error "invalid form" } */
-- #pragma omp atomic store ,seq_cst /* { dg-error "expected end of line" } */
-- x = v; /* { dg-error "invalid form" } */
-- #pragma omp atomic update, seq_cst /* { dg-error "expected end of line" } */
-+ #pragma omp atomic seq_cst capture
-+ v = x += 2;
-+ #pragma omp atomic seq_cst, capture
-+ v = x += 2;
-+ #pragma omp atomic read , seq_cst
-+ v = x;
-+ #pragma omp atomic write ,seq_cst
-+ x = v;
-+ #pragma omp atomic update, seq_cst
- x += v;
-- #pragma omp atomic capture, seq_cst /* { dg-error "expected end of line" } */
-+ #pragma omp atomic capture, seq_cst
- v = x += 2;
- }
-Index: gcc/testsuite/c-c++-common/gomp/pr61486-1.c
-===================================================================
---- a/src/gcc/testsuite/c-c++-common/gomp/pr61486-1.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/c-c++-common/gomp/pr61486-1.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,13 @@
-+/* PR middle-end/61486 */
-+/* { dg-do compile } */
-+/* { dg-options "-fopenmp" } */
-+
-+int
-+foo (int *a)
-+{
-+ int i, j = 0;
-+ #pragma omp target teams distribute simd linear(i, j) map(a[:10])
-+ for (i = 0; i < 10; i++)
-+ a[i] = j++;
-+ return i + j;
-+}
-Index: gcc/testsuite/c-c++-common/gomp/pr61486-2.c
-===================================================================
---- a/src/gcc/testsuite/c-c++-common/gomp/pr61486-2.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/c-c++-common/gomp/pr61486-2.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,458 @@
-+/* PR middle-end/61486 */
-+/* { dg-do compile } */
-+/* { dg-options "-fopenmp" } */
-+
-+#pragma omp declare target
-+void dosomething (int *a, int n, int m);
-+#pragma omp end declare target
-+
-+void
-+test (int n, int o, int p, int q, int r, int s, int *pp)
-+{
-+ int a[o], i, j;
-+ #pragma omp target data device (n + 1) if (n != 6) map (tofrom: n, r)
-+ {
-+ #pragma omp target device (n + 1) if (n != 6) map (from: n) map (alloc: a[2:o-2])
-+ dosomething (a, n, 0);
-+ #pragma omp target teams device (n + 1) num_teams (n + 4) thread_limit (n * 2) \
-+ if (n != 6)map (from: n) map (alloc: a[2:o-2]) default(shared) \
-+ private (p) firstprivate (q) shared (n) reduction (+: r)
-+ {
-+ r = r + 1;
-+ p = q;
-+ dosomething (a, n, p + q);
-+ }
-+ #pragma omp target teams distribute device (n + 1) num_teams (n + 4) collapse (2) \
-+ if (n != 6)map (from: n) map (alloc: a[2:o-2]) default(shared) \
-+ private (p) firstprivate (q) shared (n) reduction (+: r) \
-+ thread_limit (n * 2) dist_schedule (static, 4)
-+ for (i = 0; i < 10; i++)
-+ for (j = 0; j < 10; j++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ dosomething (a, n, p + q);
-+ }
-+ #pragma omp target teams distribute device (n + 1) num_teams (n + 4) \
-+ if (n != 6)map (from: n) map (alloc: a[2:o-2]) default(shared) \
-+ private (p) firstprivate (q) shared (n) reduction (+: r) \
-+ thread_limit (n * 2) dist_schedule (static, 4)
-+ for (i = 0; i < 10; i++)
-+ for (j = 0; j < 10; j++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ dosomething (a, n, p + q);
-+ }
-+ #pragma omp target teams distribute parallel for device (n + 1) num_teams (n + 4) \
-+ if (n != 6)map (from: n) map (alloc: a[2:o-2]) default(shared) \
-+ private (p) firstprivate (q) shared (n) reduction (+: r) \
-+ thread_limit (n * 2) dist_schedule (static, 4) collapse (2) \
-+ num_threads (n + 4) proc_bind (spread) lastprivate (s) \
-+ ordered schedule (static, 8)
-+ for (i = 0; i < 10; i++)
-+ for (j = 0; j < 10; j++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ dosomething (a, n, p + q);
-+ #pragma omp ordered
-+ p = q;
-+ s = i * 10 + j;
-+ }
-+ #pragma omp target teams distribute parallel for device (n + 1) num_teams (n + 4) \
-+ if (n != 6)map (from: n) map (alloc: a[2:o-2]) default(shared) \
-+ private (p) firstprivate (q) shared (n) reduction (+: r) \
-+ thread_limit (n * 2) dist_schedule (static, 4) num_threads (n + 4) \
-+ proc_bind (master) lastprivate (s) ordered schedule (static, 8)
-+ for (i = 0; i < 10; i++)
-+ {
-+ for (j = 0; j < 10; j++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ dosomething (a, n, p + q);
-+ }
-+ #pragma omp ordered
-+ p = q;
-+ s = i * 10;
-+ }
-+ #pragma omp target teams distribute parallel for simd device (n + 1) \
-+ if (n != 6)map (from: n) map (alloc: a[2:o-2]) default(shared) \
-+ private (p) firstprivate (q) shared (n) reduction (+: r) \
-+ thread_limit (n * 2) dist_schedule (static, 4) collapse (2) \
-+ num_threads (n + 4) proc_bind (spread) lastprivate (s) \
-+ schedule (static, 8) num_teams (n + 4) safelen(8)
-+ for (i = 0; i < 10; i++)
-+ for (j = 0; j < 10; j++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ a[2+i*10+j] = p + q;
-+ s = i * 10 + j;
-+ }
-+ #pragma omp target teams distribute parallel for simd device (n + 1) \
-+ if (n != 6)map (from: n) map (alloc: a[2:o-2]) default(shared) \
-+ private (p) firstprivate (q) shared (n) reduction (+: r) \
-+ thread_limit (n * 2) dist_schedule (static, 4) num_threads (n + 4) \
-+ proc_bind (master) lastprivate (s) schedule (static, 8) \
-+ num_teams (n + 4) safelen(16) linear(i:1) aligned (pp:4)
-+ for (i = 0; i < 10; i++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ a[2+i] = p + q;
-+ s = i * 10;
-+ }
-+ #pragma omp target teams distribute simd device (n + 1) \
-+ if (n != 6)map (from: n) map (alloc: a[2:o-2]) default(shared) \
-+ private (p) firstprivate (q) shared (n) reduction (+: r) \
-+ thread_limit (n * 2) dist_schedule (static, 4) collapse (2) \
-+ lastprivate (s) num_teams (n + 4) safelen(8)
-+ for (i = 0; i < 10; i++)
-+ for (j = 0; j < 10; j++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ a[2+i*10+j] = p + q;
-+ s = i * 10 + j;
-+ }
-+ #pragma omp target teams distribute simd device (n + 1) \
-+ if (n != 6)map (from: n) map (alloc: a[2:o-2]) default(shared) \
-+ private (p) firstprivate (q) shared (n) reduction (+: r) \
-+ thread_limit (n * 2) dist_schedule (static, 4) lastprivate (s) \
-+ num_teams (n + 4) safelen(16) linear(i:1) aligned (pp:4)
-+ for (i = 0; i < 10; i++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ a[2+i] = p + q;
-+ s = i * 10;
-+ }
-+ #pragma omp target device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2])
-+ #pragma omp teams num_teams (n + 4) thread_limit (n * 2) default(shared) \
-+ private (p) firstprivate (q) shared (n) reduction (+: r)
-+ {
-+ r = r + 1;
-+ p = q;
-+ dosomething (a, n, p + q);
-+ }
-+ #pragma omp target device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2])
-+ #pragma omp teams distribute num_teams (n + 4) collapse (2) default(shared) \
-+ private (p) firstprivate (q) shared (n) reduction (+: r) \
-+ thread_limit (n * 2) dist_schedule (static, 4)
-+ for (i = 0; i < 10; i++)
-+ for (j = 0; j < 10; j++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ dosomething (a, n, p + q);
-+ }
-+ #pragma omp target device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2])
-+ #pragma omp teams distribute num_teams (n + 4) default(shared) \
-+ private (p) firstprivate (q) shared (n) reduction (+: r) \
-+ thread_limit (n * 2) dist_schedule (static, 4)
-+ for (i = 0; i < 10; i++)
-+ for (j = 0; j < 10; j++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ dosomething (a, n, p + q);
-+ }
-+ #pragma omp target device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2])
-+ #pragma omp teams distribute parallel for num_teams (n + 4) if (n != 6) \
-+ default(shared) private (p) firstprivate (q) shared (n) reduction (+: r) \
-+ thread_limit (n * 2) dist_schedule (static, 4) collapse (2) \
-+ num_threads (n + 4) proc_bind (spread) lastprivate (s) \
-+ ordered schedule (static, 8)
-+ for (i = 0; i < 10; i++)
-+ for (j = 0; j < 10; j++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ dosomething (a, n, p + q);
-+ #pragma omp ordered
-+ p = q;
-+ s = i * 10 + j;
-+ }
-+ #pragma omp target device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2])
-+ #pragma omp teams distribute parallel for num_teams (n + 4) if (n != 6) \
-+ default(shared) private (p) firstprivate (q) shared (n) reduction (+: r) \
-+ thread_limit (n * 2) dist_schedule (static, 4) num_threads (n + 4) \
-+ proc_bind (master) lastprivate (s) ordered schedule (static, 8)
-+ for (i = 0; i < 10; i++)
-+ {
-+ for (j = 0; j < 10; j++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ dosomething (a, n, p + q);
-+ }
-+ #pragma omp ordered
-+ p = q;
-+ s = i * 10;
-+ }
-+ #pragma omp target device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2])
-+ #pragma omp teams distribute parallel for simd if (n != 6)default(shared) \
-+ private (p) firstprivate (q) shared (n) reduction (+: r) \
-+ thread_limit (n * 2) dist_schedule (static, 4) collapse (2) \
-+ num_threads (n + 4) proc_bind (spread) lastprivate (s) \
-+ schedule (static, 8) num_teams (n + 4) safelen(8)
-+ for (i = 0; i < 10; i++)
-+ for (j = 0; j < 10; j++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ a[2+i*10+j] = p + q;
-+ s = i * 10 + j;
-+ }
-+ #pragma omp target device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2])
-+ #pragma omp teams distribute parallel for simd if (n != 6)default(shared) \
-+ private (p) firstprivate (q) shared (n) reduction (+: r) \
-+ thread_limit (n * 2) dist_schedule (static, 4) num_threads (n + 4) \
-+ proc_bind (master) lastprivate (s) schedule (static, 8) \
-+ num_teams (n + 4) safelen(16) linear(i:1) aligned (pp:4)
-+ for (i = 0; i < 10; i++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ a[2+i] = p + q;
-+ s = i * 10;
-+ }
-+ #pragma omp target device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2])
-+ #pragma omp teams distribute simd default(shared) \
-+ private (p) firstprivate (q) shared (n) reduction (+: r) \
-+ thread_limit (n * 2) dist_schedule (static, 4) collapse (2) \
-+ lastprivate (s) num_teams (n + 4) safelen(8)
-+ for (i = 0; i < 10; i++)
-+ for (j = 0; j < 10; j++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ a[2+i*10+j] = p + q;
-+ s = i * 10 + j;
-+ }
-+ #pragma omp target device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2])
-+ #pragma omp teams distribute simd default(shared) \
-+ private (p) firstprivate (q) shared (n) reduction (+: r) \
-+ thread_limit (n * 2) dist_schedule (static, 4) lastprivate (s) \
-+ num_teams (n + 4) safelen(16) linear(i:1) aligned (pp:4)
-+ for (i = 0; i < 10; i++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ a[2+i] = p + q;
-+ s = i * 10;
-+ }
-+ #pragma omp target teams device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2]) \
-+ num_teams (n + 4) thread_limit (n * 2)default(shared) shared(n) \
-+ private (p) reduction (+: r)
-+ #pragma omp distribute collapse (2) dist_schedule (static, 4) firstprivate (q)
-+ for (i = 0; i < 10; i++)
-+ for (j = 0; j < 10; j++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ dosomething (a, n, p + q);
-+ }
-+ #pragma omp target teams device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2]) \
-+ num_teams (n + 4) thread_limit (n * 2) shared(n) private(p) reduction (+ : r) \
-+ default(shared)
-+ #pragma omp distribute dist_schedule (static, 4) firstprivate (q)
-+ for (i = 0; i < 10; i++)
-+ for (j = 0; j < 10; j++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ dosomething (a, n, p + q);
-+ }
-+ #pragma omp target teams device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2]) \
-+ num_teams (n + 4) thread_limit (n * 2)
-+ #pragma omp distribute parallel for if (n != 6) \
-+ default(shared) private (p) firstprivate (q) shared (n) reduction (+: r) \
-+ collapse (2) dist_schedule (static, 4) \
-+ num_threads (n + 4) proc_bind (spread) lastprivate (s) \
-+ ordered schedule (static, 8)
-+ for (i = 0; i < 10; i++)
-+ for (j = 0; j < 10; j++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ dosomething (a, n, p + q);
-+ #pragma omp ordered
-+ p = q;
-+ s = i * 10 + j;
-+ }
-+ #pragma omp target teams device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2]) \
-+ num_teams (n + 4) thread_limit (n * 2)
-+ #pragma omp distribute parallel for if (n != 6) \
-+ default(shared) private (p) firstprivate (q) shared (n) reduction (+: r) \
-+ num_threads (n + 4) dist_schedule (static, 4) \
-+ proc_bind (master) lastprivate (s) ordered schedule (static, 8)
-+ for (i = 0; i < 10; i++)
-+ {
-+ for (j = 0; j < 10; j++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ dosomething (a, n, p + q);
-+ }
-+ #pragma omp ordered
-+ p = q;
-+ s = i * 10;
-+ }
-+ #pragma omp target teams device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2]) \
-+ num_teams (n + 4) thread_limit (n * 2)
-+ #pragma omp distribute parallel for simd if (n != 6)default(shared) \
-+ private (p) firstprivate (q) shared (n) reduction (+: r) \
-+ collapse (2) dist_schedule (static, 4) \
-+ num_threads (n + 4) proc_bind (spread) lastprivate (s) \
-+ schedule (static, 8) safelen(8)
-+ for (i = 0; i < 10; i++)
-+ for (j = 0; j < 10; j++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ a[2+i*10+j] = p + q;
-+ s = i * 10 + j;
-+ }
-+ #pragma omp target teams device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2]) \
-+ num_teams (n + 4) thread_limit (n * 2)
-+ #pragma omp distribute parallel for simd if (n != 6)default(shared) \
-+ private (p) firstprivate (q) shared (n) reduction (+: r) \
-+ num_threads (n + 4) dist_schedule (static, 4) \
-+ proc_bind (master) lastprivate (s) schedule (static, 8) \
-+ safelen(16) linear(i:1) aligned (pp:4)
-+ for (i = 0; i < 10; i++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ a[2+i] = p + q;
-+ s = i * 10;
-+ }
-+ #pragma omp target teams device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2]) \
-+ num_teams (n + 4) thread_limit (n * 2) default(shared) shared(n) private(p) \
-+ reduction(+:r)
-+ #pragma omp distribute simd private (p) firstprivate (q) reduction (+: r) \
-+ collapse (2) dist_schedule (static, 4) lastprivate (s) safelen(8)
-+ for (i = 0; i < 10; i++)
-+ for (j = 0; j < 10; j++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ a[2+i*10+j] = p + q;
-+ s = i * 10 + j;
-+ }
-+ #pragma omp target teams device (n + 1) if (n != 6)map(from:n) map(alloc:a[2:o-2]) \
-+ num_teams (n + 4) thread_limit (n * 2) default(shared) shared(n) private(p) \
-+ reduction(+:r)
-+ #pragma omp distribute simd private (p) firstprivate (q) reduction (+: r) \
-+ lastprivate (s) dist_schedule (static, 4) safelen(16) linear(i:1) aligned (pp:4)
-+ for (i = 0; i < 10; i++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ a[2+i] = p + q;
-+ s = i * 10;
-+ }
-+ }
-+}
-+
-+int q, i, j;
-+
-+void
-+test2 (int n, int o, int p, int r, int s, int *pp)
-+{
-+ int a[o];
-+ #pragma omp distribute collapse (2) dist_schedule (static, 4) firstprivate (q)
-+ for (i = 0; i < 10; i++)
-+ for (j = 0; j < 10; j++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ dosomething (a, n, p + q);
-+ }
-+ #pragma omp distribute dist_schedule (static, 4) firstprivate (q)
-+ for (i = 0; i < 10; i++)
-+ for (j = 0; j < 10; j++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ dosomething (a, n, p + q);
-+ }
-+ #pragma omp distribute parallel for if (n != 6) \
-+ default(shared) private (p) firstprivate (q) shared (n) reduction (+: r) \
-+ collapse (2) dist_schedule (static, 4) \
-+ num_threads (n + 4) proc_bind (spread) lastprivate (s) \
-+ ordered schedule (static, 8)
-+ for (i = 0; i < 10; i++)
-+ for (j = 0; j < 10; j++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ dosomething (a, n, p + q);
-+ #pragma omp ordered
-+ p = q;
-+ s = i * 10 + j;
-+ }
-+ #pragma omp distribute parallel for if (n != 6) \
-+ default(shared) private (p) firstprivate (q) shared (n) reduction (+: r) \
-+ num_threads (n + 4) dist_schedule (static, 4) \
-+ proc_bind (master) lastprivate (s) ordered schedule (static, 8)
-+ for (i = 0; i < 10; i++)
-+ {
-+ for (j = 0; j < 10; j++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ dosomething (a, n, p + q);
-+ }
-+ #pragma omp ordered
-+ p = q;
-+ s = i * 10;
-+ }
-+ #pragma omp distribute parallel for simd if (n != 6)default(shared) \
-+ private (p) firstprivate (q) shared (n) reduction (+: r) \
-+ collapse (2) dist_schedule (static, 4) \
-+ num_threads (n + 4) proc_bind (spread) lastprivate (s) \
-+ schedule (static, 8) safelen(8)
-+ for (i = 0; i < 10; i++)
-+ for (j = 0; j < 10; j++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ a[2+i*10+j] = p + q;
-+ s = i * 10 + j;
-+ }
-+ #pragma omp distribute parallel for simd if (n != 6)default(shared) \
-+ private (p) firstprivate (q) shared (n) reduction (+: r) \
-+ num_threads (n + 4) dist_schedule (static, 4) \
-+ proc_bind (master) lastprivate (s) schedule (static, 8) \
-+ safelen(16) linear(i:1) aligned (pp:4)
-+ for (i = 0; i < 10; i++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ a[2+i] = p + q;
-+ s = i * 10;
-+ }
-+ #pragma omp distribute simd private (p) firstprivate (q) reduction (+: r) \
-+ collapse (2) dist_schedule (static, 4) lastprivate (s) safelen(8)
-+ for (i = 0; i < 10; i++)
-+ for (j = 0; j < 10; j++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ a[2+i*10+j] = p + q;
-+ s = i * 10 + j;
-+ }
-+ #pragma omp distribute simd private (p) firstprivate (q) reduction (+: r) \
-+ lastprivate (s) dist_schedule (static, 4) safelen(16) linear(i:1) aligned (pp:4)
-+ for (i = 0; i < 10; i++)
-+ {
-+ r = r + 1;
-+ p = q;
-+ a[2+i] = p + q;
-+ s = i * 10;
-+ }
-+}
-Index: gcc/testsuite/c-c++-common/gomp/pr60823-1.c
-===================================================================
---- a/src/gcc/testsuite/c-c++-common/gomp/pr60823-1.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/c-c++-common/gomp/pr60823-1.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,19 @@
-+/* PR tree-optimization/60823 */
-+/* { dg-do compile } */
-+/* { dg-options "-O2 -fopenmp-simd" } */
-+
-+#pragma omp declare simd simdlen(4) notinbranch
-+int
-+foo (const double c1, const double c2)
-+{
-+ double z1 = c1, z2 = c2;
-+ int res = 100, i;
-+
-+ for (i = 0; i < 100; i++)
-+ {
-+ res = (z1 * z1 + z2 * z2 > 4.0) ? (i < res ? i : res) : res;
-+ z1 = c1 + z1 * z1 - z2 * z2;
-+ z2 = c2 + 2.0 * z1 * z2;
-+ }
-+ return res;
-+}
-Index: gcc/testsuite/c-c++-common/gomp/pr60823-2.c
-===================================================================
---- a/src/gcc/testsuite/c-c++-common/gomp/pr60823-2.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/c-c++-common/gomp/pr60823-2.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,44 @@
-+/* PR tree-optimization/60823 */
-+/* { dg-do run } */
-+/* { dg-require-effective-target vect_simd_clones } */
-+/* { dg-options "-O2 -fopenmp-simd" } */
-+
-+#pragma omp declare simd simdlen(4) notinbranch
-+__attribute__((noinline)) int
-+foo (double c1, double c2)
-+{
-+ double z1 = c1, z2 = c2;
-+ int res = 100, i;
-+
-+ for (i = 0; i < 5; i++)
-+ {
-+ res = (z1 * z1 + z2 * z2 > 4.0) ? (i < res ? i : res) : res;
-+ z1 = c1 + z1 * z1 - z2 * z2;
-+ z2 = c2 + 2.0 * z1 * z2;
-+ c1 += 0.5;
-+ c2 += 0.5;
-+ }
-+ return res;
-+}
-+
-+__attribute__((noinline, noclone)) void
-+bar (double *x, double *y)
-+{
-+ asm volatile ("" : : "rm" (x), "rm" (y) : "memory");
-+}
-+
-+int
-+main ()
-+{
-+ int i;
-+ double c[4] = { 0.0, 1.0, 0.0, 1.0 };
-+ double d[4] = { 0.0, 1.0, 2.0, 0.0 };
-+ int e[4];
-+ bar (c, d);
-+#pragma omp simd safelen(4)
-+ for (i = 0; i < 4; i++)
-+ e[i] = foo (c[i], d[i]);
-+ if (e[0] != 3 || e[1] != 1 || e[2] != 1 || e[3] != 2)
-+ __builtin_abort ();
-+ return 0;
-+}
-Index: gcc/testsuite/c-c++-common/gomp/pr60823-3.c
-===================================================================
---- a/src/gcc/testsuite/c-c++-common/gomp/pr60823-3.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/c-c++-common/gomp/pr60823-3.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,32 @@
-+/* PR tree-optimization/60823 */
-+/* { dg-do compile } */
-+/* { dg-options "-O2 -fopenmp-simd -fno-strict-aliasing" } */
-+
-+void bar (char *, double *);
-+
-+#if __SIZEOF_DOUBLE__ >= 4
-+
-+struct S { char c[sizeof (double)]; };
-+void baz (struct S, struct S);
-+union U { struct S s; double d; };
-+
-+#pragma omp declare simd simdlen(4) notinbranch
-+__attribute__((noinline)) int
-+foo (double c1, double c2)
-+{
-+ double *a = &c1;
-+ char *b = (char *) &c1 + 2;
-+
-+ b[-2]++;
-+ b[1]--;
-+ *a++;
-+ c2++;
-+ bar ((char *) &c2 + 1, &c2);
-+ c2 *= 3.0;
-+ bar (b, a);
-+ baz (((union U) { .d = c1 }).s, ((union U) { .d = c2 }).s);
-+ baz (*(struct S *)&c1, *(struct S *)&c2);
-+ return c1 + c2 + ((struct S *)&c1)->c[1];
-+}
-+
-+#endif
-Index: gcc/testsuite/c-c++-common/gomp/pr59073.c
-===================================================================
---- a/src/gcc/testsuite/c-c++-common/gomp/pr59073.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/testsuite/c-c++-common/gomp/pr59073.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,12 @@
-+/* PR c/59073 */
-+/* { dg-do compile } */
-+/* { dg-options "-fopenmp" } */
-+
-+void
-+foo ()
-+{
-+ int i;
-+#pragma omp distribute parallel for
-+ for (i = 0; i < 10; i) /* { dg-error "invalid increment expression" } */
-+ ;
-+}
-Index: gcc/cp/init.c
-===================================================================
---- a/src/gcc/cp/init.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/cp/init.c (.../branches/gcc-4_9-branch)
-@@ -339,7 +339,8 @@
- gcc_assert (!processing_template_decl
- || (SCALAR_TYPE_P (type) || TREE_CODE (type) == ARRAY_TYPE));
-
-- if (type_build_ctor_call (type))
-+ if (CLASS_TYPE_P (type)
-+ && type_build_ctor_call (type))
- {
- tree ctor = build_aggr_init_expr
- (type,
-@@ -521,6 +522,49 @@
- }
- }
-
-+/* Return the non-static data initializer for FIELD_DECL MEMBER. */
-+
-+tree
-+get_nsdmi (tree member, bool in_ctor)
-+{
-+ tree init;
-+ tree save_ccp = current_class_ptr;
-+ tree save_ccr = current_class_ref;
-+ if (!in_ctor)
-+ inject_this_parameter (DECL_CONTEXT (member), TYPE_UNQUALIFIED);
-+ if (DECL_LANG_SPECIFIC (member) && DECL_TEMPLATE_INFO (member))
-+ {
-+ /* Do deferred instantiation of the NSDMI. */
-+ init = (tsubst_copy_and_build
-+ (DECL_INITIAL (DECL_TI_TEMPLATE (member)),
-+ DECL_TI_ARGS (member),
-+ tf_warning_or_error, member, /*function_p=*/false,
-+ /*integral_constant_expression_p=*/false));
-+
-+ init = digest_nsdmi_init (member, init);
-+ }
-+ else
-+ {
-+ init = DECL_INITIAL (member);
-+ if (init && TREE_CODE (init) == DEFAULT_ARG)
-+ {
-+ error ("constructor required before non-static data member "
-+ "for %qD has been parsed", member);
-+ DECL_INITIAL (member) = error_mark_node;
-+ init = NULL_TREE;
-+ }
-+ /* Strip redundant TARGET_EXPR so we don't need to remap it, and
-+ so the aggregate init code below will see a CONSTRUCTOR. */
-+ if (init && TREE_CODE (init) == TARGET_EXPR
-+ && !VOID_TYPE_P (TREE_TYPE (TARGET_EXPR_INITIAL (init))))
-+ init = TARGET_EXPR_INITIAL (init);
-+ init = break_out_target_exprs (init);
-+ }
-+ current_class_ptr = save_ccp;
-+ current_class_ref = save_ccr;
-+ return init;
-+}
-+
- /* Initialize MEMBER, a FIELD_DECL, with INIT, a TREE_LIST of
- arguments. If TREE_LIST is void_type_node, an empty initializer
- list was given; if NULL_TREE no initializer was given. */
-@@ -534,31 +578,7 @@
- /* Use the non-static data member initializer if there was no
- mem-initializer for this field. */
- if (init == NULL_TREE)
-- {
-- if (DECL_LANG_SPECIFIC (member) && DECL_TEMPLATE_INFO (member))
-- /* Do deferred instantiation of the NSDMI. */
-- init = (tsubst_copy_and_build
-- (DECL_INITIAL (DECL_TI_TEMPLATE (member)),
-- DECL_TI_ARGS (member),
-- tf_warning_or_error, member, /*function_p=*/false,
-- /*integral_constant_expression_p=*/false));
-- else
-- {
-- init = DECL_INITIAL (member);
-- if (init && TREE_CODE (init) == DEFAULT_ARG)
-- {
-- error ("constructor required before non-static data member "
-- "for %qD has been parsed", member);
-- init = NULL_TREE;
-- }
-- /* Strip redundant TARGET_EXPR so we don't need to remap it, and
-- so the aggregate init code below will see a CONSTRUCTOR. */
-- if (init && TREE_CODE (init) == TARGET_EXPR
-- && !VOID_TYPE_P (TREE_TYPE (TARGET_EXPR_INITIAL (init))))
-- init = TARGET_EXPR_INITIAL (init);
-- init = break_out_target_exprs (init);
-- }
-- }
-+ init = get_nsdmi (member, /*ctor*/true);
-
- if (init == error_mark_node)
- return;
-Index: gcc/cp/class.c
-===================================================================
---- a/src/gcc/cp/class.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/cp/class.c (.../branches/gcc-4_9-branch)
-@@ -1300,7 +1300,7 @@
- old_value = NULL_TREE;
- }
-
-- cp_emit_debug_info_for_using (decl, USING_DECL_SCOPE (using_decl));
-+ cp_emit_debug_info_for_using (decl, t);
-
- if (is_overloaded_fn (decl))
- flist = decl;
-Index: gcc/cp/decl.c
-===================================================================
---- a/src/gcc/cp/decl.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/cp/decl.c (.../branches/gcc-4_9-branch)
-@@ -5797,6 +5797,13 @@
- if (init && init != error_mark_node)
- init_code = build2 (INIT_EXPR, type, decl, init);
-
-+ if (init_code)
-+ {
-+ /* We might have set these in cp_finish_decl. */
-+ DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
-+ TREE_CONSTANT (decl) = false;
-+ }
-+
- if (init_code && DECL_IN_AGGR_P (decl))
- {
- static int explained = 0;
-Index: gcc/cp/error.c
-===================================================================
---- a/src/gcc/cp/error.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/cp/error.c (.../branches/gcc-4_9-branch)
-@@ -318,6 +318,11 @@
- if (vec_safe_is_empty (typenames) || uses_template_parms (args))
- return;
-
-+ /* Don't try to print typenames when we're processing a clone. */
-+ if (current_function_decl
-+ && !DECL_LANG_SPECIFIC (current_function_decl))
-+ return;
-+
- FOR_EACH_VEC_SAFE_ELT (typenames, i, t)
- {
- if (need_semicolon)
-Index: gcc/cp/tree.c
-===================================================================
---- a/src/gcc/cp/tree.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/cp/tree.c (.../branches/gcc-4_9-branch)
-@@ -101,6 +101,16 @@
- case IMAGPART_EXPR:
- return lvalue_kind (TREE_OPERAND (ref, 0));
-
-+ case MEMBER_REF:
-+ case DOTSTAR_EXPR:
-+ if (TREE_CODE (ref) == MEMBER_REF)
-+ op1_lvalue_kind = clk_ordinary;
-+ else
-+ op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 0));
-+ if (TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (ref, 1))))
-+ op1_lvalue_kind = clk_none;
-+ return op1_lvalue_kind;
-+
- case COMPONENT_REF:
- op1_lvalue_kind = lvalue_kind (TREE_OPERAND (ref, 0));
- /* Look at the member designator. */
-@@ -453,6 +463,7 @@
- TREE_SIDE_EFFECTS (rval) = 1;
- AGGR_INIT_VIA_CTOR_P (rval) = is_ctor;
- TREE_NOTHROW (rval) = TREE_NOTHROW (init);
-+ CALL_EXPR_LIST_INIT_P (rval) = CALL_EXPR_LIST_INIT_P (init);
- }
- else
- rval = init;
-Index: gcc/cp/ChangeLog
-===================================================================
---- a/src/gcc/cp/ChangeLog (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/cp/ChangeLog (.../branches/gcc-4_9-branch)
-@@ -1,3 +1,219 @@
-+2014-07-10 Jason Merrill <jason@redhat.com>
-+
-+ PR c++/61661
-+ * semantics.c (reduced_constant_expression_p): Handle CONSTRUCTOR.
-+
-+2014-07-01 Paul Pluzhnikov <ppluzhnikov@google.com>
-+
-+ PR c++/58753
-+ PR c++/58930
-+ PR c++/58704
-+
-+ Backported from mainline
-+ 2014-05-20 Paolo Carlini <paolo.carlini@oracle.com>
-+
-+ * typeck2.c (digest_nsdmi_init): New.
-+ * parser.c (cp_parser_late_parse_one_default_arg): Use it.
-+ * init.c (get_nsdmi): Likewise.
-+ * cp-tree.h (digest_nsdmi_init): Declare.
-+
-+2014-06-30 Edward Smith-Rowland <3dw4rd@verizon.net>
-+
-+ PR c++/58781
-+ PR c++/60249
-+ PR c++/59867
-+ * parser.c (cp_parser_userdef_string_literal()): Take a tree
-+ not a cp_token*. (cp_parser_string_literal(): Don't hack
-+ the token stream!
-+
-+2014-06-30 Jason Merrill <jason@redhat.com>
-+
-+ PR c++/61647
-+ * pt.c (type_dependent_expression_p): Check BASELINK_OPTYPE.
-+
-+ PR c++/61566
-+ * mangle.c (decl_mangling_context): Look through a TEMPLATE_DECL.
-+
-+2014-06-30 Jakub Jelinek <jakub@redhat.com>
-+
-+ Backported from mainline
-+ 2014-06-25 Jakub Jelinek <jakub@redhat.com>
-+
-+ * semantics.c (finish_omp_clauses): Make sure
-+ OMP_CLAUSE_LINEAR_STEP has correct type.
-+
-+ 2014-06-18 Jakub Jelinek <jakub@redhat.com>
-+
-+ * cp-gimplify.c (cxx_omp_finish_clause): Add a gimple_seq *
-+ argument.
-+ * cp-tree.h (cxx_omp_finish_clause): Adjust prototype.
-+
-+2014-06-30 Jason Merrill <jason@redhat.com>
-+
-+ PR c++/61539
-+ * pt.c (unify_one_argument): Type/expression mismatch just causes
-+ deduction failure.
-+
-+ DR 1030
-+ PR c++/51253
-+ PR c++/61382
-+ * cp-tree.h (CALL_EXPR_LIST_INIT_P): New.
-+ * call.c (struct z_candidate): Add flags field.
-+ (add_candidate): Add flags parm.
-+ (add_function_candidate, add_conv_candidate, build_builtin_candidate)
-+ (add_template_candidate_real): Pass it.
-+ (build_over_call): Set CALL_EXPR_LIST_INIT_P.
-+ * tree.c (build_aggr_init_expr): Copy it.
-+ * semantics.c (simplify_aggr_init_expr): Copy it.
-+ * cp-gimplify.c (cp_gimplify_expr): Handle it.
-+
-+ PR c++/61488
-+ * pt.c (check_valid_ptrmem_cst_expr): Fix for template context.
-+
-+ PR c++/61500
-+ * tree.c (lvalue_kind): Handle MEMBER_REF and DOTSTAR_EXPR.
-+
-+2014-06-30 Igor Zamyatin <igor.zamyatin@intel.com>
-+
-+ PR middle-end/57541
-+ * cp-array-notation.c (expand_sec_reduce_builtin):
-+ Check that bultin argument is correct.
-+ * call.c (build_cxx_call): Check for 0 arguments in builtin call.
-+
-+2014-06-27 Jason Merrill <jason@redhat.com>
-+
-+ PR c++/61433
-+ * error.c (dump_template_bindings): Don't tsubst in a clone.
-+
-+2014-06-27 Paolo Carlini <paolo.carlini@oracle.com>
-+
-+ PR c++/61614
-+ * semantics.c (finish_compound_literal): Revert r204228.
-+
-+2014-06-26 Adam Butcher <adam@jessamine.co.uk>
-+
-+ PR c++/61537
-+ * parser.c (cp_parser_elaborated_type_specifier): Only consider template
-+ parameter lists outside of function parameter scope.
-+
-+2014-06-25 Jason Merrill <jason@redhat.com>
-+
-+ PR c++/61242
-+ * call.c (build_aggr_conv): Ignore passed in flags.
-+ (build_array_conv, build_complex_conv): Likewise.
-+
-+2014-06-24 Jakub Jelinek <jakub@redhat.com>
-+
-+ * parser.c (cp_parser_omp_for_loop): For
-+ #pragma omp parallel for simd move lastprivate clause from parallel
-+ to for rather than simd.
-+
-+2014-06-20 Jason Merrill <jason@redhat.com>
-+
-+ PR c++/59296
-+ * call.c (add_function_candidate): Avoid special 'this' handling
-+ if we have a ref-qualifier.
-+
-+ PR c++/61556
-+ * call.c (build_over_call): Call build_this in template path.
-+
-+2014-06-19 Jason Merrill <jason@redhat.com>
-+
-+ PR c++/59296
-+ * call.c (add_function_candidate): Set LOOKUP_NO_RVAL_BIND
-+ |LOOKUP_NO_TEMP_BIND for ref-qualifier handling.
-+
-+ PR c++/61507
-+ * pt.c (resolve_overloaded_unification): Preserve
-+ ARGUMENT_PACK_EXPLICIT_ARGS.
-+
-+2014-06-18 Jason Merrill <jason@redhat.com>
-+
-+ PR c++/60605
-+ * pt.c (check_default_tmpl_args): Check DECL_LOCAL_FUNCTION_P.
-+
-+2014-06-18 Siva Chandra Reddy <sivachandra@google.com>
-+
-+ PR debug/57519
-+ * class.c (handle_using_decl): Pass the correct scope to
-+ cp_emit_debug_info_for_using.
-+
-+2014-06-09 Jason Merrill <jason@redhat.com>
-+
-+ PR c++/61343
-+ * decl.c (check_initializer): Maybe clear
-+ DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P.
-+
-+2014-06-04 Igor Zamyatin <igor.zamyatin@intel.com>
-+
-+ PR c/58942
-+ * c-c++-common/cilk-plus/AN/pr58942.c: Check for correct handling of
-+ the case with a pointer.
-+
-+2014-06-02 Jason Merrill <jason@redhat.com>
-+
-+ PR c++/61134
-+ * pt.c (pack_deducible_p): Handle canonicalization.
-+
-+2014-05-21 Igor Zamyatin <igor.zamyatin@intel.com>
-+
-+ PR c/60189
-+ * parser.c (cp_parser_postfix_expression): Move handling of cilk_sync
-+ from here to...
-+ (cp_parser_statement): ...here. Make sure only semicolon can go after
-+ Cilk_sync.
-+
-+2014-05-13 Jason Merrill <jason@redhat.com>
-+
-+ PR c++/61151
-+ * lambda.c (is_this): Allow capture proxies too.
-+
-+ DR 5
-+ PR c++/60019
-+ * call.c (build_user_type_conversion_1): The copy-init temporary
-+ is cv-unqualified.
-+
-+2014-05-07 Paolo Carlini <paolo.carlini@oracle.com>
-+
-+ PR c++/61083
-+ * pt.c (convert_nontype_argument): Protect all the error calls
-+ with complain & tf_error.
-+
-+2014-05-06 Paolo Carlini <paolo.carlini@oracle.com>
-+
-+ PR c++/60999
-+ * pt.c (maybe_begin_member_template_processing): Use
-+ uses_template_parms.
-+
-+2014-05-02 Jason Merrill <jason@redhat.com>
-+
-+ PR c++/60992
-+ * lambda.c (lambda_capture_field_type): Wrap anything dependent
-+ other than 'this' or a VLA.
-+ (is_this): New.
-+ * pt.c (tsubst_copy) [VAR_DECL]: Also build a new VAR_DECL if
-+ the operand was static or constant.
-+
-+2014-04-30 Jason Merrill <jason@redhat.com>
-+
-+ PR c++/60980
-+ * init.c (build_value_init): Don't try to call an array constructor.
-+
-+ PR c++/60951
-+ * typeck2.c (massage_init_elt): Use maybe_constant_init.
-+
-+2014-04-24 Jakub Jelinek <jakub@redhat.com>
-+
-+ * parser.c (cp_parser_omp_atomic): Allow seq_cst before
-+ atomic-clause, allow comma in between atomic-clause and
-+ seq_cst.
-+
-+2014-04-22 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR c/59073
-+ * parser.c (cp_parser_omp_parallel): If cp_parser_omp_for
-+ fails, don't set OM_PARALLEL_COMBINED and return NULL.
-+
- 2014-04-22 Release Manager
-
- * GCC 4.9.0 released.
-Index: gcc/cp/cp-array-notation.c
-===================================================================
---- a/src/gcc/cp/cp-array-notation.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/cp/cp-array-notation.c (.../branches/gcc-4_9-branch)
-@@ -250,7 +250,10 @@
- if (!find_rank (location, an_builtin_fn, an_builtin_fn, true, &rank))
- return error_mark_node;
- if (rank == 0)
-- return an_builtin_fn;
-+ {
-+ error_at (location, "Invalid builtin arguments");
-+ return error_mark_node;
-+ }
- else if (rank > 1
- && (an_type == BUILT_IN_CILKPLUS_SEC_REDUCE_MAX_IND
- || an_type == BUILT_IN_CILKPLUS_SEC_REDUCE_MIN_IND))
-@@ -340,6 +343,8 @@
- array_ind_value = get_temp_regvar (TREE_TYPE (func_parm), func_parm);
-
- array_op0 = (*array_operand)[0];
-+ if (TREE_CODE (array_op0) == INDIRECT_REF)
-+ array_op0 = TREE_OPERAND (array_op0, 0);
- switch (an_type)
- {
- case BUILT_IN_CILKPLUS_SEC_REDUCE_ADD:
-Index: gcc/cp/cp-gimplify.c
-===================================================================
---- a/src/gcc/cp/cp-gimplify.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/cp/cp-gimplify.c (.../branches/gcc-4_9-branch)
-@@ -723,6 +723,27 @@
- && !seen_error ())
- return (enum gimplify_status) gimplify_cilk_spawn (expr_p);
-
-+ /* DR 1030 says that we need to evaluate the elements of an
-+ initializer-list in forward order even when it's used as arguments to
-+ a constructor. So if the target wants to evaluate them in reverse
-+ order and there's more than one argument other than 'this', gimplify
-+ them in order. */
-+ ret = GS_OK;
-+ if (PUSH_ARGS_REVERSED && CALL_EXPR_LIST_INIT_P (*expr_p)
-+ && call_expr_nargs (*expr_p) > 2)
-+ {
-+ int nargs = call_expr_nargs (*expr_p);
-+ location_t loc = EXPR_LOC_OR_LOC (*expr_p, input_location);
-+ for (int i = 1; i < nargs; ++i)
-+ {
-+ enum gimplify_status t
-+ = gimplify_arg (&CALL_EXPR_ARG (*expr_p, i), pre_p, loc);
-+ if (t == GS_ERROR)
-+ ret = GS_ERROR;
-+ }
-+ }
-+ break;
-+
- default:
- ret = (enum gimplify_status) c_gimplify_expr (expr_p, pre_p, post_p);
- break;
-@@ -1578,7 +1599,7 @@
- /* Finalize an implicitly determined clause. */
-
- void
--cxx_omp_finish_clause (tree c)
-+cxx_omp_finish_clause (tree c, gimple_seq *)
- {
- tree decl, inner_type;
- bool make_shared = false;
-Index: gcc/cp/typeck2.c
-===================================================================
---- a/src/gcc/cp/typeck2.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/cp/typeck2.c (.../branches/gcc-4_9-branch)
-@@ -1097,6 +1097,22 @@
- {
- return digest_init_r (type, init, false, flags, tf_warning_or_error);
- }
-+
-+/* Process the initializer INIT for an NSDMI DECL (a FIELD_DECL). */
-+tree
-+digest_nsdmi_init (tree decl, tree init)
-+{
-+ gcc_assert (TREE_CODE (decl) == FIELD_DECL);
-+
-+ int flags = LOOKUP_IMPLICIT;
-+ if (DIRECT_LIST_INIT_P (init))
-+ flags = LOOKUP_NORMAL;
-+ init = digest_init_flags (TREE_TYPE (decl), init, flags);
-+ if (TREE_CODE (init) == TARGET_EXPR)
-+ /* This represents the whole initialization. */
-+ TARGET_EXPR_DIRECT_INIT_P (init) = true;
-+ return init;
-+}
-
- /* Set of flags used within process_init_constructor to describe the
- initializers. */
-@@ -1138,7 +1154,7 @@
- /* When we defer constant folding within a statement, we may want to
- defer this folding as well. */
- tree t = fold_non_dependent_expr_sfinae (init, complain);
-- t = maybe_constant_value (t);
-+ t = maybe_constant_init (t);
- if (TREE_CONSTANT (t))
- init = t;
- return init;
-Index: gcc/cp/pt.c
-===================================================================
---- a/src/gcc/cp/pt.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/cp/pt.c (.../branches/gcc-4_9-branch)
-@@ -462,9 +462,13 @@
- bool nsdmi = TREE_CODE (decl) == FIELD_DECL;
-
- if (nsdmi)
-- decl = (CLASSTYPE_TEMPLATE_INFO (DECL_CONTEXT (decl))
-- ? CLASSTYPE_TI_TEMPLATE (DECL_CONTEXT (decl))
-- : NULL_TREE);
-+ {
-+ tree ctx = DECL_CONTEXT (decl);
-+ decl = (CLASSTYPE_TEMPLATE_INFO (ctx)
-+ /* Disregard full specializations (c++/60999). */
-+ && uses_template_parms (ctx)
-+ ? CLASSTYPE_TI_TEMPLATE (ctx) : NULL_TREE);
-+ }
-
- if (inline_needs_template_parms (decl, nsdmi))
- {
-@@ -4419,7 +4423,8 @@
- in the template-parameter-list of the definition of a member of a
- class template. */
-
-- if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL)
-+ if (TREE_CODE (CP_DECL_CONTEXT (decl)) == FUNCTION_DECL
-+ || (TREE_CODE (decl) == FUNCTION_DECL && DECL_LOCAL_FUNCTION_P (decl)))
- /* You can't have a function template declaration in a local
- scope, nor you can you define a member of a class template in a
- local scope. */
-@@ -5341,6 +5346,10 @@
- return true;
- if (cxx_dialect >= cxx11 && null_member_pointer_value_p (expr))
- return true;
-+ if (processing_template_decl
-+ && TREE_CODE (expr) == ADDR_EXPR
-+ && TREE_CODE (TREE_OPERAND (expr, 0)) == OFFSET_REF)
-+ return true;
- if (complain & tf_error)
- {
- error ("%qE is not a valid template argument for type %qT",
-@@ -5817,17 +5826,18 @@
- {
- if (VAR_P (expr))
- {
-- error ("%qD is not a valid template argument "
-- "because %qD is a variable, not the address of "
-- "a variable",
-- expr, expr);
-+ if (complain & tf_error)
-+ error ("%qD is not a valid template argument "
-+ "because %qD is a variable, not the address of "
-+ "a variable", expr, expr);
- return NULL_TREE;
- }
- if (POINTER_TYPE_P (expr_type))
- {
-- error ("%qE is not a valid template argument for %qT "
-- "because it is not the address of a variable",
-- expr, type);
-+ if (complain & tf_error)
-+ error ("%qE is not a valid template argument for %qT "
-+ "because it is not the address of a variable",
-+ expr, type);
- return NULL_TREE;
- }
- /* Other values, like integer constants, might be valid
-@@ -5842,23 +5852,24 @@
- ? TREE_OPERAND (expr, 0) : expr);
- if (!VAR_P (decl))
- {
-- error ("%qE is not a valid template argument of type %qT "
-- "because %qE is not a variable",
-- expr, type, decl);
-+ if (complain & tf_error)
-+ error ("%qE is not a valid template argument of type %qT "
-+ "because %qE is not a variable", expr, type, decl);
- return NULL_TREE;
- }
- else if (cxx_dialect < cxx11 && !DECL_EXTERNAL_LINKAGE_P (decl))
- {
-- error ("%qE is not a valid template argument of type %qT "
-- "because %qD does not have external linkage",
-- expr, type, decl);
-+ if (complain & tf_error)
-+ error ("%qE is not a valid template argument of type %qT "
-+ "because %qD does not have external linkage",
-+ expr, type, decl);
- return NULL_TREE;
- }
- else if (cxx_dialect >= cxx11 && decl_linkage (decl) == lk_none)
- {
-- error ("%qE is not a valid template argument of type %qT "
-- "because %qD has no linkage",
-- expr, type, decl);
-+ if (complain & tf_error)
-+ error ("%qE is not a valid template argument of type %qT "
-+ "because %qD has no linkage", expr, type, decl);
- return NULL_TREE;
- }
- }
-@@ -5886,15 +5897,17 @@
-
- if (!at_least_as_qualified_p (TREE_TYPE (type), expr_type))
- {
-- error ("%qE is not a valid template argument for type %qT "
-- "because of conflicts in cv-qualification", expr, type);
-+ if (complain & tf_error)
-+ error ("%qE is not a valid template argument for type %qT "
-+ "because of conflicts in cv-qualification", expr, type);
- return NULL_TREE;
- }
-
- if (!real_lvalue_p (expr))
- {
-- error ("%qE is not a valid template argument for type %qT "
-- "because it is not an lvalue", expr, type);
-+ if (complain & tf_error)
-+ error ("%qE is not a valid template argument for type %qT "
-+ "because it is not an lvalue", expr, type);
- return NULL_TREE;
- }
-
-@@ -5910,9 +5923,10 @@
- expr = TREE_OPERAND (expr, 0);
- if (DECL_P (expr))
- {
-- error ("%q#D is not a valid template argument for type %qT "
-- "because a reference variable does not have a constant "
-- "address", expr, type);
-+ if (complain & tf_error)
-+ error ("%q#D is not a valid template argument for type %qT "
-+ "because a reference variable does not have a constant "
-+ "address", expr, type);
- return NULL_TREE;
- }
- }
-@@ -5919,17 +5933,19 @@
-
- if (!DECL_P (expr))
- {
-- error ("%qE is not a valid template argument for type %qT "
-- "because it is not an object with external linkage",
-- expr, type);
-+ if (complain & tf_error)
-+ error ("%qE is not a valid template argument for type %qT "
-+ "because it is not an object with external linkage",
-+ expr, type);
- return NULL_TREE;
- }
-
- if (!DECL_EXTERNAL_LINKAGE_P (expr))
- {
-- error ("%qE is not a valid template argument for type %qT "
-- "because object %qD has not external linkage",
-- expr, type, expr);
-+ if (complain & tf_error)
-+ error ("%qE is not a valid template argument for type %qT "
-+ "because object %qD has not external linkage",
-+ expr, type, expr);
- return NULL_TREE;
- }
-
-@@ -5971,9 +5987,13 @@
- {
- if (TREE_CODE (expr) == ADDR_EXPR)
- {
-- error ("%qE is not a valid template argument for type %qT "
-- "because it is a pointer", expr, type);
-- inform (input_location, "try using %qE instead", TREE_OPERAND (expr, 0));
-+ if (complain & tf_error)
-+ {
-+ error ("%qE is not a valid template argument for type %qT "
-+ "because it is a pointer", expr, type);
-+ inform (input_location, "try using %qE instead",
-+ TREE_OPERAND (expr, 0));
-+ }
- return NULL_TREE;
- }
-
-@@ -6011,13 +6031,16 @@
- provide a superior diagnostic. */
- if (!same_type_p (TREE_TYPE (expr), type))
- {
-- error ("%qE is not a valid template argument for type %qT "
-- "because it is of type %qT", expr, type,
-- TREE_TYPE (expr));
-- /* If we are just one standard conversion off, explain. */
-- if (can_convert_standard (type, TREE_TYPE (expr), complain))
-- inform (input_location,
-- "standard conversions are not allowed in this context");
-+ if (complain & tf_error)
-+ {
-+ error ("%qE is not a valid template argument for type %qT "
-+ "because it is of type %qT", expr, type,
-+ TREE_TYPE (expr));
-+ /* If we are just one standard conversion off, explain. */
-+ if (can_convert_standard (type, TREE_TYPE (expr), complain))
-+ inform (input_location,
-+ "standard conversions are not allowed in this context");
-+ }
- return NULL_TREE;
- }
- }
-@@ -6040,8 +6063,9 @@
- {
- if (expr != nullptr_node)
- {
-- error ("%qE is not a valid template argument for type %qT "
-- "because it is of type %qT", expr, type, TREE_TYPE (expr));
-+ if (complain & tf_error)
-+ error ("%qE is not a valid template argument for type %qT "
-+ "because it is of type %qT", expr, type, TREE_TYPE (expr));
- return NULL_TREE;
- }
- return expr;
-@@ -12638,13 +12662,17 @@
- }
- else
- {
-- /* This can happen for a variable used in a late-specified
-- return type of a local lambda. Just make a dummy decl
-- since it's only used for its type. */
-- if (cp_unevaluated_operand)
-- return tsubst_decl (t, args, complain);
-- gcc_assert (errorcount || sorrycount);
-- return error_mark_node;
-+ /* This can happen for a variable used in a
-+ late-specified return type of a local lambda, or for a
-+ local static or constant. Building a new VAR_DECL
-+ should be OK in all those cases. */
-+ r = tsubst_decl (t, args, complain);
-+ if (decl_constant_var_p (r))
-+ /* A use of a local constant must decay to its value. */
-+ return integral_constant_value (r);
-+ gcc_assert (cp_unevaluated_operand || TREE_STATIC (r)
-+ || errorcount || sorrycount);
-+ return r;
- }
- }
- }
-@@ -15613,7 +15641,7 @@
- continue;
- for (packs = PACK_EXPANSION_PARAMETER_PACKS (type);
- packs; packs = TREE_CHAIN (packs))
-- if (TREE_VALUE (packs) == parm)
-+ if (template_args_equal (TREE_VALUE (packs), parm))
- {
- /* The template parameter pack is used in a function parameter
- pack. If this is the end of the parameter list, the
-@@ -16337,8 +16365,9 @@
- maybe_adjust_types_for_deduction (strict, &parm, &arg, arg_expr);
- }
- else
-- gcc_assert ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
-- == (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL));
-+ if ((TYPE_P (parm) || TREE_CODE (parm) == TEMPLATE_DECL)
-+ != (TYPE_P (arg) || TREE_CODE (arg) == TEMPLATE_DECL))
-+ return unify_template_argument_mismatch (explain_p, parm, arg);
-
- /* For deduction from an init-list we need the actual list. */
- if (arg_expr && BRACE_ENCLOSED_INITIALIZER_P (arg_expr))
-@@ -16674,7 +16703,16 @@
- int i = TREE_VEC_LENGTH (targs);
- for (; i--; )
- if (TREE_VEC_ELT (tempargs, i))
-- TREE_VEC_ELT (targs, i) = TREE_VEC_ELT (tempargs, i);
-+ {
-+ tree old = TREE_VEC_ELT (targs, i);
-+ tree new_ = TREE_VEC_ELT (tempargs, i);
-+ if (new_ && old && ARGUMENT_PACK_P (old)
-+ && ARGUMENT_PACK_EXPLICIT_ARGS (old))
-+ /* Don't forget explicit template arguments in a pack. */
-+ ARGUMENT_PACK_EXPLICIT_ARGS (new_)
-+ = ARGUMENT_PACK_EXPLICIT_ARGS (old);
-+ TREE_VEC_ELT (targs, i) = new_;
-+ }
- }
- if (good)
- return true;
-@@ -20913,7 +20951,12 @@
- return true;
-
- if (BASELINK_P (expression))
-- expression = BASELINK_FUNCTIONS (expression);
-+ {
-+ if (BASELINK_OPTYPE (expression)
-+ && dependent_type_p (BASELINK_OPTYPE (expression)))
-+ return true;
-+ expression = BASELINK_FUNCTIONS (expression);
-+ }
-
- if (TREE_CODE (expression) == TEMPLATE_ID_EXPR)
- {
-Index: gcc/cp/semantics.c
-===================================================================
---- a/src/gcc/cp/semantics.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/cp/semantics.c (.../branches/gcc-4_9-branch)
-@@ -2600,7 +2600,6 @@
- if ((!at_function_scope_p () || CP_TYPE_CONST_P (type))
- && TREE_CODE (type) == ARRAY_TYPE
- && !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
-- && !cp_unevaluated_operand
- && initializer_constant_valid_p (compound_literal, type))
- {
- tree decl = create_temporary_var (type);
-@@ -3867,6 +3866,7 @@
- aggr_init_expr_nargs (aggr_init_expr),
- AGGR_INIT_EXPR_ARGP (aggr_init_expr));
- TREE_NOTHROW (call_expr) = TREE_NOTHROW (aggr_init_expr);
-+ CALL_EXPR_LIST_INIT_P (call_expr) = CALL_EXPR_LIST_INIT_P (aggr_init_expr);
-
- if (style == ctor)
- {
-@@ -5283,6 +5283,8 @@
- break;
- }
- }
-+ else
-+ t = fold_convert (TREE_TYPE (OMP_CLAUSE_DECL (c)), t);
- }
- OMP_CLAUSE_LINEAR_STEP (c) = t;
- }
-@@ -8511,11 +8513,24 @@
- bool
- reduced_constant_expression_p (tree t)
- {
-- if (TREE_CODE (t) == PTRMEM_CST)
-- /* Even if we can't lower this yet, it's constant. */
-- return true;
-- /* FIXME are we calling this too much? */
-- return initializer_constant_valid_p (t, TREE_TYPE (t)) != NULL_TREE;
-+ switch (TREE_CODE (t))
-+ {
-+ case PTRMEM_CST:
-+ /* Even if we can't lower this yet, it's constant. */
-+ return true;
-+
-+ case CONSTRUCTOR:
-+ /* And we need to handle PTRMEM_CST wrapped in a CONSTRUCTOR. */
-+ tree elt; unsigned HOST_WIDE_INT idx;
-+ FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (t), idx, elt)
-+ if (!reduced_constant_expression_p (elt))
-+ return false;
-+ return true;
-+
-+ default:
-+ /* FIXME are we calling this too much? */
-+ return initializer_constant_valid_p (t, TREE_TYPE (t)) != NULL_TREE;
-+ }
- }
-
- /* Some expressions may have constant operands but are not constant
-Index: gcc/cp/parser.c
-===================================================================
---- a/src/gcc/cp/parser.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/cp/parser.c (.../branches/gcc-4_9-branch)
-@@ -1891,7 +1891,7 @@
- static tree cp_parser_userdef_char_literal
- (cp_parser *);
- static tree cp_parser_userdef_string_literal
-- (cp_token *);
-+ (tree);
- static tree cp_parser_userdef_numeric_literal
- (cp_parser *);
-
-@@ -3696,8 +3696,7 @@
- {
- tree literal = build_userdef_literal (suffix_id, value,
- OT_NONE, NULL_TREE);
-- tok->u.value = literal;
-- return cp_parser_userdef_string_literal (tok);
-+ value = cp_parser_userdef_string_literal (literal);
- }
- }
- else
-@@ -3945,9 +3944,8 @@
- as arguments. */
-
- static tree
--cp_parser_userdef_string_literal (cp_token *token)
-+cp_parser_userdef_string_literal (tree literal)
- {
-- tree literal = token->u.value;
- tree suffix_id = USERDEF_LITERAL_SUFFIX_ID (literal);
- tree name = cp_literal_operator_id (IDENTIFIER_POINTER (suffix_id));
- tree value = USERDEF_LITERAL_VALUE (literal);
-@@ -5835,20 +5833,6 @@
- }
- break;
- }
--
-- case RID_CILK_SYNC:
-- if (flag_cilkplus)
-- {
-- tree sync_expr = build_cilk_sync ();
-- SET_EXPR_LOCATION (sync_expr,
-- cp_lexer_peek_token (parser->lexer)->location);
-- finish_expr_stmt (sync_expr);
-- }
-- else
-- error_at (token->location, "-fcilkplus must be enabled to use"
-- " %<_Cilk_sync%>");
-- cp_lexer_consume_token (parser->lexer);
-- break;
-
- case RID_BUILTIN_SHUFFLE:
- {
-@@ -9400,6 +9384,24 @@
- statement = cp_parser_jump_statement (parser);
- break;
-
-+ case RID_CILK_SYNC:
-+ cp_lexer_consume_token (parser->lexer);
-+ if (flag_cilkplus)
-+ {
-+ tree sync_expr = build_cilk_sync ();
-+ SET_EXPR_LOCATION (sync_expr,
-+ token->location);
-+ statement = finish_expr_stmt (sync_expr);
-+ }
-+ else
-+ {
-+ error_at (token->location, "-fcilkplus must be enabled to use"
-+ " %<_Cilk_sync%>");
-+ statement = error_mark_node;
-+ }
-+ cp_parser_require (parser, CPP_SEMICOLON, RT_SEMICOLON);
-+ break;
-+
- /* Objective-C++ exception-handling constructs. */
- case RID_AT_TRY:
- case RID_AT_CATCH:
-@@ -15045,6 +15047,18 @@
- return cp_parser_make_typename_type (parser, parser->scope,
- identifier,
- token->location);
-+
-+ /* Template parameter lists apply only if we are not within a
-+ function parameter list. */
-+ bool template_parm_lists_apply
-+ = parser->num_template_parameter_lists;
-+ if (template_parm_lists_apply)
-+ for (cp_binding_level *s = current_binding_level;
-+ s && s->kind != sk_template_parms;
-+ s = s->level_chain)
-+ if (s->kind == sk_function_parms)
-+ template_parm_lists_apply = false;
-+
- /* Look up a qualified name in the usual way. */
- if (parser->scope)
- {
-@@ -15087,7 +15101,7 @@
-
- decl = (cp_parser_maybe_treat_template_as_class
- (decl, /*tag_name_p=*/is_friend
-- && parser->num_template_parameter_lists));
-+ && template_parm_lists_apply));
-
- if (TREE_CODE (decl) != TYPE_DECL)
- {
-@@ -15100,9 +15114,9 @@
-
- if (TREE_CODE (TREE_TYPE (decl)) != TYPENAME_TYPE)
- {
-- bool allow_template = (parser->num_template_parameter_lists
-- || DECL_SELF_REFERENCE_P (decl));
-- type = check_elaborated_type_specifier (tag_type, decl,
-+ bool allow_template = (template_parm_lists_apply
-+ || DECL_SELF_REFERENCE_P (decl));
-+ type = check_elaborated_type_specifier (tag_type, decl,
- allow_template);
-
- if (type == error_mark_node)
-@@ -15188,15 +15202,16 @@
- ts = ts_global;
-
- template_p =
-- (parser->num_template_parameter_lists
-+ (template_parm_lists_apply
- && (cp_parser_next_token_starts_class_definition_p (parser)
- || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)));
- /* An unqualified name was used to reference this type, so
- there were no qualifying templates. */
-- if (!cp_parser_check_template_parameters (parser,
-- /*num_templates=*/0,
-- token->location,
-- /*declarator=*/NULL))
-+ if (template_parm_lists_apply
-+ && !cp_parser_check_template_parameters (parser,
-+ /*num_templates=*/0,
-+ token->location,
-+ /*declarator=*/NULL))
- return error_mark_node;
- type = xref_tag (tag_type, identifier, ts, template_p);
- }
-@@ -17837,7 +17852,7 @@
- /* Used by handling of trailing-return-types and NSDMI, in which 'this'
- is in scope even though it isn't real. */
-
--static void
-+void
- inject_this_parameter (tree ctype, cp_cv_quals quals)
- {
- tree this_parm;
-@@ -23090,10 +23105,17 @@
- ok = false;
- }
- if (!ok)
-- error ("literal operator template %qD has invalid parameter list."
-- " Expected non-type template argument pack <char...>"
-- " or <typename CharT, CharT...>",
-- decl);
-+ {
-+ if (cxx_dialect >= cxx1y)
-+ error ("literal operator template %qD has invalid parameter list."
-+ " Expected non-type template argument pack <char...>"
-+ " or <typename CharT, CharT...>",
-+ decl);
-+ else
-+ error ("literal operator template %qD has invalid parameter list."
-+ " Expected non-type template argument pack <char...>",
-+ decl);
-+ }
- }
- /* Register member declarations. */
- if (member_p && !friend_p && decl && !DECL_CLASS_TEMPLATE_P (decl))
-@@ -23664,16 +23686,7 @@
- parsed_arg = check_default_argument (parmtype, parsed_arg,
- tf_warning_or_error);
- else
-- {
-- int flags = LOOKUP_IMPLICIT;
-- if (BRACE_ENCLOSED_INITIALIZER_P (parsed_arg)
-- && CONSTRUCTOR_IS_DIRECT_INIT (parsed_arg))
-- flags = LOOKUP_NORMAL;
-- parsed_arg = digest_init_flags (TREE_TYPE (decl), parsed_arg, flags);
-- if (TREE_CODE (parsed_arg) == TARGET_EXPR)
-- /* This represents the whole initialization. */
-- TARGET_EXPR_DIRECT_INIT_P (parsed_arg) = true;
-- }
-+ parsed_arg = digest_nsdmi_init (decl, parsed_arg);
- }
-
- /* If the token stream has not been completely used up, then
-@@ -28530,6 +28543,20 @@
- tree id = cp_lexer_peek_token (parser->lexer)->u.value;
- const char *p = IDENTIFIER_POINTER (id);
-
-+ if (!strcmp (p, "seq_cst"))
-+ {
-+ seq_cst = true;
-+ cp_lexer_consume_token (parser->lexer);
-+ if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA)
-+ && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_NAME)
-+ cp_lexer_consume_token (parser->lexer);
-+ }
-+ }
-+ if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
-+ {
-+ tree id = cp_lexer_peek_token (parser->lexer)->u.value;
-+ const char *p = IDENTIFIER_POINTER (id);
-+
- if (!strcmp (p, "read"))
- code = OMP_ATOMIC_READ;
- else if (!strcmp (p, "write"))
-@@ -28543,16 +28570,22 @@
- if (p)
- cp_lexer_consume_token (parser->lexer);
- }
--
-- if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
-+ if (!seq_cst)
- {
-- tree id = cp_lexer_peek_token (parser->lexer)->u.value;
-- const char *p = IDENTIFIER_POINTER (id);
-+ if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA)
-+ && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_NAME)
-+ cp_lexer_consume_token (parser->lexer);
-
-- if (!strcmp (p, "seq_cst"))
-+ if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
- {
-- seq_cst = true;
-- cp_lexer_consume_token (parser->lexer);
-+ tree id = cp_lexer_peek_token (parser->lexer)->u.value;
-+ const char *p = IDENTIFIER_POINTER (id);
-+
-+ if (!strcmp (p, "seq_cst"))
-+ {
-+ seq_cst = true;
-+ cp_lexer_consume_token (parser->lexer);
-+ }
- }
- }
- cp_parser_require_pragma_eol (parser, pragma_tok);
-@@ -29341,9 +29374,17 @@
- change it to shared (decl) in OMP_PARALLEL_CLAUSES. */
- tree l = build_omp_clause (loc, OMP_CLAUSE_LASTPRIVATE);
- OMP_CLAUSE_DECL (l) = real_decl;
-- OMP_CLAUSE_CHAIN (l) = clauses;
- CP_OMP_CLAUSE_INFO (l) = CP_OMP_CLAUSE_INFO (*c);
-- clauses = l;
-+ if (code == OMP_SIMD)
-+ {
-+ OMP_CLAUSE_CHAIN (l) = cclauses[C_OMP_CLAUSE_SPLIT_FOR];
-+ cclauses[C_OMP_CLAUSE_SPLIT_FOR] = l;
-+ }
-+ else
-+ {
-+ OMP_CLAUSE_CHAIN (l) = clauses;
-+ clauses = l;
-+ }
- OMP_CLAUSE_SET_CODE (*c, OMP_CLAUSE_SHARED);
- CP_OMP_CLAUSE_INFO (*c) = NULL;
- add_private_clause = false;
-@@ -29825,10 +29866,12 @@
- return cp_parser_omp_for (parser, pragma_tok, p_name, mask, cclauses);
- block = begin_omp_parallel ();
- save = cp_parser_begin_omp_structured_block (parser);
-- cp_parser_omp_for (parser, pragma_tok, p_name, mask, cclauses);
-+ tree ret = cp_parser_omp_for (parser, pragma_tok, p_name, mask, cclauses);
- cp_parser_end_omp_structured_block (parser, save);
- stmt = finish_omp_parallel (cclauses[C_OMP_CLAUSE_SPLIT_PARALLEL],
- block);
-+ if (ret == NULL_TREE)
-+ return ret;
- OMP_PARALLEL_COMBINED (stmt) = 1;
- return stmt;
- }
-Index: gcc/cp/call.c
-===================================================================
---- a/src/gcc/cp/call.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/cp/call.c (.../branches/gcc-4_9-branch)
-@@ -206,7 +206,7 @@
- static void maybe_handle_implicit_object (conversion **);
- static struct z_candidate *add_candidate
- (struct z_candidate **, tree, tree, const vec<tree, va_gc> *, size_t,
-- conversion **, tree, tree, int, struct rejection_reason *);
-+ conversion **, tree, tree, int, struct rejection_reason *, int);
- static tree source_type (conversion *);
- static void add_warning (struct z_candidate *, struct z_candidate *);
- static bool reference_compatible_p (tree, tree);
-@@ -520,7 +520,6 @@
- sequence from the type returned by FN to the desired destination
- type. */
- conversion *second_conv;
-- int viable;
- struct rejection_reason *reason;
- /* If FN is a member function, the binfo indicating the path used to
- qualify the name of FN at the call site. This path is used to
-@@ -538,6 +537,10 @@
- tree explicit_targs;
- candidate_warning *warnings;
- z_candidate *next;
-+ int viable;
-+
-+ /* The flags active in add_candidate. */
-+ int flags;
- };
-
- /* Returns true iff T is a null pointer constant in the sense of
-@@ -886,7 +889,9 @@
- if (ctor == error_mark_node)
- return NULL;
-
-- flags |= LOOKUP_NO_NARROWING;
-+ /* The conversions within the init-list aren't affected by the enclosing
-+ context; they're always simple copy-initialization. */
-+ flags = LOOKUP_IMPLICIT|LOOKUP_NO_NARROWING;
-
- for (; field; field = next_initializable_field (DECL_CHAIN (field)))
- {
-@@ -959,6 +964,8 @@
- return NULL;
- }
-
-+ flags = LOOKUP_IMPLICIT|LOOKUP_NO_NARROWING;
-+
- FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
- {
- conversion *sub
-@@ -1003,6 +1010,8 @@
- if (len != 2)
- return NULL;
-
-+ flags = LOOKUP_IMPLICIT|LOOKUP_NO_NARROWING;
-+
- FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), i, val)
- {
- conversion *sub
-@@ -1810,7 +1819,8 @@
- tree fn, tree first_arg, const vec<tree, va_gc> *args,
- size_t num_convs, conversion **convs,
- tree access_path, tree conversion_path,
-- int viable, struct rejection_reason *reason)
-+ int viable, struct rejection_reason *reason,
-+ int flags)
- {
- struct z_candidate *cand = (struct z_candidate *)
- conversion_obstack_alloc (sizeof (struct z_candidate));
-@@ -1825,6 +1835,7 @@
- cand->viable = viable;
- cand->reason = reason;
- cand->next = *candidates;
-+ cand->flags = flags;
- *candidates = cand;
-
- return cand;
-@@ -1994,6 +2005,9 @@
- object parameter has reference type. */
- bool rv = FUNCTION_RVALUE_QUALIFIED (TREE_TYPE (fn));
- parmtype = cp_build_reference_type (parmtype, rv);
-+ /* The special handling of 'this' conversions in compare_ics
-+ does not apply if there is a ref-qualifier. */
-+ is_this = false;
- }
- else
- {
-@@ -2061,7 +2075,7 @@
-
- out:
- return add_candidate (candidates, fn, orig_first_arg, args, len, convs,
-- access_path, conversion_path, viable, reason);
-+ access_path, conversion_path, viable, reason, flags);
- }
-
- /* Create an overload candidate for the conversion function FN which will
-@@ -2163,7 +2177,7 @@
- }
-
- return add_candidate (candidates, totype, first_arg, arglist, len, convs,
-- access_path, conversion_path, viable, reason);
-+ access_path, conversion_path, viable, reason, flags);
- }
-
- static void
-@@ -2238,7 +2252,7 @@
- num_convs, convs,
- /*access_path=*/NULL_TREE,
- /*conversion_path=*/NULL_TREE,
-- viable, reason);
-+ viable, reason, flags);
- }
-
- static bool
-@@ -3056,7 +3070,7 @@
- return cand;
- fail:
- return add_candidate (candidates, tmpl, first_arg, arglist, nargs, NULL,
-- access_path, conversion_path, 0, reason);
-+ access_path, conversion_path, 0, reason, flags);
- }
-
-
-@@ -3677,11 +3691,20 @@
- return cand;
- }
-
-+ tree convtype;
-+ if (!DECL_CONSTRUCTOR_P (cand->fn))
-+ convtype = non_reference (TREE_TYPE (TREE_TYPE (cand->fn)));
-+ else if (cand->second_conv->kind == ck_rvalue)
-+ /* DR 5: [in the first step of copy-initialization]...if the function
-+ is a constructor, the call initializes a temporary of the
-+ cv-unqualified version of the destination type. */
-+ convtype = cv_unqualified (totype);
-+ else
-+ convtype = totype;
- /* Build the user conversion sequence. */
- conv = build_conv
- (ck_user,
-- (DECL_CONSTRUCTOR_P (cand->fn)
-- ? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
-+ convtype,
- build_identity_conv (TREE_TYPE (expr), expr));
- conv->cand = cand;
- if (cand->viable == -1)
-@@ -6751,7 +6774,7 @@
-
- ++nargs;
- alcarray = XALLOCAVEC (tree, nargs);
-- alcarray[0] = first_arg;
-+ alcarray[0] = build_this (first_arg);
- FOR_EACH_VEC_SAFE_ELT (args, ix, arg)
- alcarray[ix + 1] = arg;
- argarray = alcarray;
-@@ -7219,7 +7242,11 @@
- return error_mark_node;
- }
-
-- return build_cxx_call (fn, nargs, argarray, complain|decltype_flag);
-+ tree call = build_cxx_call (fn, nargs, argarray, complain|decltype_flag);
-+ if (TREE_CODE (call) == CALL_EXPR
-+ && (cand->flags & LOOKUP_LIST_INIT_CTOR))
-+ CALL_EXPR_LIST_INIT_P (call) = true;
-+ return call;
- }
-
- /* Build and return a call to FN, using NARGS arguments in ARGARRAY.
-@@ -7261,6 +7288,11 @@
- || bif == BUILT_IN_CILKPLUS_SEC_REDUCE
- || bif == BUILT_IN_CILKPLUS_SEC_REDUCE_MUTATING)
- {
-+ if (call_expr_nargs (fn) == 0)
-+ {
-+ error_at (EXPR_LOCATION (fn), "Invalid builtin arguments");
-+ return error_mark_node;
-+ }
- /* for bif == BUILT_IN_CILKPLUS_SEC_REDUCE_ALL_ZERO or
- BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_ZERO or
- BUILT_IN_CILKPLUS_SEC_REDUCE_ANY_NONZERO or
-@@ -8446,10 +8478,11 @@
- /* [over.ics.rank]
-
- --S1 and S2 are reference bindings (_dcl.init.ref_) and neither refers
-- to an implicit object parameter, and either S1 binds an lvalue reference
-- to an lvalue and S2 binds an rvalue reference or S1 binds an rvalue
-- reference to an rvalue and S2 binds an lvalue reference
-- (C++0x draft standard, 13.3.3.2)
-+ to an implicit object parameter of a non-static member function
-+ declared without a ref-qualifier, and either S1 binds an lvalue
-+ reference to an lvalue and S2 binds an rvalue reference or S1 binds an
-+ rvalue reference to an rvalue and S2 binds an lvalue reference (C++0x
-+ draft standard, 13.3.3.2)
-
- --S1 and S2 are reference bindings (_dcl.init.ref_), and the
- types to which the references refer are the same type except for
-Index: gcc/cp/lambda.c
-===================================================================
---- a/src/gcc/cp/lambda.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/cp/lambda.c (.../branches/gcc-4_9-branch)
-@@ -201,6 +201,14 @@
- return lambda;
- }
-
-+static inline bool
-+is_this (tree t)
-+{
-+ return ((TREE_CODE (t) == PARM_DECL
-+ || TREE_CODE (t) == VAR_DECL)
-+ && DECL_NAME (t) == this_identifier);
-+}
-+
- /* Returns the type to use for the FIELD_DECL corresponding to the
- capture of EXPR.
- The caller should add REFERENCE_TYPE for capture by reference. */
-@@ -216,8 +224,9 @@
- }
- else
- type = non_reference (unlowered_expr_type (expr));
-- if (!type || WILDCARD_TYPE_P (type) || type_uses_auto (type)
-- || DECL_PACK_P (expr))
-+ if (type_dependent_expression_p (expr)
-+ && !is_this (tree_strip_nop_conversions (expr))
-+ && !array_of_runtime_bound_p (type))
- {
- type = cxx_make_type (DECLTYPE_TYPE);
- DECLTYPE_TYPE_EXPR (type) = expr;
-Index: gcc/cp/mangle.c
-===================================================================
---- a/src/gcc/cp/mangle.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/cp/mangle.c (.../branches/gcc-4_9-branch)
-@@ -752,6 +752,10 @@
- if (tcontext != NULL_TREE)
- return tcontext;
-
-+ if (TREE_CODE (decl) == TEMPLATE_DECL
-+ && DECL_TEMPLATE_RESULT (decl))
-+ decl = DECL_TEMPLATE_RESULT (decl);
-+
- if (TREE_CODE (decl) == TYPE_DECL
- && LAMBDA_TYPE_P (TREE_TYPE (decl)))
- {
-Index: gcc/cp/cp-tree.h
-===================================================================
---- a/src/gcc/cp/cp-tree.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/cp/cp-tree.h (.../branches/gcc-4_9-branch)
-@@ -101,6 +101,7 @@
- FNDECL_USED_AUTO (in FUNCTION_DECL)
- DECLTYPE_FOR_LAMBDA_PROXY (in DECLTYPE_TYPE)
- REF_PARENTHESIZED_P (in COMPONENT_REF, SCOPE_REF)
-+ AGGR_INIT_ZERO_FIRST (in AGGR_INIT_EXPR)
- 3: (TREE_REFERENCE_EXPR) (in NON_LVALUE_EXPR) (commented-out).
- ICS_BAD_FLAG (in _CONV)
- FN_TRY_BLOCK_P (in TRY_BLOCK)
-@@ -107,6 +108,7 @@
- IDENTIFIER_CTOR_OR_DTOR_P (in IDENTIFIER_NODE)
- BIND_EXPR_BODY_BLOCK (in BIND_EXPR)
- DECL_NON_TRIVIALLY_INITIALIZED_P (in VAR_DECL)
-+ CALL_EXPR_LIST_INIT_P (in CALL_EXPR, AGGR_INIT_EXPR)
- 4: TREE_HAS_CONSTRUCTOR (in INDIRECT_REF, SAVE_EXPR, CONSTRUCTOR,
- or FIELD_DECL).
- IDENTIFIER_TYPENAME_P (in IDENTIFIER_NODE)
-@@ -3026,6 +3028,10 @@
- should be performed at instantiation time. */
- #define KOENIG_LOOKUP_P(NODE) TREE_LANG_FLAG_0 (CALL_EXPR_CHECK (NODE))
-
-+/* True if CALL_EXPR expresses list-initialization of an object. */
-+#define CALL_EXPR_LIST_INIT_P(NODE) \
-+ TREE_LANG_FLAG_3 (TREE_CHECK2 ((NODE),CALL_EXPR,AGGR_INIT_EXPR))
-+
- /* Indicates whether a string literal has been parenthesized. Such
- usages are disallowed in certain circumstances. */
-
-@@ -3430,6 +3436,9 @@
- B b{1,2}, not B b({1,2}) or B b = {1,2}. */
- #define CONSTRUCTOR_IS_DIRECT_INIT(NODE) (TREE_LANG_FLAG_0 (CONSTRUCTOR_CHECK (NODE)))
-
-+#define DIRECT_LIST_INIT_P(NODE) \
-+ (BRACE_ENCLOSED_INITIALIZER_P (NODE) && CONSTRUCTOR_IS_DIRECT_INIT (NODE))
-+
- /* True if NODE represents a conversion for direct-initialization in a
- template. Set by perform_implicit_conversion_flags. */
- #define IMPLICIT_CONV_EXPR_DIRECT_INIT(NODE) \
-@@ -4347,6 +4356,11 @@
- PARM_DECLs in cp_tree_equal. */
- extern int comparing_specializations;
-
-+/* A type-qualifier, or bitmask therefore, using the TYPE_QUAL
-+ constants. */
-+
-+typedef int cp_cv_quals;
-+
- /* In parser.c. */
-
- /* Nonzero if we are parsing an unevaluated operand: an operand to
-@@ -4356,6 +4370,7 @@
- extern int cp_unevaluated_operand;
- extern tree cp_convert_range_for (tree, tree, tree, bool);
- extern bool parsing_nsdmi (void);
-+extern void inject_this_parameter (tree, cp_cv_quals);
-
- /* in pt.c */
-
-@@ -4735,11 +4750,6 @@
- extern GTY(()) operator_name_info_t assignment_operator_name_info
- [(int) MAX_TREE_CODES];
-
--/* A type-qualifier, or bitmask therefore, using the TYPE_QUAL
-- constants. */
--
--typedef int cp_cv_quals;
--
- /* Non-static member functions have an optional virt-specifier-seq.
- There is a VIRT_SPEC value for each virt-specifier.
- They can be combined by bitwise-or to form the complete set of
-@@ -5415,6 +5425,7 @@
- extern tree build_zero_init (tree, tree, bool);
- extern tree build_value_init (tree, tsubst_flags_t);
- extern tree build_value_init_noctor (tree, tsubst_flags_t);
-+extern tree get_nsdmi (tree, bool);
- extern tree build_offset_ref (tree, tree, bool,
- tsubst_flags_t);
- extern tree throw_bad_array_new_length (void);
-@@ -6151,6 +6162,7 @@
- extern void check_narrowing (tree, tree);
- extern tree digest_init (tree, tree, tsubst_flags_t);
- extern tree digest_init_flags (tree, tree, int);
-+extern tree digest_nsdmi_init (tree, tree);
- extern tree build_scoped_ref (tree, tree, tree *);
- extern tree build_x_arrow (location_t, tree,
- tsubst_flags_t);
-@@ -6201,7 +6213,7 @@
- extern tree cxx_omp_clause_copy_ctor (tree, tree, tree);
- extern tree cxx_omp_clause_assign_op (tree, tree, tree);
- extern tree cxx_omp_clause_dtor (tree, tree);
--extern void cxx_omp_finish_clause (tree);
-+extern void cxx_omp_finish_clause (tree, gimple_seq *);
- extern bool cxx_omp_privatize_by_reference (const_tree);
-
- /* in name-lookup.c */
-Index: gcc/double-int.c
-===================================================================
---- a/src/gcc/double-int.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/double-int.c (.../branches/gcc-4_9-branch)
-@@ -588,7 +588,7 @@
- == (unsigned HOST_WIDE_INT) htwice)
- && (labs_den <= ltwice)))
- {
-- if (*hquo < 0)
-+ if (quo_neg)
- /* quo = quo - 1; */
- add_double (*lquo, *hquo,
- (HOST_WIDE_INT) -1, (HOST_WIDE_INT) -1, lquo, hquo);
-Index: gcc/cgraphclones.c
-===================================================================
---- a/src/gcc/cgraphclones.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/cgraphclones.c (.../branches/gcc-4_9-branch)
-@@ -302,14 +302,13 @@
- thunk is this_adjusting but we are removing this parameter. */
-
- static cgraph_node *
--duplicate_thunk_for_node (cgraph_node *thunk, cgraph_node *node,
-- bitmap args_to_skip)
-+duplicate_thunk_for_node (cgraph_node *thunk, cgraph_node *node)
- {
- cgraph_node *new_thunk, *thunk_of;
- thunk_of = cgraph_function_or_thunk_node (thunk->callees->callee);
-
- if (thunk_of->thunk.thunk_p)
-- node = duplicate_thunk_for_node (thunk_of, node, args_to_skip);
-+ node = duplicate_thunk_for_node (thunk_of, node);
-
- struct cgraph_edge *cs;
- for (cs = node->callers; cs; cs = cs->next_caller)
-@@ -321,7 +320,7 @@
- return cs->caller;
-
- tree new_decl;
-- if (!args_to_skip)
-+ if (!node->clone.args_to_skip)
- new_decl = copy_node (thunk->decl);
- else
- {
-@@ -328,10 +327,11 @@
- /* We do not need to duplicate this_adjusting thunks if we have removed
- this. */
- if (thunk->thunk.this_adjusting
-- && bitmap_bit_p (args_to_skip, 0))
-+ && bitmap_bit_p (node->clone.args_to_skip, 0))
- return node;
-
-- new_decl = build_function_decl_skip_args (thunk->decl, args_to_skip,
-+ new_decl = build_function_decl_skip_args (thunk->decl,
-+ node->clone.args_to_skip,
- false);
- }
- gcc_checking_assert (!DECL_STRUCT_FUNCTION (new_decl));
-@@ -349,6 +349,8 @@
- new_thunk->thunk = thunk->thunk;
- new_thunk->unique_name = in_lto_p;
- new_thunk->former_clone_of = thunk->decl;
-+ new_thunk->clone.args_to_skip = node->clone.args_to_skip;
-+ new_thunk->clone.combined_args_to_skip = node->clone.combined_args_to_skip;
-
- struct cgraph_edge *e = cgraph_create_edge (new_thunk, node, NULL, 0,
- CGRAPH_FREQ_BASE);
-@@ -365,12 +367,11 @@
- chain. */
-
- void
--redirect_edge_duplicating_thunks (struct cgraph_edge *e, struct cgraph_node *n,
-- bitmap args_to_skip)
-+redirect_edge_duplicating_thunks (struct cgraph_edge *e, struct cgraph_node *n)
- {
- cgraph_node *orig_to = cgraph_function_or_thunk_node (e->callee);
- if (orig_to->thunk.thunk_p)
-- n = duplicate_thunk_for_node (orig_to, n, args_to_skip);
-+ n = duplicate_thunk_for_node (orig_to, n);
-
- cgraph_redirect_edge_callee (e, n);
- }
-@@ -423,9 +424,21 @@
- new_node->rtl = n->rtl;
- new_node->count = count;
- new_node->frequency = n->frequency;
-- new_node->clone = n->clone;
-+ new_node->tp_first_run = n->tp_first_run;
-+
- new_node->clone.tree_map = NULL;
-- new_node->tp_first_run = n->tp_first_run;
-+ new_node->clone.args_to_skip = args_to_skip;
-+ if (!args_to_skip)
-+ new_node->clone.combined_args_to_skip = n->clone.combined_args_to_skip;
-+ else if (n->clone.combined_args_to_skip)
-+ {
-+ new_node->clone.combined_args_to_skip = BITMAP_GGC_ALLOC ();
-+ bitmap_ior (new_node->clone.combined_args_to_skip,
-+ n->clone.combined_args_to_skip, args_to_skip);
-+ }
-+ else
-+ new_node->clone.combined_args_to_skip = args_to_skip;
-+
- if (n->count)
- {
- if (new_node->count > n->count)
-@@ -450,10 +463,9 @@
- if (!e->callee
- || DECL_BUILT_IN_CLASS (e->callee->decl) != BUILT_IN_NORMAL
- || DECL_FUNCTION_CODE (e->callee->decl) != BUILT_IN_UNREACHABLE)
-- redirect_edge_duplicating_thunks (e, new_node, args_to_skip);
-+ redirect_edge_duplicating_thunks (e, new_node);
- }
-
--
- for (e = n->callees;e; e=e->next_callee)
- cgraph_clone_edge (e, new_node, e->call_stmt, e->lto_stmt_uid,
- count_scale, freq, update_original);
-@@ -562,7 +574,6 @@
- DECL_SECTION_NAME (new_node->decl) = NULL;
- set_new_clone_decl_and_node_flags (new_node);
- new_node->clone.tree_map = tree_map;
-- new_node->clone.args_to_skip = args_to_skip;
-
- /* Clones of global symbols or symbols with unique names are unique. */
- if ((TREE_PUBLIC (old_decl)
-@@ -574,32 +585,6 @@
- FOR_EACH_VEC_SAFE_ELT (tree_map, i, map)
- ipa_maybe_record_reference (new_node, map->new_tree,
- IPA_REF_ADDR, NULL);
-- if (!args_to_skip)
-- new_node->clone.combined_args_to_skip = old_node->clone.combined_args_to_skip;
-- else if (old_node->clone.combined_args_to_skip)
-- {
-- int newi = 0, oldi = 0;
-- tree arg;
-- bitmap new_args_to_skip = BITMAP_GGC_ALLOC ();
-- struct cgraph_node *orig_node;
-- for (orig_node = old_node; orig_node->clone_of; orig_node = orig_node->clone_of)
-- ;
-- for (arg = DECL_ARGUMENTS (orig_node->decl);
-- arg; arg = DECL_CHAIN (arg), oldi++)
-- {
-- if (bitmap_bit_p (old_node->clone.combined_args_to_skip, oldi))
-- {
-- bitmap_set_bit (new_args_to_skip, oldi);
-- continue;
-- }
-- if (bitmap_bit_p (args_to_skip, newi))
-- bitmap_set_bit (new_args_to_skip, oldi);
-- newi++;
-- }
-- new_node->clone.combined_args_to_skip = new_args_to_skip;
-- }
-- else
-- new_node->clone.combined_args_to_skip = args_to_skip;
-
- cgraph_call_node_duplication_hooks (old_node, new_node);
-
-Index: gcc/lto-streamer-out.c
-===================================================================
---- a/src/gcc/lto-streamer-out.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/lto-streamer-out.c (.../branches/gcc-4_9-branch)
-@@ -2022,7 +2022,30 @@
- lto_end_section ();
- }
-
-+/* Wrap symbol references in *TP inside a type-preserving MEM_REF. */
-
-+static tree
-+wrap_refs (tree *tp, int *ws, void *)
-+{
-+ tree t = *tp;
-+ if (handled_component_p (t)
-+ && TREE_CODE (TREE_OPERAND (t, 0)) == VAR_DECL)
-+ {
-+ tree decl = TREE_OPERAND (t, 0);
-+ tree ptrtype = build_pointer_type (TREE_TYPE (decl));
-+ TREE_OPERAND (t, 0) = build2 (MEM_REF, TREE_TYPE (decl),
-+ build1 (ADDR_EXPR, ptrtype, decl),
-+ build_int_cst (ptrtype, 0));
-+ TREE_THIS_VOLATILE (TREE_OPERAND (t, 0)) = TREE_THIS_VOLATILE (decl);
-+ *ws = 0;
-+ }
-+ else if (TREE_CODE (t) == CONSTRUCTOR)
-+ ;
-+ else if (!EXPR_P (t))
-+ *ws = 0;
-+ return NULL_TREE;
-+}
-+
- /* Main entry point from the pass manager. */
-
- void
-@@ -2043,25 +2066,34 @@
- for (i = 0; i < n_nodes; i++)
- {
- symtab_node *snode = lto_symtab_encoder_deref (encoder, i);
-- cgraph_node *node = dyn_cast <cgraph_node> (snode);
-- if (node
-- && lto_symtab_encoder_encode_body_p (encoder, node)
-- && !node->alias)
-+ if (cgraph_node *node = dyn_cast <cgraph_node> (snode))
- {
-+ if (lto_symtab_encoder_encode_body_p (encoder, node)
-+ && !node->alias)
-+ {
- #ifdef ENABLE_CHECKING
-- gcc_assert (!bitmap_bit_p (output, DECL_UID (node->decl)));
-- bitmap_set_bit (output, DECL_UID (node->decl));
-+ gcc_assert (!bitmap_bit_p (output, DECL_UID (node->decl)));
-+ bitmap_set_bit (output, DECL_UID (node->decl));
- #endif
-- decl_state = lto_new_out_decl_state ();
-- lto_push_out_decl_state (decl_state);
-- if (gimple_has_body_p (node->decl) || !flag_wpa)
-- output_function (node);
-- else
-- copy_function (node);
-- gcc_assert (lto_get_out_decl_state () == decl_state);
-- lto_pop_out_decl_state ();
-- lto_record_function_out_decl_state (node->decl, decl_state);
-+ decl_state = lto_new_out_decl_state ();
-+ lto_push_out_decl_state (decl_state);
-+ if (gimple_has_body_p (node->decl) || !flag_wpa)
-+ output_function (node);
-+ else
-+ copy_function (node);
-+ gcc_assert (lto_get_out_decl_state () == decl_state);
-+ lto_pop_out_decl_state ();
-+ lto_record_function_out_decl_state (node->decl, decl_state);
-+ }
- }
-+ else if (varpool_node *node = dyn_cast <varpool_node> (snode))
-+ {
-+ /* Wrap symbol references inside the ctor in a type
-+ preserving MEM_REF. */
-+ tree ctor = DECL_INITIAL (node->decl);
-+ if (ctor && !in_lto_p)
-+ walk_tree (&ctor, wrap_refs, NULL, NULL);
-+ }
- }
-
- /* Emit the callgraph after emitting function bodies. This needs to
-Index: gcc/tree-ssa-math-opts.c
-===================================================================
---- a/src/gcc/tree-ssa-math-opts.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/tree-ssa-math-opts.c (.../branches/gcc-4_9-branch)
-@@ -1620,7 +1620,7 @@
-
- struct symbolic_number {
- unsigned HOST_WIDEST_INT n;
-- int size;
-+ tree type;
- };
-
- /* Perform a SHIFT or ROTATE operation by COUNT bits on symbolic
-@@ -1632,13 +1632,15 @@
- struct symbolic_number *n,
- int count)
- {
-+ int bitsize = TYPE_PRECISION (n->type);
-+
- if (count % 8 != 0)
- return false;
-
- /* Zero out the extra bits of N in order to avoid them being shifted
- into the significant bits. */
-- if (n->size < (int)sizeof (HOST_WIDEST_INT))
-- n->n &= ((unsigned HOST_WIDEST_INT)1 << (n->size * BITS_PER_UNIT)) - 1;
-+ if (bitsize < 8 * (int)sizeof (HOST_WIDEST_INT))
-+ n->n &= ((unsigned HOST_WIDEST_INT)1 << bitsize) - 1;
-
- switch (code)
- {
-@@ -1646,20 +1648,24 @@
- n->n <<= count;
- break;
- case RSHIFT_EXPR:
-+ /* Arithmetic shift of signed type: result is dependent on the value. */
-+ if (!TYPE_UNSIGNED (n->type)
-+ && (n->n & ((unsigned HOST_WIDEST_INT) 0xff << (bitsize - 8))))
-+ return false;
- n->n >>= count;
- break;
- case LROTATE_EXPR:
-- n->n = (n->n << count) | (n->n >> ((n->size * BITS_PER_UNIT) - count));
-+ n->n = (n->n << count) | (n->n >> (bitsize - count));
- break;
- case RROTATE_EXPR:
-- n->n = (n->n >> count) | (n->n << ((n->size * BITS_PER_UNIT) - count));
-+ n->n = (n->n >> count) | (n->n << (bitsize - count));
- break;
- default:
- return false;
- }
- /* Zero unused bits for size. */
-- if (n->size < (int)sizeof (HOST_WIDEST_INT))
-- n->n &= ((unsigned HOST_WIDEST_INT)1 << (n->size * BITS_PER_UNIT)) - 1;
-+ if (bitsize < 8 * (int)sizeof (HOST_WIDEST_INT))
-+ n->n &= ((unsigned HOST_WIDEST_INT)1 << bitsize) - 1;
- return true;
- }
-
-@@ -1676,7 +1682,7 @@
- if (TREE_CODE (lhs_type) != INTEGER_TYPE)
- return false;
-
-- if (TYPE_PRECISION (lhs_type) != n->size * BITS_PER_UNIT)
-+ if (TYPE_PRECISION (lhs_type) != TYPE_PRECISION (n->type))
- return false;
-
- return true;
-@@ -1733,20 +1739,23 @@
- to initialize the symbolic number. */
- if (!source_expr1)
- {
-+ int size;
-+
- /* Set up the symbolic number N by setting each byte to a
- value between 1 and the byte size of rhs1. The highest
- order byte is set to n->size and the lowest order
- byte to 1. */
-- n->size = TYPE_PRECISION (TREE_TYPE (rhs1));
-- if (n->size % BITS_PER_UNIT != 0)
-+ n->type = TREE_TYPE (rhs1);
-+ size = TYPE_PRECISION (n->type);
-+ if (size % BITS_PER_UNIT != 0)
- return NULL_TREE;
-- n->size /= BITS_PER_UNIT;
-+ size /= BITS_PER_UNIT;
- n->n = (sizeof (HOST_WIDEST_INT) < 8 ? 0 :
- (unsigned HOST_WIDEST_INT)0x08070605 << 32 | 0x04030201);
-
-- if (n->size < (int)sizeof (HOST_WIDEST_INT))
-+ if (size < (int)sizeof (HOST_WIDEST_INT))
- n->n &= ((unsigned HOST_WIDEST_INT)1 <<
-- (n->size * BITS_PER_UNIT)) - 1;
-+ (size * BITS_PER_UNIT)) - 1;
-
- source_expr1 = rhs1;
- }
-@@ -1755,12 +1764,12 @@
- {
- case BIT_AND_EXPR:
- {
-- int i;
-+ int i, size = TYPE_PRECISION (n->type) / BITS_PER_UNIT;
- unsigned HOST_WIDEST_INT val = widest_int_cst_value (rhs2);
- unsigned HOST_WIDEST_INT tmp = val;
-
- /* Only constants masking full bytes are allowed. */
-- for (i = 0; i < n->size; i++, tmp >>= BITS_PER_UNIT)
-+ for (i = 0; i < size; i++, tmp >>= BITS_PER_UNIT)
- if ((tmp & 0xff) != 0 && (tmp & 0xff) != 0xff)
- return NULL_TREE;
-
-@@ -1776,12 +1785,22 @@
- break;
- CASE_CONVERT:
- {
-- int type_size;
-+ int type_size, old_type_size;
-+ tree type;
-
-- type_size = TYPE_PRECISION (gimple_expr_type (stmt));
-+ type = gimple_expr_type (stmt);
-+ type_size = TYPE_PRECISION (type);
- if (type_size % BITS_PER_UNIT != 0)
- return NULL_TREE;
-
-+ /* Sign extension: result is dependent on the value. */
-+ old_type_size = TYPE_PRECISION (n->type);
-+ if (!TYPE_UNSIGNED (n->type)
-+ && type_size > old_type_size
-+ && n->n &
-+ ((unsigned HOST_WIDEST_INT) 0xff << (old_type_size - 8)))
-+ return NULL_TREE;
-+
- if (type_size / BITS_PER_UNIT < (int)(sizeof (HOST_WIDEST_INT)))
- {
- /* If STMT casts to a smaller type mask out the bits not
-@@ -1788,7 +1807,7 @@
- belonging to the target type. */
- n->n &= ((unsigned HOST_WIDEST_INT)1 << type_size) - 1;
- }
-- n->size = type_size / BITS_PER_UNIT;
-+ n->type = type;
- }
- break;
- default:
-@@ -1801,7 +1820,7 @@
-
- if (rhs_class == GIMPLE_BINARY_RHS)
- {
-- int i;
-+ int i, size;
- struct symbolic_number n1, n2;
- unsigned HOST_WIDEST_INT mask;
- tree source_expr2;
-@@ -1825,11 +1844,12 @@
- source_expr2 = find_bswap_1 (rhs2_stmt, &n2, limit - 1);
-
- if (source_expr1 != source_expr2
-- || n1.size != n2.size)
-+ || TYPE_PRECISION (n1.type) != TYPE_PRECISION (n2.type))
- return NULL_TREE;
-
-- n->size = n1.size;
-- for (i = 0, mask = 0xff; i < n->size; i++, mask <<= BITS_PER_UNIT)
-+ n->type = n1.type;
-+ size = TYPE_PRECISION (n->type) / BITS_PER_UNIT;
-+ for (i = 0, mask = 0xff; i < size; i++, mask <<= BITS_PER_UNIT)
- {
- unsigned HOST_WIDEST_INT masked1, masked2;
-
-@@ -1868,7 +1888,7 @@
-
- struct symbolic_number n;
- tree source_expr;
-- int limit;
-+ int limit, bitsize;
-
- /* The last parameter determines the depth search limit. It usually
- correlates directly to the number of bytes to be touched. We
-@@ -1883,13 +1903,14 @@
- return NULL_TREE;
-
- /* Zero out the extra bits of N and CMP. */
-- if (n.size < (int)sizeof (HOST_WIDEST_INT))
-+ bitsize = TYPE_PRECISION (n.type);
-+ if (bitsize < 8 * (int)sizeof (HOST_WIDEST_INT))
- {
- unsigned HOST_WIDEST_INT mask =
-- ((unsigned HOST_WIDEST_INT)1 << (n.size * BITS_PER_UNIT)) - 1;
-+ ((unsigned HOST_WIDEST_INT)1 << bitsize) - 1;
-
- n.n &= mask;
-- cmp >>= (sizeof (HOST_WIDEST_INT) - n.size) * BITS_PER_UNIT;
-+ cmp >>= sizeof (HOST_WIDEST_INT) * BITS_PER_UNIT - bitsize;
- }
-
- /* A complete byte swap should make the symbolic number to start
-Index: gcc/tree-ssa-propagate.c
-===================================================================
---- a/src/gcc/tree-ssa-propagate.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/tree-ssa-propagate.c (.../branches/gcc-4_9-branch)
-@@ -571,8 +571,18 @@
- /* All constants are ok. */
- break;
-
-+ case tcc_comparison:
-+ /* GENERIC allows comparisons with non-boolean types, reject
-+ those for GIMPLE. Let vector-typed comparisons pass - rules
-+ for GENERIC and GIMPLE are the same here. */
-+ if (!(INTEGRAL_TYPE_P (TREE_TYPE (expr))
-+ && (TREE_CODE (TREE_TYPE (expr)) == BOOLEAN_TYPE
-+ || TYPE_PRECISION (TREE_TYPE (expr)) == 1))
-+ && TREE_CODE (TREE_TYPE (expr)) != VECTOR_TYPE)
-+ return false;
-+
-+ /* Fallthru. */
- case tcc_binary:
-- case tcc_comparison:
- if (!is_gimple_val (TREE_OPERAND (expr, 0))
- || !is_gimple_val (TREE_OPERAND (expr, 1)))
- return false;
-Index: gcc/tree-ssa-alias.c
-===================================================================
---- a/src/gcc/tree-ssa-alias.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/tree-ssa-alias.c (.../branches/gcc-4_9-branch)
-@@ -835,8 +835,8 @@
- /* ??? We cannot simply use the type of operand #0 of the refs here
- as the Fortran compiler smuggles type punning into COMPONENT_REFs
- for common blocks instead of using unions like everyone else. */
-- tree type1 = TYPE_MAIN_VARIANT (DECL_CONTEXT (field1));
-- tree type2 = TYPE_MAIN_VARIANT (DECL_CONTEXT (field2));
-+ tree type1 = DECL_CONTEXT (field1);
-+ tree type2 = DECL_CONTEXT (field2);
-
- /* We cannot disambiguate fields in a union or qualified union. */
- if (type1 != type2 || TREE_CODE (type1) != RECORD_TYPE)
-Index: gcc/loop-init.c
-===================================================================
---- a/src/gcc/loop-init.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/loop-init.c (.../branches/gcc-4_9-branch)
-@@ -94,6 +94,7 @@
- else
- {
- bool recorded_exits = loops_state_satisfies_p (LOOPS_HAVE_RECORDED_EXITS);
-+ bool needs_fixup = loops_state_satisfies_p (LOOPS_NEED_FIXUP);
-
- gcc_assert (cfun->curr_properties & PROP_loops);
-
-@@ -100,14 +101,8 @@
- /* Ensure that the dominators are computed, like flow_loops_find does. */
- calculate_dominance_info (CDI_DOMINATORS);
-
-- if (loops_state_satisfies_p (LOOPS_NEED_FIXUP))
-- {
-- loops_state_clear (~0U);
-- fix_loop_structure (NULL);
-- }
--
- #ifdef ENABLE_CHECKING
-- else
-+ if (!needs_fixup)
- verify_loop_structure ();
- #endif
-
-@@ -115,6 +110,14 @@
- if (recorded_exits)
- release_recorded_exits ();
- loops_state_clear (~0U);
-+
-+ if (needs_fixup)
-+ {
-+ /* Apply LOOPS_MAY_HAVE_MULTIPLE_LATCHES early as fix_loop_structure
-+ re-applies flags. */
-+ loops_state_set (flags & LOOPS_MAY_HAVE_MULTIPLE_LATCHES);
-+ fix_loop_structure (NULL);
-+ }
- }
-
- /* Apply flags to loops. */
-Index: gcc/gimple-low.c
-===================================================================
---- a/src/gcc/gimple-low.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/gimple-low.c (.../branches/gcc-4_9-branch)
-@@ -722,7 +722,7 @@
- these builtins are modelled as non-local label jumps to the label
- that is passed to these two builtins, so pretend we have a non-local
- label during GIMPLE passes too. See PR60003. */
-- cfun->has_nonlocal_label = true;
-+ cfun->has_nonlocal_label = 1;
-
- /* NEXT_LABEL is the label __builtin_longjmp will jump to. Its address is
- passed to both __builtin_setjmp_setup and __builtin_setjmp_receiver. */
-Index: gcc/ipa-inline.c
-===================================================================
---- a/src/gcc/ipa-inline.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ipa-inline.c (.../branches/gcc-4_9-branch)
-@@ -1961,6 +1961,8 @@
- inline_to_all_callers (struct cgraph_node *node, void *data)
- {
- int *num_calls = (int *)data;
-+ bool callee_removed = false;
-+
- while (node->callers && !node->global.inlined_to)
- {
- struct cgraph_node *caller = node->callers->caller;
-@@ -1977,7 +1979,7 @@
- inline_summary (node->callers->caller)->size);
- }
-
-- inline_call (node->callers, true, NULL, NULL, true);
-+ inline_call (node->callers, true, NULL, NULL, true, &callee_removed);
- if (dump_file)
- fprintf (dump_file,
- " Inlined into %s which now has %i size\n",
-@@ -1987,8 +1989,10 @@
- {
- if (dump_file)
- fprintf (dump_file, "New calls found; giving up.\n");
-- return true;
-+ return callee_removed;
- }
-+ if (callee_removed)
-+ return true;
- }
- return false;
- }
-@@ -2107,8 +2111,9 @@
- int num_calls = 0;
- cgraph_for_node_and_aliases (node, sum_callers,
- &num_calls, true);
-- cgraph_for_node_and_aliases (node, inline_to_all_callers,
-- &num_calls, true);
-+ while (cgraph_for_node_and_aliases (node, inline_to_all_callers,
-+ &num_calls, true))
-+ ;
- remove_functions = true;
- }
- }
-Index: gcc/config.in
-===================================================================
---- a/src/gcc/config.in (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config.in (.../branches/gcc-4_9-branch)
-@@ -1254,6 +1254,13 @@
- #endif
-
-
-+/* Define if the linker supports clearing hardware capabilities via mapfile.
-+ */
-+#ifndef USED_FOR_TARGET
-+#undef HAVE_LD_CLEARCAP
-+#endif
-+
-+
- /* Define if your linker supports --demangle option. */
- #ifndef USED_FOR_TARGET
- #undef HAVE_LD_DEMANGLE
-Index: gcc/ipa-inline.h
-===================================================================
---- a/src/gcc/ipa-inline.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ipa-inline.h (.../branches/gcc-4_9-branch)
-@@ -234,7 +234,8 @@
- bool speculation_useful_p (struct cgraph_edge *e, bool anticipate_inlining);
-
- /* In ipa-inline-transform.c */
--bool inline_call (struct cgraph_edge *, bool, vec<cgraph_edge_p> *, int *, bool);
-+bool inline_call (struct cgraph_edge *, bool, vec<cgraph_edge_p> *, int *, bool,
-+ bool *callee_removed = NULL);
- unsigned int inline_transform (struct cgraph_node *);
- void clone_inlined_nodes (struct cgraph_edge *e, bool, bool, int *,
- int freq_scale);
-Index: gcc/dwarf2out.c
-===================================================================
---- a/src/gcc/dwarf2out.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/dwarf2out.c (.../branches/gcc-4_9-branch)
-@@ -4222,13 +4222,10 @@
- static void
- remove_addr_table_entry (addr_table_entry *entry)
- {
-- addr_table_entry *node;
--
- gcc_assert (dwarf_split_debug_info && addr_index_table);
-- node = (addr_table_entry *) htab_find (addr_index_table, entry);
- /* After an index is assigned, the table is frozen. */
-- gcc_assert (node->refcount > 0 && node->index == NO_INDEX_ASSIGNED);
-- node->refcount--;
-+ gcc_assert (entry->refcount > 0 && entry->index == NO_INDEX_ASSIGNED);
-+ entry->refcount--;
- }
-
- /* Given a location list, remove all addresses it refers to from the
-@@ -23099,11 +23096,16 @@
- break;
- case DW_OP_GNU_addr_index:
- case DW_OP_GNU_const_index:
-- if ((loc->dw_loc_opc == DW_OP_GNU_addr_index
-- || (loc->dw_loc_opc == DW_OP_GNU_const_index && loc->dtprel))
-- && resolve_one_addr (&loc->dw_loc_oprnd1.val_entry->addr.rtl,
-- NULL))
-- return false;
-+ if (loc->dw_loc_opc == DW_OP_GNU_addr_index
-+ || (loc->dw_loc_opc == DW_OP_GNU_const_index && loc->dtprel))
-+ {
-+ rtx rtl = loc->dw_loc_oprnd1.val_entry->addr.rtl;
-+ if (resolve_one_addr (&rtl, NULL))
-+ return false;
-+ remove_addr_table_entry (loc->dw_loc_oprnd1.val_entry);
-+ loc->dw_loc_oprnd1.val_entry =
-+ add_addr_table_entry (rtl, ate_kind_rtx);
-+ }
- break;
- case DW_OP_const4u:
- case DW_OP_const8u:
-@@ -24195,7 +24197,7 @@
- dwarf_strict ? DW_AT_macro_info : DW_AT_GNU_macros,
- macinfo_section_label);
-
-- if (dwarf_split_debug_info && addr_index_table != NULL)
-+ if (dwarf_split_debug_info)
- {
- /* optimize_location_lists calculates the size of the lists,
- so index them first, and assign indices to the entries.
-@@ -24202,11 +24204,16 @@
- Although optimize_location_lists will remove entries from
- the table, it only does so for duplicates, and therefore
- only reduces ref_counts to 1. */
-- unsigned int index = 0;
- index_location_lists (comp_unit_die ());
-- htab_traverse_noresize (addr_index_table,
-- index_addr_table_entry, &index);
-+
-+ if (addr_index_table != NULL)
-+ {
-+ unsigned int index = 0;
-+ htab_traverse_noresize (addr_index_table,
-+ index_addr_table_entry, &index);
-+ }
- }
-+
- if (have_location_lists)
- optimize_location_lists (comp_unit_die ());
-
-Index: gcc/go/gofrontend/types.h
-===================================================================
---- a/src/gcc/go/gofrontend/types.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/go/gofrontend/types.h (.../branches/gcc-4_9-branch)
-@@ -1171,14 +1171,11 @@
- static tree
- build_receive_return_type(tree type);
-
-- // A hash table we use to avoid infinite recursion.
-- typedef Unordered_set_hash(const Named_type*, Type_hash_identical,
-- Type_identical) Types_seen;
--
- // Add all methods for TYPE to the list of methods for THIS.
- static void
- add_methods_for_type(const Type* type, const Method::Field_indexes*,
-- unsigned int depth, bool, bool, Types_seen*,
-+ unsigned int depth, bool, bool,
-+ std::vector<const Named_type*>*,
- Methods**);
-
- static void
-@@ -1189,7 +1186,8 @@
- static void
- add_embedded_methods_for_type(const Type* type,
- const Method::Field_indexes*,
-- unsigned int depth, bool, bool, Types_seen*,
-+ unsigned int depth, bool, bool,
-+ std::vector<const Named_type*>*,
- Methods**);
-
- static void
-Index: gcc/go/gofrontend/lex.cc
-===================================================================
---- a/src/gcc/go/gofrontend/lex.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/go/gofrontend/lex.cc (.../branches/gcc-4_9-branch)
-@@ -598,7 +598,7 @@
- }
- else if (p[1] == '*')
- {
-- this->lineoff_ = p - this->linebuf_;
-+ this->lineoff_ = p + 2 - this->linebuf_;
- Location location = this->location();
- if (!this->skip_c_comment())
- return Token::make_invalid_token(location);
-Index: gcc/go/gofrontend/types.cc
-===================================================================
---- a/src/gcc/go/gofrontend/types.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/go/gofrontend/types.cc (.../branches/gcc-4_9-branch)
-@@ -8966,9 +8966,8 @@
- Methods** all_methods)
- {
- *all_methods = NULL;
-- Types_seen types_seen;
-- Type::add_methods_for_type(type, NULL, 0, false, false, &types_seen,
-- all_methods);
-+ std::vector<const Named_type*> seen;
-+ Type::add_methods_for_type(type, NULL, 0, false, false, &seen, all_methods);
- Type::build_stub_methods(gogo, type, *all_methods, location);
- }
-
-@@ -8986,7 +8985,7 @@
- unsigned int depth,
- bool is_embedded_pointer,
- bool needs_stub_method,
-- Types_seen* types_seen,
-+ std::vector<const Named_type*>* seen,
- Methods** methods)
- {
- // Pointer types may not have methods.
-@@ -8996,19 +8995,24 @@
- const Named_type* nt = type->named_type();
- if (nt != NULL)
- {
-- std::pair<Types_seen::iterator, bool> ins = types_seen->insert(nt);
-- if (!ins.second)
-- return;
-+ for (std::vector<const Named_type*>::const_iterator p = seen->begin();
-+ p != seen->end();
-+ ++p)
-+ {
-+ if (*p == nt)
-+ return;
-+ }
-+
-+ seen->push_back(nt);
-+
-+ Type::add_local_methods_for_type(nt, field_indexes, depth,
-+ is_embedded_pointer, needs_stub_method,
-+ methods);
- }
-
-- if (nt != NULL)
-- Type::add_local_methods_for_type(nt, field_indexes, depth,
-- is_embedded_pointer, needs_stub_method,
-- methods);
--
- Type::add_embedded_methods_for_type(type, field_indexes, depth,
- is_embedded_pointer, needs_stub_method,
-- types_seen, methods);
-+ seen, methods);
-
- // If we are called with depth > 0, then we are looking at an
- // anonymous field of a struct. If such a field has interface type,
-@@ -9017,6 +9021,9 @@
- // following the usual rules for an interface type.
- if (depth > 0)
- Type::add_interface_methods_for_type(type, field_indexes, depth, methods);
-+
-+ if (nt != NULL)
-+ seen->pop_back();
- }
-
- // Add the local methods for the named type NT to *METHODS. The
-@@ -9062,7 +9069,7 @@
- unsigned int depth,
- bool is_embedded_pointer,
- bool needs_stub_method,
-- Types_seen* types_seen,
-+ std::vector<const Named_type*>* seen,
- Methods** methods)
- {
- // Look for anonymous fields in TYPE. TYPE has fields if it is a
-@@ -9106,7 +9113,7 @@
- (needs_stub_method
- || is_pointer
- || i > 0),
-- types_seen,
-+ seen,
- methods);
- }
- }
-Index: gcc/go/gofrontend/import-archive.cc
-===================================================================
---- a/src/gcc/go/gofrontend/import-archive.cc (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/go/gofrontend/import-archive.cc (.../branches/gcc-4_9-branch)
-@@ -261,7 +261,7 @@
- char size_string[size_string_size + 1];
- memcpy(size_string, hdr->ar_size, size_string_size);
- char* ps = size_string + size_string_size;
-- while (ps[-1] == ' ')
-+ while (ps > size_string && ps[-1] == ' ')
- --ps;
- *ps = '\0';
-
-Index: gcc/opts.c
-===================================================================
---- a/src/gcc/opts.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/opts.c (.../branches/gcc-4_9-branch)
-@@ -431,8 +431,8 @@
- { OPT_LEVELS_1_PLUS, OPT_fguess_branch_probability, NULL, 1 },
- { OPT_LEVELS_1_PLUS, OPT_fcprop_registers, NULL, 1 },
- { OPT_LEVELS_1_PLUS, OPT_fforward_propagate, NULL, 1 },
-- { OPT_LEVELS_1_PLUS, OPT_fif_conversion, NULL, 1 },
-- { OPT_LEVELS_1_PLUS, OPT_fif_conversion2, NULL, 1 },
-+ { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_fif_conversion, NULL, 1 },
-+ { OPT_LEVELS_1_PLUS_NOT_DEBUG, OPT_fif_conversion2, NULL, 1 },
- { OPT_LEVELS_1_PLUS, OPT_fipa_pure_const, NULL, 1 },
- { OPT_LEVELS_1_PLUS, OPT_fipa_reference, NULL, 1 },
- { OPT_LEVELS_1_PLUS, OPT_fipa_profile, NULL, 1 },
-@@ -1501,9 +1501,9 @@
- }
-
- if (! found)
-- warning_at (loc, 0,
-- "unrecognized argument to -fsanitize= option: %q.*s",
-- (int) len, p);
-+ error_at (loc,
-+ "unrecognized argument to -fsanitize= option: %q.*s",
-+ (int) len, p);
-
- if (comma == NULL)
- break;
-@@ -1740,7 +1740,7 @@
- /* FIXME: Instrumentation we insert makes ipa-reference bitmaps
- quadratic. Disable the pass until better memory representation
- is done. */
-- if (!opts_set->x_flag_ipa_reference && opts->x_in_lto_p)
-+ if (!opts_set->x_flag_ipa_reference)
- opts->x_flag_ipa_reference = false;
- break;
-
-@@ -1820,13 +1820,8 @@
- break;
-
- case OPT_g:
-- /* -g by itself should force -g2. */
-- if (*arg == '\0')
-- set_debug_level (NO_DEBUG, DEFAULT_GDB_EXTENSIONS, "2", opts, opts_set,
-- loc);
-- else
-- set_debug_level (NO_DEBUG, DEFAULT_GDB_EXTENSIONS, arg, opts, opts_set,
-- loc);
-+ set_debug_level (NO_DEBUG, DEFAULT_GDB_EXTENSIONS, arg, opts, opts_set,
-+ loc);
- break;
-
- case OPT_gcoff:
-@@ -2076,10 +2071,12 @@
- opts_set->x_write_symbols = type;
- }
-
-- /* A debug flag without a level defaults to level 2. */
-+ /* A debug flag without a level defaults to level 2.
-+ If off or at level 1, set it to level 2, but if already
-+ at level 3, don't lower it. */
- if (*arg == '\0')
- {
-- if (!opts->x_debug_info_level)
-+ if (opts->x_debug_info_level < DINFO_LEVEL_NORMAL)
- opts->x_debug_info_level = DINFO_LEVEL_NORMAL;
- }
- else
-Index: gcc/ada/comperr.adb
-===================================================================
---- a/src/gcc/ada/comperr.adb (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ada/comperr.adb (.../branches/gcc-4_9-branch)
-@@ -6,7 +6,7 @@
- -- --
- -- B o d y --
- -- --
---- Copyright (C) 1992-2013, Free Software Foundation, Inc. --
-+-- Copyright (C) 1992-2014, Free Software Foundation, Inc. --
- -- --
- -- GNAT is free software; you can redistribute it and/or modify it under --
- -- terms of the GNU General Public License as published by the Free Soft- --
-@@ -74,8 +74,8 @@
-
- procedure Compiler_Abort
- (X : String;
-- Code : Integer := 0;
-- Fallback_Loc : String := "")
-+ Fallback_Loc : String := "";
-+ From_GCC : Boolean := False)
- is
- -- The procedures below output a "bug box" with information about
- -- the cause of the compiler abort and about the preferred method
-@@ -206,7 +206,7 @@
- Write_Str (") ");
-
- if X'Length + Column > 76 then
-- if Code < 0 then
-+ if From_GCC then
- Write_Str ("GCC error:");
- end if;
-
-@@ -235,12 +235,8 @@
- Write_Str (X);
- end if;
-
-- if Code > 0 then
-- Write_Str (", Code=");
-- Write_Int (Int (Code));
-+ if not From_GCC then
-
-- elsif Code = 0 then
--
- -- For exception case, get exception message from the TSD. Note
- -- that it would be neater and cleaner to pass the exception
- -- message (obtained from Exception_Message) as a parameter to
-Index: gcc/ada/comperr.ads
-===================================================================
---- a/src/gcc/ada/comperr.ads (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ada/comperr.ads (.../branches/gcc-4_9-branch)
-@@ -6,7 +6,7 @@
- -- --
- -- S p e c --
- -- --
---- Copyright (C) 1992-2013, Free Software Foundation, Inc. --
-+-- Copyright (C) 1992-2014, Free Software Foundation, Inc. --
- -- --
- -- GNAT is free software; you can redistribute it and/or modify it under --
- -- terms of the GNU General Public License as published by the Free Soft- --
-@@ -31,8 +31,8 @@
-
- procedure Compiler_Abort
- (X : String;
-- Code : Integer := 0;
-- Fallback_Loc : String := "");
-+ Fallback_Loc : String := "";
-+ From_GCC : Boolean := False);
- pragma No_Return (Compiler_Abort);
- -- Signals an internal compiler error. Never returns control. Depending on
- -- processing may end up raising Unrecoverable_Error, or exiting directly.
-@@ -46,10 +46,9 @@
- -- Note that this is only used at the outer level (to handle constraint
- -- errors or assert errors etc.) In the normal logic of the compiler we
- -- always use pragma Assert to check for errors, and if necessary an
-- -- explicit abort is achieved by pragma Assert (False). Code is positive
-- -- for a gigi abort (giving the gigi abort code), zero for a front
-- -- end exception (with possible message stored in TSD.Current_Excep,
-- -- and negative (an unused value) for a GCC abort.
-+ -- explicit abort is achieved by pragma Assert (False). From_GCC is true
-+ -- for a GCC abort and false for a front end exception (with a possible
-+ -- message stored in TSD.Current_Excep).
-
- procedure Delete_SCIL_Files;
- -- Delete SCIL files associated with the main unit
-Index: gcc/ada/fe.h
-===================================================================
---- a/src/gcc/ada/fe.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ada/fe.h (.../branches/gcc-4_9-branch)
-@@ -29,17 +29,20 @@
- * *
- ****************************************************************************/
-
--/* This file contains definitions to access front-end functions and
-- variables used by gigi. */
-+/* This file contains declarations to access front-end functions and variables
-+ used by gigi.
-
-+ WARNING: functions taking String_Pointer parameters must abide by the rule
-+ documented alongside the definition of String_Pointer in types.h. */
-+
- #ifdef __cplusplus
- extern "C" {
- #endif
-
--/* comperr: */
-+/* comperr: */
-
- #define Compiler_Abort comperr__compiler_abort
--extern int Compiler_Abort (Fat_Pointer, int, Fat_Pointer) ATTRIBUTE_NORETURN;
-+extern int Compiler_Abort (String_Pointer, String_Pointer, Boolean) ATTRIBUTE_NORETURN;
-
- /* csets: */
-
-@@ -72,8 +75,6 @@
- extern void Set_RM_Size (Entity_Id, Uint);
- extern void Set_Present_Expr (Node_Id, Uint);
-
--/* Test if the node N is the name of an entity (i.e. is an identifier,
-- expanded name, or an attribute reference that returns an entity). */
- #define Is_Entity_Name einfo__is_entity_name
- extern Boolean Is_Entity_Name (Node_Id);
-
-@@ -90,8 +91,8 @@
- #define Error_Msg_NE errout__error_msg_ne
- #define Set_Identifier_Casing errout__set_identifier_casing
-
--extern void Error_Msg_N (Fat_Pointer, Node_Id);
--extern void Error_Msg_NE (Fat_Pointer, Node_Id, Entity_Id);
-+extern void Error_Msg_N (String_Pointer, Node_Id);
-+extern void Error_Msg_NE (String_Pointer, Node_Id, Entity_Id);
- extern void Set_Identifier_Casing (Char *, const Char *);
-
- /* err_vars: */
-@@ -147,11 +148,9 @@
-
- #define Get_Encoded_Name exp_dbug__get_encoded_name
- #define Get_External_Name exp_dbug__get_external_name
--#define Get_External_Name_With_Suffix exp_dbug__get_external_name_with_suffix
-
--extern void Get_Encoded_Name (Entity_Id);
--extern void Get_External_Name (Entity_Id, Boolean);
--extern void Get_External_Name_With_Suffix (Entity_Id, Fat_Pointer);
-+extern void Get_Encoded_Name (Entity_Id);
-+extern void Get_External_Name (Entity_Id, Boolean, String_Pointer);
-
- /* exp_util: */
-
-Index: gcc/ada/types.h
-===================================================================
---- a/src/gcc/ada/types.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ada/types.h (.../branches/gcc-4_9-branch)
-@@ -76,11 +76,19 @@
- /* Pointer to string of Chars */
- typedef Char *Str_Ptr;
-
--/* Types for the fat pointer used for strings and the template it
-- points to. */
--typedef struct {int Low_Bound, High_Bound; } String_Template;
--typedef struct {const char *Array; String_Template *Bounds; }
-- __attribute ((aligned (sizeof (char *) * 2))) Fat_Pointer;
-+/* Types for the fat pointer used for strings and the template it points to.
-+ The fat pointer is conceptually a couple of pointers, but it is wrapped
-+ up in a special record type. On the Ada side, the record is naturally
-+ aligned (i.e. given pointer alignment) on regular platforms, but it is
-+ given twice this alignment on strict-alignment platforms for performance
-+ reasons. On the C side, for the sake of portability and simplicity, we
-+ overalign it on all platforms (so the machine mode is always the same as
-+ on the Ada side) but arrange to pass it in an even scalar position as a
-+ parameter to functions (so the scalar parameter alignment is always the
-+ same as on the Ada side). */
-+typedef struct { int Low_Bound, High_Bound; } String_Template;
-+typedef struct { const char *Array; String_Template *Bounds; }
-+ __attribute ((aligned (sizeof (char *) * 2))) String_Pointer;
-
- /* Types for Node/Entity Kinds: */
-
-Index: gcc/ada/exp_dbug.adb
-===================================================================
---- a/src/gcc/ada/exp_dbug.adb (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ada/exp_dbug.adb (.../branches/gcc-4_9-branch)
-@@ -507,8 +507,8 @@
- begin
- -- If not generating code, there is no need to create encoded names, and
- -- problems when the back-end is called to annotate types without full
-- -- code generation. See comments in Get_External_Name_With_Suffix for
-- -- additional details.
-+ -- code generation. See comments in Get_External_Name for additional
-+ -- details.
-
- -- However we do create encoded names if the back end is active, even
- -- if Operating_Mode got reset. Otherwise any serious error reported
-@@ -556,7 +556,7 @@
- -- Fixed-point case
-
- if Is_Fixed_Point_Type (E) then
-- Get_External_Name_With_Suffix (E, "XF_");
-+ Get_External_Name (E, True, "XF_");
- Add_Real_To_Buffer (Delta_Value (E));
-
- if Small_Value (E) /= Delta_Value (E) then
-@@ -568,14 +568,14 @@
-
- elsif Vax_Float (E) then
- if Digits_Value (Base_Type (E)) = 6 then
-- Get_External_Name_With_Suffix (E, "XFF");
-+ Get_External_Name (E, True, "XFF");
-
- elsif Digits_Value (Base_Type (E)) = 9 then
-- Get_External_Name_With_Suffix (E, "XFF");
-+ Get_External_Name (E, True, "XFF");
-
- else
- pragma Assert (Digits_Value (Base_Type (E)) = 15);
-- Get_External_Name_With_Suffix (E, "XFG");
-+ Get_External_Name (E, True, "XFG");
- end if;
-
- -- Discrete case where bounds do not match size
-@@ -607,9 +607,9 @@
-
- begin
- if Biased then
-- Get_External_Name_With_Suffix (E, "XB");
-+ Get_External_Name (E, True, "XB");
- else
-- Get_External_Name_With_Suffix (E, "XD");
-+ Get_External_Name (E, True, "XD");
- end if;
-
- if Lo_Encode or Hi_Encode then
-@@ -649,7 +649,7 @@
-
- else
- Has_Suffix := False;
-- Get_External_Name (E, Has_Suffix);
-+ Get_External_Name (E);
- end if;
-
- if Debug_Flag_B and then Has_Suffix then
-@@ -667,7 +667,11 @@
- -- Get_External_Name --
- -----------------------
-
-- procedure Get_External_Name (Entity : Entity_Id; Has_Suffix : Boolean) is
-+ procedure Get_External_Name
-+ (Entity : Entity_Id;
-+ Has_Suffix : Boolean := False;
-+ Suffix : String := "")
-+ is
- E : Entity_Id := Entity;
- Kind : Entity_Kind;
-
-@@ -704,6 +708,20 @@
- -- Start of processing for Get_External_Name
-
- begin
-+ -- If we are not in code generation mode, this procedure may still be
-+ -- called from Back_End (more specifically - from gigi for doing type
-+ -- representation annotation or some representation-specific checks).
-+ -- But in this mode there is no need to mess with external names.
-+
-+ -- Furthermore, the call causes difficulties in this case because the
-+ -- string representing the homonym number is not correctly reset as a
-+ -- part of the call to Output_Homonym_Numbers_Suffix (which is not
-+ -- called in gigi).
-+
-+ if Operating_Mode /= Generate_Code then
-+ return;
-+ end if;
-+
- Reset_Buffers;
-
- -- If this is a child unit, we want the child
-@@ -762,43 +780,14 @@
- Get_Qualified_Name_And_Append (E);
- end if;
-
-- Name_Buffer (Name_Len + 1) := ASCII.NUL;
-- end Get_External_Name;
--
-- -----------------------------------
-- -- Get_External_Name_With_Suffix --
-- -----------------------------------
--
-- procedure Get_External_Name_With_Suffix
-- (Entity : Entity_Id;
-- Suffix : String)
-- is
-- Has_Suffix : constant Boolean := (Suffix /= "");
--
-- begin
-- -- If we are not in code generation mode, this procedure may still be
-- -- called from Back_End (more specifically - from gigi for doing type
-- -- representation annotation or some representation-specific checks).
-- -- But in this mode there is no need to mess with external names.
--
-- -- Furthermore, the call causes difficulties in this case because the
-- -- string representing the homonym number is not correctly reset as a
-- -- part of the call to Output_Homonym_Numbers_Suffix (which is not
-- -- called in gigi).
--
-- if Operating_Mode /= Generate_Code then
-- return;
-- end if;
--
-- Get_External_Name (Entity, Has_Suffix);
--
- if Has_Suffix then
- Add_Str_To_Name_Buffer ("___");
- Add_Str_To_Name_Buffer (Suffix);
-- Name_Buffer (Name_Len + 1) := ASCII.NUL;
- end if;
-- end Get_External_Name_With_Suffix;
-
-+ Name_Buffer (Name_Len + 1) := ASCII.NUL;
-+ end Get_External_Name;
-+
- --------------------------
- -- Get_Variant_Encoding --
- --------------------------
-@@ -944,7 +933,7 @@
- Suffix_Index : Int)
- is
- begin
-- Get_External_Name (Typ, Has_Suffix => False);
-+ Get_External_Name (Typ);
-
- if Ancestor_Typ /= Typ then
- declare
-@@ -952,7 +941,7 @@
- Save_Str : constant String (1 .. Name_Len)
- := Name_Buffer (1 .. Name_Len);
- begin
-- Get_External_Name (Ancestor_Typ, Has_Suffix => False);
-+ Get_External_Name (Ancestor_Typ);
-
- -- Append the extended name of the ancestor to the
- -- extended name of Typ
-Index: gcc/ada/exp_dbug.ads
-===================================================================
---- a/src/gcc/ada/exp_dbug.ads (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ada/exp_dbug.ads (.../branches/gcc-4_9-branch)
-@@ -413,10 +413,11 @@
-
- procedure Get_External_Name
- (Entity : Entity_Id;
-- Has_Suffix : Boolean);
-- -- Set Name_Buffer and Name_Len to the external name of entity E. The
-+ Has_Suffix : Boolean := False;
-+ Suffix : String := "");
-+ -- Set Name_Buffer and Name_Len to the external name of the entity. The
- -- external name is the Interface_Name, if specified, unless the entity
-- -- has an address clause or a suffix.
-+ -- has an address clause or Has_Suffix is true.
- --
- -- If the Interface is not present, or not used, the external name is the
- -- concatenation of:
-@@ -428,26 +429,11 @@
- -- - the string "$" (or "__" if target does not allow "$"), followed
- -- by homonym suffix, if the entity is an overloaded subprogram
- -- or is defined within an overloaded subprogram.
--
-- procedure Get_External_Name_With_Suffix
-- (Entity : Entity_Id;
-- Suffix : String);
-- -- Set Name_Buffer and Name_Len to the external name of entity E. If
-- -- Suffix is the empty string the external name is as above, otherwise
-- -- the external name is the concatenation of:
-+ -- - the string "___" followed by Suffix if Has_Suffix is true.
- --
-- -- - the string "_ada_", if the entity is a library subprogram,
-- -- - the names of any enclosing scopes, each followed by "__",
-- -- or "X_" if the next entity is a subunit)
-- -- - the name of the entity
-- -- - the string "$" (or "__" if target does not allow "$"), followed
-- -- by homonym suffix, if the entity is an overloaded subprogram
-- -- or is defined within an overloaded subprogram.
-- -- - the string "___" followed by Suffix
-- --
- -- Note that a call to this procedure has no effect if we are not
- -- generating code, since the necessary information for computing the
-- -- proper encoded name is not available in this case.
-+ -- proper external name is not available in this case.
-
- --------------------------------------------
- -- Subprograms for Handling Qualification --
-Index: gcc/ada/init.c
-===================================================================
---- a/src/gcc/ada/init.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ada/init.c (.../branches/gcc-4_9-branch)
-@@ -556,9 +556,14 @@
- Raise_From_Signal_Handler (exception, msg);
- }
-
--#if defined (i386) || defined (__x86_64__) || defined (__powerpc__)
--/* This must be in keeping with System.OS_Interface.Alternate_Stack_Size. */
--char __gnat_alternate_stack[16 * 1024]; /* 2 * SIGSTKSZ */
-+#ifndef __ia64__
-+#define HAVE_GNAT_ALTERNATE_STACK 1
-+/* This must be in keeping with System.OS_Interface.Alternate_Stack_Size.
-+ It must be larger than MINSIGSTKSZ and hopefully near 2 * SIGSTKSZ. */
-+# if 16 * 1024 < MINSIGSTKSZ
-+# error "__gnat_alternate_stack too small"
-+# endif
-+char __gnat_alternate_stack[16 * 1024];
- #endif
-
- #ifdef __XENO__
-@@ -612,7 +617,7 @@
- sigaction (SIGBUS, &act, NULL);
- if (__gnat_get_interrupt_state (SIGSEGV) != 's')
- {
--#if defined (i386) || defined (__x86_64__) || defined (__powerpc__)
-+#ifdef HAVE_GNAT_ALTERNATE_STACK
- /* Setup an alternate stack region for the handler execution so that
- stack overflows can be handled properly, avoiding a SEGV generation
- from stack usage by the handler itself. */
-Index: gcc/ada/ChangeLog
-===================================================================
---- a/src/gcc/ada/ChangeLog (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ada/ChangeLog (.../branches/gcc-4_9-branch)
-@@ -1,3 +1,59 @@
-+2014-05-19 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ Backport from mainline
-+ 2014-04-22 Richard Henderson <rth@redhat.com>
-+
-+ * init.c [__linux__] (HAVE_GNAT_ALTERNATE_STACK): New define.
-+ (__gnat_alternate_stack): Enable for all linux except ia64.
-+
-+2014-05-18 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ * utils.c (gnat_write_global_declarations): Adjust the flags put on
-+ dummy_global.
-+
-+2014-05-18 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Array_Subtype>: Do not
-+ consider that regular packed arrays can never be superflat.
-+
-+2014-05-17 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ Backport from mainline
-+ 2014-04-28 Richard Henderson <rth@redhat.com>
-+
-+ * gcc-interface/Makefile.in: Support aarch64-linux.
-+
-+ 2014-04-28 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ * exp_dbug.ads (Get_External_Name): Add 'False' default to Has_Suffix,
-+ add 'Suffix' parameter and adjust comment.
-+ (Get_External_Name_With_Suffix): Delete.
-+ * exp_dbug.adb (Get_External_Name_With_Suffix): Merge into...
-+ (Get_External_Name): ...here. Add 'False' default to Has_Suffix, add
-+ 'Suffix' parameter.
-+ (Get_Encoded_Name): Remove 2nd argument in call to Get_External_Name.
-+ Call Get_External_Name instead of Get_External_Name_With_Suffix.
-+ (Get_Secondary_DT_External_Name): Likewise.
-+ * exp_cg.adb (Write_Call_Info): Likewise.
-+ * exp_disp.adb (Export_DT): Likewise.
-+ (Import_DT): Likewise.
-+ * comperr.ads (Compiler_Abort): Remove Code parameter and add From_GCC
-+ parameter with False default.
-+ * comperr.adb (Compiler_Abort): Likewise. Adjust accordingly.
-+ * types.h (Fat_Pointer): Rename into...
-+ (String_Pointer): ...this. Add comment on interfacing rules.
-+ * fe.h (Compiler_Abort): Adjust for above renaming.
-+ (Error_Msg_N): Likewise.
-+ (Error_Msg_NE): Likewise.
-+ (Get_External_Name): Likewise. Add third parameter.
-+ (Get_External_Name_With_Suffix): Delete.
-+ * gcc-interface/decl.c (STDCALL_PREFIX): Define.
-+ (create_concat_name): Adjust call to Get_External_Name, remove call to
-+ Get_External_Name_With_Suffix, use STDCALL_PREFIX, adjust for renaming.
-+ * gcc-interface/trans.c (post_error): Likewise.
-+ (post_error_ne): Likewise.
-+ * gcc-interface/misc.c (internal_error_function): Likewise.
-+
- 2014-04-22 Release Manager
-
- * GCC 4.9.0 released.
-Index: gcc/ada/exp_disp.adb
-===================================================================
---- a/src/gcc/ada/exp_disp.adb (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ada/exp_disp.adb (.../branches/gcc-4_9-branch)
-@@ -3913,10 +3913,7 @@
-
- pragma Assert (Related_Type (Node (Elmt)) = Typ);
-
-- Get_External_Name
-- (Entity => Node (Elmt),
-- Has_Suffix => True);
--
-+ Get_External_Name (Node (Elmt));
- Set_Interface_Name (DT,
- Make_String_Literal (Loc,
- Strval => String_From_Name_Buffer));
-@@ -7088,7 +7085,7 @@
-
- Set_Scope (DT, Current_Scope);
-
-- Get_External_Name (DT, True);
-+ Get_External_Name (DT);
- Set_Interface_Name (DT,
- Make_String_Literal (Loc, Strval => String_From_Name_Buffer));
-
-Index: gcc/ada/gcc-interface/utils.c
-===================================================================
---- a/src/gcc/ada/gcc-interface/utils.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ada/gcc-interface/utils.c (.../branches/gcc-4_9-branch)
-@@ -5662,9 +5662,10 @@
- dummy_global
- = build_decl (BUILTINS_LOCATION, VAR_DECL, get_identifier (label),
- void_type_node);
-+ DECL_HARD_REGISTER (dummy_global) = 1;
- TREE_STATIC (dummy_global) = 1;
-- TREE_ASM_WRITTEN (dummy_global) = 1;
- node = varpool_node_for_decl (dummy_global);
-+ node->definition = 1;
- node->force_output = 1;
-
- while (!types_used_by_cur_var_decl->is_empty ())
-Index: gcc/ada/gcc-interface/Makefile.in
-===================================================================
---- a/src/gcc/ada/gcc-interface/Makefile.in (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ada/gcc-interface/Makefile.in (.../branches/gcc-4_9-branch)
-@@ -1988,6 +1988,44 @@
- LIBRARY_VERSION := $(LIB_VERSION)
- endif
-
-+# AArch64 Linux
-+ifeq ($(strip $(filter-out aarch64% linux%,$(target_cpu) $(target_os))),)
-+ LIBGNAT_TARGET_PAIRS = \
-+ a-exetim.adb<a-exetim-posix.adb \
-+ a-exetim.ads<a-exetim-default.ads \
-+ a-intnam.ads<a-intnam-linux.ads \
-+ a-synbar.adb<a-synbar-posix.adb \
-+ a-synbar.ads<a-synbar-posix.ads \
-+ s-inmaop.adb<s-inmaop-posix.adb \
-+ s-intman.adb<s-intman-posix.adb \
-+ s-linux.ads<s-linux.ads \
-+ s-mudido.adb<s-mudido-affinity.adb \
-+ s-osinte.ads<s-osinte-linux.ads \
-+ s-osinte.adb<s-osinte-posix.adb \
-+ s-osprim.adb<s-osprim-posix.adb \
-+ s-taprop.adb<s-taprop-linux.adb \
-+ s-tasinf.ads<s-tasinf-linux.ads \
-+ s-tasinf.adb<s-tasinf-linux.adb \
-+ s-tpopsp.adb<s-tpopsp-tls.adb \
-+ s-taspri.ads<s-taspri-posix.ads \
-+ g-sercom.adb<g-sercom-linux.adb \
-+ $(ATOMICS_TARGET_PAIRS) \
-+ $(ATOMICS_BUILTINS_TARGET_PAIRS) \
-+ system.ads<system-linux-x86_64.ads
-+ ## ^^ Note the above is a pretty-close placeholder.
-+
-+ TOOLS_TARGET_PAIRS = \
-+ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
-+ indepsw.adb<indepsw-gnu.adb
-+
-+ EXTRA_GNATRTL_TASKING_OBJS=s-linux.o a-exetim.o
-+ EH_MECHANISM=-gcc
-+ THREADSLIB=-lpthread -lrt
-+ GNATLIB_SHARED=gnatlib-shared-dual
-+ GMEM_LIB = gmemlib
-+ LIBRARY_VERSION := $(LIB_VERSION)
-+endif
-+
- # Sparc Linux
- ifeq ($(strip $(filter-out sparc% linux%,$(target_cpu) $(target_os))),)
- LIBGNAT_TARGET_PAIRS_COMMON = \
-Index: gcc/ada/gcc-interface/decl.c
-===================================================================
---- a/src/gcc/ada/gcc-interface/decl.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ada/gcc-interface/decl.c (.../branches/gcc-4_9-branch)
-@@ -72,6 +72,8 @@
- #define Has_Thiscall_Convention(E) 0
- #endif
-
-+#define STDCALL_PREFIX "_imp__"
-+
- /* Stack realignment is necessary for functions with foreign conventions when
- the ABI doesn't mandate as much as what the compiler assumes - that is, up
- to PREFERRED_STACK_BOUNDARY.
-@@ -2433,8 +2435,10 @@
- we can just use the high bound of the index type. */
- else if ((Nkind (gnat_index) == N_Range
- && cannot_be_superflat_p (gnat_index))
-- /* Packed Array Types are never superflat. */
-- || Is_Packed_Array_Type (gnat_entity))
-+ /* Bit-Packed Array Types are never superflat. */
-+ || (Is_Packed_Array_Type (gnat_entity)
-+ && Is_Bit_Packed_Array
-+ (Original_Array_Type (gnat_entity))))
- gnu_high = gnu_max;
-
- /* Otherwise, if the high bound is constant but the low bound is
-@@ -8879,16 +8883,12 @@
- tree
- create_concat_name (Entity_Id gnat_entity, const char *suffix)
- {
-- Entity_Kind kind = Ekind (gnat_entity);
-+ const Entity_Kind kind = Ekind (gnat_entity);
-+ const bool has_suffix = (suffix != NULL);
-+ String_Template temp = {1, has_suffix ? strlen (suffix) : 0};
-+ String_Pointer sp = {suffix, &temp};
-
-- if (suffix)
-- {
-- String_Template temp = {1, (int) strlen (suffix)};
-- Fat_Pointer fp = {suffix, &temp};
-- Get_External_Name_With_Suffix (gnat_entity, fp);
-- }
-- else
-- Get_External_Name (gnat_entity, 0);
-+ Get_External_Name (gnat_entity, has_suffix, sp);
-
- /* A variable using the Stdcall convention lives in a DLL. We adjust
- its name to use the jump table, the _imp__NAME contains the address
-@@ -8896,9 +8896,9 @@
- if ((kind == E_Variable || kind == E_Constant)
- && Has_Stdcall_Convention (gnat_entity))
- {
-- const int len = 6 + Name_Len;
-+ const int len = strlen (STDCALL_PREFIX) + Name_Len;
- char *new_name = (char *) alloca (len + 1);
-- strcpy (new_name, "_imp__");
-+ strcpy (new_name, STDCALL_PREFIX);
- strcat (new_name, Name_Buffer);
- return get_identifier_with_length (new_name, len);
- }
-Index: gcc/ada/gcc-interface/trans.c
-===================================================================
---- a/src/gcc/ada/gcc-interface/trans.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ada/gcc-interface/trans.c (.../branches/gcc-4_9-branch)
-@@ -9262,7 +9262,7 @@
- post_error (const char *msg, Node_Id node)
- {
- String_Template temp;
-- Fat_Pointer fp;
-+ String_Pointer sp;
-
- if (No (node))
- return;
-@@ -9269,9 +9269,9 @@
-
- temp.Low_Bound = 1;
- temp.High_Bound = strlen (msg);
-- fp.Bounds = &temp;
-- fp.Array = msg;
-- Error_Msg_N (fp, node);
-+ sp.Bounds = &temp;
-+ sp.Array = msg;
-+ Error_Msg_N (sp, node);
- }
-
- /* Similar to post_error, but NODE is the node at which to post the error and
-@@ -9281,7 +9281,7 @@
- post_error_ne (const char *msg, Node_Id node, Entity_Id ent)
- {
- String_Template temp;
-- Fat_Pointer fp;
-+ String_Pointer sp;
-
- if (No (node))
- return;
-@@ -9288,9 +9288,9 @@
-
- temp.Low_Bound = 1;
- temp.High_Bound = strlen (msg);
-- fp.Bounds = &temp;
-- fp.Array = msg;
-- Error_Msg_NE (fp, node, ent);
-+ sp.Bounds = &temp;
-+ sp.Array = msg;
-+ Error_Msg_NE (sp, node, ent);
- }
-
- /* Similar to post_error_ne, but NUM is the number to use for the '^'. */
-Index: gcc/ada/gcc-interface/misc.c
-===================================================================
---- a/src/gcc/ada/gcc-interface/misc.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ada/gcc-interface/misc.c (.../branches/gcc-4_9-branch)
-@@ -283,8 +283,8 @@
- text_info tinfo;
- char *buffer, *p, *loc;
- String_Template temp, temp_loc;
-- Fat_Pointer fp, fp_loc;
-- expanded_location s;
-+ String_Pointer sp, sp_loc;
-+ expanded_location xloc;
-
- /* Warn if plugins present. */
- warn_if_plugins ();
-@@ -311,21 +311,21 @@
-
- temp.Low_Bound = 1;
- temp.High_Bound = p - buffer;
-- fp.Bounds = &temp;
-- fp.Array = buffer;
-+ sp.Bounds = &temp;
-+ sp.Array = buffer;
-
-- s = expand_location (input_location);
-- if (context->show_column && s.column != 0)
-- asprintf (&loc, "%s:%d:%d", s.file, s.line, s.column);
-+ xloc = expand_location (input_location);
-+ if (context->show_column && xloc.column != 0)
-+ asprintf (&loc, "%s:%d:%d", xloc.file, xloc.line, xloc.column);
- else
-- asprintf (&loc, "%s:%d", s.file, s.line);
-+ asprintf (&loc, "%s:%d", xloc.file, xloc.line);
- temp_loc.Low_Bound = 1;
- temp_loc.High_Bound = strlen (loc);
-- fp_loc.Bounds = &temp_loc;
-- fp_loc.Array = loc;
-+ sp_loc.Bounds = &temp_loc;
-+ sp_loc.Array = loc;
-
- Current_Error_Node = error_gnat_node;
-- Compiler_Abort (fp, -1, fp_loc);
-+ Compiler_Abort (sp, sp_loc, true);
- }
-
- /* Perform all the initialization steps that are language-specific. */
-Index: gcc/ada/exp_cg.adb
-===================================================================
---- a/src/gcc/ada/exp_cg.adb (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ada/exp_cg.adb (.../branches/gcc-4_9-branch)
-@@ -6,7 +6,7 @@
- -- --
- -- B o d y --
- -- --
---- Copyright (C) 2010-2013, Free Software Foundation, Inc. --
-+-- Copyright (C) 2010-2014, Free Software Foundation, Inc. --
- -- --
- -- GNAT is free software; you can redistribute it and/or modify it under --
- -- terms of the GNU General Public License as published by the Free Soft- --
-@@ -437,10 +437,10 @@
- if Nkind (P) = N_Subprogram_Body
- and then not Acts_As_Spec (P)
- then
-- Get_External_Name (Corresponding_Spec (P), Has_Suffix => False);
-+ Get_External_Name (Corresponding_Spec (P));
-
- else
-- Get_External_Name (Defining_Entity (P), Has_Suffix => False);
-+ Get_External_Name (Defining_Entity (P));
- end if;
-
- Write_Str (Name_Buffer (1 .. Name_Len));
-Index: gcc/common/config/msp430/msp430-common.c
-===================================================================
---- a/src/gcc/common/config/msp430/msp430-common.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/common/config/msp430/msp430-common.c (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,91 @@
-+/* Common hooks for Texas Instruments MSP430.
-+ Copyright (C) 2014 Free Software Foundation, Inc.
-+
-+ This file is part of GCC.
-+
-+ GCC 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.
-+
-+ GCC 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 GCC; see the file COPYING3. If not see
-+ <http://www.gnu.org/licenses/>. */
-+
-+#include "config.h"
-+#include "system.h"
-+#include "coretypes.h"
-+#include "diagnostic-core.h"
-+#include "tm.h"
-+#include "common/common-target.h"
-+#include "common/common-target-def.h"
-+#include "opts.h"
-+#include "flags.h"
-+
-+/* Handle -mcpu= and -mmcu= here. We want to ensure that only one
-+ of these two options - the last specified on the command line -
-+ is passed on to the msp430 backend. */
-+
-+static bool
-+msp430_handle_option (struct gcc_options *opts ATTRIBUTE_UNUSED,
-+ struct gcc_options *opts_set ATTRIBUTE_UNUSED,
-+ const struct cl_decoded_option *decoded,
-+ location_t loc ATTRIBUTE_UNUSED)
-+{
-+ switch (decoded->opt_index)
-+ {
-+ case OPT_mcpu_:
-+ if (strcasecmp (decoded->arg, "msp430x") == 0
-+ || strcasecmp (decoded->arg, "msp430xv2") == 0
-+ || strcasecmp (decoded->arg, "430x") == 0
-+ || strcasecmp (decoded->arg, "430xv2") == 0)
-+ {
-+ target_cpu = "msp430x";
-+ target_mcu = NULL;
-+ }
-+ else if (strcasecmp (decoded->arg, "msp430") == 0
-+ || strcasecmp (decoded->arg, "430") == 0)
-+ {
-+ target_cpu = "msp430";
-+ target_mcu = NULL;
-+ }
-+ else
-+ {
-+ error ("unrecognised argument of -mcpu: %s", decoded->arg);
-+ return false;
-+ }
-+ break;
-+
-+ case OPT_mmcu_:
-+ /* For backwards compatibility we recognise two generic MCU
-+ 430X names. However we want to be able to generate special C
-+ preprocessor defines for them, which is why we set target_mcu
-+ to NULL. */
-+ if (strcasecmp (decoded->arg, "msp430") == 0)
-+ {
-+ target_cpu = "msp430";
-+ target_mcu = NULL;
-+ }
-+ else if (strcasecmp (decoded->arg, "msp430x") == 0
-+ || strcasecmp (decoded->arg, "msp430xv2") == 0)
-+ {
-+ target_cpu = "msp430x";
-+ target_mcu = NULL;
-+ }
-+ else
-+ target_cpu = NULL;
-+ break;
-+ }
-+
-+ return true;
-+}
-+
-+#undef TARGET_HANDLE_OPTION
-+#define TARGET_HANDLE_OPTION msp430_handle_option
-+
-+struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER;
-Index: gcc/tree-ssa-ifcombine.c
-===================================================================
---- a/src/gcc/tree-ssa-ifcombine.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/tree-ssa-ifcombine.c (.../branches/gcc-4_9-branch)
-@@ -127,7 +127,11 @@
- {
- gimple stmt = gsi_stmt (gsi);
-
-+ if (is_gimple_debug (stmt))
-+ continue;
-+
- if (gimple_has_side_effects (stmt)
-+ || gimple_could_trap_p (stmt)
- || gimple_vuse (stmt))
- return false;
- }
-@@ -229,7 +233,8 @@
- while (is_gimple_assign (stmt)
- && ((CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (stmt))
- && (TYPE_PRECISION (TREE_TYPE (gimple_assign_lhs (stmt)))
-- <= TYPE_PRECISION (TREE_TYPE (gimple_assign_rhs1 (stmt)))))
-+ <= TYPE_PRECISION (TREE_TYPE (gimple_assign_rhs1 (stmt))))
-+ && TREE_CODE (gimple_assign_rhs1 (stmt)) == SSA_NAME)
- || gimple_assign_ssa_name_copy_p (stmt)))
- stmt = SSA_NAME_DEF_STMT (gimple_assign_rhs1 (stmt));
-
-Index: gcc/sel-sched-ir.c
-===================================================================
---- a/src/gcc/sel-sched-ir.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/sel-sched-ir.c (.../branches/gcc-4_9-branch)
-@@ -162,7 +162,7 @@
- static void free_av_set (basic_block);
- static void invalidate_av_set (basic_block);
- static void extend_insn_data (void);
--static void sel_init_new_insn (insn_t, int);
-+static void sel_init_new_insn (insn_t, int, int = -1);
- static void finish_insns (void);
-
- /* Various list functions. */
-@@ -4007,9 +4007,10 @@
- return seqno;
- }
-
--/* Compute seqno for INSN by its preds or succs. */
-+/* Compute seqno for INSN by its preds or succs. Use OLD_SEQNO to compute
-+ seqno in corner cases. */
- static int
--get_seqno_for_a_jump (insn_t insn)
-+get_seqno_for_a_jump (insn_t insn, int old_seqno)
- {
- int seqno;
-
-@@ -4065,8 +4066,16 @@
- if (seqno < 0)
- seqno = get_seqno_by_succs (insn);
-
-+ if (seqno < 0)
-+ {
-+ /* The only case where this could be here legally is that the only
-+ unscheduled insn was a conditional jump that got removed and turned
-+ into this unconditional one. Initialize from the old seqno
-+ of that jump passed down to here. */
-+ seqno = old_seqno;
-+ }
-+
- gcc_assert (seqno >= 0);
--
- return seqno;
- }
-
-@@ -4246,22 +4255,24 @@
- }
-
- /* This is used to initialize spurious jumps generated by
-- sel_redirect_edge (). */
-+ sel_redirect_edge (). OLD_SEQNO is used for initializing seqnos
-+ in corner cases within get_seqno_for_a_jump. */
- static void
--init_simplejump_data (insn_t insn)
-+init_simplejump_data (insn_t insn, int old_seqno)
- {
- init_expr (INSN_EXPR (insn), vinsn_create (insn, false), 0,
- REG_BR_PROB_BASE, 0, 0, 0, 0, 0, 0,
- vNULL, true, false, false,
- false, true);
-- INSN_SEQNO (insn) = get_seqno_for_a_jump (insn);
-+ INSN_SEQNO (insn) = get_seqno_for_a_jump (insn, old_seqno);
- init_first_time_insn_data (insn);
- }
-
- /* Perform deferred initialization of insns. This is used to process
-- a new jump that may be created by redirect_edge. */
--void
--sel_init_new_insn (insn_t insn, int flags)
-+ a new jump that may be created by redirect_edge. OLD_SEQNO is used
-+ for initializing simplejumps in init_simplejump_data. */
-+static void
-+sel_init_new_insn (insn_t insn, int flags, int old_seqno)
- {
- /* We create data structures for bb when the first insn is emitted in it. */
- if (INSN_P (insn)
-@@ -4288,7 +4299,7 @@
- if (flags & INSN_INIT_TODO_SIMPLEJUMP)
- {
- extend_insn_data ();
-- init_simplejump_data (insn);
-+ init_simplejump_data (insn, old_seqno);
- }
-
- gcc_assert (CONTAINING_RGN (BLOCK_NUM (insn))
-@@ -5575,8 +5586,7 @@
- }
-
- /* A wrapper for redirect_edge_and_branch_force, which also initializes
-- data structures for possibly created bb and insns. Returns the newly
-- added bb or NULL, when a bb was not needed. */
-+ data structures for possibly created bb and insns. */
- void
- sel_redirect_edge_and_branch_force (edge e, basic_block to)
- {
-@@ -5583,6 +5593,7 @@
- basic_block jump_bb, src, orig_dest = e->dest;
- int prev_max_uid;
- rtx jump;
-+ int old_seqno = -1;
-
- /* This function is now used only for bookkeeping code creation, where
- we'll never get the single pred of orig_dest block and thus will not
-@@ -5591,8 +5602,13 @@
- && !single_pred_p (orig_dest));
- src = e->src;
- prev_max_uid = get_max_uid ();
-+ /* Compute and pass old_seqno down to sel_init_new_insn only for the case
-+ when the conditional jump being redirected may become unconditional. */
-+ if (any_condjump_p (BB_END (src))
-+ && INSN_SEQNO (BB_END (src)) >= 0)
-+ old_seqno = INSN_SEQNO (BB_END (src));
-+
- jump_bb = redirect_edge_and_branch_force (e, to);
--
- if (jump_bb != NULL)
- sel_add_bb (jump_bb);
-
-@@ -5604,7 +5620,8 @@
-
- jump = find_new_jump (src, jump_bb, prev_max_uid);
- if (jump)
-- sel_init_new_insn (jump, INSN_INIT_TODO_LUID | INSN_INIT_TODO_SIMPLEJUMP);
-+ sel_init_new_insn (jump, INSN_INIT_TODO_LUID | INSN_INIT_TODO_SIMPLEJUMP,
-+ old_seqno);
- set_immediate_dominator (CDI_DOMINATORS, to,
- recompute_dominator (CDI_DOMINATORS, to));
- set_immediate_dominator (CDI_DOMINATORS, orig_dest,
-@@ -5623,6 +5640,7 @@
- edge redirected;
- bool recompute_toporder_p = false;
- bool maybe_unreachable = single_pred_p (orig_dest);
-+ int old_seqno = -1;
-
- latch_edge_p = (pipelining_p
- && current_loop_nest
-@@ -5631,6 +5649,12 @@
- src = e->src;
- prev_max_uid = get_max_uid ();
-
-+ /* Compute and pass old_seqno down to sel_init_new_insn only for the case
-+ when the conditional jump being redirected may become unconditional. */
-+ if (any_condjump_p (BB_END (src))
-+ && INSN_SEQNO (BB_END (src)) >= 0)
-+ old_seqno = INSN_SEQNO (BB_END (src));
-+
- redirected = redirect_edge_and_branch (e, to);
-
- gcc_assert (redirected && !last_added_blocks.exists ());
-@@ -5651,7 +5675,7 @@
-
- jump = find_new_jump (src, NULL, prev_max_uid);
- if (jump)
-- sel_init_new_insn (jump, INSN_INIT_TODO_LUID | INSN_INIT_TODO_SIMPLEJUMP);
-+ sel_init_new_insn (jump, INSN_INIT_TODO_LUID | INSN_INIT_TODO_SIMPLEJUMP, old_seqno);
-
- /* Only update dominator info when we don't have unreachable blocks.
- Otherwise we'll update in maybe_tidy_empty_bb. */
-Index: gcc/asan.c
-===================================================================
---- a/src/gcc/asan.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/asan.c (.../branches/gcc-4_9-branch)
-@@ -1017,8 +1017,17 @@
- base_align_bias = ((asan_frame_size + alignb - 1)
- & ~(alignb - HOST_WIDE_INT_1)) - asan_frame_size;
- }
-+ /* Align base if target is STRICT_ALIGNMENT. */
-+ if (STRICT_ALIGNMENT)
-+ base = expand_binop (Pmode, and_optab, base,
-+ gen_int_mode (-((GET_MODE_ALIGNMENT (SImode)
-+ << ASAN_SHADOW_SHIFT)
-+ / BITS_PER_UNIT), Pmode), NULL_RTX,
-+ 1, OPTAB_DIRECT);
-+
- if (use_after_return_class == -1 && pbase)
- emit_move_insn (pbase, base);
-+
- base = expand_binop (Pmode, add_optab, base,
- gen_int_mode (base_offset - base_align_bias, Pmode),
- NULL_RTX, 1, OPTAB_DIRECT);
-@@ -1097,6 +1106,8 @@
- && (ASAN_RED_ZONE_SIZE >> ASAN_SHADOW_SHIFT) == 4);
- shadow_mem = gen_rtx_MEM (SImode, shadow_base);
- set_mem_alias_set (shadow_mem, asan_shadow_set);
-+ if (STRICT_ALIGNMENT)
-+ set_mem_align (shadow_mem, (GET_MODE_ALIGNMENT (SImode)));
- prev_offset = base_offset;
- for (l = length; l; l -= 2)
- {
-@@ -1186,6 +1197,10 @@
-
- shadow_mem = gen_rtx_MEM (BLKmode, shadow_base);
- set_mem_alias_set (shadow_mem, asan_shadow_set);
-+
-+ if (STRICT_ALIGNMENT)
-+ set_mem_align (shadow_mem, (GET_MODE_ALIGNMENT (SImode)));
-+
- prev_offset = base_offset;
- last_offset = base_offset;
- last_size = 0;
-Index: gcc/gimple-ssa-strength-reduction.c
-===================================================================
---- a/src/gcc/gimple-ssa-strength-reduction.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/gimple-ssa-strength-reduction.c (.../branches/gcc-4_9-branch)
-@@ -1114,15 +1114,18 @@
- X = Y * c
- ============================
- X = (B + i') * (S * c) */
-- base = base_cand->base_expr;
-- index = base_cand->index;
- temp = tree_to_double_int (base_cand->stride)
- * tree_to_double_int (stride_in);
-- stride = double_int_to_tree (TREE_TYPE (stride_in), temp);
-- ctype = base_cand->cand_type;
-- if (has_single_use (base_in))
-- savings = (base_cand->dead_savings
-- + stmt_cost (base_cand->cand_stmt, speed));
-+ if (double_int_fits_to_tree_p (TREE_TYPE (stride_in), temp))
-+ {
-+ base = base_cand->base_expr;
-+ index = base_cand->index;
-+ stride = double_int_to_tree (TREE_TYPE (stride_in), temp);
-+ ctype = base_cand->cand_type;
-+ if (has_single_use (base_in))
-+ savings = (base_cand->dead_savings
-+ + stmt_cost (base_cand->cand_stmt, speed));
-+ }
- }
- else if (base_cand->kind == CAND_ADD && integer_onep (base_cand->stride))
- {
-Index: gcc/fortran/openmp.c
-===================================================================
---- a/src/gcc/fortran/openmp.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/openmp.c (.../branches/gcc-4_9-branch)
-@@ -23,6 +23,7 @@
- #include "coretypes.h"
- #include "flags.h"
- #include "gfortran.h"
-+#include "arith.h"
- #include "match.h"
- #include "parse.h"
- #include "pointer-set.h"
-@@ -69,19 +70,111 @@
- gfc_free_expr (c->final_expr);
- gfc_free_expr (c->num_threads);
- gfc_free_expr (c->chunk_size);
-+ gfc_free_expr (c->safelen_expr);
-+ gfc_free_expr (c->simdlen_expr);
-+ gfc_free_expr (c->num_teams);
-+ gfc_free_expr (c->device);
-+ gfc_free_expr (c->thread_limit);
-+ gfc_free_expr (c->dist_chunk_size);
- for (i = 0; i < OMP_LIST_NUM; i++)
-- gfc_free_namelist (c->lists[i]);
-+ gfc_free_omp_namelist (c->lists[i]);
- free (c);
- }
-
-+/* Free an !$omp declare simd construct list. */
-+
-+void
-+gfc_free_omp_declare_simd (gfc_omp_declare_simd *ods)
-+{
-+ if (ods)
-+ {
-+ gfc_free_omp_clauses (ods->clauses);
-+ free (ods);
-+ }
-+}
-+
-+void
-+gfc_free_omp_declare_simd_list (gfc_omp_declare_simd *list)
-+{
-+ while (list)
-+ {
-+ gfc_omp_declare_simd *current = list;
-+ list = list->next;
-+ gfc_free_omp_declare_simd (current);
-+ }
-+}
-+
-+/* Free an !$omp declare reduction. */
-+
-+void
-+gfc_free_omp_udr (gfc_omp_udr *omp_udr)
-+{
-+ if (omp_udr)
-+ {
-+ gfc_free_omp_udr (omp_udr->next);
-+ gfc_free_namespace (omp_udr->combiner_ns);
-+ if (omp_udr->initializer_ns)
-+ gfc_free_namespace (omp_udr->initializer_ns);
-+ free (omp_udr);
-+ }
-+}
-+
-+
-+static gfc_omp_udr *
-+gfc_find_omp_udr (gfc_namespace *ns, const char *name, gfc_typespec *ts)
-+{
-+ gfc_symtree *st;
-+
-+ if (ns == NULL)
-+ ns = gfc_current_ns;
-+ do
-+ {
-+ gfc_omp_udr *omp_udr;
-+
-+ st = gfc_find_symtree (ns->omp_udr_root, name);
-+ if (st != NULL)
-+ for (omp_udr = st->n.omp_udr; omp_udr; omp_udr = omp_udr->next)
-+ if (ts == NULL)
-+ return omp_udr;
-+ else if (gfc_compare_types (&omp_udr->ts, ts))
-+ {
-+ if (ts->type == BT_CHARACTER)
-+ {
-+ if (omp_udr->ts.u.cl->length == NULL)
-+ return omp_udr;
-+ if (ts->u.cl->length == NULL)
-+ continue;
-+ if (gfc_compare_expr (omp_udr->ts.u.cl->length,
-+ ts->u.cl->length,
-+ INTRINSIC_EQ) != 0)
-+ continue;
-+ }
-+ return omp_udr;
-+ }
-+
-+ /* Don't escape an interface block. */
-+ if (ns && !ns->has_import_set
-+ && ns->proc_name && ns->proc_name->attr.if_source == IFSRC_IFBODY)
-+ break;
-+
-+ ns = ns->parent;
-+ }
-+ while (ns != NULL);
-+
-+ return NULL;
-+}
-+
-+
- /* Match a variable/common block list and construct a namelist from it. */
-
- static match
--gfc_match_omp_variable_list (const char *str, gfc_namelist **list,
-- bool allow_common)
-+gfc_match_omp_variable_list (const char *str, gfc_omp_namelist **list,
-+ bool allow_common, bool *end_colon = NULL,
-+ gfc_omp_namelist ***headp = NULL,
-+ bool allow_sections = false)
- {
-- gfc_namelist *head, *tail, *p;
-- locus old_loc;
-+ gfc_omp_namelist *head, *tail, *p;
-+ locus old_loc, cur_loc;
- char n[GFC_MAX_SYMBOL_LEN+1];
- gfc_symbol *sym;
- match m;
-@@ -97,12 +190,29 @@
-
- for (;;)
- {
-+ cur_loc = gfc_current_locus;
- m = gfc_match_symbol (&sym, 1);
- switch (m)
- {
- case MATCH_YES:
-+ gfc_expr *expr;
-+ expr = NULL;
-+ if (allow_sections && gfc_peek_ascii_char () == '(')
-+ {
-+ gfc_current_locus = cur_loc;
-+ m = gfc_match_variable (&expr, 0);
-+ switch (m)
-+ {
-+ case MATCH_ERROR:
-+ goto cleanup;
-+ case MATCH_NO:
-+ goto syntax;
-+ default:
-+ break;
-+ }
-+ }
- gfc_set_sym_referenced (sym);
-- p = gfc_get_namelist ();
-+ p = gfc_get_omp_namelist ();
- if (head == NULL)
- head = tail = p;
- else
-@@ -111,6 +221,7 @@
- tail = tail->next;
- }
- tail->sym = sym;
-+ tail->expr = expr;
- goto next_item;
- case MATCH_NO:
- break;
-@@ -136,7 +247,7 @@
- for (sym = st->n.common->head; sym; sym = sym->common_next)
- {
- gfc_set_sym_referenced (sym);
-- p = gfc_get_namelist ();
-+ p = gfc_get_omp_namelist ();
- if (head == NULL)
- head = tail = p;
- else
-@@ -148,6 +259,11 @@
- }
-
- next_item:
-+ if (end_colon && gfc_match_char (':') == MATCH_YES)
-+ {
-+ *end_colon = true;
-+ break;
-+ }
- if (gfc_match_char (')') == MATCH_YES)
- break;
- if (gfc_match_char (',') != MATCH_YES)
-@@ -158,6 +274,8 @@
- list = &(*list)->next;
-
- *list = head;
-+ if (headp)
-+ *headp = list;
- return MATCH_YES;
-
- syntax:
-@@ -164,37 +282,53 @@
- gfc_error ("Syntax error in OpenMP variable list at %C");
-
- cleanup:
-- gfc_free_namelist (head);
-+ gfc_free_omp_namelist (head);
- gfc_current_locus = old_loc;
- return MATCH_ERROR;
- }
-
--#define OMP_CLAUSE_PRIVATE (1 << 0)
--#define OMP_CLAUSE_FIRSTPRIVATE (1 << 1)
--#define OMP_CLAUSE_LASTPRIVATE (1 << 2)
--#define OMP_CLAUSE_COPYPRIVATE (1 << 3)
--#define OMP_CLAUSE_SHARED (1 << 4)
--#define OMP_CLAUSE_COPYIN (1 << 5)
--#define OMP_CLAUSE_REDUCTION (1 << 6)
--#define OMP_CLAUSE_IF (1 << 7)
--#define OMP_CLAUSE_NUM_THREADS (1 << 8)
--#define OMP_CLAUSE_SCHEDULE (1 << 9)
--#define OMP_CLAUSE_DEFAULT (1 << 10)
--#define OMP_CLAUSE_ORDERED (1 << 11)
--#define OMP_CLAUSE_COLLAPSE (1 << 12)
--#define OMP_CLAUSE_UNTIED (1 << 13)
--#define OMP_CLAUSE_FINAL (1 << 14)
--#define OMP_CLAUSE_MERGEABLE (1 << 15)
-+#define OMP_CLAUSE_PRIVATE (1U << 0)
-+#define OMP_CLAUSE_FIRSTPRIVATE (1U << 1)
-+#define OMP_CLAUSE_LASTPRIVATE (1U << 2)
-+#define OMP_CLAUSE_COPYPRIVATE (1U << 3)
-+#define OMP_CLAUSE_SHARED (1U << 4)
-+#define OMP_CLAUSE_COPYIN (1U << 5)
-+#define OMP_CLAUSE_REDUCTION (1U << 6)
-+#define OMP_CLAUSE_IF (1U << 7)
-+#define OMP_CLAUSE_NUM_THREADS (1U << 8)
-+#define OMP_CLAUSE_SCHEDULE (1U << 9)
-+#define OMP_CLAUSE_DEFAULT (1U << 10)
-+#define OMP_CLAUSE_ORDERED (1U << 11)
-+#define OMP_CLAUSE_COLLAPSE (1U << 12)
-+#define OMP_CLAUSE_UNTIED (1U << 13)
-+#define OMP_CLAUSE_FINAL (1U << 14)
-+#define OMP_CLAUSE_MERGEABLE (1U << 15)
-+#define OMP_CLAUSE_ALIGNED (1U << 16)
-+#define OMP_CLAUSE_DEPEND (1U << 17)
-+#define OMP_CLAUSE_INBRANCH (1U << 18)
-+#define OMP_CLAUSE_LINEAR (1U << 19)
-+#define OMP_CLAUSE_NOTINBRANCH (1U << 20)
-+#define OMP_CLAUSE_PROC_BIND (1U << 21)
-+#define OMP_CLAUSE_SAFELEN (1U << 22)
-+#define OMP_CLAUSE_SIMDLEN (1U << 23)
-+#define OMP_CLAUSE_UNIFORM (1U << 24)
-+#define OMP_CLAUSE_DEVICE (1U << 25)
-+#define OMP_CLAUSE_MAP (1U << 26)
-+#define OMP_CLAUSE_TO (1U << 27)
-+#define OMP_CLAUSE_FROM (1U << 28)
-+#define OMP_CLAUSE_NUM_TEAMS (1U << 29)
-+#define OMP_CLAUSE_THREAD_LIMIT (1U << 30)
-+#define OMP_CLAUSE_DIST_SCHEDULE (1U << 31)
-
- /* Match OpenMP directive clauses. MASK is a bitmask of
- clauses that are allowed for a particular directive. */
-
- static match
--gfc_match_omp_clauses (gfc_omp_clauses **cp, int mask)
-+gfc_match_omp_clauses (gfc_omp_clauses **cp, unsigned int mask,
-+ bool first = true, bool needs_space = true)
- {
- gfc_omp_clauses *c = gfc_get_omp_clauses ();
- locus old_loc;
-- bool needs_space = true, first = true;
-
- *cp = NULL;
- while (1)
-@@ -251,22 +385,30 @@
- if ((mask & OMP_CLAUSE_REDUCTION)
- && gfc_match ("reduction ( ") == MATCH_YES)
- {
-- int reduction = OMP_LIST_NUM;
-- char buffer[GFC_MAX_SYMBOL_LEN + 1];
-+ gfc_omp_reduction_op rop = OMP_REDUCTION_NONE;
-+ char buffer[GFC_MAX_SYMBOL_LEN + 3];
- if (gfc_match_char ('+') == MATCH_YES)
-- reduction = OMP_LIST_PLUS;
-+ rop = OMP_REDUCTION_PLUS;
- else if (gfc_match_char ('*') == MATCH_YES)
-- reduction = OMP_LIST_MULT;
-+ rop = OMP_REDUCTION_TIMES;
- else if (gfc_match_char ('-') == MATCH_YES)
-- reduction = OMP_LIST_SUB;
-+ rop = OMP_REDUCTION_MINUS;
- else if (gfc_match (".and.") == MATCH_YES)
-- reduction = OMP_LIST_AND;
-+ rop = OMP_REDUCTION_AND;
- else if (gfc_match (".or.") == MATCH_YES)
-- reduction = OMP_LIST_OR;
-+ rop = OMP_REDUCTION_OR;
- else if (gfc_match (".eqv.") == MATCH_YES)
-- reduction = OMP_LIST_EQV;
-+ rop = OMP_REDUCTION_EQV;
- else if (gfc_match (".neqv.") == MATCH_YES)
-- reduction = OMP_LIST_NEQV;
-+ rop = OMP_REDUCTION_NEQV;
-+ if (rop != OMP_REDUCTION_NONE)
-+ snprintf (buffer, sizeof buffer,
-+ "operator %s", gfc_op2string ((gfc_intrinsic_op) rop));
-+ else if (gfc_match_defined_op_name (buffer + 1, 1) == MATCH_YES)
-+ {
-+ buffer[0] = '.';
-+ strcat (buffer, ".");
-+ }
- else if (gfc_match_name (buffer) == MATCH_YES)
- {
- gfc_symbol *sym;
-@@ -294,40 +436,64 @@
- || sym->attr.if_source != IFSRC_UNKNOWN
- || sym == sym->ns->proc_name)
- {
-- gfc_error_now ("%s is not INTRINSIC procedure name "
-- "at %C", buffer);
- sym = NULL;
-+ n = NULL;
- }
- else
- n = sym->name;
- }
-- if (strcmp (n, "max") == 0)
-- reduction = OMP_LIST_MAX;
-+ if (n == NULL)
-+ rop = OMP_REDUCTION_NONE;
-+ else if (strcmp (n, "max") == 0)
-+ rop = OMP_REDUCTION_MAX;
- else if (strcmp (n, "min") == 0)
-- reduction = OMP_LIST_MIN;
-+ rop = OMP_REDUCTION_MIN;
- else if (strcmp (n, "iand") == 0)
-- reduction = OMP_LIST_IAND;
-+ rop = OMP_REDUCTION_IAND;
- else if (strcmp (n, "ior") == 0)
-- reduction = OMP_LIST_IOR;
-+ rop = OMP_REDUCTION_IOR;
- else if (strcmp (n, "ieor") == 0)
-- reduction = OMP_LIST_IEOR;
-- if (reduction != OMP_LIST_NUM
-+ rop = OMP_REDUCTION_IEOR;
-+ if (rop != OMP_REDUCTION_NONE
- && sym != NULL
- && ! sym->attr.intrinsic
- && ! sym->attr.use_assoc
- && ((sym->attr.flavor == FL_UNKNOWN
-- && !gfc_add_flavor (&sym->attr, FL_PROCEDURE, sym->name, NULL))
-+ && !gfc_add_flavor (&sym->attr, FL_PROCEDURE,
-+ sym->name, NULL))
- || !gfc_add_intrinsic (&sym->attr, NULL)))
-+ rop = OMP_REDUCTION_NONE;
-+ }
-+ gfc_omp_udr *udr = gfc_find_omp_udr (gfc_current_ns, buffer, NULL);
-+ gfc_omp_namelist **head = NULL;
-+ if (rop == OMP_REDUCTION_NONE && udr)
-+ rop = OMP_REDUCTION_USER;
-+
-+ if (gfc_match_omp_variable_list (" :",
-+ &c->lists[OMP_LIST_REDUCTION],
-+ false, NULL, &head) == MATCH_YES)
-+ {
-+ gfc_omp_namelist *n;
-+ if (rop == OMP_REDUCTION_NONE)
- {
-- gfc_free_omp_clauses (c);
-- return MATCH_ERROR;
-+ n = *head;
-+ *head = NULL;
-+ gfc_error_now ("!$OMP DECLARE REDUCTION %s not found "
-+ "at %L", buffer, &old_loc);
-+ gfc_free_omp_namelist (n);
- }
-+ else
-+ for (n = *head; n; n = n->next)
-+ {
-+ n->u.reduction_op = rop;
-+ if (udr)
-+ {
-+ n->udr = gfc_get_omp_namelist_udr ();
-+ n->udr->udr = udr;
-+ }
-+ }
-+ continue;
- }
-- if (reduction != OMP_LIST_NUM
-- && gfc_match_omp_variable_list (" :", &c->lists[reduction],
-- false)
-- == MATCH_YES)
-- continue;
- else
- gfc_current_locus = old_loc;
- }
-@@ -419,7 +585,189 @@
- continue;
- }
- }
-+ if ((mask & OMP_CLAUSE_INBRANCH) && !c->inbranch && !c->notinbranch
-+ && gfc_match ("inbranch") == MATCH_YES)
-+ {
-+ c->inbranch = needs_space = true;
-+ continue;
-+ }
-+ if ((mask & OMP_CLAUSE_NOTINBRANCH) && !c->notinbranch && !c->inbranch
-+ && gfc_match ("notinbranch") == MATCH_YES)
-+ {
-+ c->notinbranch = needs_space = true;
-+ continue;
-+ }
-+ if ((mask & OMP_CLAUSE_PROC_BIND)
-+ && c->proc_bind == OMP_PROC_BIND_UNKNOWN)
-+ {
-+ if (gfc_match ("proc_bind ( master )") == MATCH_YES)
-+ c->proc_bind = OMP_PROC_BIND_MASTER;
-+ else if (gfc_match ("proc_bind ( spread )") == MATCH_YES)
-+ c->proc_bind = OMP_PROC_BIND_SPREAD;
-+ else if (gfc_match ("proc_bind ( close )") == MATCH_YES)
-+ c->proc_bind = OMP_PROC_BIND_CLOSE;
-+ if (c->proc_bind != OMP_PROC_BIND_UNKNOWN)
-+ continue;
-+ }
-+ if ((mask & OMP_CLAUSE_SAFELEN) && c->safelen_expr == NULL
-+ && gfc_match ("safelen ( %e )", &c->safelen_expr) == MATCH_YES)
-+ continue;
-+ if ((mask & OMP_CLAUSE_SIMDLEN) && c->simdlen_expr == NULL
-+ && gfc_match ("simdlen ( %e )", &c->simdlen_expr) == MATCH_YES)
-+ continue;
-+ if ((mask & OMP_CLAUSE_UNIFORM)
-+ && gfc_match_omp_variable_list ("uniform (",
-+ &c->lists[OMP_LIST_UNIFORM], false)
-+ == MATCH_YES)
-+ continue;
-+ bool end_colon = false;
-+ gfc_omp_namelist **head = NULL;
-+ old_loc = gfc_current_locus;
-+ if ((mask & OMP_CLAUSE_ALIGNED)
-+ && gfc_match_omp_variable_list ("aligned (",
-+ &c->lists[OMP_LIST_ALIGNED], false,
-+ &end_colon, &head)
-+ == MATCH_YES)
-+ {
-+ gfc_expr *alignment = NULL;
-+ gfc_omp_namelist *n;
-
-+ if (end_colon
-+ && gfc_match (" %e )", &alignment) != MATCH_YES)
-+ {
-+ gfc_free_omp_namelist (*head);
-+ gfc_current_locus = old_loc;
-+ *head = NULL;
-+ break;
-+ }
-+ for (n = *head; n; n = n->next)
-+ if (n->next && alignment)
-+ n->expr = gfc_copy_expr (alignment);
-+ else
-+ n->expr = alignment;
-+ continue;
-+ }
-+ end_colon = false;
-+ head = NULL;
-+ old_loc = gfc_current_locus;
-+ if ((mask & OMP_CLAUSE_LINEAR)
-+ && gfc_match_omp_variable_list ("linear (",
-+ &c->lists[OMP_LIST_LINEAR], false,
-+ &end_colon, &head)
-+ == MATCH_YES)
-+ {
-+ gfc_expr *step = NULL;
-+
-+ if (end_colon
-+ && gfc_match (" %e )", &step) != MATCH_YES)
-+ {
-+ gfc_free_omp_namelist (*head);
-+ gfc_current_locus = old_loc;
-+ *head = NULL;
-+ break;
-+ }
-+ else if (!end_colon)
-+ {
-+ step = gfc_get_constant_expr (BT_INTEGER,
-+ gfc_default_integer_kind,
-+ &old_loc);
-+ mpz_set_si (step->value.integer, 1);
-+ }
-+ (*head)->expr = step;
-+ continue;
-+ }
-+ if ((mask & OMP_CLAUSE_DEPEND)
-+ && gfc_match ("depend ( ") == MATCH_YES)
-+ {
-+ match m = MATCH_YES;
-+ gfc_omp_depend_op depend_op = OMP_DEPEND_OUT;
-+ if (gfc_match ("inout") == MATCH_YES)
-+ depend_op = OMP_DEPEND_INOUT;
-+ else if (gfc_match ("in") == MATCH_YES)
-+ depend_op = OMP_DEPEND_IN;
-+ else if (gfc_match ("out") == MATCH_YES)
-+ depend_op = OMP_DEPEND_OUT;
-+ else
-+ m = MATCH_NO;
-+ head = NULL;
-+ if (m == MATCH_YES
-+ && gfc_match_omp_variable_list (" : ",
-+ &c->lists[OMP_LIST_DEPEND],
-+ false, NULL, &head, true)
-+ == MATCH_YES)
-+ {
-+ gfc_omp_namelist *n;
-+ for (n = *head; n; n = n->next)
-+ n->u.depend_op = depend_op;
-+ continue;
-+ }
-+ else
-+ gfc_current_locus = old_loc;
-+ }
-+ if ((mask & OMP_CLAUSE_DIST_SCHEDULE)
-+ && c->dist_sched_kind == OMP_SCHED_NONE
-+ && gfc_match ("dist_schedule ( static") == MATCH_YES)
-+ {
-+ match m = MATCH_NO;
-+ c->dist_sched_kind = OMP_SCHED_STATIC;
-+ m = gfc_match (" , %e )", &c->dist_chunk_size);
-+ if (m != MATCH_YES)
-+ m = gfc_match_char (')');
-+ if (m != MATCH_YES)
-+ {
-+ c->dist_sched_kind = OMP_SCHED_NONE;
-+ gfc_current_locus = old_loc;
-+ }
-+ else
-+ continue;
-+ }
-+ if ((mask & OMP_CLAUSE_NUM_TEAMS) && c->num_teams == NULL
-+ && gfc_match ("num_teams ( %e )", &c->num_teams) == MATCH_YES)
-+ continue;
-+ if ((mask & OMP_CLAUSE_DEVICE) && c->device == NULL
-+ && gfc_match ("device ( %e )", &c->device) == MATCH_YES)
-+ continue;
-+ if ((mask & OMP_CLAUSE_THREAD_LIMIT) && c->thread_limit == NULL
-+ && gfc_match ("thread_limit ( %e )", &c->thread_limit) == MATCH_YES)
-+ continue;
-+ if ((mask & OMP_CLAUSE_MAP)
-+ && gfc_match ("map ( ") == MATCH_YES)
-+ {
-+ gfc_omp_map_op map_op = OMP_MAP_TOFROM;
-+ if (gfc_match ("alloc : ") == MATCH_YES)
-+ map_op = OMP_MAP_ALLOC;
-+ else if (gfc_match ("tofrom : ") == MATCH_YES)
-+ map_op = OMP_MAP_TOFROM;
-+ else if (gfc_match ("to : ") == MATCH_YES)
-+ map_op = OMP_MAP_TO;
-+ else if (gfc_match ("from : ") == MATCH_YES)
-+ map_op = OMP_MAP_FROM;
-+ head = NULL;
-+ if (gfc_match_omp_variable_list ("", &c->lists[OMP_LIST_MAP],
-+ false, NULL, &head, true)
-+ == MATCH_YES)
-+ {
-+ gfc_omp_namelist *n;
-+ for (n = *head; n; n = n->next)
-+ n->u.map_op = map_op;
-+ continue;
-+ }
-+ else
-+ gfc_current_locus = old_loc;
-+ }
-+ if ((mask & OMP_CLAUSE_TO)
-+ && gfc_match_omp_variable_list ("to (",
-+ &c->lists[OMP_LIST_TO], false,
-+ NULL, &head, true)
-+ == MATCH_YES)
-+ continue;
-+ if ((mask & OMP_CLAUSE_FROM)
-+ && gfc_match_omp_variable_list ("from (",
-+ &c->lists[OMP_LIST_FROM], false,
-+ NULL, &head, true)
-+ == MATCH_YES)
-+ continue;
-+
- break;
- }
-
-@@ -436,7 +784,10 @@
- #define OMP_PARALLEL_CLAUSES \
- (OMP_CLAUSE_PRIVATE | OMP_CLAUSE_FIRSTPRIVATE | OMP_CLAUSE_SHARED \
- | OMP_CLAUSE_COPYIN | OMP_CLAUSE_REDUCTION | OMP_CLAUSE_IF \
-- | OMP_CLAUSE_NUM_THREADS | OMP_CLAUSE_DEFAULT)
-+ | OMP_CLAUSE_NUM_THREADS | OMP_CLAUSE_DEFAULT | OMP_CLAUSE_PROC_BIND)
-+#define OMP_DECLARE_SIMD_CLAUSES \
-+ (OMP_CLAUSE_SIMDLEN | OMP_CLAUSE_LINEAR | OMP_CLAUSE_UNIFORM \
-+ | OMP_CLAUSE_ALIGNED | OMP_CLAUSE_INBRANCH | OMP_CLAUSE_NOTINBRANCH)
- #define OMP_DO_CLAUSES \
- (OMP_CLAUSE_PRIVATE | OMP_CLAUSE_FIRSTPRIVATE \
- | OMP_CLAUSE_LASTPRIVATE | OMP_CLAUSE_REDUCTION \
-@@ -444,18 +795,36 @@
- #define OMP_SECTIONS_CLAUSES \
- (OMP_CLAUSE_PRIVATE | OMP_CLAUSE_FIRSTPRIVATE \
- | OMP_CLAUSE_LASTPRIVATE | OMP_CLAUSE_REDUCTION)
-+#define OMP_SIMD_CLAUSES \
-+ (OMP_CLAUSE_PRIVATE | OMP_CLAUSE_LASTPRIVATE | OMP_CLAUSE_REDUCTION \
-+ | OMP_CLAUSE_COLLAPSE | OMP_CLAUSE_SAFELEN | OMP_CLAUSE_LINEAR \
-+ | OMP_CLAUSE_ALIGNED)
- #define OMP_TASK_CLAUSES \
- (OMP_CLAUSE_PRIVATE | OMP_CLAUSE_FIRSTPRIVATE | OMP_CLAUSE_SHARED \
- | OMP_CLAUSE_IF | OMP_CLAUSE_DEFAULT | OMP_CLAUSE_UNTIED \
-- | OMP_CLAUSE_FINAL | OMP_CLAUSE_MERGEABLE)
-+ | OMP_CLAUSE_FINAL | OMP_CLAUSE_MERGEABLE | OMP_CLAUSE_DEPEND)
-+#define OMP_TARGET_CLAUSES \
-+ (OMP_CLAUSE_DEVICE | OMP_CLAUSE_MAP | OMP_CLAUSE_IF)
-+#define OMP_TARGET_DATA_CLAUSES \
-+ (OMP_CLAUSE_DEVICE | OMP_CLAUSE_MAP | OMP_CLAUSE_IF)
-+#define OMP_TARGET_UPDATE_CLAUSES \
-+ (OMP_CLAUSE_DEVICE | OMP_CLAUSE_IF | OMP_CLAUSE_TO | OMP_CLAUSE_FROM)
-+#define OMP_TEAMS_CLAUSES \
-+ (OMP_CLAUSE_NUM_TEAMS | OMP_CLAUSE_THREAD_LIMIT | OMP_CLAUSE_DEFAULT \
-+ | OMP_CLAUSE_PRIVATE | OMP_CLAUSE_FIRSTPRIVATE | OMP_CLAUSE_SHARED \
-+ | OMP_CLAUSE_REDUCTION)
-+#define OMP_DISTRIBUTE_CLAUSES \
-+ (OMP_CLAUSE_PRIVATE | OMP_CLAUSE_FIRSTPRIVATE | OMP_CLAUSE_COLLAPSE \
-+ | OMP_CLAUSE_DIST_SCHEDULE)
-
--match
--gfc_match_omp_parallel (void)
-+
-+static match
-+match_omp (gfc_exec_op op, unsigned int mask)
- {
- gfc_omp_clauses *c;
-- if (gfc_match_omp_clauses (&c, OMP_PARALLEL_CLAUSES) != MATCH_YES)
-+ if (gfc_match_omp_clauses (&c, mask) != MATCH_YES)
- return MATCH_ERROR;
-- new_st.op = EXEC_OMP_PARALLEL;
-+ new_st.op = op;
- new_st.ext.omp_clauses = c;
- return MATCH_YES;
- }
-@@ -462,89 +831,597 @@
-
-
- match
--gfc_match_omp_task (void)
-+gfc_match_omp_critical (void)
- {
-- gfc_omp_clauses *c;
-- if (gfc_match_omp_clauses (&c, OMP_TASK_CLAUSES) != MATCH_YES)
-- return MATCH_ERROR;
-- new_st.op = EXEC_OMP_TASK;
-- new_st.ext.omp_clauses = c;
-- return MATCH_YES;
--}
-+ char n[GFC_MAX_SYMBOL_LEN+1];
-
--
--match
--gfc_match_omp_taskwait (void)
--{
-+ if (gfc_match (" ( %n )", n) != MATCH_YES)
-+ n[0] = '\0';
- if (gfc_match_omp_eos () != MATCH_YES)
- {
-- gfc_error ("Unexpected junk after TASKWAIT clause at %C");
-+ gfc_error ("Unexpected junk after $OMP CRITICAL statement at %C");
- return MATCH_ERROR;
- }
-- new_st.op = EXEC_OMP_TASKWAIT;
-- new_st.ext.omp_clauses = NULL;
-+ new_st.op = EXEC_OMP_CRITICAL;
-+ new_st.ext.omp_name = n[0] ? xstrdup (n) : NULL;
- return MATCH_YES;
- }
-
-
- match
--gfc_match_omp_taskyield (void)
-+gfc_match_omp_distribute (void)
- {
-- if (gfc_match_omp_eos () != MATCH_YES)
-- {
-- gfc_error ("Unexpected junk after TASKYIELD clause at %C");
-- return MATCH_ERROR;
-- }
-- new_st.op = EXEC_OMP_TASKYIELD;
-- new_st.ext.omp_clauses = NULL;
-- return MATCH_YES;
-+ return match_omp (EXEC_OMP_DISTRIBUTE, OMP_DISTRIBUTE_CLAUSES);
- }
-
-
- match
--gfc_match_omp_critical (void)
-+gfc_match_omp_distribute_parallel_do (void)
- {
-- char n[GFC_MAX_SYMBOL_LEN+1];
-+ return match_omp (EXEC_OMP_DISTRIBUTE_PARALLEL_DO,
-+ OMP_DISTRIBUTE_CLAUSES | OMP_PARALLEL_CLAUSES
-+ | OMP_DO_CLAUSES);
-+}
-
-- if (gfc_match (" ( %n )", n) != MATCH_YES)
-- n[0] = '\0';
-+
-+match
-+gfc_match_omp_distribute_parallel_do_simd (void)
-+{
-+ return match_omp (EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD,
-+ (OMP_DISTRIBUTE_CLAUSES | OMP_PARALLEL_CLAUSES
-+ | OMP_DO_CLAUSES | OMP_SIMD_CLAUSES)
-+ & ~OMP_CLAUSE_ORDERED);
-+}
-+
-+
-+match
-+gfc_match_omp_distribute_simd (void)
-+{
-+ return match_omp (EXEC_OMP_DISTRIBUTE_SIMD,
-+ OMP_DISTRIBUTE_CLAUSES | OMP_SIMD_CLAUSES);
-+}
-+
-+
-+match
-+gfc_match_omp_do (void)
-+{
-+ return match_omp (EXEC_OMP_DO, OMP_DO_CLAUSES);
-+}
-+
-+
-+match
-+gfc_match_omp_do_simd (void)
-+{
-+ return match_omp (EXEC_OMP_DO_SIMD, ((OMP_DO_CLAUSES | OMP_SIMD_CLAUSES)
-+ & ~OMP_CLAUSE_ORDERED));
-+}
-+
-+
-+match
-+gfc_match_omp_flush (void)
-+{
-+ gfc_omp_namelist *list = NULL;
-+ gfc_match_omp_variable_list (" (", &list, true);
- if (gfc_match_omp_eos () != MATCH_YES)
- {
-- gfc_error ("Unexpected junk after $OMP CRITICAL statement at %C");
-+ gfc_error ("Unexpected junk after $OMP FLUSH statement at %C");
-+ gfc_free_omp_namelist (list);
- return MATCH_ERROR;
- }
-- new_st.op = EXEC_OMP_CRITICAL;
-- new_st.ext.omp_name = n[0] ? xstrdup (n) : NULL;
-+ new_st.op = EXEC_OMP_FLUSH;
-+ new_st.ext.omp_namelist = list;
- return MATCH_YES;
- }
-
-
- match
--gfc_match_omp_do (void)
-+gfc_match_omp_declare_simd (void)
- {
-+ locus where = gfc_current_locus;
-+ gfc_symbol *proc_name;
- gfc_omp_clauses *c;
-- if (gfc_match_omp_clauses (&c, OMP_DO_CLAUSES) != MATCH_YES)
-+ gfc_omp_declare_simd *ods;
-+
-+ if (gfc_match (" ( %s ) ", &proc_name) != MATCH_YES)
- return MATCH_ERROR;
-- new_st.op = EXEC_OMP_DO;
-- new_st.ext.omp_clauses = c;
-+
-+ if (gfc_match_omp_clauses (&c, OMP_DECLARE_SIMD_CLAUSES, true,
-+ false) != MATCH_YES)
-+ return MATCH_ERROR;
-+
-+ ods = gfc_get_omp_declare_simd ();
-+ ods->where = where;
-+ ods->proc_name = proc_name;
-+ ods->clauses = c;
-+ ods->next = gfc_current_ns->omp_declare_simd;
-+ gfc_current_ns->omp_declare_simd = ods;
- return MATCH_YES;
- }
-
-
-+static bool
-+match_udr_expr (gfc_symtree *omp_sym1, gfc_symtree *omp_sym2)
-+{
-+ match m;
-+ locus old_loc = gfc_current_locus;
-+ char sname[GFC_MAX_SYMBOL_LEN + 1];
-+ gfc_symbol *sym;
-+ gfc_namespace *ns = gfc_current_ns;
-+ gfc_expr *lvalue = NULL, *rvalue = NULL;
-+ gfc_symtree *st;
-+ gfc_actual_arglist *arglist;
-+
-+ m = gfc_match (" %v =", &lvalue);
-+ if (m != MATCH_YES)
-+ gfc_current_locus = old_loc;
-+ else
-+ {
-+ m = gfc_match (" %e )", &rvalue);
-+ if (m == MATCH_YES)
-+ {
-+ ns->code = gfc_get_code (EXEC_ASSIGN);
-+ ns->code->expr1 = lvalue;
-+ ns->code->expr2 = rvalue;
-+ ns->code->loc = old_loc;
-+ return true;
-+ }
-+
-+ gfc_current_locus = old_loc;
-+ gfc_free_expr (lvalue);
-+ }
-+
-+ m = gfc_match (" %n", sname);
-+ if (m != MATCH_YES)
-+ return false;
-+
-+ if (strcmp (sname, omp_sym1->name) == 0
-+ || strcmp (sname, omp_sym2->name) == 0)
-+ return false;
-+
-+ gfc_current_ns = ns->parent;
-+ if (gfc_get_ha_sym_tree (sname, &st))
-+ return false;
-+
-+ sym = st->n.sym;
-+ if (sym->attr.flavor != FL_PROCEDURE
-+ && sym->attr.flavor != FL_UNKNOWN)
-+ return false;
-+
-+ if (!sym->attr.generic
-+ && !sym->attr.subroutine
-+ && !sym->attr.function)
-+ {
-+ if (!(sym->attr.external && !sym->attr.referenced))
-+ {
-+ /* ...create a symbol in this scope... */
-+ if (sym->ns != gfc_current_ns
-+ && gfc_get_sym_tree (sname, NULL, &st, false) == 1)
-+ return false;
-+
-+ if (sym != st->n.sym)
-+ sym = st->n.sym;
-+ }
-+
-+ /* ...and then to try to make the symbol into a subroutine. */
-+ if (!gfc_add_subroutine (&sym->attr, sym->name, NULL))
-+ return false;
-+ }
-+
-+ gfc_set_sym_referenced (sym);
-+ gfc_gobble_whitespace ();
-+ if (gfc_peek_ascii_char () != '(')
-+ return false;
-+
-+ gfc_current_ns = ns;
-+ m = gfc_match_actual_arglist (1, &arglist);
-+ if (m != MATCH_YES)
-+ return false;
-+
-+ if (gfc_match_char (')') != MATCH_YES)
-+ return false;
-+
-+ ns->code = gfc_get_code (EXEC_CALL);
-+ ns->code->symtree = st;
-+ ns->code->ext.actual = arglist;
-+ ns->code->loc = old_loc;
-+ return true;
-+}
-+
-+static bool
-+gfc_omp_udr_predef (gfc_omp_reduction_op rop, const char *name,
-+ gfc_typespec *ts, const char **n)
-+{
-+ if (!gfc_numeric_ts (ts) && ts->type != BT_LOGICAL)
-+ return false;
-+
-+ switch (rop)
-+ {
-+ case OMP_REDUCTION_PLUS:
-+ case OMP_REDUCTION_MINUS:
-+ case OMP_REDUCTION_TIMES:
-+ return ts->type != BT_LOGICAL;
-+ case OMP_REDUCTION_AND:
-+ case OMP_REDUCTION_OR:
-+ case OMP_REDUCTION_EQV:
-+ case OMP_REDUCTION_NEQV:
-+ return ts->type == BT_LOGICAL;
-+ case OMP_REDUCTION_USER:
-+ if (name[0] != '.' && (ts->type == BT_INTEGER || ts->type == BT_REAL))
-+ {
-+ gfc_symbol *sym;
-+
-+ gfc_find_symbol (name, NULL, 1, &sym);
-+ if (sym != NULL)
-+ {
-+ if (sym->attr.intrinsic)
-+ *n = sym->name;
-+ else if ((sym->attr.flavor != FL_UNKNOWN
-+ && sym->attr.flavor != FL_PROCEDURE)
-+ || sym->attr.external
-+ || sym->attr.generic
-+ || sym->attr.entry
-+ || sym->attr.result
-+ || sym->attr.dummy
-+ || sym->attr.subroutine
-+ || sym->attr.pointer
-+ || sym->attr.target
-+ || sym->attr.cray_pointer
-+ || sym->attr.cray_pointee
-+ || (sym->attr.proc != PROC_UNKNOWN
-+ && sym->attr.proc != PROC_INTRINSIC)
-+ || sym->attr.if_source != IFSRC_UNKNOWN
-+ || sym == sym->ns->proc_name)
-+ *n = NULL;
-+ else
-+ *n = sym->name;
-+ }
-+ else
-+ *n = name;
-+ if (*n
-+ && (strcmp (*n, "max") == 0 || strcmp (*n, "min") == 0))
-+ return true;
-+ else if (*n
-+ && ts->type == BT_INTEGER
-+ && (strcmp (*n, "iand") == 0
-+ || strcmp (*n, "ior") == 0
-+ || strcmp (*n, "ieor") == 0))
-+ return true;
-+ }
-+ break;
-+ default:
-+ break;
-+ }
-+ return false;
-+}
-+
-+gfc_omp_udr *
-+gfc_omp_udr_find (gfc_symtree *st, gfc_typespec *ts)
-+{
-+ gfc_omp_udr *omp_udr;
-+
-+ if (st == NULL)
-+ return NULL;
-+
-+ for (omp_udr = st->n.omp_udr; omp_udr; omp_udr = omp_udr->next)
-+ if (omp_udr->ts.type == ts->type
-+ || ((omp_udr->ts.type == BT_DERIVED || omp_udr->ts.type == BT_CLASS)
-+ && (ts->type == BT_DERIVED && ts->type == BT_CLASS)))
-+ {
-+ if (omp_udr->ts.type == BT_DERIVED || omp_udr->ts.type == BT_CLASS)
-+ {
-+ if (strcmp (omp_udr->ts.u.derived->name, ts->u.derived->name) == 0)
-+ return omp_udr;
-+ }
-+ else if (omp_udr->ts.kind == ts->kind)
-+ {
-+ if (omp_udr->ts.type == BT_CHARACTER)
-+ {
-+ if (omp_udr->ts.u.cl->length == NULL
-+ || ts->u.cl->length == NULL)
-+ return omp_udr;
-+ if (omp_udr->ts.u.cl->length->expr_type != EXPR_CONSTANT)
-+ return omp_udr;
-+ if (ts->u.cl->length->expr_type != EXPR_CONSTANT)
-+ return omp_udr;
-+ if (omp_udr->ts.u.cl->length->ts.type != BT_INTEGER)
-+ return omp_udr;
-+ if (ts->u.cl->length->ts.type != BT_INTEGER)
-+ return omp_udr;
-+ if (gfc_compare_expr (omp_udr->ts.u.cl->length,
-+ ts->u.cl->length, INTRINSIC_EQ) != 0)
-+ continue;
-+ }
-+ return omp_udr;
-+ }
-+ }
-+ return NULL;
-+}
-+
- match
--gfc_match_omp_flush (void)
-+gfc_match_omp_declare_reduction (void)
- {
-- gfc_namelist *list = NULL;
-- gfc_match_omp_variable_list (" (", &list, true);
-+ match m;
-+ gfc_intrinsic_op op;
-+ char name[GFC_MAX_SYMBOL_LEN + 3];
-+ auto_vec<gfc_typespec, 5> tss;
-+ gfc_typespec ts;
-+ unsigned int i;
-+ gfc_symtree *st;
-+ locus where = gfc_current_locus;
-+ locus end_loc = gfc_current_locus;
-+ bool end_loc_set = false;
-+ gfc_omp_reduction_op rop = OMP_REDUCTION_NONE;
-+
-+ if (gfc_match_char ('(') != MATCH_YES)
-+ return MATCH_ERROR;
-+
-+ m = gfc_match (" %o : ", &op);
-+ if (m == MATCH_ERROR)
-+ return MATCH_ERROR;
-+ if (m == MATCH_YES)
-+ {
-+ snprintf (name, sizeof name, "operator %s", gfc_op2string (op));
-+ rop = (gfc_omp_reduction_op) op;
-+ }
-+ else
-+ {
-+ m = gfc_match_defined_op_name (name + 1, 1);
-+ if (m == MATCH_ERROR)
-+ return MATCH_ERROR;
-+ if (m == MATCH_YES)
-+ {
-+ name[0] = '.';
-+ strcat (name, ".");
-+ if (gfc_match (" : ") != MATCH_YES)
-+ return MATCH_ERROR;
-+ }
-+ else
-+ {
-+ if (gfc_match (" %n : ", name) != MATCH_YES)
-+ return MATCH_ERROR;
-+ }
-+ rop = OMP_REDUCTION_USER;
-+ }
-+
-+ m = gfc_match_type_spec (&ts);
-+ if (m != MATCH_YES)
-+ return MATCH_ERROR;
-+ /* Treat len=: the same as len=*. */
-+ if (ts.type == BT_CHARACTER)
-+ ts.deferred = false;
-+ tss.safe_push (ts);
-+
-+ while (gfc_match_char (',') == MATCH_YES)
-+ {
-+ m = gfc_match_type_spec (&ts);
-+ if (m != MATCH_YES)
-+ return MATCH_ERROR;
-+ tss.safe_push (ts);
-+ }
-+ if (gfc_match_char (':') != MATCH_YES)
-+ return MATCH_ERROR;
-+
-+ st = gfc_find_symtree (gfc_current_ns->omp_udr_root, name);
-+ for (i = 0; i < tss.length (); i++)
-+ {
-+ gfc_symtree *omp_out, *omp_in;
-+ gfc_symtree *omp_priv = NULL, *omp_orig = NULL;
-+ gfc_namespace *combiner_ns, *initializer_ns = NULL;
-+ gfc_omp_udr *prev_udr, *omp_udr;
-+ const char *predef_name = NULL;
-+
-+ omp_udr = gfc_get_omp_udr ();
-+ omp_udr->name = gfc_get_string (name);
-+ omp_udr->rop = rop;
-+ omp_udr->ts = tss[i];
-+ omp_udr->where = where;
-+
-+ gfc_current_ns = combiner_ns = gfc_get_namespace (gfc_current_ns, 1);
-+ combiner_ns->proc_name = combiner_ns->parent->proc_name;
-+
-+ gfc_get_sym_tree ("omp_out", combiner_ns, &omp_out, false);
-+ gfc_get_sym_tree ("omp_in", combiner_ns, &omp_in, false);
-+ combiner_ns->omp_udr_ns = 1;
-+ omp_out->n.sym->ts = tss[i];
-+ omp_in->n.sym->ts = tss[i];
-+ omp_out->n.sym->attr.omp_udr_artificial_var = 1;
-+ omp_in->n.sym->attr.omp_udr_artificial_var = 1;
-+ omp_out->n.sym->attr.flavor = FL_VARIABLE;
-+ omp_in->n.sym->attr.flavor = FL_VARIABLE;
-+ gfc_commit_symbols ();
-+ omp_udr->combiner_ns = combiner_ns;
-+ omp_udr->omp_out = omp_out->n.sym;
-+ omp_udr->omp_in = omp_in->n.sym;
-+
-+ locus old_loc = gfc_current_locus;
-+
-+ if (!match_udr_expr (omp_out, omp_in))
-+ {
-+ syntax:
-+ gfc_current_locus = old_loc;
-+ gfc_current_ns = combiner_ns->parent;
-+ gfc_free_omp_udr (omp_udr);
-+ return MATCH_ERROR;
-+ }
-+
-+ if (gfc_match (" initializer ( ") == MATCH_YES)
-+ {
-+ gfc_current_ns = combiner_ns->parent;
-+ initializer_ns = gfc_get_namespace (gfc_current_ns, 1);
-+ gfc_current_ns = initializer_ns;
-+ initializer_ns->proc_name = initializer_ns->parent->proc_name;
-+
-+ gfc_get_sym_tree ("omp_priv", initializer_ns, &omp_priv, false);
-+ gfc_get_sym_tree ("omp_orig", initializer_ns, &omp_orig, false);
-+ initializer_ns->omp_udr_ns = 1;
-+ omp_priv->n.sym->ts = tss[i];
-+ omp_orig->n.sym->ts = tss[i];
-+ omp_priv->n.sym->attr.omp_udr_artificial_var = 1;
-+ omp_orig->n.sym->attr.omp_udr_artificial_var = 1;
-+ omp_priv->n.sym->attr.flavor = FL_VARIABLE;
-+ omp_orig->n.sym->attr.flavor = FL_VARIABLE;
-+ gfc_commit_symbols ();
-+ omp_udr->initializer_ns = initializer_ns;
-+ omp_udr->omp_priv = omp_priv->n.sym;
-+ omp_udr->omp_orig = omp_orig->n.sym;
-+
-+ if (!match_udr_expr (omp_priv, omp_orig))
-+ goto syntax;
-+ }
-+
-+ gfc_current_ns = combiner_ns->parent;
-+ if (!end_loc_set)
-+ {
-+ end_loc_set = true;
-+ end_loc = gfc_current_locus;
-+ }
-+ gfc_current_locus = old_loc;
-+
-+ prev_udr = gfc_omp_udr_find (st, &tss[i]);
-+ if (gfc_omp_udr_predef (rop, name, &tss[i], &predef_name)
-+ /* Don't error on !$omp declare reduction (min : integer : ...)
-+ just yet, there could be integer :: min afterwards,
-+ making it valid. When the UDR is resolved, we'll get
-+ to it again. */
-+ && (rop != OMP_REDUCTION_USER || name[0] == '.'))
-+ {
-+ if (predef_name)
-+ gfc_error_now ("Redefinition of predefined %s "
-+ "!$OMP DECLARE REDUCTION at %L",
-+ predef_name, &where);
-+ else
-+ gfc_error_now ("Redefinition of predefined "
-+ "!$OMP DECLARE REDUCTION at %L", &where);
-+ }
-+ else if (prev_udr)
-+ {
-+ gfc_error_now ("Redefinition of !$OMP DECLARE REDUCTION at %L",
-+ &where);
-+ gfc_error_now ("Previous !$OMP DECLARE REDUCTION at %L",
-+ &prev_udr->where);
-+ }
-+ else if (st)
-+ {
-+ omp_udr->next = st->n.omp_udr;
-+ st->n.omp_udr = omp_udr;
-+ }
-+ else
-+ {
-+ st = gfc_new_symtree (&gfc_current_ns->omp_udr_root, name);
-+ st->n.omp_udr = omp_udr;
-+ }
-+ }
-+
-+ if (end_loc_set)
-+ {
-+ gfc_current_locus = end_loc;
-+ if (gfc_match_omp_eos () != MATCH_YES)
-+ {
-+ gfc_error ("Unexpected junk after !$OMP DECLARE REDUCTION at %C");
-+ gfc_current_locus = where;
-+ return MATCH_ERROR;
-+ }
-+
-+ return MATCH_YES;
-+ }
-+ gfc_clear_error ();
-+ return MATCH_ERROR;
-+}
-+
-+
-+match
-+gfc_match_omp_declare_target (void)
-+{
-+ locus old_loc;
-+ char n[GFC_MAX_SYMBOL_LEN+1];
-+ gfc_symbol *sym;
-+ match m;
-+ gfc_symtree *st;
-+
-+ old_loc = gfc_current_locus;
-+
-+ m = gfc_match (" (");
-+
-+ if (gfc_current_ns->proc_name
-+ && gfc_current_ns->proc_name->attr.if_source == IFSRC_IFBODY
-+ && m == MATCH_YES)
-+ {
-+ gfc_error ("Only the !$OMP DECLARE TARGET form without "
-+ "list is allowed in interface block at %C");
-+ goto cleanup;
-+ }
-+
-+ if (m == MATCH_NO
-+ && gfc_current_ns->proc_name
-+ && gfc_match_omp_eos () == MATCH_YES)
-+ {
-+ if (!gfc_add_omp_declare_target (&gfc_current_ns->proc_name->attr,
-+ gfc_current_ns->proc_name->name,
-+ &old_loc))
-+ goto cleanup;
-+ return MATCH_YES;
-+ }
-+
-+ if (m != MATCH_YES)
-+ return m;
-+
-+ for (;;)
-+ {
-+ m = gfc_match_symbol (&sym, 0);
-+ switch (m)
-+ {
-+ case MATCH_YES:
-+ if (sym->attr.in_common)
-+ gfc_error_now ("OMP DECLARE TARGET on a variable at %C is an "
-+ "element of a COMMON block");
-+ else if (!gfc_add_omp_declare_target (&sym->attr, sym->name,
-+ &sym->declared_at))
-+ goto cleanup;
-+ goto next_item;
-+ case MATCH_NO:
-+ break;
-+ case MATCH_ERROR:
-+ goto cleanup;
-+ }
-+
-+ m = gfc_match (" / %n /", n);
-+ if (m == MATCH_ERROR)
-+ goto cleanup;
-+ if (m == MATCH_NO || n[0] == '\0')
-+ goto syntax;
-+
-+ st = gfc_find_symtree (gfc_current_ns->common_root, n);
-+ if (st == NULL)
-+ {
-+ gfc_error ("COMMON block /%s/ not found at %C", n);
-+ goto cleanup;
-+ }
-+ st->n.common->omp_declare_target = 1;
-+ for (sym = st->n.common->head; sym; sym = sym->common_next)
-+ if (!gfc_add_omp_declare_target (&sym->attr, sym->name,
-+ &sym->declared_at))
-+ goto cleanup;
-+
-+ next_item:
-+ if (gfc_match_char (')') == MATCH_YES)
-+ break;
-+ if (gfc_match_char (',') != MATCH_YES)
-+ goto syntax;
-+ }
-+
- if (gfc_match_omp_eos () != MATCH_YES)
- {
-- gfc_error ("Unexpected junk after $OMP FLUSH statement at %C");
-- gfc_free_namelist (list);
-- return MATCH_ERROR;
-+ gfc_error ("Unexpected junk after !$OMP DECLARE TARGET at %C");
-+ goto cleanup;
- }
-- new_st.op = EXEC_OMP_FLUSH;
-- new_st.ext.omp_namelist = list;
- return MATCH_YES;
-+
-+syntax:
-+ gfc_error ("Syntax error in !$OMP DECLARE TARGET list at %C");
-+
-+cleanup:
-+ gfc_current_locus = old_loc;
-+ return MATCH_ERROR;
- }
-
-
-@@ -605,6 +1482,12 @@
- goto syntax;
- }
-
-+ if (gfc_match_omp_eos () != MATCH_YES)
-+ {
-+ gfc_error ("Unexpected junk after OMP THREADPRIVATE at %C");
-+ goto cleanup;
-+ }
-+
- return MATCH_YES;
-
- syntax:
-@@ -617,28 +1500,34 @@
-
-
- match
-+gfc_match_omp_parallel (void)
-+{
-+ return match_omp (EXEC_OMP_PARALLEL, OMP_PARALLEL_CLAUSES);
-+}
-+
-+
-+match
- gfc_match_omp_parallel_do (void)
- {
-- gfc_omp_clauses *c;
-- if (gfc_match_omp_clauses (&c, OMP_PARALLEL_CLAUSES | OMP_DO_CLAUSES)
-- != MATCH_YES)
-- return MATCH_ERROR;
-- new_st.op = EXEC_OMP_PARALLEL_DO;
-- new_st.ext.omp_clauses = c;
-- return MATCH_YES;
-+ return match_omp (EXEC_OMP_PARALLEL_DO,
-+ OMP_PARALLEL_CLAUSES | OMP_DO_CLAUSES);
- }
-
-
- match
-+gfc_match_omp_parallel_do_simd (void)
-+{
-+ return match_omp (EXEC_OMP_PARALLEL_DO_SIMD,
-+ (OMP_PARALLEL_CLAUSES | OMP_DO_CLAUSES | OMP_SIMD_CLAUSES)
-+ & ~OMP_CLAUSE_ORDERED);
-+}
-+
-+
-+match
- gfc_match_omp_parallel_sections (void)
- {
-- gfc_omp_clauses *c;
-- if (gfc_match_omp_clauses (&c, OMP_PARALLEL_CLAUSES | OMP_SECTIONS_CLAUSES)
-- != MATCH_YES)
-- return MATCH_ERROR;
-- new_st.op = EXEC_OMP_PARALLEL_SECTIONS;
-- new_st.ext.omp_clauses = c;
-- return MATCH_YES;
-+ return match_omp (EXEC_OMP_PARALLEL_SECTIONS,
-+ OMP_PARALLEL_CLAUSES | OMP_SECTIONS_CLAUSES);
- }
-
-
-@@ -645,12 +1534,7 @@
- match
- gfc_match_omp_parallel_workshare (void)
- {
-- gfc_omp_clauses *c;
-- if (gfc_match_omp_clauses (&c, OMP_PARALLEL_CLAUSES) != MATCH_YES)
-- return MATCH_ERROR;
-- new_st.op = EXEC_OMP_PARALLEL_WORKSHARE;
-- new_st.ext.omp_clauses = c;
-- return MATCH_YES;
-+ return match_omp (EXEC_OMP_PARALLEL_WORKSHARE, OMP_PARALLEL_CLAUSES);
- }
-
-
-@@ -657,29 +1541,172 @@
- match
- gfc_match_omp_sections (void)
- {
-- gfc_omp_clauses *c;
-- if (gfc_match_omp_clauses (&c, OMP_SECTIONS_CLAUSES) != MATCH_YES)
-- return MATCH_ERROR;
-- new_st.op = EXEC_OMP_SECTIONS;
-- new_st.ext.omp_clauses = c;
-- return MATCH_YES;
-+ return match_omp (EXEC_OMP_SECTIONS, OMP_SECTIONS_CLAUSES);
- }
-
-
- match
-+gfc_match_omp_simd (void)
-+{
-+ return match_omp (EXEC_OMP_SIMD, OMP_SIMD_CLAUSES);
-+}
-+
-+
-+match
- gfc_match_omp_single (void)
- {
-- gfc_omp_clauses *c;
-- if (gfc_match_omp_clauses (&c, OMP_CLAUSE_PRIVATE | OMP_CLAUSE_FIRSTPRIVATE)
-- != MATCH_YES)
-- return MATCH_ERROR;
-- new_st.op = EXEC_OMP_SINGLE;
-- new_st.ext.omp_clauses = c;
-+ return match_omp (EXEC_OMP_SINGLE,
-+ OMP_CLAUSE_PRIVATE | OMP_CLAUSE_FIRSTPRIVATE);
-+}
-+
-+
-+match
-+gfc_match_omp_task (void)
-+{
-+ return match_omp (EXEC_OMP_TASK, OMP_TASK_CLAUSES);
-+}
-+
-+
-+match
-+gfc_match_omp_taskwait (void)
-+{
-+ if (gfc_match_omp_eos () != MATCH_YES)
-+ {
-+ gfc_error ("Unexpected junk after TASKWAIT clause at %C");
-+ return MATCH_ERROR;
-+ }
-+ new_st.op = EXEC_OMP_TASKWAIT;
-+ new_st.ext.omp_clauses = NULL;
- return MATCH_YES;
- }
-
-
- match
-+gfc_match_omp_taskyield (void)
-+{
-+ if (gfc_match_omp_eos () != MATCH_YES)
-+ {
-+ gfc_error ("Unexpected junk after TASKYIELD clause at %C");
-+ return MATCH_ERROR;
-+ }
-+ new_st.op = EXEC_OMP_TASKYIELD;
-+ new_st.ext.omp_clauses = NULL;
-+ return MATCH_YES;
-+}
-+
-+
-+match
-+gfc_match_omp_target (void)
-+{
-+ return match_omp (EXEC_OMP_TARGET, OMP_TARGET_CLAUSES);
-+}
-+
-+
-+match
-+gfc_match_omp_target_data (void)
-+{
-+ return match_omp (EXEC_OMP_TARGET_DATA, OMP_TARGET_DATA_CLAUSES);
-+}
-+
-+
-+match
-+gfc_match_omp_target_teams (void)
-+{
-+ return match_omp (EXEC_OMP_TARGET_TEAMS,
-+ OMP_TARGET_CLAUSES | OMP_TEAMS_CLAUSES);
-+}
-+
-+
-+match
-+gfc_match_omp_target_teams_distribute (void)
-+{
-+ return match_omp (EXEC_OMP_TARGET_TEAMS_DISTRIBUTE,
-+ OMP_TARGET_CLAUSES | OMP_TEAMS_CLAUSES
-+ | OMP_DISTRIBUTE_CLAUSES);
-+}
-+
-+
-+match
-+gfc_match_omp_target_teams_distribute_parallel_do (void)
-+{
-+ return match_omp (EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO,
-+ OMP_TARGET_CLAUSES | OMP_TEAMS_CLAUSES
-+ | OMP_DISTRIBUTE_CLAUSES | OMP_PARALLEL_CLAUSES
-+ | OMP_DO_CLAUSES);
-+}
-+
-+
-+match
-+gfc_match_omp_target_teams_distribute_parallel_do_simd (void)
-+{
-+ return match_omp (EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD,
-+ (OMP_TARGET_CLAUSES | OMP_TEAMS_CLAUSES
-+ | OMP_DISTRIBUTE_CLAUSES | OMP_PARALLEL_CLAUSES
-+ | OMP_DO_CLAUSES | OMP_SIMD_CLAUSES)
-+ & ~OMP_CLAUSE_ORDERED);
-+}
-+
-+
-+match
-+gfc_match_omp_target_teams_distribute_simd (void)
-+{
-+ return match_omp (EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD,
-+ OMP_TARGET_CLAUSES | OMP_TEAMS_CLAUSES
-+ | OMP_DISTRIBUTE_CLAUSES | OMP_SIMD_CLAUSES);
-+}
-+
-+
-+match
-+gfc_match_omp_target_update (void)
-+{
-+ return match_omp (EXEC_OMP_TARGET_UPDATE, OMP_TARGET_UPDATE_CLAUSES);
-+}
-+
-+
-+match
-+gfc_match_omp_teams (void)
-+{
-+ return match_omp (EXEC_OMP_TEAMS, OMP_TEAMS_CLAUSES);
-+}
-+
-+
-+match
-+gfc_match_omp_teams_distribute (void)
-+{
-+ return match_omp (EXEC_OMP_TEAMS_DISTRIBUTE,
-+ OMP_TEAMS_CLAUSES | OMP_DISTRIBUTE_CLAUSES);
-+}
-+
-+
-+match
-+gfc_match_omp_teams_distribute_parallel_do (void)
-+{
-+ return match_omp (EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO,
-+ OMP_TEAMS_CLAUSES | OMP_DISTRIBUTE_CLAUSES
-+ | OMP_PARALLEL_CLAUSES | OMP_DO_CLAUSES);
-+}
-+
-+
-+match
-+gfc_match_omp_teams_distribute_parallel_do_simd (void)
-+{
-+ return match_omp (EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD,
-+ (OMP_TEAMS_CLAUSES | OMP_DISTRIBUTE_CLAUSES
-+ | OMP_PARALLEL_CLAUSES | OMP_DO_CLAUSES
-+ | OMP_SIMD_CLAUSES) & ~OMP_CLAUSE_ORDERED);
-+}
-+
-+
-+match
-+gfc_match_omp_teams_distribute_simd (void)
-+{
-+ return match_omp (EXEC_OMP_TEAMS_DISTRIBUTE_SIMD,
-+ OMP_TEAMS_CLAUSES | OMP_DISTRIBUTE_CLAUSES
-+ | OMP_SIMD_CLAUSES);
-+}
-+
-+
-+match
- gfc_match_omp_workshare (void)
- {
- if (gfc_match_omp_eos () != MATCH_YES)
-@@ -725,14 +1752,36 @@
- gfc_match_omp_atomic (void)
- {
- gfc_omp_atomic_op op = GFC_OMP_ATOMIC_UPDATE;
-- if (gfc_match ("% update") == MATCH_YES)
-- op = GFC_OMP_ATOMIC_UPDATE;
-- else if (gfc_match ("% read") == MATCH_YES)
-- op = GFC_OMP_ATOMIC_READ;
-- else if (gfc_match ("% write") == MATCH_YES)
-- op = GFC_OMP_ATOMIC_WRITE;
-- else if (gfc_match ("% capture") == MATCH_YES)
-- op = GFC_OMP_ATOMIC_CAPTURE;
-+ int seq_cst = 0;
-+ if (gfc_match ("% seq_cst") == MATCH_YES)
-+ seq_cst = 1;
-+ locus old_loc = gfc_current_locus;
-+ if (seq_cst && gfc_match_char (',') == MATCH_YES)
-+ seq_cst = 2;
-+ if (seq_cst == 2
-+ || gfc_match_space () == MATCH_YES)
-+ {
-+ gfc_gobble_whitespace ();
-+ if (gfc_match ("update") == MATCH_YES)
-+ op = GFC_OMP_ATOMIC_UPDATE;
-+ else if (gfc_match ("read") == MATCH_YES)
-+ op = GFC_OMP_ATOMIC_READ;
-+ else if (gfc_match ("write") == MATCH_YES)
-+ op = GFC_OMP_ATOMIC_WRITE;
-+ else if (gfc_match ("capture") == MATCH_YES)
-+ op = GFC_OMP_ATOMIC_CAPTURE;
-+ else
-+ {
-+ if (seq_cst == 2)
-+ gfc_current_locus = old_loc;
-+ goto finish;
-+ }
-+ if (!seq_cst
-+ && (gfc_match (", seq_cst") == MATCH_YES
-+ || gfc_match ("% seq_cst") == MATCH_YES))
-+ seq_cst = 1;
-+ }
-+ finish:
- if (gfc_match_omp_eos () != MATCH_YES)
- {
- gfc_error ("Unexpected junk after $OMP ATOMIC statement at %C");
-@@ -739,6 +1788,8 @@
- return MATCH_ERROR;
- }
- new_st.op = EXEC_OMP_ATOMIC;
-+ if (seq_cst)
-+ op = (gfc_omp_atomic_op) (op | GFC_OMP_ATOMIC_SEQ_CST);
- new_st.ext.omp_atomic = op;
- return MATCH_YES;
- }
-@@ -759,6 +1810,73 @@
-
-
- match
-+gfc_match_omp_taskgroup (void)
-+{
-+ if (gfc_match_omp_eos () != MATCH_YES)
-+ {
-+ gfc_error ("Unexpected junk after $OMP TASKGROUP statement at %C");
-+ return MATCH_ERROR;
-+ }
-+ new_st.op = EXEC_OMP_TASKGROUP;
-+ return MATCH_YES;
-+}
-+
-+
-+static enum gfc_omp_cancel_kind
-+gfc_match_omp_cancel_kind (void)
-+{
-+ if (gfc_match_space () != MATCH_YES)
-+ return OMP_CANCEL_UNKNOWN;
-+ if (gfc_match ("parallel") == MATCH_YES)
-+ return OMP_CANCEL_PARALLEL;
-+ if (gfc_match ("sections") == MATCH_YES)
-+ return OMP_CANCEL_SECTIONS;
-+ if (gfc_match ("do") == MATCH_YES)
-+ return OMP_CANCEL_DO;
-+ if (gfc_match ("taskgroup") == MATCH_YES)
-+ return OMP_CANCEL_TASKGROUP;
-+ return OMP_CANCEL_UNKNOWN;
-+}
-+
-+
-+match
-+gfc_match_omp_cancel (void)
-+{
-+ gfc_omp_clauses *c;
-+ enum gfc_omp_cancel_kind kind = gfc_match_omp_cancel_kind ();
-+ if (kind == OMP_CANCEL_UNKNOWN)
-+ return MATCH_ERROR;
-+ if (gfc_match_omp_clauses (&c, OMP_CLAUSE_IF, false) != MATCH_YES)
-+ return MATCH_ERROR;
-+ c->cancel = kind;
-+ new_st.op = EXEC_OMP_CANCEL;
-+ new_st.ext.omp_clauses = c;
-+ return MATCH_YES;
-+}
-+
-+
-+match
-+gfc_match_omp_cancellation_point (void)
-+{
-+ gfc_omp_clauses *c;
-+ enum gfc_omp_cancel_kind kind = gfc_match_omp_cancel_kind ();
-+ if (kind == OMP_CANCEL_UNKNOWN)
-+ return MATCH_ERROR;
-+ if (gfc_match_omp_eos () != MATCH_YES)
-+ {
-+ gfc_error ("Unexpected junk after $OMP CANCELLATION POINT statement "
-+ "at %C");
-+ return MATCH_ERROR;
-+ }
-+ c = gfc_get_omp_clauses ();
-+ c->cancel = kind;
-+ new_st.op = EXEC_OMP_CANCELLATION_POINT;
-+ new_st.ext.omp_clauses = c;
-+ return MATCH_YES;
-+}
-+
-+
-+match
- gfc_match_omp_end_nowait (void)
- {
- bool nowait = false;
-@@ -793,17 +1911,116 @@
- }
-
-
-+struct resolve_omp_udr_callback_data
-+{
-+ gfc_symbol *sym1, *sym2;
-+};
-+
-+
-+static int
-+resolve_omp_udr_callback (gfc_expr **e, int *, void *data)
-+{
-+ struct resolve_omp_udr_callback_data *rcd
-+ = (struct resolve_omp_udr_callback_data *) data;
-+ if ((*e)->expr_type == EXPR_VARIABLE
-+ && ((*e)->symtree->n.sym == rcd->sym1
-+ || (*e)->symtree->n.sym == rcd->sym2))
-+ {
-+ gfc_ref *ref = gfc_get_ref ();
-+ ref->type = REF_ARRAY;
-+ ref->u.ar.where = (*e)->where;
-+ ref->u.ar.as = (*e)->symtree->n.sym->as;
-+ ref->u.ar.type = AR_FULL;
-+ ref->u.ar.dimen = 0;
-+ ref->next = (*e)->ref;
-+ (*e)->ref = ref;
-+ }
-+ return 0;
-+}
-+
-+
-+static int
-+resolve_omp_udr_callback2 (gfc_expr **e, int *, void *)
-+{
-+ if ((*e)->expr_type == EXPR_FUNCTION
-+ && (*e)->value.function.isym == NULL)
-+ {
-+ gfc_symbol *sym = (*e)->symtree->n.sym;
-+ if (!sym->attr.intrinsic
-+ && sym->attr.if_source == IFSRC_UNKNOWN)
-+ gfc_error ("Implicitly declared function %s used in "
-+ "!$OMP DECLARE REDUCTION at %L ", sym->name, &(*e)->where);
-+ }
-+ return 0;
-+}
-+
-+
-+static gfc_code *
-+resolve_omp_udr_clause (gfc_omp_namelist *n, gfc_namespace *ns,
-+ gfc_symbol *sym1, gfc_symbol *sym2)
-+{
-+ gfc_code *copy;
-+ gfc_symbol sym1_copy, sym2_copy;
-+
-+ if (ns->code->op == EXEC_ASSIGN)
-+ {
-+ copy = gfc_get_code (EXEC_ASSIGN);
-+ copy->expr1 = gfc_copy_expr (ns->code->expr1);
-+ copy->expr2 = gfc_copy_expr (ns->code->expr2);
-+ }
-+ else
-+ {
-+ copy = gfc_get_code (EXEC_CALL);
-+ copy->symtree = ns->code->symtree;
-+ copy->ext.actual = gfc_copy_actual_arglist (ns->code->ext.actual);
-+ }
-+ copy->loc = ns->code->loc;
-+ sym1_copy = *sym1;
-+ sym2_copy = *sym2;
-+ *sym1 = *n->sym;
-+ *sym2 = *n->sym;
-+ sym1->name = sym1_copy.name;
-+ sym2->name = sym2_copy.name;
-+ ns->proc_name = ns->parent->proc_name;
-+ if (n->sym->attr.dimension)
-+ {
-+ struct resolve_omp_udr_callback_data rcd;
-+ rcd.sym1 = sym1;
-+ rcd.sym2 = sym2;
-+ gfc_code_walker (&copy, gfc_dummy_code_callback,
-+ resolve_omp_udr_callback, &rcd);
-+ }
-+ gfc_resolve_code (copy, gfc_current_ns);
-+ if (copy->op == EXEC_CALL && copy->resolved_isym == NULL)
-+ {
-+ gfc_symbol *sym = copy->resolved_sym;
-+ if (sym
-+ && !sym->attr.intrinsic
-+ && sym->attr.if_source == IFSRC_UNKNOWN)
-+ gfc_error ("Implicitly declared subroutine %s used in "
-+ "!$OMP DECLARE REDUCTION at %L ", sym->name,
-+ &copy->loc);
-+ }
-+ gfc_code_walker (&copy, gfc_dummy_code_callback,
-+ resolve_omp_udr_callback2, NULL);
-+ *sym1 = sym1_copy;
-+ *sym2 = sym2_copy;
-+ return copy;
-+}
-+
-+
- /* OpenMP directive resolving routines. */
-
- static void
--resolve_omp_clauses (gfc_code *code)
-+resolve_omp_clauses (gfc_code *code, locus *where,
-+ gfc_omp_clauses *omp_clauses, gfc_namespace *ns)
- {
-- gfc_omp_clauses *omp_clauses = code->ext.omp_clauses;
-- gfc_namelist *n;
-+ gfc_omp_namelist *n;
- int list;
- static const char *clause_names[]
- = { "PRIVATE", "FIRSTPRIVATE", "LASTPRIVATE", "COPYPRIVATE", "SHARED",
-- "COPYIN", "REDUCTION" };
-+ "COPYIN", "UNIFORM", "ALIGNED", "LINEAR", "DEPEND", "MAP",
-+ "TO", "FROM", "REDUCTION" };
-
- if (omp_clauses == NULL)
- return;
-@@ -847,8 +2064,15 @@
- for (n = omp_clauses->lists[list]; n; n = n->next)
- {
- n->sym->mark = 0;
-- if (n->sym->attr.flavor == FL_VARIABLE || n->sym->attr.proc_pointer)
-- continue;
-+ if (n->sym->attr.flavor == FL_VARIABLE
-+ || n->sym->attr.proc_pointer
-+ || (!code && (!n->sym->attr.dummy || n->sym->ns != ns)))
-+ {
-+ if (!code && (!n->sym->attr.dummy || n->sym->ns != ns))
-+ gfc_error ("Variable '%s' is not a dummy argument at %L",
-+ n->sym->name, where);
-+ continue;
-+ }
- if (n->sym->attr.flavor == FL_PROCEDURE
- && n->sym->result == n->sym
- && n->sym->attr.function)
-@@ -878,16 +2102,22 @@
- }
- }
- gfc_error ("Object '%s' is not a variable at %L", n->sym->name,
-- &code->loc);
-+ where);
- }
-
- for (list = 0; list < OMP_LIST_NUM; list++)
-- if (list != OMP_LIST_FIRSTPRIVATE && list != OMP_LIST_LASTPRIVATE)
-+ if (list != OMP_LIST_FIRSTPRIVATE
-+ && list != OMP_LIST_LASTPRIVATE
-+ && list != OMP_LIST_ALIGNED
-+ && list != OMP_LIST_DEPEND
-+ && list != OMP_LIST_MAP
-+ && list != OMP_LIST_FROM
-+ && list != OMP_LIST_TO)
- for (n = omp_clauses->lists[list]; n; n = n->next)
- {
- if (n->sym->mark)
- gfc_error ("Symbol '%s' present on multiple clauses at %L",
-- n->sym->name, &code->loc);
-+ n->sym->name, where);
- else
- n->sym->mark = 1;
- }
-@@ -898,7 +2128,7 @@
- if (n->sym->mark)
- {
- gfc_error ("Symbol '%s' present on multiple clauses at %L",
-- n->sym->name, &code->loc);
-+ n->sym->name, where);
- n->sym->mark = 0;
- }
-
-@@ -906,7 +2136,7 @@
- {
- if (n->sym->mark)
- gfc_error ("Symbol '%s' present on multiple clauses at %L",
-- n->sym->name, &code->loc);
-+ n->sym->name, where);
- else
- n->sym->mark = 1;
- }
-@@ -917,19 +2147,44 @@
- {
- if (n->sym->mark)
- gfc_error ("Symbol '%s' present on multiple clauses at %L",
-- n->sym->name, &code->loc);
-+ n->sym->name, where);
- else
- n->sym->mark = 1;
- }
-+
-+ for (n = omp_clauses->lists[OMP_LIST_ALIGNED]; n; n = n->next)
-+ n->sym->mark = 0;
-+
-+ for (n = omp_clauses->lists[OMP_LIST_ALIGNED]; n; n = n->next)
-+ {
-+ if (n->sym->mark)
-+ gfc_error ("Symbol '%s' present on multiple clauses at %L",
-+ n->sym->name, where);
-+ else
-+ n->sym->mark = 1;
-+ }
-+
-+ for (n = omp_clauses->lists[OMP_LIST_TO]; n; n = n->next)
-+ n->sym->mark = 0;
-+ for (n = omp_clauses->lists[OMP_LIST_FROM]; n; n = n->next)
-+ if (n->expr == NULL)
-+ n->sym->mark = 1;
-+ for (n = omp_clauses->lists[OMP_LIST_TO]; n; n = n->next)
-+ {
-+ if (n->expr == NULL && n->sym->mark)
-+ gfc_error ("Symbol '%s' present on both FROM and TO clauses at %L",
-+ n->sym->name, where);
-+ else
-+ n->sym->mark = 1;
-+ }
-+
- for (list = 0; list < OMP_LIST_NUM; list++)
- if ((n = omp_clauses->lists[list]) != NULL)
- {
- const char *name;
-
-- if (list < OMP_LIST_REDUCTION_FIRST)
-+ if (list < OMP_LIST_NUM)
- name = clause_names[list];
-- else if (list <= OMP_LIST_REDUCTION_LAST)
-- name = clause_names[OMP_LIST_REDUCTION_FIRST];
- else
- gcc_unreachable ();
-
-@@ -940,10 +2195,7 @@
- {
- if (!n->sym->attr.threadprivate)
- gfc_error ("Non-THREADPRIVATE object '%s' in COPYIN clause"
-- " at %L", n->sym->name, &code->loc);
-- if (n->sym->ts.type == BT_DERIVED && n->sym->ts.u.derived->attr.alloc_comp)
-- gfc_error ("COPYIN clause object '%s' at %L has ALLOCATABLE components",
-- n->sym->name, &code->loc);
-+ " at %L", n->sym->name, where);
- }
- break;
- case OMP_LIST_COPYPRIVATE:
-@@ -951,10 +2203,10 @@
- {
- if (n->sym->as && n->sym->as->type == AS_ASSUMED_SIZE)
- gfc_error ("Assumed size array '%s' in COPYPRIVATE clause "
-- "at %L", n->sym->name, &code->loc);
-- if (n->sym->ts.type == BT_DERIVED && n->sym->ts.u.derived->attr.alloc_comp)
-- gfc_error ("COPYPRIVATE clause object '%s' at %L has ALLOCATABLE components",
-- n->sym->name, &code->loc);
-+ "at %L", n->sym->name, where);
-+ if (n->sym->attr.pointer && n->sym->attr.intent == INTENT_IN)
-+ gfc_error ("INTENT(IN) POINTER '%s' in COPYPRIVATE clause "
-+ "at %L", n->sym->name, where);
- }
- break;
- case OMP_LIST_SHARED:
-@@ -962,96 +2214,286 @@
- {
- if (n->sym->attr.threadprivate)
- gfc_error ("THREADPRIVATE object '%s' in SHARED clause at "
-- "%L", n->sym->name, &code->loc);
-+ "%L", n->sym->name, where);
- if (n->sym->attr.cray_pointee)
- gfc_error ("Cray pointee '%s' in SHARED clause at %L",
-- n->sym->name, &code->loc);
-+ n->sym->name, where);
-+ if (n->sym->attr.associate_var)
-+ gfc_error ("ASSOCIATE name '%s' in SHARED clause at %L",
-+ n->sym->name, where);
- }
- break;
-+ case OMP_LIST_ALIGNED:
-+ for (; n != NULL; n = n->next)
-+ {
-+ if (!n->sym->attr.pointer
-+ && !n->sym->attr.allocatable
-+ && !n->sym->attr.cray_pointer
-+ && (n->sym->ts.type != BT_DERIVED
-+ || (n->sym->ts.u.derived->from_intmod
-+ != INTMOD_ISO_C_BINDING)
-+ || (n->sym->ts.u.derived->intmod_sym_id
-+ != ISOCBINDING_PTR)))
-+ gfc_error ("'%s' in ALIGNED clause must be POINTER, "
-+ "ALLOCATABLE, Cray pointer or C_PTR at %L",
-+ n->sym->name, where);
-+ else if (n->expr)
-+ {
-+ gfc_expr *expr = n->expr;
-+ int alignment = 0;
-+ if (!gfc_resolve_expr (expr)
-+ || expr->ts.type != BT_INTEGER
-+ || expr->rank != 0
-+ || gfc_extract_int (expr, &alignment)
-+ || alignment <= 0)
-+ gfc_error ("'%s' in ALIGNED clause at %L requires a scalar "
-+ "positive constant integer alignment "
-+ "expression", n->sym->name, where);
-+ }
-+ }
-+ break;
-+ case OMP_LIST_DEPEND:
-+ case OMP_LIST_MAP:
-+ case OMP_LIST_TO:
-+ case OMP_LIST_FROM:
-+ for (; n != NULL; n = n->next)
-+ if (n->expr)
-+ {
-+ if (!gfc_resolve_expr (n->expr)
-+ || n->expr->expr_type != EXPR_VARIABLE
-+ || n->expr->ref == NULL
-+ || n->expr->ref->next
-+ || n->expr->ref->type != REF_ARRAY)
-+ gfc_error ("'%s' in %s clause at %L is not a proper "
-+ "array section", n->sym->name, name, where);
-+ else if (n->expr->ref->u.ar.codimen)
-+ gfc_error ("Coarrays not supported in %s clause at %L",
-+ name, where);
-+ else
-+ {
-+ int i;
-+ gfc_array_ref *ar = &n->expr->ref->u.ar;
-+ for (i = 0; i < ar->dimen; i++)
-+ if (ar->stride[i])
-+ {
-+ gfc_error ("Stride should not be specified for "
-+ "array section in %s clause at %L",
-+ name, where);
-+ break;
-+ }
-+ else if (ar->dimen_type[i] != DIMEN_ELEMENT
-+ && ar->dimen_type[i] != DIMEN_RANGE)
-+ {
-+ gfc_error ("'%s' in %s clause at %L is not a "
-+ "proper array section",
-+ n->sym->name, name, where);
-+ break;
-+ }
-+ else if (list == OMP_LIST_DEPEND
-+ && ar->start[i]
-+ && ar->start[i]->expr_type == EXPR_CONSTANT
-+ && ar->end[i]
-+ && ar->end[i]->expr_type == EXPR_CONSTANT
-+ && mpz_cmp (ar->start[i]->value.integer,
-+ ar->end[i]->value.integer) > 0)
-+ {
-+ gfc_error ("'%s' in DEPEND clause at %L is a zero "
-+ "size array section", n->sym->name,
-+ where);
-+ break;
-+ }
-+ }
-+ }
-+ if (list != OMP_LIST_DEPEND)
-+ for (n = omp_clauses->lists[list]; n != NULL; n = n->next)
-+ {
-+ n->sym->attr.referenced = 1;
-+ if (n->sym->attr.threadprivate)
-+ gfc_error ("THREADPRIVATE object '%s' in %s clause at %L",
-+ n->sym->name, name, where);
-+ if (n->sym->attr.cray_pointee)
-+ gfc_error ("Cray pointee '%s' in %s clause at %L",
-+ n->sym->name, name, where);
-+ }
-+ break;
- default:
- for (; n != NULL; n = n->next)
- {
-+ bool bad = false;
- if (n->sym->attr.threadprivate)
- gfc_error ("THREADPRIVATE object '%s' in %s clause at %L",
-- n->sym->name, name, &code->loc);
-+ n->sym->name, name, where);
- if (n->sym->attr.cray_pointee)
- gfc_error ("Cray pointee '%s' in %s clause at %L",
-- n->sym->name, name, &code->loc);
-+ n->sym->name, name, where);
-+ if (n->sym->attr.associate_var)
-+ gfc_error ("ASSOCIATE name '%s' in %s clause at %L",
-+ n->sym->name, name, where);
- if (list != OMP_LIST_PRIVATE)
- {
-- if (n->sym->attr.pointer
-- && list >= OMP_LIST_REDUCTION_FIRST
-- && list <= OMP_LIST_REDUCTION_LAST)
-+ if (n->sym->attr.proc_pointer && list == OMP_LIST_REDUCTION)
-+ gfc_error ("Procedure pointer '%s' in %s clause at %L",
-+ n->sym->name, name, where);
-+ if (n->sym->attr.pointer && list == OMP_LIST_REDUCTION)
- gfc_error ("POINTER object '%s' in %s clause at %L",
-- n->sym->name, name, &code->loc);
-- /* Variables in REDUCTION-clauses must be of intrinsic type (flagged below). */
-- if ((list < OMP_LIST_REDUCTION_FIRST || list > OMP_LIST_REDUCTION_LAST)
-- && n->sym->ts.type == BT_DERIVED
-- && n->sym->ts.u.derived->attr.alloc_comp)
-- gfc_error ("%s clause object '%s' has ALLOCATABLE components at %L",
-- name, n->sym->name, &code->loc);
-- if (n->sym->attr.cray_pointer
-- && list >= OMP_LIST_REDUCTION_FIRST
-- && list <= OMP_LIST_REDUCTION_LAST)
-+ n->sym->name, name, where);
-+ if (n->sym->attr.cray_pointer && list == OMP_LIST_REDUCTION)
- gfc_error ("Cray pointer '%s' in %s clause at %L",
-- n->sym->name, name, &code->loc);
-+ n->sym->name, name, where);
- }
- if (n->sym->as && n->sym->as->type == AS_ASSUMED_SIZE)
- gfc_error ("Assumed size array '%s' in %s clause at %L",
-- n->sym->name, name, &code->loc);
-- if (n->sym->attr.in_namelist
-- && (list < OMP_LIST_REDUCTION_FIRST
-- || list > OMP_LIST_REDUCTION_LAST))
-+ n->sym->name, name, where);
-+ if (n->sym->attr.in_namelist && list != OMP_LIST_REDUCTION)
- gfc_error ("Variable '%s' in %s clause is used in "
- "NAMELIST statement at %L",
-- n->sym->name, name, &code->loc);
-+ n->sym->name, name, where);
-+ if (n->sym->attr.pointer && n->sym->attr.intent == INTENT_IN)
-+ switch (list)
-+ {
-+ case OMP_LIST_PRIVATE:
-+ case OMP_LIST_LASTPRIVATE:
-+ case OMP_LIST_LINEAR:
-+ /* case OMP_LIST_REDUCTION: */
-+ gfc_error ("INTENT(IN) POINTER '%s' in %s clause at %L",
-+ n->sym->name, name, where);
-+ break;
-+ default:
-+ break;
-+ }
- switch (list)
- {
-- case OMP_LIST_PLUS:
-- case OMP_LIST_MULT:
-- case OMP_LIST_SUB:
-- if (!gfc_numeric_ts (&n->sym->ts))
-- gfc_error ("%c REDUCTION variable '%s' at %L must be of numeric type, got %s",
-- list == OMP_LIST_PLUS ? '+'
-- : list == OMP_LIST_MULT ? '*' : '-',
-- n->sym->name, &code->loc,
-- gfc_typename (&n->sym->ts));
-+ case OMP_LIST_REDUCTION:
-+ switch (n->u.reduction_op)
-+ {
-+ case OMP_REDUCTION_PLUS:
-+ case OMP_REDUCTION_TIMES:
-+ case OMP_REDUCTION_MINUS:
-+ if (!gfc_numeric_ts (&n->sym->ts))
-+ bad = true;
-+ break;
-+ case OMP_REDUCTION_AND:
-+ case OMP_REDUCTION_OR:
-+ case OMP_REDUCTION_EQV:
-+ case OMP_REDUCTION_NEQV:
-+ if (n->sym->ts.type != BT_LOGICAL)
-+ bad = true;
-+ break;
-+ case OMP_REDUCTION_MAX:
-+ case OMP_REDUCTION_MIN:
-+ if (n->sym->ts.type != BT_INTEGER
-+ && n->sym->ts.type != BT_REAL)
-+ bad = true;
-+ break;
-+ case OMP_REDUCTION_IAND:
-+ case OMP_REDUCTION_IOR:
-+ case OMP_REDUCTION_IEOR:
-+ if (n->sym->ts.type != BT_INTEGER)
-+ bad = true;
-+ break;
-+ case OMP_REDUCTION_USER:
-+ bad = true;
-+ break;
-+ default:
-+ break;
-+ }
-+ if (!bad)
-+ n->udr = NULL;
-+ else
-+ {
-+ const char *udr_name = NULL;
-+ if (n->udr)
-+ {
-+ udr_name = n->udr->udr->name;
-+ n->udr->udr
-+ = gfc_find_omp_udr (NULL, udr_name,
-+ &n->sym->ts);
-+ if (n->udr->udr == NULL)
-+ {
-+ free (n->udr);
-+ n->udr = NULL;
-+ }
-+ }
-+ if (n->udr == NULL)
-+ {
-+ if (udr_name == NULL)
-+ switch (n->u.reduction_op)
-+ {
-+ case OMP_REDUCTION_PLUS:
-+ case OMP_REDUCTION_TIMES:
-+ case OMP_REDUCTION_MINUS:
-+ case OMP_REDUCTION_AND:
-+ case OMP_REDUCTION_OR:
-+ case OMP_REDUCTION_EQV:
-+ case OMP_REDUCTION_NEQV:
-+ udr_name = gfc_op2string ((gfc_intrinsic_op)
-+ n->u.reduction_op);
-+ break;
-+ case OMP_REDUCTION_MAX:
-+ udr_name = "max";
-+ break;
-+ case OMP_REDUCTION_MIN:
-+ udr_name = "min";
-+ break;
-+ case OMP_REDUCTION_IAND:
-+ udr_name = "iand";
-+ break;
-+ case OMP_REDUCTION_IOR:
-+ udr_name = "ior";
-+ break;
-+ case OMP_REDUCTION_IEOR:
-+ udr_name = "ieor";
-+ break;
-+ default:
-+ gcc_unreachable ();
-+ }
-+ gfc_error ("!$OMP DECLARE REDUCTION %s not found "
-+ "for type %s at %L", udr_name,
-+ gfc_typename (&n->sym->ts), where);
-+ }
-+ else
-+ {
-+ gfc_omp_udr *udr = n->udr->udr;
-+ n->u.reduction_op = OMP_REDUCTION_USER;
-+ n->udr->combiner
-+ = resolve_omp_udr_clause (n, udr->combiner_ns,
-+ udr->omp_out,
-+ udr->omp_in);
-+ if (udr->initializer_ns)
-+ n->udr->initializer
-+ = resolve_omp_udr_clause (n,
-+ udr->initializer_ns,
-+ udr->omp_priv,
-+ udr->omp_orig);
-+ }
-+ }
- break;
-- case OMP_LIST_AND:
-- case OMP_LIST_OR:
-- case OMP_LIST_EQV:
-- case OMP_LIST_NEQV:
-- if (n->sym->ts.type != BT_LOGICAL)
-- gfc_error ("%s REDUCTION variable '%s' must be LOGICAL "
-- "at %L",
-- list == OMP_LIST_AND ? ".AND."
-- : list == OMP_LIST_OR ? ".OR."
-- : list == OMP_LIST_EQV ? ".EQV." : ".NEQV.",
-- n->sym->name, &code->loc);
-- break;
-- case OMP_LIST_MAX:
-- case OMP_LIST_MIN:
-- if (n->sym->ts.type != BT_INTEGER
-- && n->sym->ts.type != BT_REAL)
-- gfc_error ("%s REDUCTION variable '%s' must be "
-- "INTEGER or REAL at %L",
-- list == OMP_LIST_MAX ? "MAX" : "MIN",
-- n->sym->name, &code->loc);
-- break;
-- case OMP_LIST_IAND:
-- case OMP_LIST_IOR:
-- case OMP_LIST_IEOR:
-+ case OMP_LIST_LINEAR:
- if (n->sym->ts.type != BT_INTEGER)
-- gfc_error ("%s REDUCTION variable '%s' must be INTEGER "
-- "at %L",
-- list == OMP_LIST_IAND ? "IAND"
-- : list == OMP_LIST_MULT ? "IOR" : "IEOR",
-- n->sym->name, &code->loc);
-+ gfc_error ("LINEAR variable '%s' must be INTEGER "
-+ "at %L", n->sym->name, where);
-+ else if (!code && !n->sym->attr.value)
-+ gfc_error ("LINEAR dummy argument '%s' must have VALUE "
-+ "attribute at %L", n->sym->name, where);
-+ else if (n->expr)
-+ {
-+ gfc_expr *expr = n->expr;
-+ if (!gfc_resolve_expr (expr)
-+ || expr->ts.type != BT_INTEGER
-+ || expr->rank != 0)
-+ gfc_error ("'%s' in LINEAR clause at %L requires "
-+ "a scalar integer linear-step expression",
-+ n->sym->name, where);
-+ else if (!code && expr->expr_type != EXPR_CONSTANT)
-+ gfc_error ("'%s' in LINEAR clause at %L requires "
-+ "a constant integer linear-step expression",
-+ n->sym->name, where);
-+ }
- break;
- /* Workaround for PR middle-end/26316, nothing really needs
- to be done here for OMP_LIST_PRIVATE. */
- case OMP_LIST_PRIVATE:
-- gcc_assert (code->op != EXEC_NOP);
-+ gcc_assert (code && code->op != EXEC_NOP);
- default:
- break;
- }
-@@ -1059,6 +2501,54 @@
- break;
- }
- }
-+ if (omp_clauses->safelen_expr)
-+ {
-+ gfc_expr *expr = omp_clauses->safelen_expr;
-+ if (!gfc_resolve_expr (expr)
-+ || expr->ts.type != BT_INTEGER || expr->rank != 0)
-+ gfc_error ("SAFELEN clause at %L requires a scalar "
-+ "INTEGER expression", &expr->where);
-+ }
-+ if (omp_clauses->simdlen_expr)
-+ {
-+ gfc_expr *expr = omp_clauses->simdlen_expr;
-+ if (!gfc_resolve_expr (expr)
-+ || expr->ts.type != BT_INTEGER || expr->rank != 0)
-+ gfc_error ("SIMDLEN clause at %L requires a scalar "
-+ "INTEGER expression", &expr->where);
-+ }
-+ if (omp_clauses->num_teams)
-+ {
-+ gfc_expr *expr = omp_clauses->num_teams;
-+ if (!gfc_resolve_expr (expr)
-+ || expr->ts.type != BT_INTEGER || expr->rank != 0)
-+ gfc_error ("NUM_TEAMS clause at %L requires a scalar "
-+ "INTEGER expression", &expr->where);
-+ }
-+ if (omp_clauses->device)
-+ {
-+ gfc_expr *expr = omp_clauses->device;
-+ if (!gfc_resolve_expr (expr)
-+ || expr->ts.type != BT_INTEGER || expr->rank != 0)
-+ gfc_error ("DEVICE clause at %L requires a scalar "
-+ "INTEGER expression", &expr->where);
-+ }
-+ if (omp_clauses->dist_chunk_size)
-+ {
-+ gfc_expr *expr = omp_clauses->dist_chunk_size;
-+ if (!gfc_resolve_expr (expr)
-+ || expr->ts.type != BT_INTEGER || expr->rank != 0)
-+ gfc_error ("DIST_SCHEDULE clause's chunk_size at %L requires "
-+ "a scalar INTEGER expression", &expr->where);
-+ }
-+ if (omp_clauses->thread_limit)
-+ {
-+ gfc_expr *expr = omp_clauses->thread_limit;
-+ if (!gfc_resolve_expr (expr)
-+ || expr->ts.type != BT_INTEGER || expr->rank != 0)
-+ gfc_error ("THREAD_LIMIT clause at %L requires a scalar "
-+ "INTEGER expression", &expr->where);
-+ }
- }
-
-
-@@ -1142,12 +2632,13 @@
- gfc_code *atomic_code = code;
- gfc_symbol *var;
- gfc_expr *expr2, *expr2_tmp;
-+ gfc_omp_atomic_op aop
-+ = (gfc_omp_atomic_op) (atomic_code->ext.omp_atomic & GFC_OMP_ATOMIC_MASK);
-
- code = code->block->next;
- gcc_assert (code->op == EXEC_ASSIGN);
-- gcc_assert ((atomic_code->ext.omp_atomic != GFC_OMP_ATOMIC_CAPTURE
-- && code->next == NULL)
-- || (atomic_code->ext.omp_atomic == GFC_OMP_ATOMIC_CAPTURE
-+ gcc_assert (((aop != GFC_OMP_ATOMIC_CAPTURE) && code->next == NULL)
-+ || ((aop == GFC_OMP_ATOMIC_CAPTURE)
- && code->next != NULL
- && code->next->op == EXEC_ASSIGN
- && code->next->next == NULL));
-@@ -1169,14 +2660,13 @@
- expr2 = is_conversion (code->expr2, false);
- if (expr2 == NULL)
- {
-- if (atomic_code->ext.omp_atomic == GFC_OMP_ATOMIC_READ
-- || atomic_code->ext.omp_atomic == GFC_OMP_ATOMIC_WRITE)
-+ if (aop == GFC_OMP_ATOMIC_READ || aop == GFC_OMP_ATOMIC_WRITE)
- expr2 = is_conversion (code->expr2, true);
- if (expr2 == NULL)
- expr2 = code->expr2;
- }
-
-- switch (atomic_code->ext.omp_atomic)
-+ switch (aop)
- {
- case GFC_OMP_ATOMIC_READ:
- if (expr2->expr_type != EXPR_VARIABLE
-@@ -1249,8 +2739,22 @@
- break;
- }
-
-- if (expr2->expr_type == EXPR_OP)
-+ if (var->attr.allocatable)
- {
-+ gfc_error ("!$OMP ATOMIC with ALLOCATABLE variable at %L",
-+ &code->loc);
-+ return;
-+ }
-+
-+ if (aop == GFC_OMP_ATOMIC_CAPTURE
-+ && code->next == NULL
-+ && code->expr2->rank == 0
-+ && !expr_references_sym (code->expr2, var, NULL))
-+ atomic_code->ext.omp_atomic
-+ = (gfc_omp_atomic_op) (atomic_code->ext.omp_atomic
-+ | GFC_OMP_ATOMIC_SWAP);
-+ else if (expr2->expr_type == EXPR_OP)
-+ {
- gfc_expr *v = NULL, *e, *c;
- gfc_intrinsic_op op = expr2->value.op.op;
- gfc_intrinsic_op alt_op = INTRINSIC_NONE;
-@@ -1420,11 +2924,18 @@
- && arg->expr->symtree->n.sym == var)
- var_arg = arg;
- else if (expr_references_sym (arg->expr, var, NULL))
-- gfc_error ("!$OMP ATOMIC intrinsic arguments except one must not "
-- "reference '%s' at %L", var->name, &arg->expr->where);
-+ {
-+ gfc_error ("!$OMP ATOMIC intrinsic arguments except one must "
-+ "not reference '%s' at %L",
-+ var->name, &arg->expr->where);
-+ return;
-+ }
- if (arg->expr->rank != 0)
-- gfc_error ("!$OMP ATOMIC intrinsic arguments must be scalar "
-- "at %L", &arg->expr->where);
-+ {
-+ gfc_error ("!$OMP ATOMIC intrinsic arguments must be scalar "
-+ "at %L", &arg->expr->where);
-+ return;
-+ }
- }
-
- if (var_arg == NULL)
-@@ -1447,10 +2958,10 @@
- }
- }
- else
-- gfc_error ("!$OMP ATOMIC assignment must have an operator or intrinsic "
-- "on right hand side at %L", &expr2->where);
-+ gfc_error ("!$OMP ATOMIC assignment must have an operator or "
-+ "intrinsic on right hand side at %L", &expr2->where);
-
-- if (atomic_code->ext.omp_atomic == GFC_OMP_ATOMIC_CAPTURE && code->next)
-+ if (aop == GFC_OMP_ATOMIC_CAPTURE && code->next)
- {
- code = code->next;
- if (code->expr1->expr_type != EXPR_VARIABLE
-@@ -1542,7 +3053,7 @@
- {
- struct omp_context ctx;
- gfc_omp_clauses *omp_clauses = code->ext.omp_clauses;
-- gfc_namelist *n;
-+ gfc_omp_namelist *n;
- int list;
-
- ctx.code = code;
-@@ -1552,13 +3063,38 @@
- omp_current_ctx = &ctx;
-
- for (list = 0; list < OMP_LIST_NUM; list++)
-- for (n = omp_clauses->lists[list]; n; n = n->next)
-- pointer_set_insert (ctx.sharing_clauses, n->sym);
-+ switch (list)
-+ {
-+ case OMP_LIST_SHARED:
-+ case OMP_LIST_PRIVATE:
-+ case OMP_LIST_FIRSTPRIVATE:
-+ case OMP_LIST_LASTPRIVATE:
-+ case OMP_LIST_REDUCTION:
-+ case OMP_LIST_LINEAR:
-+ for (n = omp_clauses->lists[list]; n; n = n->next)
-+ pointer_set_insert (ctx.sharing_clauses, n->sym);
-+ break;
-+ default:
-+ break;
-+ }
-
-- if (code->op == EXEC_OMP_PARALLEL_DO)
-- gfc_resolve_omp_do_blocks (code, ns);
-- else
-- gfc_resolve_blocks (code->block, ns);
-+ switch (code->op)
-+ {
-+ case EXEC_OMP_PARALLEL_DO:
-+ case EXEC_OMP_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
-+ gfc_resolve_omp_do_blocks (code, ns);
-+ break;
-+ default:
-+ gfc_resolve_blocks (code->block, ns);
-+ }
-
- omp_current_ctx = ctx.previous;
- pointer_set_destroy (ctx.sharing_clauses);
-@@ -1624,9 +3160,9 @@
- if (! pointer_set_insert (omp_current_ctx->private_iterators, sym))
- {
- gfc_omp_clauses *omp_clauses = omp_current_ctx->code->ext.omp_clauses;
-- gfc_namelist *p;
-+ gfc_omp_namelist *p;
-
-- p = gfc_get_namelist ();
-+ p = gfc_get_omp_namelist ();
- p->sym = sym;
- p->next = omp_clauses->lists[OMP_LIST_PRIVATE];
- omp_clauses->lists[OMP_LIST_PRIVATE] = p;
-@@ -1639,11 +3175,64 @@
- {
- gfc_code *do_code, *c;
- int list, i, collapse;
-- gfc_namelist *n;
-+ gfc_omp_namelist *n;
- gfc_symbol *dovar;
-+ const char *name;
-+ bool is_simd = false;
-
-+ switch (code->op)
-+ {
-+ case EXEC_OMP_DISTRIBUTE: name = "!$OMP DISTRIBUTE"; break;
-+ case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
-+ name = "!$OMP DISTRIBUTE PARALLEL DO";
-+ break;
-+ case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ name = "!$OMP DISTRIBUTE PARALLEL DO SIMD";
-+ is_simd = true;
-+ break;
-+ case EXEC_OMP_DISTRIBUTE_SIMD:
-+ name = "!$OMP DISTRIBUTE SIMD";
-+ is_simd = true;
-+ break;
-+ case EXEC_OMP_DO: name = "!$OMP DO"; break;
-+ case EXEC_OMP_DO_SIMD: name = "!$OMP DO SIMD"; is_simd = true; break;
-+ case EXEC_OMP_PARALLEL_DO: name = "!$OMP PARALLEL DO"; break;
-+ case EXEC_OMP_PARALLEL_DO_SIMD:
-+ name = "!$OMP PARALLEL DO SIMD";
-+ is_simd = true;
-+ break;
-+ case EXEC_OMP_SIMD: name = "!$OMP SIMD"; is_simd = true; break;
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
-+ name = "!$OMP TARGET TEAMS_DISTRIBUTE";
-+ break;
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ name = "!$OMP TARGET TEAMS DISTRIBUTE PARALLEL DO";
-+ break;
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ name = "!$OMP TARGET TEAMS DISTRIBUTE PARALLEL DO SIMD";
-+ is_simd = true;
-+ break;
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
-+ name = "!$OMP TARGET TEAMS DISTRIBUTE SIMD";
-+ is_simd = true;
-+ break;
-+ case EXEC_OMP_TEAMS_DISTRIBUTE: name = "!$OMP TEAMS_DISTRIBUTE"; break;
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ name = "!$OMP TEAMS DISTRIBUTE PARALLEL DO";
-+ break;
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ name = "!$OMP TEAMS DISTRIBUTE PARALLEL DO SIMD";
-+ is_simd = true;
-+ break;
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
-+ name = "!$OMP TEAMS DISTRIBUTE SIMD";
-+ is_simd = true;
-+ break;
-+ default: gcc_unreachable ();
-+ }
-+
- if (code->ext.omp_clauses)
-- resolve_omp_clauses (code);
-+ resolve_omp_clauses (code, &code->loc, code->ext.omp_clauses, NULL);
-
- do_code = code->block->next;
- collapse = code->ext.omp_clauses->collapse;
-@@ -1653,27 +3242,46 @@
- {
- if (do_code->op == EXEC_DO_WHILE)
- {
-- gfc_error ("!$OMP DO cannot be a DO WHILE or DO without loop control "
-- "at %L", &do_code->loc);
-+ gfc_error ("%s cannot be a DO WHILE or DO without loop control "
-+ "at %L", name, &do_code->loc);
- break;
- }
-+ if (do_code->op == EXEC_DO_CONCURRENT)
-+ {
-+ gfc_error ("%s cannot be a DO CONCURRENT loop at %L", name,
-+ &do_code->loc);
-+ break;
-+ }
- gcc_assert (do_code->op == EXEC_DO);
- if (do_code->ext.iterator->var->ts.type != BT_INTEGER)
-- gfc_error ("!$OMP DO iteration variable must be of type integer at %L",
-- &do_code->loc);
-+ gfc_error ("%s iteration variable must be of type integer at %L",
-+ name, &do_code->loc);
- dovar = do_code->ext.iterator->var->symtree->n.sym;
- if (dovar->attr.threadprivate)
-- gfc_error ("!$OMP DO iteration variable must not be THREADPRIVATE "
-- "at %L", &do_code->loc);
-+ gfc_error ("%s iteration variable must not be THREADPRIVATE "
-+ "at %L", name, &do_code->loc);
- if (code->ext.omp_clauses)
- for (list = 0; list < OMP_LIST_NUM; list++)
-- if (list != OMP_LIST_PRIVATE && list != OMP_LIST_LASTPRIVATE)
-+ if (!is_simd
-+ ? (list != OMP_LIST_PRIVATE && list != OMP_LIST_LASTPRIVATE)
-+ : code->ext.omp_clauses->collapse > 1
-+ ? (list != OMP_LIST_LASTPRIVATE)
-+ : (list != OMP_LIST_LINEAR))
- for (n = code->ext.omp_clauses->lists[list]; n; n = n->next)
- if (dovar == n->sym)
- {
-- gfc_error ("!$OMP DO iteration variable present on clause "
-- "other than PRIVATE or LASTPRIVATE at %L",
-- &do_code->loc);
-+ if (!is_simd)
-+ gfc_error ("%s iteration variable present on clause "
-+ "other than PRIVATE or LASTPRIVATE at %L",
-+ name, &do_code->loc);
-+ else if (code->ext.omp_clauses->collapse > 1)
-+ gfc_error ("%s iteration variable present on clause "
-+ "other than LASTPRIVATE at %L",
-+ name, &do_code->loc);
-+ else
-+ gfc_error ("%s iteration variable present on clause "
-+ "other than LINEAR at %L",
-+ name, &do_code->loc);
- break;
- }
- if (i > 1)
-@@ -1689,8 +3297,8 @@
- || gfc_find_sym_in_expr (ivar, do_code->ext.iterator->end)
- || gfc_find_sym_in_expr (ivar, do_code->ext.iterator->step))
- {
-- gfc_error ("!$OMP DO collapsed loops don't form rectangular iteration space at %L",
-- &do_code->loc);
-+ gfc_error ("%s collapsed loops don't form rectangular "
-+ "iteration space at %L", name, &do_code->loc);
- break;
- }
- if (j < i)
-@@ -1703,8 +3311,8 @@
- for (c = do_code->next; c; c = c->next)
- if (c->op != EXEC_NOP && c->op != EXEC_CONTINUE)
- {
-- gfc_error ("collapsed !$OMP DO loops not perfectly nested at %L",
-- &c->loc);
-+ gfc_error ("collapsed %s loops not perfectly nested at %L",
-+ name, &c->loc);
- break;
- }
- if (c)
-@@ -1712,8 +3320,8 @@
- do_code = do_code->block;
- if (do_code->op != EXEC_DO && do_code->op != EXEC_DO_WHILE)
- {
-- gfc_error ("not enough DO loops for collapsed !$OMP DO at %L",
-- &code->loc);
-+ gfc_error ("not enough DO loops for collapsed %s at %L",
-+ name, &code->loc);
- break;
- }
- do_code = do_code->next;
-@@ -1720,8 +3328,8 @@
- if (do_code == NULL
- || (do_code->op != EXEC_DO && do_code->op != EXEC_DO_WHILE))
- {
-- gfc_error ("not enough DO loops for collapsed !$OMP DO at %L",
-- &code->loc);
-+ gfc_error ("not enough DO loops for collapsed %s at %L",
-+ name, &code->loc);
- break;
- }
- }
-@@ -1739,20 +3347,49 @@
-
- switch (code->op)
- {
-+ case EXEC_OMP_DISTRIBUTE:
-+ case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_DISTRIBUTE_SIMD:
- case EXEC_OMP_DO:
-+ case EXEC_OMP_DO_SIMD:
- case EXEC_OMP_PARALLEL_DO:
-+ case EXEC_OMP_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_SIMD:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
- resolve_omp_do (code);
- break;
-- case EXEC_OMP_WORKSHARE:
-+ case EXEC_OMP_CANCEL:
- case EXEC_OMP_PARALLEL_WORKSHARE:
- case EXEC_OMP_PARALLEL:
- case EXEC_OMP_PARALLEL_SECTIONS:
- case EXEC_OMP_SECTIONS:
- case EXEC_OMP_SINGLE:
-+ case EXEC_OMP_TARGET:
-+ case EXEC_OMP_TARGET_DATA:
-+ case EXEC_OMP_TARGET_TEAMS:
- case EXEC_OMP_TASK:
-+ case EXEC_OMP_TEAMS:
-+ case EXEC_OMP_WORKSHARE:
- if (code->ext.omp_clauses)
-- resolve_omp_clauses (code);
-+ resolve_omp_clauses (code, &code->loc, code->ext.omp_clauses, NULL);
- break;
-+ case EXEC_OMP_TARGET_UPDATE:
-+ if (code->ext.omp_clauses)
-+ resolve_omp_clauses (code, &code->loc, code->ext.omp_clauses, NULL);
-+ if (code->ext.omp_clauses == NULL
-+ || (code->ext.omp_clauses->lists[OMP_LIST_TO] == NULL
-+ && code->ext.omp_clauses->lists[OMP_LIST_FROM] == NULL))
-+ gfc_error ("OMP TARGET UPDATE at %L requires at least one TO or "
-+ "FROM clause", &code->loc);
-+ break;
- case EXEC_OMP_ATOMIC:
- resolve_omp_atomic (code);
- break;
-@@ -1760,3 +3397,165 @@
- break;
- }
- }
-+
-+/* Resolve !$omp declare simd constructs in NS. */
-+
-+void
-+gfc_resolve_omp_declare_simd (gfc_namespace *ns)
-+{
-+ gfc_omp_declare_simd *ods;
-+
-+ for (ods = ns->omp_declare_simd; ods; ods = ods->next)
-+ {
-+ if (ods->proc_name != ns->proc_name)
-+ gfc_error ("!$OMP DECLARE SIMD should refer to containing procedure "
-+ "'%s' at %L", ns->proc_name->name, &ods->where);
-+ if (ods->clauses)
-+ resolve_omp_clauses (NULL, &ods->where, ods->clauses, ns);
-+ }
-+}
-+
-+struct omp_udr_callback_data
-+{
-+ gfc_omp_udr *omp_udr;
-+ bool is_initializer;
-+};
-+
-+static int
-+omp_udr_callback (gfc_expr **e, int *walk_subtrees ATTRIBUTE_UNUSED,
-+ void *data)
-+{
-+ struct omp_udr_callback_data *cd = (struct omp_udr_callback_data *) data;
-+ if ((*e)->expr_type == EXPR_VARIABLE)
-+ {
-+ if (cd->is_initializer)
-+ {
-+ if ((*e)->symtree->n.sym != cd->omp_udr->omp_priv
-+ && (*e)->symtree->n.sym != cd->omp_udr->omp_orig)
-+ gfc_error ("Variable other than OMP_PRIV or OMP_ORIG used in "
-+ "INITIALIZER clause of !$OMP DECLARE REDUCTION at %L",
-+ &(*e)->where);
-+ }
-+ else
-+ {
-+ if ((*e)->symtree->n.sym != cd->omp_udr->omp_out
-+ && (*e)->symtree->n.sym != cd->omp_udr->omp_in)
-+ gfc_error ("Variable other than OMP_OUT or OMP_IN used in "
-+ "combiner of !$OMP DECLARE REDUCTION at %L",
-+ &(*e)->where);
-+ }
-+ }
-+ return 0;
-+}
-+
-+/* Resolve !$omp declare reduction constructs. */
-+
-+static void
-+gfc_resolve_omp_udr (gfc_omp_udr *omp_udr)
-+{
-+ gfc_actual_arglist *a;
-+ const char *predef_name = NULL;
-+
-+ switch (omp_udr->rop)
-+ {
-+ case OMP_REDUCTION_PLUS:
-+ case OMP_REDUCTION_TIMES:
-+ case OMP_REDUCTION_MINUS:
-+ case OMP_REDUCTION_AND:
-+ case OMP_REDUCTION_OR:
-+ case OMP_REDUCTION_EQV:
-+ case OMP_REDUCTION_NEQV:
-+ case OMP_REDUCTION_MAX:
-+ case OMP_REDUCTION_USER:
-+ break;
-+ default:
-+ gfc_error ("Invalid operator for !$OMP DECLARE REDUCTION %s at %L",
-+ omp_udr->name, &omp_udr->where);
-+ return;
-+ }
-+
-+ if (gfc_omp_udr_predef (omp_udr->rop, omp_udr->name,
-+ &omp_udr->ts, &predef_name))
-+ {
-+ if (predef_name)
-+ gfc_error_now ("Redefinition of predefined %s "
-+ "!$OMP DECLARE REDUCTION at %L",
-+ predef_name, &omp_udr->where);
-+ else
-+ gfc_error_now ("Redefinition of predefined "
-+ "!$OMP DECLARE REDUCTION at %L", &omp_udr->where);
-+ return;
-+ }
-+
-+ if (omp_udr->ts.type == BT_CHARACTER
-+ && omp_udr->ts.u.cl->length
-+ && omp_udr->ts.u.cl->length->expr_type != EXPR_CONSTANT)
-+ {
-+ gfc_error ("CHARACTER length in !$OMP DECLARE REDUCTION %s not "
-+ "constant at %L", omp_udr->name, &omp_udr->where);
-+ return;
-+ }
-+
-+ struct omp_udr_callback_data cd;
-+ cd.omp_udr = omp_udr;
-+ cd.is_initializer = false;
-+ gfc_code_walker (&omp_udr->combiner_ns->code, gfc_dummy_code_callback,
-+ omp_udr_callback, &cd);
-+ if (omp_udr->combiner_ns->code->op == EXEC_CALL)
-+ {
-+ for (a = omp_udr->combiner_ns->code->ext.actual; a; a = a->next)
-+ if (a->expr == NULL)
-+ break;
-+ if (a)
-+ gfc_error ("Subroutine call with alternate returns in combiner "
-+ "of !$OMP DECLARE REDUCTION at %L",
-+ &omp_udr->combiner_ns->code->loc);
-+ }
-+ if (omp_udr->initializer_ns)
-+ {
-+ cd.is_initializer = true;
-+ gfc_code_walker (&omp_udr->initializer_ns->code, gfc_dummy_code_callback,
-+ omp_udr_callback, &cd);
-+ if (omp_udr->initializer_ns->code->op == EXEC_CALL)
-+ {
-+ for (a = omp_udr->initializer_ns->code->ext.actual; a; a = a->next)
-+ if (a->expr == NULL)
-+ break;
-+ if (a)
-+ gfc_error ("Subroutine call with alternate returns in "
-+ "INITIALIZER clause of !$OMP DECLARE REDUCTION "
-+ "at %L", &omp_udr->initializer_ns->code->loc);
-+ for (a = omp_udr->initializer_ns->code->ext.actual; a; a = a->next)
-+ if (a->expr
-+ && a->expr->expr_type == EXPR_VARIABLE
-+ && a->expr->symtree->n.sym == omp_udr->omp_priv
-+ && a->expr->ref == NULL)
-+ break;
-+ if (a == NULL)
-+ gfc_error ("One of actual subroutine arguments in INITIALIZER "
-+ "clause of !$OMP DECLARE REDUCTION must be OMP_PRIV "
-+ "at %L", &omp_udr->initializer_ns->code->loc);
-+ }
-+ }
-+ else if (omp_udr->ts.type == BT_DERIVED
-+ && !gfc_has_default_initializer (omp_udr->ts.u.derived))
-+ {
-+ gfc_error ("Missing INITIALIZER clause for !$OMP DECLARE REDUCTION "
-+ "of derived type without default initializer at %L",
-+ &omp_udr->where);
-+ return;
-+ }
-+}
-+
-+void
-+gfc_resolve_omp_udrs (gfc_symtree *st)
-+{
-+ gfc_omp_udr *omp_udr;
-+
-+ if (st == NULL)
-+ return;
-+ gfc_resolve_omp_udrs (st->left);
-+ gfc_resolve_omp_udrs (st->right);
-+ for (omp_udr = st->n.omp_udr; omp_udr; omp_udr = omp_udr->next)
-+ gfc_resolve_omp_udr (omp_udr);
-+}
-Index: gcc/fortran/trans-expr.c
-===================================================================
---- a/src/gcc/fortran/trans-expr.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/trans-expr.c (.../branches/gcc-4_9-branch)
-@@ -6472,6 +6472,20 @@
-
- /* Take the address of that value. */
- se->expr = gfc_build_addr_expr (NULL_TREE, var);
-+ if (expr->ts.type == BT_DERIVED && expr->rank
-+ && !gfc_is_finalizable (expr->ts.u.derived, NULL)
-+ && expr->ts.u.derived->attr.alloc_comp
-+ && expr->expr_type != EXPR_VARIABLE)
-+ {
-+ tree tmp;
-+
-+ tmp = build_fold_indirect_ref_loc (input_location, se->expr);
-+ tmp = gfc_deallocate_alloc_comp (expr->ts.u.derived, tmp, expr->rank);
-+
-+ /* The components shall be deallocated before
-+ their containing entity. */
-+ gfc_prepend_expr_to_block (&se->post, tmp);
-+ }
- }
-
-
-@@ -7251,7 +7265,7 @@
-
- res_desc = gfc_evaluate_now (desc, &se->pre);
- gfc_conv_descriptor_data_set (&se->pre, res_desc, null_pointer_node);
-- se->expr = gfc_build_addr_expr (TREE_TYPE (se->expr), res_desc);
-+ se->expr = gfc_build_addr_expr (NULL_TREE, res_desc);
-
- /* Free the lhs after the function call and copy the result data to
- the lhs descriptor. */
-Index: gcc/fortran/trans-array.c
-===================================================================
---- a/src/gcc/fortran/trans-array.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/trans-array.c (.../branches/gcc-4_9-branch)
-@@ -7389,8 +7389,8 @@
-
- /* This helper function calculates the size in words of a full array. */
-
--static tree
--get_full_array_size (stmtblock_t *block, tree decl, int rank)
-+tree
-+gfc_full_array_size (stmtblock_t *block, tree decl, int rank)
- {
- tree idx;
- tree nelems;
-@@ -7416,7 +7416,7 @@
-
- static tree
- duplicate_allocatable (tree dest, tree src, tree type, int rank,
-- bool no_malloc, tree str_sz)
-+ bool no_malloc, bool no_memcpy, tree str_sz)
- {
- tree tmp;
- tree size;
-@@ -7450,9 +7450,13 @@
- gfc_add_expr_to_block (&block, tmp);
- }
-
-- tmp = builtin_decl_explicit (BUILT_IN_MEMCPY);
-- tmp = build_call_expr_loc (input_location, tmp, 3, dest, src,
-- fold_convert (size_type_node, size));
-+ if (!no_memcpy)
-+ {
-+ tmp = builtin_decl_explicit (BUILT_IN_MEMCPY);
-+ tmp = build_call_expr_loc (input_location, tmp, 3, dest, src,
-+ fold_convert (size_type_node, size));
-+ gfc_add_expr_to_block (&block, tmp);
-+ }
- }
- else
- {
-@@ -7461,7 +7465,7 @@
-
- gfc_init_block (&block);
- if (rank)
-- nelems = get_full_array_size (&block, src, rank);
-+ nelems = gfc_full_array_size (&block, src, rank);
- else
- nelems = gfc_index_one_node;
-
-@@ -7481,14 +7485,17 @@
-
- /* We know the temporary and the value will be the same length,
- so can use memcpy. */
-- tmp = builtin_decl_explicit (BUILT_IN_MEMCPY);
-- tmp = build_call_expr_loc (input_location,
-- tmp, 3, gfc_conv_descriptor_data_get (dest),
-- gfc_conv_descriptor_data_get (src),
-- fold_convert (size_type_node, size));
-+ if (!no_memcpy)
-+ {
-+ tmp = builtin_decl_explicit (BUILT_IN_MEMCPY);
-+ tmp = build_call_expr_loc (input_location, tmp, 3,
-+ gfc_conv_descriptor_data_get (dest),
-+ gfc_conv_descriptor_data_get (src),
-+ fold_convert (size_type_node, size));
-+ gfc_add_expr_to_block (&block, tmp);
-+ }
- }
-
-- gfc_add_expr_to_block (&block, tmp);
- tmp = gfc_finish_block (&block);
-
- /* Null the destination if the source is null; otherwise do
-@@ -7510,7 +7517,8 @@
- tree
- gfc_duplicate_allocatable (tree dest, tree src, tree type, int rank)
- {
-- return duplicate_allocatable (dest, src, type, rank, false, NULL_TREE);
-+ return duplicate_allocatable (dest, src, type, rank, false, false,
-+ NULL_TREE);
- }
-
-
-@@ -7519,10 +7527,19 @@
- tree
- gfc_copy_allocatable_data (tree dest, tree src, tree type, int rank)
- {
-- return duplicate_allocatable (dest, src, type, rank, true, NULL_TREE);
-+ return duplicate_allocatable (dest, src, type, rank, true, false,
-+ NULL_TREE);
- }
-
-+/* Allocate dest to the same size as src, but don't copy anything. */
-
-+tree
-+gfc_duplicate_allocatable_nocopy (tree dest, tree src, tree type, int rank)
-+{
-+ return duplicate_allocatable (dest, src, type, rank, false, true, NULL_TREE);
-+}
-+
-+
- /* Recursively traverse an object of derived type, generating code to
- deallocate, nullify or copy allocatable components. This is the work horse
- function for the functions named in this enum. */
-@@ -7579,7 +7596,7 @@
- /* Use the descriptor for an allocatable array. Since this
- is a full array reference, we only need the descriptor
- information from dimension = rank. */
-- tmp = get_full_array_size (&fnblock, decl, rank);
-+ tmp = gfc_full_array_size (&fnblock, decl, rank);
- tmp = fold_build2_loc (input_location, MINUS_EXPR,
- gfc_array_index_type, tmp,
- gfc_index_one_node);
-@@ -7938,7 +7955,7 @@
- gfc_add_expr_to_block (&fnblock, tmp);
- size = size_of_string_in_bytes (c->ts.kind, len);
- tmp = duplicate_allocatable (dcmp, comp, ctype, rank,
-- false, size);
-+ false, false, size);
- gfc_add_expr_to_block (&fnblock, tmp);
- }
- else if (c->attr.allocatable && !c->attr.proc_pointer
-Index: gcc/fortran/symbol.c
-===================================================================
---- a/src/gcc/fortran/symbol.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/symbol.c (.../branches/gcc-4_9-branch)
-@@ -367,6 +367,7 @@
- *asynchronous = "ASYNCHRONOUS", *codimension = "CODIMENSION",
- *contiguous = "CONTIGUOUS", *generic = "GENERIC";
- static const char *threadprivate = "THREADPRIVATE";
-+ static const char *omp_declare_target = "OMP DECLARE TARGET";
-
- const char *a1, *a2;
- int standard;
-@@ -453,6 +454,7 @@
- conf (dummy, entry);
- conf (dummy, intrinsic);
- conf (dummy, threadprivate);
-+ conf (dummy, omp_declare_target);
- conf (pointer, target);
- conf (pointer, intrinsic);
- conf (pointer, elemental);
-@@ -495,6 +497,7 @@
- conf (in_equivalence, entry);
- conf (in_equivalence, allocatable);
- conf (in_equivalence, threadprivate);
-+ conf (in_equivalence, omp_declare_target);
-
- conf (dummy, result);
- conf (entry, result);
-@@ -543,6 +546,7 @@
- conf (cray_pointee, in_common);
- conf (cray_pointee, in_equivalence);
- conf (cray_pointee, threadprivate);
-+ conf (cray_pointee, omp_declare_target);
-
- conf (data, dummy);
- conf (data, function);
-@@ -596,6 +600,8 @@
-
- conf (proc_pointer, abstract)
-
-+ conf (entry, omp_declare_target)
-+
- a1 = gfc_code2string (flavors, attr->flavor);
-
- if (attr->in_namelist
-@@ -631,6 +637,7 @@
- conf2 (function);
- conf2 (subroutine);
- conf2 (threadprivate);
-+ conf2 (omp_declare_target);
-
- if (attr->access == ACCESS_PUBLIC || attr->access == ACCESS_PRIVATE)
- {
-@@ -712,6 +719,7 @@
- conf2 (subroutine);
- conf2 (threadprivate);
- conf2 (result);
-+ conf2 (omp_declare_target);
-
- if (attr->intent != INTENT_UNKNOWN)
- {
-@@ -1207,6 +1215,22 @@
-
-
- bool
-+gfc_add_omp_declare_target (symbol_attribute *attr, const char *name,
-+ locus *where)
-+{
-+
-+ if (check_used (attr, name, where))
-+ return false;
-+
-+ if (attr->omp_declare_target)
-+ return true;
-+
-+ attr->omp_declare_target = 1;
-+ return check_conflict (attr, name, where);
-+}
-+
-+
-+bool
- gfc_add_target (symbol_attribute *attr, locus *where)
- {
-
-@@ -1761,6 +1785,9 @@
- if (src->threadprivate
- && !gfc_add_threadprivate (dest, NULL, where))
- goto fail;
-+ if (src->omp_declare_target
-+ && !gfc_add_omp_declare_target (dest, NULL, where))
-+ goto fail;
- if (src->target && !gfc_add_target (dest, where))
- goto fail;
- if (src->dummy && !gfc_add_dummy (dest, NULL, where))
-@@ -2450,17 +2477,20 @@
- {
- gfc_user_op *uop;
- gfc_symtree *st;
-+ gfc_namespace *ns = gfc_current_ns;
-
-- st = gfc_find_symtree (gfc_current_ns->uop_root, name);
-+ if (ns->omp_udr_ns)
-+ ns = ns->parent;
-+ st = gfc_find_symtree (ns->uop_root, name);
- if (st != NULL)
- return st->n.uop;
-
-- st = gfc_new_symtree (&gfc_current_ns->uop_root, name);
-+ st = gfc_new_symtree (&ns->uop_root, name);
-
- uop = st->n.uop = XCNEW (gfc_user_op);
- uop->name = gfc_get_string (name);
- uop->access = ACCESS_UNKNOWN;
-- uop->ns = gfc_current_ns;
-+ uop->ns = ns;
-
- return uop;
- }
-@@ -2771,6 +2801,12 @@
- /* Try to find the symbol in ns. */
- st = gfc_find_symtree (ns->sym_root, name);
-
-+ if (st == NULL && ns->omp_udr_ns)
-+ {
-+ ns = ns->parent;
-+ st = gfc_find_symtree (ns->sym_root, name);
-+ }
-+
- if (st == NULL)
- {
- /* If not there, create a new symbol. */
-@@ -3269,6 +3305,23 @@
- }
-
-
-+/* Recursive function that deletes an entire tree and all the common
-+ head structures it points to. */
-+
-+static void
-+free_omp_udr_tree (gfc_symtree * omp_udr_tree)
-+{
-+ if (omp_udr_tree == NULL)
-+ return;
-+
-+ free_omp_udr_tree (omp_udr_tree->left);
-+ free_omp_udr_tree (omp_udr_tree->right);
-+
-+ gfc_free_omp_udr (omp_udr_tree->n.omp_udr);
-+ free (omp_udr_tree);
-+}
-+
-+
- /* Recursive function that deletes an entire tree and all the user
- operator nodes that it contains. */
-
-@@ -3465,9 +3518,11 @@
- free_sym_tree (ns->sym_root);
- free_uop_tree (ns->uop_root);
- free_common_tree (ns->common_root);
-+ free_omp_udr_tree (ns->omp_udr_root);
- free_tb_tree (ns->tb_sym_root);
- free_tb_tree (ns->tb_uop_root);
- gfc_free_finalizer_list (ns->finalizers);
-+ gfc_free_omp_declare_simd_list (ns->omp_declare_simd);
- gfc_free_charlen (ns->cl_list, NULL);
- free_st_labels (ns->st_labels);
-
-Index: gcc/fortran/decl.c
-===================================================================
---- a/src/gcc/fortran/decl.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/decl.c (.../branches/gcc-4_9-branch)
-@@ -1997,6 +1997,13 @@
- if (!gfc_notify_std (GFC_STD_GNU, "Old-style "
- "initialization at %C"))
- return MATCH_ERROR;
-+ else if (gfc_current_state () == COMP_DERIVED)
-+ {
-+ gfc_error ("Invalid old style initialization for derived type "
-+ "component at %C");
-+ m = MATCH_ERROR;
-+ goto cleanup;
-+ }
-
- return match_old_style_init (name);
- }
-Index: gcc/fortran/trans-array.h
-===================================================================
---- a/src/gcc/fortran/trans-array.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/trans-array.h (.../branches/gcc-4_9-branch)
-@@ -44,10 +44,14 @@
- /* Generate code to deallocate an array, if it is allocated. */
- tree gfc_trans_dealloc_allocated (tree, bool, gfc_expr *);
-
-+tree gfc_full_array_size (stmtblock_t *, tree, int);
-+
- tree gfc_duplicate_allocatable (tree dest, tree src, tree type, int rank);
-
- tree gfc_copy_allocatable_data (tree dest, tree src, tree type, int rank);
-
-+tree gfc_duplicate_allocatable_nocopy (tree, tree, tree, int);
-+
- tree gfc_nullify_alloc_comp (gfc_symbol *, tree, int);
-
- tree gfc_deallocate_alloc_comp (gfc_symbol *, tree, int);
-Index: gcc/fortran/dump-parse-tree.c
-===================================================================
---- a/src/gcc/fortran/dump-parse-tree.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/dump-parse-tree.c (.../branches/gcc-4_9-branch)
-@@ -1016,11 +1016,60 @@
- }
-
- static void
--show_namelist (gfc_namelist *n)
-+show_omp_namelist (int list_type, gfc_omp_namelist *n)
- {
-- for (; n->next; n = n->next)
-- fprintf (dumpfile, "%s,", n->sym->name);
-- fprintf (dumpfile, "%s", n->sym->name);
-+ for (; n; n = n->next)
-+ {
-+ if (list_type == OMP_LIST_REDUCTION)
-+ switch (n->u.reduction_op)
-+ {
-+ case OMP_REDUCTION_PLUS:
-+ case OMP_REDUCTION_TIMES:
-+ case OMP_REDUCTION_MINUS:
-+ case OMP_REDUCTION_AND:
-+ case OMP_REDUCTION_OR:
-+ case OMP_REDUCTION_EQV:
-+ case OMP_REDUCTION_NEQV:
-+ fprintf (dumpfile, "%s:",
-+ gfc_op2string ((gfc_intrinsic_op) n->u.reduction_op));
-+ break;
-+ case OMP_REDUCTION_MAX: fputs ("max:", dumpfile); break;
-+ case OMP_REDUCTION_MIN: fputs ("min:", dumpfile); break;
-+ case OMP_REDUCTION_IAND: fputs ("iand:", dumpfile); break;
-+ case OMP_REDUCTION_IOR: fputs ("ior:", dumpfile); break;
-+ case OMP_REDUCTION_IEOR: fputs ("ieor:", dumpfile); break;
-+ case OMP_REDUCTION_USER:
-+ if (n->udr)
-+ fprintf (dumpfile, "%s:", n->udr->udr->name);
-+ break;
-+ default: break;
-+ }
-+ else if (list_type == OMP_LIST_DEPEND)
-+ switch (n->u.depend_op)
-+ {
-+ case OMP_DEPEND_IN: fputs ("in:", dumpfile); break;
-+ case OMP_DEPEND_OUT: fputs ("out:", dumpfile); break;
-+ case OMP_DEPEND_INOUT: fputs ("inout:", dumpfile); break;
-+ default: break;
-+ }
-+ else if (list_type == OMP_LIST_MAP)
-+ switch (n->u.map_op)
-+ {
-+ case OMP_MAP_ALLOC: fputs ("alloc:", dumpfile); break;
-+ case OMP_MAP_TO: fputs ("to:", dumpfile); break;
-+ case OMP_MAP_FROM: fputs ("from:", dumpfile); break;
-+ case OMP_MAP_TOFROM: fputs ("tofrom:", dumpfile); break;
-+ default: break;
-+ }
-+ fprintf (dumpfile, "%s", n->sym->name);
-+ if (n->expr)
-+ {
-+ fputc (':', dumpfile);
-+ show_expr (n->expr);
-+ }
-+ if (n->next)
-+ fputc (',', dumpfile);
-+ }
- }
-
- /* Show a single OpenMP directive node and everything underneath it
-@@ -1036,18 +1085,24 @@
- {
- case EXEC_OMP_ATOMIC: name = "ATOMIC"; break;
- case EXEC_OMP_BARRIER: name = "BARRIER"; break;
-+ case EXEC_OMP_CANCEL: name = "CANCEL"; break;
-+ case EXEC_OMP_CANCELLATION_POINT: name = "CANCELLATION POINT"; break;
- case EXEC_OMP_CRITICAL: name = "CRITICAL"; break;
- case EXEC_OMP_FLUSH: name = "FLUSH"; break;
- case EXEC_OMP_DO: name = "DO"; break;
-+ case EXEC_OMP_DO_SIMD: name = "DO SIMD"; break;
- case EXEC_OMP_MASTER: name = "MASTER"; break;
- case EXEC_OMP_ORDERED: name = "ORDERED"; break;
- case EXEC_OMP_PARALLEL: name = "PARALLEL"; break;
- case EXEC_OMP_PARALLEL_DO: name = "PARALLEL DO"; break;
-+ case EXEC_OMP_PARALLEL_DO_SIMD: name = "PARALLEL DO SIMD"; break;
- case EXEC_OMP_PARALLEL_SECTIONS: name = "PARALLEL SECTIONS"; break;
- case EXEC_OMP_PARALLEL_WORKSHARE: name = "PARALLEL WORKSHARE"; break;
- case EXEC_OMP_SECTIONS: name = "SECTIONS"; break;
-+ case EXEC_OMP_SIMD: name = "SIMD"; break;
- case EXEC_OMP_SINGLE: name = "SINGLE"; break;
- case EXEC_OMP_TASK: name = "TASK"; break;
-+ case EXEC_OMP_TASKGROUP: name = "TASKGROUP"; break;
- case EXEC_OMP_TASKWAIT: name = "TASKWAIT"; break;
- case EXEC_OMP_TASKYIELD: name = "TASKYIELD"; break;
- case EXEC_OMP_WORKSHARE: name = "WORKSHARE"; break;
-@@ -1057,11 +1112,16 @@
- fprintf (dumpfile, "!$OMP %s", name);
- switch (c->op)
- {
-+ case EXEC_OMP_CANCEL:
-+ case EXEC_OMP_CANCELLATION_POINT:
- case EXEC_OMP_DO:
-+ case EXEC_OMP_DO_SIMD:
- case EXEC_OMP_PARALLEL:
- case EXEC_OMP_PARALLEL_DO:
-+ case EXEC_OMP_PARALLEL_DO_SIMD:
- case EXEC_OMP_PARALLEL_SECTIONS:
- case EXEC_OMP_SECTIONS:
-+ case EXEC_OMP_SIMD:
- case EXEC_OMP_SINGLE:
- case EXEC_OMP_WORKSHARE:
- case EXEC_OMP_PARALLEL_WORKSHARE:
-@@ -1076,7 +1136,7 @@
- if (c->ext.omp_namelist)
- {
- fputs (" (", dumpfile);
-- show_namelist (c->ext.omp_namelist);
-+ show_omp_namelist (OMP_LIST_NUM, c->ext.omp_namelist);
- fputc (')', dumpfile);
- }
- return;
-@@ -1091,6 +1151,23 @@
- {
- int list_type;
-
-+ switch (omp_clauses->cancel)
-+ {
-+ case OMP_CANCEL_UNKNOWN:
-+ break;
-+ case OMP_CANCEL_PARALLEL:
-+ fputs (" PARALLEL", dumpfile);
-+ break;
-+ case OMP_CANCEL_SECTIONS:
-+ fputs (" SECTIONS", dumpfile);
-+ break;
-+ case OMP_CANCEL_DO:
-+ fputs (" DO", dumpfile);
-+ break;
-+ case OMP_CANCEL_TASKGROUP:
-+ fputs (" TASKGROUP", dumpfile);
-+ break;
-+ }
- if (omp_clauses->if_expr)
- {
- fputs (" IF(", dumpfile);
-@@ -1156,45 +1233,83 @@
- if (omp_clauses->lists[list_type] != NULL
- && list_type != OMP_LIST_COPYPRIVATE)
- {
-- const char *type;
-- if (list_type >= OMP_LIST_REDUCTION_FIRST)
-+ const char *type = NULL;
-+ switch (list_type)
- {
-- switch (list_type)
-- {
-- case OMP_LIST_PLUS: type = "+"; break;
-- case OMP_LIST_MULT: type = "*"; break;
-- case OMP_LIST_SUB: type = "-"; break;
-- case OMP_LIST_AND: type = ".AND."; break;
-- case OMP_LIST_OR: type = ".OR."; break;
-- case OMP_LIST_EQV: type = ".EQV."; break;
-- case OMP_LIST_NEQV: type = ".NEQV."; break;
-- case OMP_LIST_MAX: type = "MAX"; break;
-- case OMP_LIST_MIN: type = "MIN"; break;
-- case OMP_LIST_IAND: type = "IAND"; break;
-- case OMP_LIST_IOR: type = "IOR"; break;
-- case OMP_LIST_IEOR: type = "IEOR"; break;
-- default:
-- gcc_unreachable ();
-- }
-- fprintf (dumpfile, " REDUCTION(%s:", type);
-+ case OMP_LIST_PRIVATE: type = "PRIVATE"; break;
-+ case OMP_LIST_FIRSTPRIVATE: type = "FIRSTPRIVATE"; break;
-+ case OMP_LIST_LASTPRIVATE: type = "LASTPRIVATE"; break;
-+ case OMP_LIST_SHARED: type = "SHARED"; break;
-+ case OMP_LIST_COPYIN: type = "COPYIN"; break;
-+ case OMP_LIST_UNIFORM: type = "UNIFORM"; break;
-+ case OMP_LIST_ALIGNED: type = "ALIGNED"; break;
-+ case OMP_LIST_LINEAR: type = "LINEAR"; break;
-+ case OMP_LIST_REDUCTION: type = "REDUCTION"; break;
-+ case OMP_LIST_DEPEND: type = "DEPEND"; break;
-+ default:
-+ gcc_unreachable ();
- }
-- else
-- {
-- switch (list_type)
-- {
-- case OMP_LIST_PRIVATE: type = "PRIVATE"; break;
-- case OMP_LIST_FIRSTPRIVATE: type = "FIRSTPRIVATE"; break;
-- case OMP_LIST_LASTPRIVATE: type = "LASTPRIVATE"; break;
-- case OMP_LIST_SHARED: type = "SHARED"; break;
-- case OMP_LIST_COPYIN: type = "COPYIN"; break;
-- default:
-- gcc_unreachable ();
-- }
-- fprintf (dumpfile, " %s(", type);
-- }
-- show_namelist (omp_clauses->lists[list_type]);
-+ fprintf (dumpfile, " %s(", type);
-+ show_omp_namelist (list_type, omp_clauses->lists[list_type]);
- fputc (')', dumpfile);
- }
-+ if (omp_clauses->safelen_expr)
-+ {
-+ fputs (" SAFELEN(", dumpfile);
-+ show_expr (omp_clauses->safelen_expr);
-+ fputc (')', dumpfile);
-+ }
-+ if (omp_clauses->simdlen_expr)
-+ {
-+ fputs (" SIMDLEN(", dumpfile);
-+ show_expr (omp_clauses->simdlen_expr);
-+ fputc (')', dumpfile);
-+ }
-+ if (omp_clauses->inbranch)
-+ fputs (" INBRANCH", dumpfile);
-+ if (omp_clauses->notinbranch)
-+ fputs (" NOTINBRANCH", dumpfile);
-+ if (omp_clauses->proc_bind != OMP_PROC_BIND_UNKNOWN)
-+ {
-+ const char *type;
-+ switch (omp_clauses->proc_bind)
-+ {
-+ case OMP_PROC_BIND_MASTER: type = "MASTER"; break;
-+ case OMP_PROC_BIND_SPREAD: type = "SPREAD"; break;
-+ case OMP_PROC_BIND_CLOSE: type = "CLOSE"; break;
-+ default:
-+ gcc_unreachable ();
-+ }
-+ fprintf (dumpfile, " PROC_BIND(%s)", type);
-+ }
-+ if (omp_clauses->num_teams)
-+ {
-+ fputs (" NUM_TEAMS(", dumpfile);
-+ show_expr (omp_clauses->num_teams);
-+ fputc (')', dumpfile);
-+ }
-+ if (omp_clauses->device)
-+ {
-+ fputs (" DEVICE(", dumpfile);
-+ show_expr (omp_clauses->device);
-+ fputc (')', dumpfile);
-+ }
-+ if (omp_clauses->thread_limit)
-+ {
-+ fputs (" THREAD_LIMIT(", dumpfile);
-+ show_expr (omp_clauses->thread_limit);
-+ fputc (')', dumpfile);
-+ }
-+ if (omp_clauses->dist_sched_kind != OMP_SCHED_NONE)
-+ {
-+ fprintf (dumpfile, " DIST_SCHEDULE (static");
-+ if (omp_clauses->dist_chunk_size)
-+ {
-+ fputc (',', dumpfile);
-+ show_expr (omp_clauses->dist_chunk_size);
-+ }
-+ fputc (')', dumpfile);
-+ }
- }
- fputc ('\n', dumpfile);
- if (c->op == EXEC_OMP_SECTIONS || c->op == EXEC_OMP_PARALLEL_SECTIONS)
-@@ -1214,6 +1329,7 @@
- show_code (level + 1, c->block->next);
- if (c->op == EXEC_OMP_ATOMIC)
- return;
-+ fputc ('\n', dumpfile);
- code_indent (level, 0);
- fprintf (dumpfile, "!$OMP END %s", name);
- if (omp_clauses != NULL)
-@@ -1221,7 +1337,8 @@
- if (omp_clauses->lists[OMP_LIST_COPYPRIVATE])
- {
- fputs (" COPYPRIVATE(", dumpfile);
-- show_namelist (omp_clauses->lists[OMP_LIST_COPYPRIVATE]);
-+ show_omp_namelist (OMP_LIST_COPYPRIVATE,
-+ omp_clauses->lists[OMP_LIST_COPYPRIVATE]);
- fputc (')', dumpfile);
- }
- else if (omp_clauses->nowait)
-@@ -2195,19 +2312,25 @@
- break;
-
- case EXEC_OMP_ATOMIC:
-+ case EXEC_OMP_CANCEL:
-+ case EXEC_OMP_CANCELLATION_POINT:
- case EXEC_OMP_BARRIER:
- case EXEC_OMP_CRITICAL:
- case EXEC_OMP_FLUSH:
- case EXEC_OMP_DO:
-+ case EXEC_OMP_DO_SIMD:
- case EXEC_OMP_MASTER:
- case EXEC_OMP_ORDERED:
- case EXEC_OMP_PARALLEL:
- case EXEC_OMP_PARALLEL_DO:
-+ case EXEC_OMP_PARALLEL_DO_SIMD:
- case EXEC_OMP_PARALLEL_SECTIONS:
- case EXEC_OMP_PARALLEL_WORKSHARE:
- case EXEC_OMP_SECTIONS:
-+ case EXEC_OMP_SIMD:
- case EXEC_OMP_SINGLE:
- case EXEC_OMP_TASK:
-+ case EXEC_OMP_TASKGROUP:
- case EXEC_OMP_TASKWAIT:
- case EXEC_OMP_TASKYIELD:
- case EXEC_OMP_WORKSHARE:
-Index: gcc/fortran/trans-common.c
-===================================================================
---- a/src/gcc/fortran/trans-common.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/trans-common.c (.../branches/gcc-4_9-branch)
-@@ -456,6 +456,11 @@
- if (com->threadprivate)
- DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
-
-+ if (com->omp_declare_target)
-+ DECL_ATTRIBUTES (decl)
-+ = tree_cons (get_identifier ("omp declare target"),
-+ NULL_TREE, DECL_ATTRIBUTES (decl));
-+
- /* Place the back end declaration for this common block in
- GLOBAL_BINDING_LEVEL. */
- gfc_map_of_all_commons[identifier] = pushdecl_top_level (decl);
-@@ -705,6 +710,7 @@
- TREE_ADDRESSABLE (var_decl) = 1;
- /* Fake variables are not visible from other translation units. */
- TREE_PUBLIC (var_decl) = 0;
-+ gfc_finish_decl_attrs (var_decl, &s->sym->attr);
-
- /* To preserve identifier names in COMMON, chain to procedure
- scope unless at top level in a module definition. */
-Index: gcc/fortran/cpp.c
-===================================================================
---- a/src/gcc/fortran/cpp.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/cpp.c (.../branches/gcc-4_9-branch)
-@@ -171,7 +171,7 @@
- cpp_define (pfile, "_LANGUAGE_FORTRAN=1");
-
- if (gfc_option.gfc_flag_openmp)
-- cpp_define (pfile, "_OPENMP=201107");
-+ cpp_define (pfile, "_OPENMP=201307");
-
- /* The defines below are necessary for the TARGET_* macros.
-
-Index: gcc/fortran/trans-openmp.c
-===================================================================
---- a/src/gcc/fortran/trans-openmp.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/trans-openmp.c (.../branches/gcc-4_9-branch)
-@@ -53,9 +53,13 @@
- if (TREE_CODE (type) == POINTER_TYPE)
- {
- /* Array POINTER/ALLOCATABLE have aggregate types, all user variables
-- that have POINTER_TYPE type and don't have GFC_POINTER_TYPE_P
-- set are supposed to be privatized by reference. */
-- if (GFC_POINTER_TYPE_P (type))
-+ that have POINTER_TYPE type and aren't scalar pointers, scalar
-+ allocatables, Cray pointees or C pointers are supposed to be
-+ privatized by reference. */
-+ if (GFC_DECL_GET_SCALAR_POINTER (decl)
-+ || GFC_DECL_GET_SCALAR_ALLOCATABLE (decl)
-+ || GFC_DECL_CRAY_POINTEE (decl)
-+ || VOID_TYPE_P (TREE_TYPE (TREE_TYPE (decl))))
- return false;
-
- if (!DECL_ARTIFICIAL (decl)
-@@ -77,6 +81,19 @@
- enum omp_clause_default_kind
- gfc_omp_predetermined_sharing (tree decl)
- {
-+ /* Associate names preserve the association established during ASSOCIATE.
-+ As they are implemented either as pointers to the selector or array
-+ descriptor and shouldn't really change in the ASSOCIATE region,
-+ this decl can be either shared or firstprivate. If it is a pointer,
-+ use firstprivate, as it is cheaper that way, otherwise make it shared. */
-+ if (GFC_DECL_ASSOCIATE_VAR_P (decl))
-+ {
-+ if (TREE_CODE (TREE_TYPE (decl)) == POINTER_TYPE)
-+ return OMP_CLAUSE_DEFAULT_FIRSTPRIVATE;
-+ else
-+ return OMP_CLAUSE_DEFAULT_SHARED;
-+ }
-+
- if (DECL_ARTIFICIAL (decl)
- && ! GFC_DECL_RESULT (decl)
- && ! (DECL_LANG_SPECIFIC (decl)
-@@ -135,6 +152,41 @@
- return decl;
- }
-
-+/* Return true if TYPE has any allocatable components. */
-+
-+static bool
-+gfc_has_alloc_comps (tree type, tree decl)
-+{
-+ tree field, ftype;
-+
-+ if (POINTER_TYPE_P (type))
-+ {
-+ if (GFC_DECL_GET_SCALAR_ALLOCATABLE (decl))
-+ type = TREE_TYPE (type);
-+ else if (GFC_DECL_GET_SCALAR_POINTER (decl))
-+ return false;
-+ }
-+
-+ while (GFC_DESCRIPTOR_TYPE_P (type) || GFC_ARRAY_TYPE_P (type))
-+ type = gfc_get_element_type (type);
-+
-+ if (TREE_CODE (type) != RECORD_TYPE)
-+ return false;
-+
-+ for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
-+ {
-+ ftype = TREE_TYPE (field);
-+ if (GFC_DECL_GET_SCALAR_ALLOCATABLE (field))
-+ return true;
-+ if (GFC_DESCRIPTOR_TYPE_P (ftype)
-+ && GFC_TYPE_ARRAY_AKIND (ftype) == GFC_ARRAY_ALLOCATABLE)
-+ return true;
-+ if (gfc_has_alloc_comps (ftype, field))
-+ return true;
-+ }
-+ return false;
-+}
-+
- /* Return true if DECL in private clause needs
- OMP_CLAUSE_PRIVATE_OUTER_REF on the private clause. */
- bool
-@@ -146,9 +198,230 @@
- && GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ALLOCATABLE)
- return true;
-
-+ if (GFC_DECL_GET_SCALAR_ALLOCATABLE (decl))
-+ return true;
-+
-+ if (gfc_omp_privatize_by_reference (decl))
-+ type = TREE_TYPE (type);
-+
-+ if (gfc_has_alloc_comps (type, decl))
-+ return true;
-+
- return false;
- }
-
-+/* Callback for gfc_omp_unshare_expr. */
-+
-+static tree
-+gfc_omp_unshare_expr_r (tree *tp, int *walk_subtrees, void *)
-+{
-+ tree t = *tp;
-+ enum tree_code code = TREE_CODE (t);
-+
-+ /* Stop at types, decls, constants like copy_tree_r. */
-+ if (TREE_CODE_CLASS (code) == tcc_type
-+ || TREE_CODE_CLASS (code) == tcc_declaration
-+ || TREE_CODE_CLASS (code) == tcc_constant
-+ || code == BLOCK)
-+ *walk_subtrees = 0;
-+ else if (handled_component_p (t)
-+ || TREE_CODE (t) == MEM_REF)
-+ {
-+ *tp = unshare_expr (t);
-+ *walk_subtrees = 0;
-+ }
-+
-+ return NULL_TREE;
-+}
-+
-+/* Unshare in expr anything that the FE which normally doesn't
-+ care much about tree sharing (because during gimplification
-+ everything is unshared) could cause problems with tree sharing
-+ at omp-low.c time. */
-+
-+static tree
-+gfc_omp_unshare_expr (tree expr)
-+{
-+ walk_tree (&expr, gfc_omp_unshare_expr_r, NULL, NULL);
-+ return expr;
-+}
-+
-+enum walk_alloc_comps
-+{
-+ WALK_ALLOC_COMPS_DTOR,
-+ WALK_ALLOC_COMPS_DEFAULT_CTOR,
-+ WALK_ALLOC_COMPS_COPY_CTOR
-+};
-+
-+/* Handle allocatable components in OpenMP clauses. */
-+
-+static tree
-+gfc_walk_alloc_comps (tree decl, tree dest, tree var,
-+ enum walk_alloc_comps kind)
-+{
-+ stmtblock_t block, tmpblock;
-+ tree type = TREE_TYPE (decl), then_b, tem, field;
-+ gfc_init_block (&block);
-+
-+ if (GFC_ARRAY_TYPE_P (type) || GFC_DESCRIPTOR_TYPE_P (type))
-+ {
-+ if (GFC_DESCRIPTOR_TYPE_P (type))
-+ {
-+ gfc_init_block (&tmpblock);
-+ tem = gfc_full_array_size (&tmpblock, decl,
-+ GFC_TYPE_ARRAY_RANK (type));
-+ then_b = gfc_finish_block (&tmpblock);
-+ gfc_add_expr_to_block (&block, gfc_omp_unshare_expr (then_b));
-+ tem = gfc_omp_unshare_expr (tem);
-+ tem = fold_build2_loc (input_location, MINUS_EXPR,
-+ gfc_array_index_type, tem,
-+ gfc_index_one_node);
-+ }
-+ else
-+ {
-+ if (!TYPE_DOMAIN (type)
-+ || TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL_TREE
-+ || TYPE_MIN_VALUE (TYPE_DOMAIN (type)) == error_mark_node
-+ || TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == error_mark_node)
-+ {
-+ tem = fold_build2 (EXACT_DIV_EXPR, sizetype,
-+ TYPE_SIZE_UNIT (type),
-+ TYPE_SIZE_UNIT (TREE_TYPE (type)));
-+ tem = size_binop (MINUS_EXPR, tem, size_one_node);
-+ }
-+ else
-+ tem = array_type_nelts (type);
-+ tem = fold_convert (gfc_array_index_type, tem);
-+ }
-+
-+ tree nelems = gfc_evaluate_now (tem, &block);
-+ tree index = gfc_create_var (gfc_array_index_type, "S");
-+
-+ gfc_init_block (&tmpblock);
-+ tem = gfc_conv_array_data (decl);
-+ tree declvar = build_fold_indirect_ref_loc (input_location, tem);
-+ tree declvref = gfc_build_array_ref (declvar, index, NULL);
-+ tree destvar, destvref = NULL_TREE;
-+ if (dest)
-+ {
-+ tem = gfc_conv_array_data (dest);
-+ destvar = build_fold_indirect_ref_loc (input_location, tem);
-+ destvref = gfc_build_array_ref (destvar, index, NULL);
-+ }
-+ gfc_add_expr_to_block (&tmpblock,
-+ gfc_walk_alloc_comps (declvref, destvref,
-+ var, kind));
-+
-+ gfc_loopinfo loop;
-+ gfc_init_loopinfo (&loop);
-+ loop.dimen = 1;
-+ loop.from[0] = gfc_index_zero_node;
-+ loop.loopvar[0] = index;
-+ loop.to[0] = nelems;
-+ gfc_trans_scalarizing_loops (&loop, &tmpblock);
-+ gfc_add_block_to_block (&block, &loop.pre);
-+ return gfc_finish_block (&block);
-+ }
-+ else if (GFC_DECL_GET_SCALAR_ALLOCATABLE (var))
-+ {
-+ decl = build_fold_indirect_ref_loc (input_location, decl);
-+ if (dest)
-+ dest = build_fold_indirect_ref_loc (input_location, dest);
-+ type = TREE_TYPE (decl);
-+ }
-+
-+ gcc_assert (TREE_CODE (type) == RECORD_TYPE);
-+ for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
-+ {
-+ tree ftype = TREE_TYPE (field);
-+ tree declf, destf = NULL_TREE;
-+ bool has_alloc_comps = gfc_has_alloc_comps (ftype, field);
-+ if ((!GFC_DESCRIPTOR_TYPE_P (ftype)
-+ || GFC_TYPE_ARRAY_AKIND (ftype) != GFC_ARRAY_ALLOCATABLE)
-+ && !GFC_DECL_GET_SCALAR_ALLOCATABLE (field)
-+ && !has_alloc_comps)
-+ continue;
-+ declf = fold_build3_loc (input_location, COMPONENT_REF, ftype,
-+ decl, field, NULL_TREE);
-+ if (dest)
-+ destf = fold_build3_loc (input_location, COMPONENT_REF, ftype,
-+ dest, field, NULL_TREE);
-+
-+ tem = NULL_TREE;
-+ switch (kind)
-+ {
-+ case WALK_ALLOC_COMPS_DTOR:
-+ break;
-+ case WALK_ALLOC_COMPS_DEFAULT_CTOR:
-+ if (GFC_DESCRIPTOR_TYPE_P (ftype)
-+ && GFC_TYPE_ARRAY_AKIND (ftype) == GFC_ARRAY_ALLOCATABLE)
-+ {
-+ gfc_add_modify (&block, unshare_expr (destf),
-+ unshare_expr (declf));
-+ tem = gfc_duplicate_allocatable_nocopy
-+ (destf, declf, ftype,
-+ GFC_TYPE_ARRAY_RANK (ftype));
-+ }
-+ else if (GFC_DECL_GET_SCALAR_ALLOCATABLE (field))
-+ tem = gfc_duplicate_allocatable_nocopy (destf, declf, ftype, 0);
-+ break;
-+ case WALK_ALLOC_COMPS_COPY_CTOR:
-+ if (GFC_DESCRIPTOR_TYPE_P (ftype)
-+ && GFC_TYPE_ARRAY_AKIND (ftype) == GFC_ARRAY_ALLOCATABLE)
-+ tem = gfc_duplicate_allocatable (destf, declf, ftype,
-+ GFC_TYPE_ARRAY_RANK (ftype));
-+ else if (GFC_DECL_GET_SCALAR_ALLOCATABLE (field))
-+ tem = gfc_duplicate_allocatable (destf, declf, ftype, 0);
-+ break;
-+ }
-+ if (tem)
-+ gfc_add_expr_to_block (&block, gfc_omp_unshare_expr (tem));
-+ if (has_alloc_comps)
-+ {
-+ gfc_init_block (&tmpblock);
-+ gfc_add_expr_to_block (&tmpblock,
-+ gfc_walk_alloc_comps (declf, destf,
-+ field, kind));
-+ then_b = gfc_finish_block (&tmpblock);
-+ if (GFC_DESCRIPTOR_TYPE_P (ftype)
-+ && GFC_TYPE_ARRAY_AKIND (ftype) == GFC_ARRAY_ALLOCATABLE)
-+ tem = gfc_conv_descriptor_data_get (unshare_expr (declf));
-+ else if (GFC_DECL_GET_SCALAR_ALLOCATABLE (field))
-+ tem = unshare_expr (declf);
-+ else
-+ tem = NULL_TREE;
-+ if (tem)
-+ {
-+ tem = fold_convert (pvoid_type_node, tem);
-+ tem = fold_build2_loc (input_location, NE_EXPR,
-+ boolean_type_node, tem,
-+ null_pointer_node);
-+ then_b = build3_loc (input_location, COND_EXPR, void_type_node,
-+ tem, then_b,
-+ build_empty_stmt (input_location));
-+ }
-+ gfc_add_expr_to_block (&block, then_b);
-+ }
-+ if (kind == WALK_ALLOC_COMPS_DTOR)
-+ {
-+ if (GFC_DESCRIPTOR_TYPE_P (ftype)
-+ && GFC_TYPE_ARRAY_AKIND (ftype) == GFC_ARRAY_ALLOCATABLE)
-+ {
-+ tem = gfc_trans_dealloc_allocated (unshare_expr (declf),
-+ false, NULL);
-+ gfc_add_expr_to_block (&block, gfc_omp_unshare_expr (tem));
-+ }
-+ else if (GFC_DECL_GET_SCALAR_ALLOCATABLE (field))
-+ {
-+ tem = gfc_call_free (unshare_expr (declf));
-+ gfc_add_expr_to_block (&block, gfc_omp_unshare_expr (tem));
-+ }
-+ }
-+ }
-+
-+ return gfc_finish_block (&block);
-+}
-+
- /* Return code to initialize DECL with its default constructor, or
- NULL if there's nothing to do. */
-
-@@ -155,21 +428,34 @@
- tree
- gfc_omp_clause_default_ctor (tree clause, tree decl, tree outer)
- {
-- tree type = TREE_TYPE (decl), rank, size, esize, ptr, cond, then_b, else_b;
-+ tree type = TREE_TYPE (decl), size, ptr, cond, then_b, else_b;
- stmtblock_t block, cond_block;
-
-- if (! GFC_DESCRIPTOR_TYPE_P (type)
-- || GFC_TYPE_ARRAY_AKIND (type) != GFC_ARRAY_ALLOCATABLE)
-- return NULL;
-+ gcc_assert (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_PRIVATE
-+ || OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_LASTPRIVATE
-+ || OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_LINEAR
-+ || OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_REDUCTION);
-
-- if (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_REDUCTION)
-- return NULL;
-+ if ((! GFC_DESCRIPTOR_TYPE_P (type)
-+ || GFC_TYPE_ARRAY_AKIND (type) != GFC_ARRAY_ALLOCATABLE)
-+ && !GFC_DECL_GET_SCALAR_ALLOCATABLE (OMP_CLAUSE_DECL (clause)))
-+ {
-+ if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause)))
-+ {
-+ gcc_assert (outer);
-+ gfc_start_block (&block);
-+ tree tem = gfc_walk_alloc_comps (outer, decl,
-+ OMP_CLAUSE_DECL (clause),
-+ WALK_ALLOC_COMPS_DEFAULT_CTOR);
-+ gfc_add_expr_to_block (&block, tem);
-+ return gfc_finish_block (&block);
-+ }
-+ return NULL_TREE;
-+ }
-
-- gcc_assert (outer != NULL);
-- gcc_assert (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_PRIVATE
-- || OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_LASTPRIVATE);
-+ gcc_assert (outer != NULL_TREE);
-
-- /* Allocatable arrays in PRIVATE clauses need to be set to
-+ /* Allocatable arrays and scalars in PRIVATE clauses need to be set to
- "not currently allocated" allocation status if outer
- array is "not currently allocated", otherwise should be allocated. */
- gfc_start_block (&block);
-@@ -176,38 +462,71 @@
-
- gfc_init_block (&cond_block);
-
-- gfc_add_modify (&cond_block, decl, outer);
-- rank = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (type) - 1];
-- size = gfc_conv_descriptor_ubound_get (decl, rank);
-- size = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type,
-- size, gfc_conv_descriptor_lbound_get (decl, rank));
-- size = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
-- size, gfc_index_one_node);
-- if (GFC_TYPE_ARRAY_RANK (type) > 1)
-- size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
-- size, gfc_conv_descriptor_stride_get (decl, rank));
-- esize = fold_convert (gfc_array_index_type,
-- TYPE_SIZE_UNIT (gfc_get_element_type (type)));
-- size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
-- size, esize);
-- size = gfc_evaluate_now (fold_convert (size_type_node, size), &cond_block);
--
-+ if (GFC_DESCRIPTOR_TYPE_P (type))
-+ {
-+ gfc_add_modify (&cond_block, decl, outer);
-+ tree rank = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (type) - 1];
-+ size = gfc_conv_descriptor_ubound_get (decl, rank);
-+ size = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type,
-+ size,
-+ gfc_conv_descriptor_lbound_get (decl, rank));
-+ size = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
-+ size, gfc_index_one_node);
-+ if (GFC_TYPE_ARRAY_RANK (type) > 1)
-+ size = fold_build2_loc (input_location, MULT_EXPR,
-+ gfc_array_index_type, size,
-+ gfc_conv_descriptor_stride_get (decl, rank));
-+ tree esize = fold_convert (gfc_array_index_type,
-+ TYPE_SIZE_UNIT (gfc_get_element_type (type)));
-+ size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
-+ size, esize);
-+ size = unshare_expr (size);
-+ size = gfc_evaluate_now (fold_convert (size_type_node, size),
-+ &cond_block);
-+ }
-+ else
-+ size = fold_convert (size_type_node, TYPE_SIZE_UNIT (TREE_TYPE (type)));
- ptr = gfc_create_var (pvoid_type_node, NULL);
- gfc_allocate_using_malloc (&cond_block, ptr, size, NULL_TREE);
-- gfc_conv_descriptor_data_set (&cond_block, decl, ptr);
--
-+ if (GFC_DESCRIPTOR_TYPE_P (type))
-+ gfc_conv_descriptor_data_set (&cond_block, unshare_expr (decl), ptr);
-+ else
-+ gfc_add_modify (&cond_block, unshare_expr (decl),
-+ fold_convert (TREE_TYPE (decl), ptr));
-+ if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause)))
-+ {
-+ tree tem = gfc_walk_alloc_comps (outer, decl,
-+ OMP_CLAUSE_DECL (clause),
-+ WALK_ALLOC_COMPS_DEFAULT_CTOR);
-+ gfc_add_expr_to_block (&cond_block, tem);
-+ }
- then_b = gfc_finish_block (&cond_block);
-
-- gfc_init_block (&cond_block);
-- gfc_conv_descriptor_data_set (&cond_block, decl, null_pointer_node);
-- else_b = gfc_finish_block (&cond_block);
-+ /* Reduction clause requires allocated ALLOCATABLE. */
-+ if (OMP_CLAUSE_CODE (clause) != OMP_CLAUSE_REDUCTION)
-+ {
-+ gfc_init_block (&cond_block);
-+ if (GFC_DESCRIPTOR_TYPE_P (type))
-+ gfc_conv_descriptor_data_set (&cond_block, unshare_expr (decl),
-+ null_pointer_node);
-+ else
-+ gfc_add_modify (&cond_block, unshare_expr (decl),
-+ build_zero_cst (TREE_TYPE (decl)));
-+ else_b = gfc_finish_block (&cond_block);
-
-- cond = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
-- fold_convert (pvoid_type_node,
-- gfc_conv_descriptor_data_get (outer)),
-- null_pointer_node);
-- gfc_add_expr_to_block (&block, build3_loc (input_location, COND_EXPR,
-- void_type_node, cond, then_b, else_b));
-+ tree tem = fold_convert (pvoid_type_node,
-+ GFC_DESCRIPTOR_TYPE_P (type)
-+ ? gfc_conv_descriptor_data_get (outer) : outer);
-+ tem = unshare_expr (tem);
-+ cond = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
-+ tem, null_pointer_node);
-+ gfc_add_expr_to_block (&block,
-+ build3_loc (input_location, COND_EXPR,
-+ void_type_node, cond, then_b,
-+ else_b));
-+ }
-+ else
-+ gfc_add_expr_to_block (&block, then_b);
-
- return gfc_finish_block (&block);
- }
-@@ -217,15 +536,29 @@
- tree
- gfc_omp_clause_copy_ctor (tree clause, tree dest, tree src)
- {
-- tree type = TREE_TYPE (dest), ptr, size, esize, rank, call;
-+ tree type = TREE_TYPE (dest), ptr, size, call;
- tree cond, then_b, else_b;
- stmtblock_t block, cond_block;
-
-- if (! GFC_DESCRIPTOR_TYPE_P (type)
-- || GFC_TYPE_ARRAY_AKIND (type) != GFC_ARRAY_ALLOCATABLE)
-- return build2_v (MODIFY_EXPR, dest, src);
-+ gcc_assert (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_FIRSTPRIVATE
-+ || OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_LINEAR);
-
-- gcc_assert (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_FIRSTPRIVATE);
-+ if ((! GFC_DESCRIPTOR_TYPE_P (type)
-+ || GFC_TYPE_ARRAY_AKIND (type) != GFC_ARRAY_ALLOCATABLE)
-+ && !GFC_DECL_GET_SCALAR_ALLOCATABLE (OMP_CLAUSE_DECL (clause)))
-+ {
-+ if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause)))
-+ {
-+ gfc_start_block (&block);
-+ gfc_add_modify (&block, dest, src);
-+ tree tem = gfc_walk_alloc_comps (src, dest, OMP_CLAUSE_DECL (clause),
-+ WALK_ALLOC_COMPS_COPY_CTOR);
-+ gfc_add_expr_to_block (&block, tem);
-+ return gfc_finish_block (&block);
-+ }
-+ else
-+ return build2_v (MODIFY_EXPR, dest, src);
-+ }
-
- /* Allocatable arrays in FIRSTPRIVATE clauses need to be allocated
- and copied from SRC. */
-@@ -234,110 +567,554 @@
- gfc_init_block (&cond_block);
-
- gfc_add_modify (&cond_block, dest, src);
-- rank = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (type) - 1];
-- size = gfc_conv_descriptor_ubound_get (dest, rank);
-- size = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type,
-- size, gfc_conv_descriptor_lbound_get (dest, rank));
-- size = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
-- size, gfc_index_one_node);
-- if (GFC_TYPE_ARRAY_RANK (type) > 1)
-- size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
-- size, gfc_conv_descriptor_stride_get (dest, rank));
-- esize = fold_convert (gfc_array_index_type,
-- TYPE_SIZE_UNIT (gfc_get_element_type (type)));
-- size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
-- size, esize);
-- size = gfc_evaluate_now (fold_convert (size_type_node, size), &cond_block);
--
-+ if (GFC_DESCRIPTOR_TYPE_P (type))
-+ {
-+ tree rank = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (type) - 1];
-+ size = gfc_conv_descriptor_ubound_get (dest, rank);
-+ size = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type,
-+ size,
-+ gfc_conv_descriptor_lbound_get (dest, rank));
-+ size = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
-+ size, gfc_index_one_node);
-+ if (GFC_TYPE_ARRAY_RANK (type) > 1)
-+ size = fold_build2_loc (input_location, MULT_EXPR,
-+ gfc_array_index_type, size,
-+ gfc_conv_descriptor_stride_get (dest, rank));
-+ tree esize = fold_convert (gfc_array_index_type,
-+ TYPE_SIZE_UNIT (gfc_get_element_type (type)));
-+ size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
-+ size, esize);
-+ size = unshare_expr (size);
-+ size = gfc_evaluate_now (fold_convert (size_type_node, size),
-+ &cond_block);
-+ }
-+ else
-+ size = fold_convert (size_type_node, TYPE_SIZE_UNIT (TREE_TYPE (type)));
- ptr = gfc_create_var (pvoid_type_node, NULL);
- gfc_allocate_using_malloc (&cond_block, ptr, size, NULL_TREE);
-- gfc_conv_descriptor_data_set (&cond_block, dest, ptr);
-+ if (GFC_DESCRIPTOR_TYPE_P (type))
-+ gfc_conv_descriptor_data_set (&cond_block, unshare_expr (dest), ptr);
-+ else
-+ gfc_add_modify (&cond_block, unshare_expr (dest),
-+ fold_convert (TREE_TYPE (dest), ptr));
-
-+ tree srcptr = GFC_DESCRIPTOR_TYPE_P (type)
-+ ? gfc_conv_descriptor_data_get (src) : src;
-+ srcptr = unshare_expr (srcptr);
-+ srcptr = fold_convert (pvoid_type_node, srcptr);
- call = build_call_expr_loc (input_location,
-- builtin_decl_explicit (BUILT_IN_MEMCPY),
-- 3, ptr,
-- fold_convert (pvoid_type_node,
-- gfc_conv_descriptor_data_get (src)),
-- size);
-+ builtin_decl_explicit (BUILT_IN_MEMCPY), 3, ptr,
-+ srcptr, size);
- gfc_add_expr_to_block (&cond_block, fold_convert (void_type_node, call));
-+ if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause)))
-+ {
-+ tree tem = gfc_walk_alloc_comps (src, dest,
-+ OMP_CLAUSE_DECL (clause),
-+ WALK_ALLOC_COMPS_COPY_CTOR);
-+ gfc_add_expr_to_block (&cond_block, tem);
-+ }
- then_b = gfc_finish_block (&cond_block);
-
- gfc_init_block (&cond_block);
-- gfc_conv_descriptor_data_set (&cond_block, dest, null_pointer_node);
-+ if (GFC_DESCRIPTOR_TYPE_P (type))
-+ gfc_conv_descriptor_data_set (&cond_block, unshare_expr (dest),
-+ null_pointer_node);
-+ else
-+ gfc_add_modify (&cond_block, unshare_expr (dest),
-+ build_zero_cst (TREE_TYPE (dest)));
- else_b = gfc_finish_block (&cond_block);
-
- cond = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
-- fold_convert (pvoid_type_node,
-- gfc_conv_descriptor_data_get (src)),
-- null_pointer_node);
-- gfc_add_expr_to_block (&block, build3_loc (input_location, COND_EXPR,
-- void_type_node, cond, then_b, else_b));
-+ unshare_expr (srcptr), null_pointer_node);
-+ gfc_add_expr_to_block (&block,
-+ build3_loc (input_location, COND_EXPR,
-+ void_type_node, cond, then_b, else_b));
-
- return gfc_finish_block (&block);
- }
-
--/* Similarly, except use an assignment operator instead. */
-+/* Similarly, except use an intrinsic or pointer assignment operator
-+ instead. */
-
- tree
--gfc_omp_clause_assign_op (tree clause ATTRIBUTE_UNUSED, tree dest, tree src)
-+gfc_omp_clause_assign_op (tree clause, tree dest, tree src)
- {
-- tree type = TREE_TYPE (dest), rank, size, esize, call;
-- stmtblock_t block;
-+ tree type = TREE_TYPE (dest), ptr, size, call, nonalloc;
-+ tree cond, then_b, else_b;
-+ stmtblock_t block, cond_block, cond_block2, inner_block;
-
-- if (! GFC_DESCRIPTOR_TYPE_P (type)
-- || GFC_TYPE_ARRAY_AKIND (type) != GFC_ARRAY_ALLOCATABLE)
-- return build2_v (MODIFY_EXPR, dest, src);
-+ if ((! GFC_DESCRIPTOR_TYPE_P (type)
-+ || GFC_TYPE_ARRAY_AKIND (type) != GFC_ARRAY_ALLOCATABLE)
-+ && !GFC_DECL_GET_SCALAR_ALLOCATABLE (OMP_CLAUSE_DECL (clause)))
-+ {
-+ if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause)))
-+ {
-+ gfc_start_block (&block);
-+ /* First dealloc any allocatable components in DEST. */
-+ tree tem = gfc_walk_alloc_comps (dest, NULL_TREE,
-+ OMP_CLAUSE_DECL (clause),
-+ WALK_ALLOC_COMPS_DTOR);
-+ gfc_add_expr_to_block (&block, tem);
-+ /* Then copy over toplevel data. */
-+ gfc_add_modify (&block, dest, src);
-+ /* Finally allocate any allocatable components and copy. */
-+ tem = gfc_walk_alloc_comps (src, dest, OMP_CLAUSE_DECL (clause),
-+ WALK_ALLOC_COMPS_COPY_CTOR);
-+ gfc_add_expr_to_block (&block, tem);
-+ return gfc_finish_block (&block);
-+ }
-+ else
-+ return build2_v (MODIFY_EXPR, dest, src);
-+ }
-
-- /* Handle copying allocatable arrays. */
- gfc_start_block (&block);
-
-- rank = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (type) - 1];
-- size = gfc_conv_descriptor_ubound_get (dest, rank);
-- size = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type,
-- size, gfc_conv_descriptor_lbound_get (dest, rank));
-- size = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
-- size, gfc_index_one_node);
-- if (GFC_TYPE_ARRAY_RANK (type) > 1)
-- size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
-- size, gfc_conv_descriptor_stride_get (dest, rank));
-- esize = fold_convert (gfc_array_index_type,
-- TYPE_SIZE_UNIT (gfc_get_element_type (type)));
-- size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
-- size, esize);
-- size = gfc_evaluate_now (fold_convert (size_type_node, size), &block);
-+ if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause)))
-+ {
-+ then_b = gfc_walk_alloc_comps (dest, NULL_TREE, OMP_CLAUSE_DECL (clause),
-+ WALK_ALLOC_COMPS_DTOR);
-+ tree tem = fold_convert (pvoid_type_node,
-+ GFC_DESCRIPTOR_TYPE_P (type)
-+ ? gfc_conv_descriptor_data_get (dest) : dest);
-+ tem = unshare_expr (tem);
-+ cond = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
-+ tem, null_pointer_node);
-+ tem = build3_loc (input_location, COND_EXPR, void_type_node, cond,
-+ then_b, build_empty_stmt (input_location));
-+ gfc_add_expr_to_block (&block, tem);
-+ }
-+
-+ gfc_init_block (&cond_block);
-+
-+ if (GFC_DESCRIPTOR_TYPE_P (type))
-+ {
-+ tree rank = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (type) - 1];
-+ size = gfc_conv_descriptor_ubound_get (src, rank);
-+ size = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type,
-+ size,
-+ gfc_conv_descriptor_lbound_get (src, rank));
-+ size = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
-+ size, gfc_index_one_node);
-+ if (GFC_TYPE_ARRAY_RANK (type) > 1)
-+ size = fold_build2_loc (input_location, MULT_EXPR,
-+ gfc_array_index_type, size,
-+ gfc_conv_descriptor_stride_get (src, rank));
-+ tree esize = fold_convert (gfc_array_index_type,
-+ TYPE_SIZE_UNIT (gfc_get_element_type (type)));
-+ size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
-+ size, esize);
-+ size = unshare_expr (size);
-+ size = gfc_evaluate_now (fold_convert (size_type_node, size),
-+ &cond_block);
-+ }
-+ else
-+ size = fold_convert (size_type_node, TYPE_SIZE_UNIT (TREE_TYPE (type)));
-+ ptr = gfc_create_var (pvoid_type_node, NULL);
-+
-+ tree destptr = GFC_DESCRIPTOR_TYPE_P (type)
-+ ? gfc_conv_descriptor_data_get (dest) : dest;
-+ destptr = unshare_expr (destptr);
-+ destptr = fold_convert (pvoid_type_node, destptr);
-+ gfc_add_modify (&cond_block, ptr, destptr);
-+
-+ nonalloc = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node,
-+ destptr, null_pointer_node);
-+ cond = nonalloc;
-+ if (GFC_DESCRIPTOR_TYPE_P (type))
-+ {
-+ int i;
-+ for (i = 0; i < GFC_TYPE_ARRAY_RANK (type); i++)
-+ {
-+ tree rank = gfc_rank_cst[i];
-+ tree tem = gfc_conv_descriptor_ubound_get (src, rank);
-+ tem = fold_build2_loc (input_location, MINUS_EXPR,
-+ gfc_array_index_type, tem,
-+ gfc_conv_descriptor_lbound_get (src, rank));
-+ tem = fold_build2_loc (input_location, PLUS_EXPR,
-+ gfc_array_index_type, tem,
-+ gfc_conv_descriptor_lbound_get (dest, rank));
-+ tem = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
-+ tem, gfc_conv_descriptor_ubound_get (dest,
-+ rank));
-+ cond = fold_build2_loc (input_location, TRUTH_ORIF_EXPR,
-+ boolean_type_node, cond, tem);
-+ }
-+ }
-+
-+ gfc_init_block (&cond_block2);
-+
-+ if (GFC_DESCRIPTOR_TYPE_P (type))
-+ {
-+ gfc_init_block (&inner_block);
-+ gfc_allocate_using_malloc (&inner_block, ptr, size, NULL_TREE);
-+ then_b = gfc_finish_block (&inner_block);
-+
-+ gfc_init_block (&inner_block);
-+ gfc_add_modify (&inner_block, ptr,
-+ gfc_call_realloc (&inner_block, ptr, size));
-+ else_b = gfc_finish_block (&inner_block);
-+
-+ gfc_add_expr_to_block (&cond_block2,
-+ build3_loc (input_location, COND_EXPR,
-+ void_type_node,
-+ unshare_expr (nonalloc),
-+ then_b, else_b));
-+ gfc_add_modify (&cond_block2, dest, src);
-+ gfc_conv_descriptor_data_set (&cond_block2, unshare_expr (dest), ptr);
-+ }
-+ else
-+ {
-+ gfc_allocate_using_malloc (&cond_block2, ptr, size, NULL_TREE);
-+ gfc_add_modify (&cond_block2, unshare_expr (dest),
-+ fold_convert (type, ptr));
-+ }
-+ then_b = gfc_finish_block (&cond_block2);
-+ else_b = build_empty_stmt (input_location);
-+
-+ gfc_add_expr_to_block (&cond_block,
-+ build3_loc (input_location, COND_EXPR,
-+ void_type_node, unshare_expr (cond),
-+ then_b, else_b));
-+
-+ tree srcptr = GFC_DESCRIPTOR_TYPE_P (type)
-+ ? gfc_conv_descriptor_data_get (src) : src;
-+ srcptr = unshare_expr (srcptr);
-+ srcptr = fold_convert (pvoid_type_node, srcptr);
- call = build_call_expr_loc (input_location,
-- builtin_decl_explicit (BUILT_IN_MEMCPY), 3,
-- fold_convert (pvoid_type_node,
-- gfc_conv_descriptor_data_get (dest)),
-- fold_convert (pvoid_type_node,
-- gfc_conv_descriptor_data_get (src)),
-- size);
-- gfc_add_expr_to_block (&block, fold_convert (void_type_node, call));
-+ builtin_decl_explicit (BUILT_IN_MEMCPY), 3, ptr,
-+ srcptr, size);
-+ gfc_add_expr_to_block (&cond_block, fold_convert (void_type_node, call));
-+ if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause)))
-+ {
-+ tree tem = gfc_walk_alloc_comps (src, dest,
-+ OMP_CLAUSE_DECL (clause),
-+ WALK_ALLOC_COMPS_COPY_CTOR);
-+ gfc_add_expr_to_block (&cond_block, tem);
-+ }
-+ then_b = gfc_finish_block (&cond_block);
-
-+ if (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_COPYIN)
-+ {
-+ gfc_init_block (&cond_block);
-+ if (GFC_DESCRIPTOR_TYPE_P (type))
-+ gfc_add_expr_to_block (&cond_block,
-+ gfc_trans_dealloc_allocated (unshare_expr (dest),
-+ false, NULL));
-+ else
-+ {
-+ destptr = gfc_evaluate_now (destptr, &cond_block);
-+ gfc_add_expr_to_block (&cond_block, gfc_call_free (destptr));
-+ gfc_add_modify (&cond_block, unshare_expr (dest),
-+ build_zero_cst (TREE_TYPE (dest)));
-+ }
-+ else_b = gfc_finish_block (&cond_block);
-+
-+ cond = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
-+ unshare_expr (srcptr), null_pointer_node);
-+ gfc_add_expr_to_block (&block,
-+ build3_loc (input_location, COND_EXPR,
-+ void_type_node, cond,
-+ then_b, else_b));
-+ }
-+ else
-+ gfc_add_expr_to_block (&block, then_b);
-+
- return gfc_finish_block (&block);
- }
-
-+static void
-+gfc_omp_linear_clause_add_loop (stmtblock_t *block, tree dest, tree src,
-+ tree add, tree nelems)
-+{
-+ stmtblock_t tmpblock;
-+ tree desta, srca, index = gfc_create_var (gfc_array_index_type, "S");
-+ nelems = gfc_evaluate_now (nelems, block);
-+
-+ gfc_init_block (&tmpblock);
-+ if (TREE_CODE (TREE_TYPE (dest)) == ARRAY_TYPE)
-+ {
-+ desta = gfc_build_array_ref (dest, index, NULL);
-+ srca = gfc_build_array_ref (src, index, NULL);
-+ }
-+ else
-+ {
-+ gcc_assert (POINTER_TYPE_P (TREE_TYPE (dest)));
-+ tree idx = fold_build2 (MULT_EXPR, sizetype,
-+ fold_convert (sizetype, index),
-+ TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (dest))));
-+ desta = build_fold_indirect_ref (fold_build2 (POINTER_PLUS_EXPR,
-+ TREE_TYPE (dest), dest,
-+ idx));
-+ srca = build_fold_indirect_ref (fold_build2 (POINTER_PLUS_EXPR,
-+ TREE_TYPE (src), src,
-+ idx));
-+ }
-+ gfc_add_modify (&tmpblock, desta,
-+ fold_build2 (PLUS_EXPR, TREE_TYPE (desta),
-+ srca, add));
-+
-+ gfc_loopinfo loop;
-+ gfc_init_loopinfo (&loop);
-+ loop.dimen = 1;
-+ loop.from[0] = gfc_index_zero_node;
-+ loop.loopvar[0] = index;
-+ loop.to[0] = nelems;
-+ gfc_trans_scalarizing_loops (&loop, &tmpblock);
-+ gfc_add_block_to_block (block, &loop.pre);
-+}
-+
-+/* Build and return code for a constructor of DEST that initializes
-+ it to SRC plus ADD (ADD is scalar integer). */
-+
-+tree
-+gfc_omp_clause_linear_ctor (tree clause, tree dest, tree src, tree add)
-+{
-+ tree type = TREE_TYPE (dest), ptr, size, nelems = NULL_TREE;
-+ stmtblock_t block;
-+
-+ gcc_assert (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_LINEAR);
-+
-+ gfc_start_block (&block);
-+ add = gfc_evaluate_now (add, &block);
-+
-+ if ((! GFC_DESCRIPTOR_TYPE_P (type)
-+ || GFC_TYPE_ARRAY_AKIND (type) != GFC_ARRAY_ALLOCATABLE)
-+ && !GFC_DECL_GET_SCALAR_ALLOCATABLE (OMP_CLAUSE_DECL (clause)))
-+ {
-+ gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
-+ if (!TYPE_DOMAIN (type)
-+ || TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == NULL_TREE
-+ || TYPE_MIN_VALUE (TYPE_DOMAIN (type)) == error_mark_node
-+ || TYPE_MAX_VALUE (TYPE_DOMAIN (type)) == error_mark_node)
-+ {
-+ nelems = fold_build2 (EXACT_DIV_EXPR, sizetype,
-+ TYPE_SIZE_UNIT (type),
-+ TYPE_SIZE_UNIT (TREE_TYPE (type)));
-+ nelems = size_binop (MINUS_EXPR, nelems, size_one_node);
-+ }
-+ else
-+ nelems = array_type_nelts (type);
-+ nelems = fold_convert (gfc_array_index_type, nelems);
-+
-+ gfc_omp_linear_clause_add_loop (&block, dest, src, add, nelems);
-+ return gfc_finish_block (&block);
-+ }
-+
-+ /* Allocatable arrays in LINEAR clauses need to be allocated
-+ and copied from SRC. */
-+ gfc_add_modify (&block, dest, src);
-+ if (GFC_DESCRIPTOR_TYPE_P (type))
-+ {
-+ tree rank = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (type) - 1];
-+ size = gfc_conv_descriptor_ubound_get (dest, rank);
-+ size = fold_build2_loc (input_location, MINUS_EXPR, gfc_array_index_type,
-+ size,
-+ gfc_conv_descriptor_lbound_get (dest, rank));
-+ size = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
-+ size, gfc_index_one_node);
-+ if (GFC_TYPE_ARRAY_RANK (type) > 1)
-+ size = fold_build2_loc (input_location, MULT_EXPR,
-+ gfc_array_index_type, size,
-+ gfc_conv_descriptor_stride_get (dest, rank));
-+ tree esize = fold_convert (gfc_array_index_type,
-+ TYPE_SIZE_UNIT (gfc_get_element_type (type)));
-+ nelems = gfc_evaluate_now (unshare_expr (size), &block);
-+ size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
-+ nelems, unshare_expr (esize));
-+ size = gfc_evaluate_now (fold_convert (size_type_node, size),
-+ &block);
-+ nelems = fold_build2_loc (input_location, MINUS_EXPR,
-+ gfc_array_index_type, nelems,
-+ gfc_index_one_node);
-+ }
-+ else
-+ size = fold_convert (size_type_node, TYPE_SIZE_UNIT (TREE_TYPE (type)));
-+ ptr = gfc_create_var (pvoid_type_node, NULL);
-+ gfc_allocate_using_malloc (&block, ptr, size, NULL_TREE);
-+ if (GFC_DESCRIPTOR_TYPE_P (type))
-+ {
-+ gfc_conv_descriptor_data_set (&block, unshare_expr (dest), ptr);
-+ tree etype = gfc_get_element_type (type);
-+ ptr = fold_convert (build_pointer_type (etype), ptr);
-+ tree srcptr = gfc_conv_descriptor_data_get (unshare_expr (src));
-+ srcptr = fold_convert (build_pointer_type (etype), srcptr);
-+ gfc_omp_linear_clause_add_loop (&block, ptr, srcptr, add, nelems);
-+ }
-+ else
-+ {
-+ gfc_add_modify (&block, unshare_expr (dest),
-+ fold_convert (TREE_TYPE (dest), ptr));
-+ ptr = fold_convert (TREE_TYPE (dest), ptr);
-+ tree dstm = build_fold_indirect_ref (ptr);
-+ tree srcm = build_fold_indirect_ref (unshare_expr (src));
-+ gfc_add_modify (&block, dstm,
-+ fold_build2 (PLUS_EXPR, TREE_TYPE (add), srcm, add));
-+ }
-+ return gfc_finish_block (&block);
-+}
-+
- /* Build and return code destructing DECL. Return NULL if nothing
- to be done. */
-
- tree
--gfc_omp_clause_dtor (tree clause ATTRIBUTE_UNUSED, tree decl)
-+gfc_omp_clause_dtor (tree clause, tree decl)
- {
-- tree type = TREE_TYPE (decl);
-+ tree type = TREE_TYPE (decl), tem;
-
-- if (! GFC_DESCRIPTOR_TYPE_P (type)
-- || GFC_TYPE_ARRAY_AKIND (type) != GFC_ARRAY_ALLOCATABLE)
-- return NULL;
-+ if ((! GFC_DESCRIPTOR_TYPE_P (type)
-+ || GFC_TYPE_ARRAY_AKIND (type) != GFC_ARRAY_ALLOCATABLE)
-+ && !GFC_DECL_GET_SCALAR_ALLOCATABLE (OMP_CLAUSE_DECL (clause)))
-+ {
-+ if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause)))
-+ return gfc_walk_alloc_comps (decl, NULL_TREE,
-+ OMP_CLAUSE_DECL (clause),
-+ WALK_ALLOC_COMPS_DTOR);
-+ return NULL_TREE;
-+ }
-
-- if (OMP_CLAUSE_CODE (clause) == OMP_CLAUSE_REDUCTION)
-- return NULL;
-+ if (GFC_DESCRIPTOR_TYPE_P (type))
-+ /* Allocatable arrays in FIRSTPRIVATE/LASTPRIVATE etc. clauses need
-+ to be deallocated if they were allocated. */
-+ tem = gfc_trans_dealloc_allocated (decl, false, NULL);
-+ else
-+ tem = gfc_call_free (decl);
-+ tem = gfc_omp_unshare_expr (tem);
-
-- /* Allocatable arrays in FIRSTPRIVATE/LASTPRIVATE etc. clauses need
-- to be deallocated if they were allocated. */
-- return gfc_trans_dealloc_allocated (decl, false, NULL);
-+ if (gfc_has_alloc_comps (type, OMP_CLAUSE_DECL (clause)))
-+ {
-+ stmtblock_t block;
-+ tree then_b;
-+
-+ gfc_init_block (&block);
-+ gfc_add_expr_to_block (&block,
-+ gfc_walk_alloc_comps (decl, NULL_TREE,
-+ OMP_CLAUSE_DECL (clause),
-+ WALK_ALLOC_COMPS_DTOR));
-+ gfc_add_expr_to_block (&block, tem);
-+ then_b = gfc_finish_block (&block);
-+
-+ tem = fold_convert (pvoid_type_node,
-+ GFC_DESCRIPTOR_TYPE_P (type)
-+ ? gfc_conv_descriptor_data_get (decl) : decl);
-+ tem = unshare_expr (tem);
-+ tree cond = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
-+ tem, null_pointer_node);
-+ tem = build3_loc (input_location, COND_EXPR, void_type_node, cond,
-+ then_b, build_empty_stmt (input_location));
-+ }
-+ return tem;
- }
-
-
-+void
-+gfc_omp_finish_clause (tree c, gimple_seq *pre_p)
-+{
-+ if (OMP_CLAUSE_CODE (c) != OMP_CLAUSE_MAP)
-+ return;
-+
-+ tree decl = OMP_CLAUSE_DECL (c);
-+ tree c2 = NULL_TREE, c3 = NULL_TREE, c4 = NULL_TREE;
-+ if (POINTER_TYPE_P (TREE_TYPE (decl)))
-+ {
-+ if (!gfc_omp_privatize_by_reference (decl)
-+ && !GFC_DECL_GET_SCALAR_POINTER (decl)
-+ && !GFC_DECL_GET_SCALAR_ALLOCATABLE (decl)
-+ && !GFC_DECL_CRAY_POINTEE (decl)
-+ && !GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (TREE_TYPE (decl))))
-+ return;
-+ c4 = build_omp_clause (OMP_CLAUSE_LOCATION (c), OMP_CLAUSE_MAP);
-+ OMP_CLAUSE_MAP_KIND (c4) = OMP_CLAUSE_MAP_POINTER;
-+ OMP_CLAUSE_DECL (c4) = decl;
-+ OMP_CLAUSE_SIZE (c4) = size_int (0);
-+ decl = build_fold_indirect_ref (decl);
-+ OMP_CLAUSE_DECL (c) = decl;
-+ OMP_CLAUSE_SIZE (c) = NULL_TREE;
-+ }
-+ if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl)))
-+ {
-+ stmtblock_t block;
-+ gfc_start_block (&block);
-+ tree type = TREE_TYPE (decl);
-+ tree ptr = gfc_conv_descriptor_data_get (decl);
-+ ptr = fold_convert (build_pointer_type (char_type_node), ptr);
-+ ptr = build_fold_indirect_ref (ptr);
-+ OMP_CLAUSE_DECL (c) = ptr;
-+ c2 = build_omp_clause (input_location, OMP_CLAUSE_MAP);
-+ OMP_CLAUSE_MAP_KIND (c2) = OMP_CLAUSE_MAP_TO_PSET;
-+ OMP_CLAUSE_DECL (c2) = decl;
-+ OMP_CLAUSE_SIZE (c2) = TYPE_SIZE_UNIT (type);
-+ c3 = build_omp_clause (OMP_CLAUSE_LOCATION (c), OMP_CLAUSE_MAP);
-+ OMP_CLAUSE_MAP_KIND (c3) = OMP_CLAUSE_MAP_POINTER;
-+ OMP_CLAUSE_DECL (c3) = gfc_conv_descriptor_data_get (decl);
-+ OMP_CLAUSE_SIZE (c3) = size_int (0);
-+ tree size = create_tmp_var (gfc_array_index_type, NULL);
-+ tree elemsz = TYPE_SIZE_UNIT (gfc_get_element_type (type));
-+ elemsz = fold_convert (gfc_array_index_type, elemsz);
-+ if (GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_POINTER
-+ || GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_POINTER_CONT)
-+ {
-+ stmtblock_t cond_block;
-+ tree tem, then_b, else_b, zero, cond;
-+
-+ gfc_init_block (&cond_block);
-+ tem = gfc_full_array_size (&cond_block, decl,
-+ GFC_TYPE_ARRAY_RANK (type));
-+ gfc_add_modify (&cond_block, size, tem);
-+ gfc_add_modify (&cond_block, size,
-+ fold_build2 (MULT_EXPR, gfc_array_index_type,
-+ size, elemsz));
-+ then_b = gfc_finish_block (&cond_block);
-+ gfc_init_block (&cond_block);
-+ zero = build_int_cst (gfc_array_index_type, 0);
-+ gfc_add_modify (&cond_block, size, zero);
-+ else_b = gfc_finish_block (&cond_block);
-+ tem = gfc_conv_descriptor_data_get (decl);
-+ tem = fold_convert (pvoid_type_node, tem);
-+ cond = fold_build2_loc (input_location, NE_EXPR,
-+ boolean_type_node, tem, null_pointer_node);
-+ gfc_add_expr_to_block (&block, build3_loc (input_location, COND_EXPR,
-+ void_type_node, cond,
-+ then_b, else_b));
-+ }
-+ else
-+ {
-+ gfc_add_modify (&block, size,
-+ gfc_full_array_size (&block, decl,
-+ GFC_TYPE_ARRAY_RANK (type)));
-+ gfc_add_modify (&block, size,
-+ fold_build2 (MULT_EXPR, gfc_array_index_type,
-+ size, elemsz));
-+ }
-+ OMP_CLAUSE_SIZE (c) = size;
-+ tree stmt = gfc_finish_block (&block);
-+ gimplify_and_add (stmt, pre_p);
-+ }
-+ tree last = c;
-+ if (OMP_CLAUSE_SIZE (c) == NULL_TREE)
-+ OMP_CLAUSE_SIZE (c)
-+ = DECL_P (decl) ? DECL_SIZE_UNIT (decl)
-+ : TYPE_SIZE_UNIT (TREE_TYPE (decl));
-+ if (c2)
-+ {
-+ OMP_CLAUSE_CHAIN (c2) = OMP_CLAUSE_CHAIN (last);
-+ OMP_CLAUSE_CHAIN (last) = c2;
-+ last = c2;
-+ }
-+ if (c3)
-+ {
-+ OMP_CLAUSE_CHAIN (c3) = OMP_CLAUSE_CHAIN (last);
-+ OMP_CLAUSE_CHAIN (last) = c3;
-+ last = c3;
-+ }
-+ if (c4)
-+ {
-+ OMP_CLAUSE_CHAIN (c4) = OMP_CLAUSE_CHAIN (last);
-+ OMP_CLAUSE_CHAIN (last) = c4;
-+ last = c4;
-+ }
-+}
-+
-+
- /* Return true if DECL's DECL_VALUE_EXPR (if any) should be
- disregarded in OpenMP construct, because it is going to be
- remapped during OpenMP lowering. SHARED is true if DECL
-@@ -427,8 +1204,33 @@
- }
-
- static tree
--gfc_trans_omp_variable (gfc_symbol *sym)
-+gfc_trans_omp_variable (gfc_symbol *sym, bool declare_simd)
- {
-+ if (declare_simd)
-+ {
-+ int cnt = 0;
-+ gfc_symbol *proc_sym;
-+ gfc_formal_arglist *f;
-+
-+ gcc_assert (sym->attr.dummy);
-+ proc_sym = sym->ns->proc_name;
-+ if (proc_sym->attr.entry_master)
-+ ++cnt;
-+ if (gfc_return_by_reference (proc_sym))
-+ {
-+ ++cnt;
-+ if (proc_sym->ts.type == BT_CHARACTER)
-+ ++cnt;
-+ }
-+ for (f = gfc_sym_get_dummy_args (proc_sym); f; f = f->next)
-+ if (f->sym == sym)
-+ break;
-+ else if (f->sym)
-+ ++cnt;
-+ gcc_assert (f);
-+ return build_int_cst (integer_type_node, cnt);
-+ }
-+
- tree t = gfc_get_symbol_decl (sym);
- tree parent_decl;
- int parent_flag;
-@@ -442,7 +1244,8 @@
- entry_master = sym->attr.result
- && sym->ns->proc_name->attr.entry_master
- && !gfc_return_by_reference (sym->ns->proc_name);
-- parent_decl = DECL_CONTEXT (current_function_decl);
-+ parent_decl = current_function_decl
-+ ? DECL_CONTEXT (current_function_decl) : NULL_TREE;
-
- if ((t == parent_decl && return_value)
- || (sym->ns && sym->ns->proc_name
-@@ -481,13 +1284,14 @@
- }
-
- static tree
--gfc_trans_omp_variable_list (enum omp_clause_code code, gfc_namelist *namelist,
-- tree list)
-+gfc_trans_omp_variable_list (enum omp_clause_code code,
-+ gfc_omp_namelist *namelist, tree list,
-+ bool declare_simd)
- {
- for (; namelist != NULL; namelist = namelist->next)
-- if (namelist->sym->attr.referenced)
-+ if (namelist->sym->attr.referenced || declare_simd)
- {
-- tree t = gfc_trans_omp_variable (namelist->sym);
-+ tree t = gfc_trans_omp_variable (namelist->sym, declare_simd);
- if (t != error_mark_node)
- {
- tree node = build_omp_clause (input_location, code);
-@@ -498,12 +1302,32 @@
- return list;
- }
-
-+struct omp_udr_find_orig_data
-+{
-+ gfc_omp_udr *omp_udr;
-+ bool omp_orig_seen;
-+};
-+
-+static int
-+omp_udr_find_orig (gfc_expr **e, int *walk_subtrees ATTRIBUTE_UNUSED,
-+ void *data)
-+{
-+ struct omp_udr_find_orig_data *cd = (struct omp_udr_find_orig_data *) data;
-+ if ((*e)->expr_type == EXPR_VARIABLE
-+ && (*e)->symtree->n.sym == cd->omp_udr->omp_orig)
-+ cd->omp_orig_seen = true;
-+
-+ return 0;
-+}
-+
- static void
--gfc_trans_omp_array_reduction (tree c, gfc_symbol *sym, locus where)
-+gfc_trans_omp_array_reduction_or_udr (tree c, gfc_omp_namelist *n, locus where)
- {
-+ gfc_symbol *sym = n->sym;
- gfc_symtree *root1 = NULL, *root2 = NULL, *root3 = NULL, *root4 = NULL;
- gfc_symtree *symtree1, *symtree2, *symtree3, *symtree4 = NULL;
- gfc_symbol init_val_sym, outer_sym, intrinsic_sym;
-+ gfc_symbol omp_var_copy[4];
- gfc_expr *e1, *e2, *e3, *e4;
- gfc_ref *ref;
- tree decl, backend_decl, stmt, type, outer_decl;
-@@ -510,6 +1334,7 @@
- locus old_loc = gfc_current_locus;
- const char *iname;
- bool t;
-+ gfc_omp_udr *udr = n->udr ? n->udr->udr : NULL;
-
- decl = OMP_CLAUSE_DECL (c);
- gfc_current_locus = where;
-@@ -532,12 +1357,29 @@
- init_val_sym.attr.referenced = 1;
- init_val_sym.declared_at = where;
- init_val_sym.attr.flavor = FL_VARIABLE;
-- backend_decl = omp_reduction_init (c, gfc_sym_type (&init_val_sym));
-+ if (OMP_CLAUSE_REDUCTION_CODE (c) != ERROR_MARK)
-+ backend_decl = omp_reduction_init (c, gfc_sym_type (&init_val_sym));
-+ else if (udr->initializer_ns)
-+ backend_decl = NULL;
-+ else
-+ switch (sym->ts.type)
-+ {
-+ case BT_LOGICAL:
-+ case BT_INTEGER:
-+ case BT_REAL:
-+ case BT_COMPLEX:
-+ backend_decl = build_zero_cst (gfc_sym_type (&init_val_sym));
-+ break;
-+ default:
-+ backend_decl = NULL_TREE;
-+ break;
-+ }
- init_val_sym.backend_decl = backend_decl;
-
- /* Create a fake symbol for the outer array reference. */
- outer_sym = *sym;
-- outer_sym.as = gfc_copy_array_spec (sym->as);
-+ if (sym->as)
-+ outer_sym.as = gfc_copy_array_spec (sym->as);
- outer_sym.attr.dummy = 0;
- outer_sym.attr.result = 0;
- outer_sym.attr.flavor = FL_VARIABLE;
-@@ -558,6 +1400,22 @@
- symtree3->n.sym = &outer_sym;
- gcc_assert (symtree3 == root3);
-
-+ memset (omp_var_copy, 0, sizeof omp_var_copy);
-+ if (udr)
-+ {
-+ omp_var_copy[0] = *udr->omp_out;
-+ omp_var_copy[1] = *udr->omp_in;
-+ *udr->omp_out = outer_sym;
-+ *udr->omp_in = *sym;
-+ if (udr->initializer_ns)
-+ {
-+ omp_var_copy[2] = *udr->omp_priv;
-+ omp_var_copy[3] = *udr->omp_orig;
-+ *udr->omp_priv = *sym;
-+ *udr->omp_orig = outer_sym;
-+ }
-+ }
-+
- /* Create expressions. */
- e1 = gfc_get_expr ();
- e1->expr_type = EXPR_VARIABLE;
-@@ -564,22 +1422,53 @@
- e1->where = where;
- e1->symtree = symtree1;
- e1->ts = sym->ts;
-- e1->ref = ref = gfc_get_ref ();
-- ref->type = REF_ARRAY;
-- ref->u.ar.where = where;
-- ref->u.ar.as = sym->as;
-- ref->u.ar.type = AR_FULL;
-- ref->u.ar.dimen = 0;
-+ if (sym->attr.dimension)
-+ {
-+ e1->ref = ref = gfc_get_ref ();
-+ ref->type = REF_ARRAY;
-+ ref->u.ar.where = where;
-+ ref->u.ar.as = sym->as;
-+ ref->u.ar.type = AR_FULL;
-+ ref->u.ar.dimen = 0;
-+ }
- t = gfc_resolve_expr (e1);
- gcc_assert (t);
-
-- e2 = gfc_get_expr ();
-- e2->expr_type = EXPR_VARIABLE;
-- e2->where = where;
-- e2->symtree = symtree2;
-- e2->ts = sym->ts;
-- t = gfc_resolve_expr (e2);
-- gcc_assert (t);
-+ e2 = NULL;
-+ if (backend_decl != NULL_TREE)
-+ {
-+ e2 = gfc_get_expr ();
-+ e2->expr_type = EXPR_VARIABLE;
-+ e2->where = where;
-+ e2->symtree = symtree2;
-+ e2->ts = sym->ts;
-+ t = gfc_resolve_expr (e2);
-+ gcc_assert (t);
-+ }
-+ else if (udr->initializer_ns == NULL)
-+ {
-+ gcc_assert (sym->ts.type == BT_DERIVED);
-+ e2 = gfc_default_initializer (&sym->ts);
-+ gcc_assert (e2);
-+ t = gfc_resolve_expr (e2);
-+ gcc_assert (t);
-+ }
-+ else if (n->udr->initializer->op == EXEC_ASSIGN)
-+ {
-+ e2 = gfc_copy_expr (n->udr->initializer->expr2);
-+ t = gfc_resolve_expr (e2);
-+ gcc_assert (t);
-+ }
-+ if (udr && udr->initializer_ns)
-+ {
-+ struct omp_udr_find_orig_data cd;
-+ cd.omp_udr = udr;
-+ cd.omp_orig_seen = false;
-+ gfc_code_walker (&n->udr->initializer,
-+ gfc_dummy_code_callback, omp_udr_find_orig, &cd);
-+ if (cd.omp_orig_seen)
-+ OMP_CLAUSE_REDUCTION_OMP_ORIG_REF (c) = 1;
-+ }
-
- e3 = gfc_copy_expr (e1);
- e3->symtree = symtree3;
-@@ -587,6 +1476,7 @@
- gcc_assert (t);
-
- iname = NULL;
-+ e4 = NULL;
- switch (OMP_CLAUSE_REDUCTION_CODE (c))
- {
- case PLUS_EXPR:
-@@ -623,6 +1513,18 @@
- case BIT_XOR_EXPR:
- iname = "ieor";
- break;
-+ case ERROR_MARK:
-+ if (n->udr->combiner->op == EXEC_ASSIGN)
-+ {
-+ gfc_free_expr (e3);
-+ e3 = gfc_copy_expr (n->udr->combiner->expr1);
-+ e4 = gfc_copy_expr (n->udr->combiner->expr2);
-+ t = gfc_resolve_expr (e3);
-+ gcc_assert (t);
-+ t = gfc_resolve_expr (e4);
-+ gcc_assert (t);
-+ }
-+ break;
- default:
- gcc_unreachable ();
- }
-@@ -646,58 +1548,27 @@
- e4->expr_type = EXPR_FUNCTION;
- e4->where = where;
- e4->symtree = symtree4;
-- e4->value.function.isym = gfc_find_function (iname);
- e4->value.function.actual = gfc_get_actual_arglist ();
- e4->value.function.actual->expr = e3;
- e4->value.function.actual->next = gfc_get_actual_arglist ();
- e4->value.function.actual->next->expr = e1;
- }
-- /* e1 and e3 have been stored as arguments of e4, avoid sharing. */
-- e1 = gfc_copy_expr (e1);
-- e3 = gfc_copy_expr (e3);
-- t = gfc_resolve_expr (e4);
-- gcc_assert (t);
-+ if (OMP_CLAUSE_REDUCTION_CODE (c) != ERROR_MARK)
-+ {
-+ /* e1 and e3 have been stored as arguments of e4, avoid sharing. */
-+ e1 = gfc_copy_expr (e1);
-+ e3 = gfc_copy_expr (e3);
-+ t = gfc_resolve_expr (e4);
-+ gcc_assert (t);
-+ }
-
- /* Create the init statement list. */
- pushlevel ();
-- if (GFC_DESCRIPTOR_TYPE_P (type)
-- && GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ALLOCATABLE)
-- {
-- /* If decl is an allocatable array, it needs to be allocated
-- with the same bounds as the outer var. */
-- tree rank, size, esize, ptr;
-- stmtblock_t block;
--
-- gfc_start_block (&block);
--
-- gfc_add_modify (&block, decl, outer_sym.backend_decl);
-- rank = gfc_rank_cst[GFC_TYPE_ARRAY_RANK (type) - 1];
-- size = gfc_conv_descriptor_ubound_get (decl, rank);
-- size = fold_build2_loc (input_location, MINUS_EXPR,
-- gfc_array_index_type, size,
-- gfc_conv_descriptor_lbound_get (decl, rank));
-- size = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type,
-- size, gfc_index_one_node);
-- if (GFC_TYPE_ARRAY_RANK (type) > 1)
-- size = fold_build2_loc (input_location, MULT_EXPR,
-- gfc_array_index_type, size,
-- gfc_conv_descriptor_stride_get (decl, rank));
-- esize = fold_convert (gfc_array_index_type,
-- TYPE_SIZE_UNIT (gfc_get_element_type (type)));
-- size = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
-- size, esize);
-- size = gfc_evaluate_now (fold_convert (size_type_node, size), &block);
--
-- ptr = gfc_create_var (pvoid_type_node, NULL);
-- gfc_allocate_using_malloc (&block, ptr, size, NULL_TREE);
-- gfc_conv_descriptor_data_set (&block, decl, ptr);
--
-- gfc_add_expr_to_block (&block, gfc_trans_assignment (e1, e2, false,
-- false));
-- stmt = gfc_finish_block (&block);
-- }
-+ if (e2)
-+ stmt = gfc_trans_assignment (e1, e2, false, false);
- else
-- stmt = gfc_trans_assignment (e1, e2, false, false);
-+ stmt = gfc_trans_call (n->udr->initializer, false,
-+ NULL_TREE, NULL_TREE, false);
- if (TREE_CODE (stmt) != BIND_EXPR)
- stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0));
- else
-@@ -706,22 +1577,11 @@
-
- /* Create the merge statement list. */
- pushlevel ();
-- if (GFC_DESCRIPTOR_TYPE_P (type)
-- && GFC_TYPE_ARRAY_AKIND (type) == GFC_ARRAY_ALLOCATABLE)
-- {
-- /* If decl is an allocatable array, it needs to be deallocated
-- afterwards. */
-- stmtblock_t block;
--
-- gfc_start_block (&block);
-- gfc_add_expr_to_block (&block, gfc_trans_assignment (e3, e4, false,
-- true));
-- gfc_add_expr_to_block (&block, gfc_trans_dealloc_allocated (decl, false,
-- NULL));
-- stmt = gfc_finish_block (&block);
-- }
-+ if (e4)
-+ stmt = gfc_trans_assignment (e3, e4, false, true);
- else
-- stmt = gfc_trans_assignment (e3, e4, false, true);
-+ stmt = gfc_trans_call (n->udr->combiner, false,
-+ NULL_TREE, NULL_TREE, false);
- if (TREE_CODE (stmt) != BIND_EXPR)
- stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0));
- else
-@@ -734,32 +1594,91 @@
- gfc_current_locus = old_loc;
-
- gfc_free_expr (e1);
-- gfc_free_expr (e2);
-+ if (e2)
-+ gfc_free_expr (e2);
- gfc_free_expr (e3);
-- gfc_free_expr (e4);
-+ if (e4)
-+ gfc_free_expr (e4);
- free (symtree1);
- free (symtree2);
- free (symtree3);
- free (symtree4);
-- gfc_free_array_spec (outer_sym.as);
-+ if (outer_sym.as)
-+ gfc_free_array_spec (outer_sym.as);
-+
-+ if (udr)
-+ {
-+ *udr->omp_out = omp_var_copy[0];
-+ *udr->omp_in = omp_var_copy[1];
-+ if (udr->initializer_ns)
-+ {
-+ *udr->omp_priv = omp_var_copy[2];
-+ *udr->omp_orig = omp_var_copy[3];
-+ }
-+ }
- }
-
- static tree
--gfc_trans_omp_reduction_list (gfc_namelist *namelist, tree list,
-- enum tree_code reduction_code, locus where)
-+gfc_trans_omp_reduction_list (gfc_omp_namelist *namelist, tree list,
-+ locus where)
- {
- for (; namelist != NULL; namelist = namelist->next)
- if (namelist->sym->attr.referenced)
- {
-- tree t = gfc_trans_omp_variable (namelist->sym);
-+ tree t = gfc_trans_omp_variable (namelist->sym, false);
- if (t != error_mark_node)
- {
- tree node = build_omp_clause (where.lb->location,
- OMP_CLAUSE_REDUCTION);
- OMP_CLAUSE_DECL (node) = t;
-- OMP_CLAUSE_REDUCTION_CODE (node) = reduction_code;
-- if (namelist->sym->attr.dimension)
-- gfc_trans_omp_array_reduction (node, namelist->sym, where);
-+ switch (namelist->u.reduction_op)
-+ {
-+ case OMP_REDUCTION_PLUS:
-+ OMP_CLAUSE_REDUCTION_CODE (node) = PLUS_EXPR;
-+ break;
-+ case OMP_REDUCTION_MINUS:
-+ OMP_CLAUSE_REDUCTION_CODE (node) = MINUS_EXPR;
-+ break;
-+ case OMP_REDUCTION_TIMES:
-+ OMP_CLAUSE_REDUCTION_CODE (node) = MULT_EXPR;
-+ break;
-+ case OMP_REDUCTION_AND:
-+ OMP_CLAUSE_REDUCTION_CODE (node) = TRUTH_ANDIF_EXPR;
-+ break;
-+ case OMP_REDUCTION_OR:
-+ OMP_CLAUSE_REDUCTION_CODE (node) = TRUTH_ORIF_EXPR;
-+ break;
-+ case OMP_REDUCTION_EQV:
-+ OMP_CLAUSE_REDUCTION_CODE (node) = EQ_EXPR;
-+ break;
-+ case OMP_REDUCTION_NEQV:
-+ OMP_CLAUSE_REDUCTION_CODE (node) = NE_EXPR;
-+ break;
-+ case OMP_REDUCTION_MAX:
-+ OMP_CLAUSE_REDUCTION_CODE (node) = MAX_EXPR;
-+ break;
-+ case OMP_REDUCTION_MIN:
-+ OMP_CLAUSE_REDUCTION_CODE (node) = MIN_EXPR;
-+ break;
-+ case OMP_REDUCTION_IAND:
-+ OMP_CLAUSE_REDUCTION_CODE (node) = BIT_AND_EXPR;
-+ break;
-+ case OMP_REDUCTION_IOR:
-+ OMP_CLAUSE_REDUCTION_CODE (node) = BIT_IOR_EXPR;
-+ break;
-+ case OMP_REDUCTION_IEOR:
-+ OMP_CLAUSE_REDUCTION_CODE (node) = BIT_XOR_EXPR;
-+ break;
-+ case OMP_REDUCTION_USER:
-+ OMP_CLAUSE_REDUCTION_CODE (node) = ERROR_MARK;
-+ break;
-+ default:
-+ gcc_unreachable ();
-+ }
-+ if (namelist->sym->attr.dimension
-+ || namelist->u.reduction_op == OMP_REDUCTION_USER
-+ || namelist->sym->attr.allocatable)
-+ gfc_trans_omp_array_reduction_or_udr (node, namelist, where);
- list = gfc_trans_add_clause (node, list);
- }
- }
-@@ -768,7 +1687,7 @@
-
- static tree
- gfc_trans_omp_clauses (stmtblock_t *block, gfc_omp_clauses *clauses,
-- locus where)
-+ locus where, bool declare_simd = false)
- {
- tree omp_clauses = NULL_TREE, chunk_size, c;
- int list;
-@@ -780,62 +1699,15 @@
-
- for (list = 0; list < OMP_LIST_NUM; list++)
- {
-- gfc_namelist *n = clauses->lists[list];
-+ gfc_omp_namelist *n = clauses->lists[list];
-
- if (n == NULL)
- continue;
-- if (list >= OMP_LIST_REDUCTION_FIRST
-- && list <= OMP_LIST_REDUCTION_LAST)
-- {
-- enum tree_code reduction_code;
-- switch (list)
-- {
-- case OMP_LIST_PLUS:
-- reduction_code = PLUS_EXPR;
-- break;
-- case OMP_LIST_MULT:
-- reduction_code = MULT_EXPR;
-- break;
-- case OMP_LIST_SUB:
-- reduction_code = MINUS_EXPR;
-- break;
-- case OMP_LIST_AND:
-- reduction_code = TRUTH_ANDIF_EXPR;
-- break;
-- case OMP_LIST_OR:
-- reduction_code = TRUTH_ORIF_EXPR;
-- break;
-- case OMP_LIST_EQV:
-- reduction_code = EQ_EXPR;
-- break;
-- case OMP_LIST_NEQV:
-- reduction_code = NE_EXPR;
-- break;
-- case OMP_LIST_MAX:
-- reduction_code = MAX_EXPR;
-- break;
-- case OMP_LIST_MIN:
-- reduction_code = MIN_EXPR;
-- break;
-- case OMP_LIST_IAND:
-- reduction_code = BIT_AND_EXPR;
-- break;
-- case OMP_LIST_IOR:
-- reduction_code = BIT_IOR_EXPR;
-- break;
-- case OMP_LIST_IEOR:
-- reduction_code = BIT_XOR_EXPR;
-- break;
-- default:
-- gcc_unreachable ();
-- }
-- omp_clauses
-- = gfc_trans_omp_reduction_list (n, omp_clauses, reduction_code,
-- where);
-- continue;
-- }
- switch (list)
- {
-+ case OMP_LIST_REDUCTION:
-+ omp_clauses = gfc_trans_omp_reduction_list (n, omp_clauses, where);
-+ break;
- case OMP_LIST_PRIVATE:
- clause_code = OMP_CLAUSE_PRIVATE;
- goto add_clause;
-@@ -853,11 +1725,412 @@
- goto add_clause;
- case OMP_LIST_COPYPRIVATE:
- clause_code = OMP_CLAUSE_COPYPRIVATE;
-+ goto add_clause;
-+ case OMP_LIST_UNIFORM:
-+ clause_code = OMP_CLAUSE_UNIFORM;
- /* FALLTHROUGH */
- add_clause:
- omp_clauses
-- = gfc_trans_omp_variable_list (clause_code, n, omp_clauses);
-+ = gfc_trans_omp_variable_list (clause_code, n, omp_clauses,
-+ declare_simd);
- break;
-+ case OMP_LIST_ALIGNED:
-+ for (; n != NULL; n = n->next)
-+ if (n->sym->attr.referenced || declare_simd)
-+ {
-+ tree t = gfc_trans_omp_variable (n->sym, declare_simd);
-+ if (t != error_mark_node)
-+ {
-+ tree node = build_omp_clause (input_location,
-+ OMP_CLAUSE_ALIGNED);
-+ OMP_CLAUSE_DECL (node) = t;
-+ if (n->expr)
-+ {
-+ tree alignment_var;
-+
-+ if (block == NULL)
-+ alignment_var = gfc_conv_constant_to_tree (n->expr);
-+ else
-+ {
-+ gfc_init_se (&se, NULL);
-+ gfc_conv_expr (&se, n->expr);
-+ gfc_add_block_to_block (block, &se.pre);
-+ alignment_var = gfc_evaluate_now (se.expr, block);
-+ gfc_add_block_to_block (block, &se.post);
-+ }
-+ OMP_CLAUSE_ALIGNED_ALIGNMENT (node) = alignment_var;
-+ }
-+ omp_clauses = gfc_trans_add_clause (node, omp_clauses);
-+ }
-+ }
-+ break;
-+ case OMP_LIST_LINEAR:
-+ {
-+ gfc_expr *last_step_expr = NULL;
-+ tree last_step = NULL_TREE;
-+
-+ for (; n != NULL; n = n->next)
-+ {
-+ if (n->expr)
-+ {
-+ last_step_expr = n->expr;
-+ last_step = NULL_TREE;
-+ }
-+ if (n->sym->attr.referenced || declare_simd)
-+ {
-+ tree t = gfc_trans_omp_variable (n->sym, declare_simd);
-+ if (t != error_mark_node)
-+ {
-+ tree node = build_omp_clause (input_location,
-+ OMP_CLAUSE_LINEAR);
-+ OMP_CLAUSE_DECL (node) = t;
-+ if (last_step_expr && last_step == NULL_TREE)
-+ {
-+ if (block == NULL)
-+ last_step
-+ = gfc_conv_constant_to_tree (last_step_expr);
-+ else
-+ {
-+ gfc_init_se (&se, NULL);
-+ gfc_conv_expr (&se, last_step_expr);
-+ gfc_add_block_to_block (block, &se.pre);
-+ last_step = gfc_evaluate_now (se.expr, block);
-+ gfc_add_block_to_block (block, &se.post);
-+ }
-+ }
-+ OMP_CLAUSE_LINEAR_STEP (node)
-+ = fold_convert (gfc_typenode_for_spec (&n->sym->ts),
-+ last_step);
-+ if (n->sym->attr.dimension || n->sym->attr.allocatable)
-+ OMP_CLAUSE_LINEAR_ARRAY (node) = 1;
-+ omp_clauses = gfc_trans_add_clause (node, omp_clauses);
-+ }
-+ }
-+ }
-+ }
-+ break;
-+ case OMP_LIST_DEPEND:
-+ for (; n != NULL; n = n->next)
-+ {
-+ if (!n->sym->attr.referenced)
-+ continue;
-+
-+ tree node = build_omp_clause (input_location, OMP_CLAUSE_DEPEND);
-+ if (n->expr == NULL || n->expr->ref->u.ar.type == AR_FULL)
-+ {
-+ tree decl = gfc_get_symbol_decl (n->sym);
-+ if (gfc_omp_privatize_by_reference (decl))
-+ decl = build_fold_indirect_ref (decl);
-+ if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl)))
-+ {
-+ decl = gfc_conv_descriptor_data_get (decl);
-+ decl = fold_convert (build_pointer_type (char_type_node),
-+ decl);
-+ decl = build_fold_indirect_ref (decl);
-+ }
-+ else if (DECL_P (decl))
-+ TREE_ADDRESSABLE (decl) = 1;
-+ OMP_CLAUSE_DECL (node) = decl;
-+ }
-+ else
-+ {
-+ tree ptr;
-+ gfc_init_se (&se, NULL);
-+ if (n->expr->ref->u.ar.type == AR_ELEMENT)
-+ {
-+ gfc_conv_expr_reference (&se, n->expr);
-+ ptr = se.expr;
-+ }
-+ else
-+ {
-+ gfc_conv_expr_descriptor (&se, n->expr);
-+ ptr = gfc_conv_array_data (se.expr);
-+ }
-+ gfc_add_block_to_block (block, &se.pre);
-+ gfc_add_block_to_block (block, &se.post);
-+ ptr = fold_convert (build_pointer_type (char_type_node),
-+ ptr);
-+ OMP_CLAUSE_DECL (node) = build_fold_indirect_ref (ptr);
-+ }
-+ switch (n->u.depend_op)
-+ {
-+ case OMP_DEPEND_IN:
-+ OMP_CLAUSE_DEPEND_KIND (node) = OMP_CLAUSE_DEPEND_IN;
-+ break;
-+ case OMP_DEPEND_OUT:
-+ OMP_CLAUSE_DEPEND_KIND (node) = OMP_CLAUSE_DEPEND_OUT;
-+ break;
-+ case OMP_DEPEND_INOUT:
-+ OMP_CLAUSE_DEPEND_KIND (node) = OMP_CLAUSE_DEPEND_INOUT;
-+ break;
-+ default:
-+ gcc_unreachable ();
-+ }
-+ omp_clauses = gfc_trans_add_clause (node, omp_clauses);
-+ }
-+ break;
-+ case OMP_LIST_MAP:
-+ for (; n != NULL; n = n->next)
-+ {
-+ if (!n->sym->attr.referenced)
-+ continue;
-+
-+ tree node = build_omp_clause (input_location, OMP_CLAUSE_MAP);
-+ tree node2 = NULL_TREE;
-+ tree node3 = NULL_TREE;
-+ tree node4 = NULL_TREE;
-+ tree decl = gfc_get_symbol_decl (n->sym);
-+ if (DECL_P (decl))
-+ TREE_ADDRESSABLE (decl) = 1;
-+ if (n->expr == NULL || n->expr->ref->u.ar.type == AR_FULL)
-+ {
-+ if (POINTER_TYPE_P (TREE_TYPE (decl)))
-+ {
-+ node4 = build_omp_clause (input_location,
-+ OMP_CLAUSE_MAP);
-+ OMP_CLAUSE_MAP_KIND (node4) = OMP_CLAUSE_MAP_POINTER;
-+ OMP_CLAUSE_DECL (node4) = decl;
-+ OMP_CLAUSE_SIZE (node4) = size_int (0);
-+ decl = build_fold_indirect_ref (decl);
-+ }
-+ if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl)))
-+ {
-+ tree type = TREE_TYPE (decl);
-+ tree ptr = gfc_conv_descriptor_data_get (decl);
-+ ptr = fold_convert (build_pointer_type (char_type_node),
-+ ptr);
-+ ptr = build_fold_indirect_ref (ptr);
-+ OMP_CLAUSE_DECL (node) = ptr;
-+ node2 = build_omp_clause (input_location,
-+ OMP_CLAUSE_MAP);
-+ OMP_CLAUSE_MAP_KIND (node2) = OMP_CLAUSE_MAP_TO_PSET;
-+ OMP_CLAUSE_DECL (node2) = decl;
-+ OMP_CLAUSE_SIZE (node2) = TYPE_SIZE_UNIT (type);
-+ node3 = build_omp_clause (input_location,
-+ OMP_CLAUSE_MAP);
-+ OMP_CLAUSE_MAP_KIND (node3) = OMP_CLAUSE_MAP_POINTER;
-+ OMP_CLAUSE_DECL (node3)
-+ = gfc_conv_descriptor_data_get (decl);
-+ OMP_CLAUSE_SIZE (node3) = size_int (0);
-+ if (n->sym->attr.pointer)
-+ {
-+ stmtblock_t cond_block;
-+ tree size
-+ = gfc_create_var (gfc_array_index_type, NULL);
-+ tree tem, then_b, else_b, zero, cond;
-+
-+ gfc_init_block (&cond_block);
-+ tem
-+ = gfc_full_array_size (&cond_block, decl,
-+ GFC_TYPE_ARRAY_RANK (type));
-+ gfc_add_modify (&cond_block, size, tem);
-+ then_b = gfc_finish_block (&cond_block);
-+ gfc_init_block (&cond_block);
-+ zero = build_int_cst (gfc_array_index_type, 0);
-+ gfc_add_modify (&cond_block, size, zero);
-+ else_b = gfc_finish_block (&cond_block);
-+ tem = gfc_conv_descriptor_data_get (decl);
-+ tem = fold_convert (pvoid_type_node, tem);
-+ cond = fold_build2_loc (input_location, NE_EXPR,
-+ boolean_type_node,
-+ tem, null_pointer_node);
-+ gfc_add_expr_to_block (block,
-+ build3_loc (input_location,
-+ COND_EXPR,
-+ void_type_node,
-+ cond, then_b,
-+ else_b));
-+ OMP_CLAUSE_SIZE (node) = size;
-+ }
-+ else
-+ OMP_CLAUSE_SIZE (node)
-+ = gfc_full_array_size (block, decl,
-+ GFC_TYPE_ARRAY_RANK (type));
-+ tree elemsz
-+ = TYPE_SIZE_UNIT (gfc_get_element_type (type));
-+ elemsz = fold_convert (gfc_array_index_type, elemsz);
-+ OMP_CLAUSE_SIZE (node)
-+ = fold_build2 (MULT_EXPR, gfc_array_index_type,
-+ OMP_CLAUSE_SIZE (node), elemsz);
-+ }
-+ else
-+ OMP_CLAUSE_DECL (node) = decl;
-+ }
-+ else
-+ {
-+ tree ptr, ptr2;
-+ gfc_init_se (&se, NULL);
-+ if (n->expr->ref->u.ar.type == AR_ELEMENT)
-+ {
-+ gfc_conv_expr_reference (&se, n->expr);
-+ gfc_add_block_to_block (block, &se.pre);
-+ ptr = se.expr;
-+ OMP_CLAUSE_SIZE (node)
-+ = TYPE_SIZE_UNIT (TREE_TYPE (ptr));
-+ }
-+ else
-+ {
-+ gfc_conv_expr_descriptor (&se, n->expr);
-+ ptr = gfc_conv_array_data (se.expr);
-+ tree type = TREE_TYPE (se.expr);
-+ gfc_add_block_to_block (block, &se.pre);
-+ OMP_CLAUSE_SIZE (node)
-+ = gfc_full_array_size (block, se.expr,
-+ GFC_TYPE_ARRAY_RANK (type));
-+ tree elemsz
-+ = TYPE_SIZE_UNIT (gfc_get_element_type (type));
-+ elemsz = fold_convert (gfc_array_index_type, elemsz);
-+ OMP_CLAUSE_SIZE (node)
-+ = fold_build2 (MULT_EXPR, gfc_array_index_type,
-+ OMP_CLAUSE_SIZE (node), elemsz);
-+ }
-+ gfc_add_block_to_block (block, &se.post);
-+ ptr = fold_convert (build_pointer_type (char_type_node),
-+ ptr);
-+ OMP_CLAUSE_DECL (node) = build_fold_indirect_ref (ptr);
-+
-+ if (POINTER_TYPE_P (TREE_TYPE (decl))
-+ && GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (TREE_TYPE (decl))))
-+ {
-+ node4 = build_omp_clause (input_location,
-+ OMP_CLAUSE_MAP);
-+ OMP_CLAUSE_MAP_KIND (node4) = OMP_CLAUSE_MAP_POINTER;
-+ OMP_CLAUSE_DECL (node4) = decl;
-+ OMP_CLAUSE_SIZE (node4) = size_int (0);
-+ decl = build_fold_indirect_ref (decl);
-+ }
-+ ptr = fold_convert (sizetype, ptr);
-+ if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl)))
-+ {
-+ tree type = TREE_TYPE (decl);
-+ ptr2 = gfc_conv_descriptor_data_get (decl);
-+ node2 = build_omp_clause (input_location,
-+ OMP_CLAUSE_MAP);
-+ OMP_CLAUSE_MAP_KIND (node2) = OMP_CLAUSE_MAP_TO_PSET;
-+ OMP_CLAUSE_DECL (node2) = decl;
-+ OMP_CLAUSE_SIZE (node2) = TYPE_SIZE_UNIT (type);
-+ node3 = build_omp_clause (input_location,
-+ OMP_CLAUSE_MAP);
-+ OMP_CLAUSE_MAP_KIND (node3) = OMP_CLAUSE_MAP_POINTER;
-+ OMP_CLAUSE_DECL (node3)
-+ = gfc_conv_descriptor_data_get (decl);
-+ }
-+ else
-+ {
-+ if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
-+ ptr2 = build_fold_addr_expr (decl);
-+ else
-+ {
-+ gcc_assert (POINTER_TYPE_P (TREE_TYPE (decl)));
-+ ptr2 = decl;
-+ }
-+ node3 = build_omp_clause (input_location,
-+ OMP_CLAUSE_MAP);
-+ OMP_CLAUSE_MAP_KIND (node3) = OMP_CLAUSE_MAP_POINTER;
-+ OMP_CLAUSE_DECL (node3) = decl;
-+ }
-+ ptr2 = fold_convert (sizetype, ptr2);
-+ OMP_CLAUSE_SIZE (node3)
-+ = fold_build2 (MINUS_EXPR, sizetype, ptr, ptr2);
-+ }
-+ switch (n->u.map_op)
-+ {
-+ case OMP_MAP_ALLOC:
-+ OMP_CLAUSE_MAP_KIND (node) = OMP_CLAUSE_MAP_ALLOC;
-+ break;
-+ case OMP_MAP_TO:
-+ OMP_CLAUSE_MAP_KIND (node) = OMP_CLAUSE_MAP_TO;
-+ break;
-+ case OMP_MAP_FROM:
-+ OMP_CLAUSE_MAP_KIND (node) = OMP_CLAUSE_MAP_FROM;
-+ break;
-+ case OMP_MAP_TOFROM:
-+ OMP_CLAUSE_MAP_KIND (node) = OMP_CLAUSE_MAP_TOFROM;
-+ break;
-+ default:
-+ gcc_unreachable ();
-+ }
-+ omp_clauses = gfc_trans_add_clause (node, omp_clauses);
-+ if (node2)
-+ omp_clauses = gfc_trans_add_clause (node2, omp_clauses);
-+ if (node3)
-+ omp_clauses = gfc_trans_add_clause (node3, omp_clauses);
-+ if (node4)
-+ omp_clauses = gfc_trans_add_clause (node4, omp_clauses);
-+ }
-+ break;
-+ case OMP_LIST_TO:
-+ case OMP_LIST_FROM:
-+ for (; n != NULL; n = n->next)
-+ {
-+ if (!n->sym->attr.referenced)
-+ continue;
-+
-+ tree node = build_omp_clause (input_location,
-+ list == OMP_LIST_TO
-+ ? OMP_CLAUSE_TO : OMP_CLAUSE_FROM);
-+ if (n->expr == NULL || n->expr->ref->u.ar.type == AR_FULL)
-+ {
-+ tree decl = gfc_get_symbol_decl (n->sym);
-+ if (gfc_omp_privatize_by_reference (decl))
-+ decl = build_fold_indirect_ref (decl);
-+ if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl)))
-+ {
-+ tree type = TREE_TYPE (decl);
-+ tree ptr = gfc_conv_descriptor_data_get (decl);
-+ ptr = fold_convert (build_pointer_type (char_type_node),
-+ ptr);
-+ ptr = build_fold_indirect_ref (ptr);
-+ OMP_CLAUSE_DECL (node) = ptr;
-+ OMP_CLAUSE_SIZE (node)
-+ = gfc_full_array_size (block, decl,
-+ GFC_TYPE_ARRAY_RANK (type));
-+ tree elemsz
-+ = TYPE_SIZE_UNIT (gfc_get_element_type (type));
-+ elemsz = fold_convert (gfc_array_index_type, elemsz);
-+ OMP_CLAUSE_SIZE (node)
-+ = fold_build2 (MULT_EXPR, gfc_array_index_type,
-+ OMP_CLAUSE_SIZE (node), elemsz);
-+ }
-+ else
-+ OMP_CLAUSE_DECL (node) = decl;
-+ }
-+ else
-+ {
-+ tree ptr;
-+ gfc_init_se (&se, NULL);
-+ if (n->expr->ref->u.ar.type == AR_ELEMENT)
-+ {
-+ gfc_conv_expr_reference (&se, n->expr);
-+ ptr = se.expr;
-+ gfc_add_block_to_block (block, &se.pre);
-+ OMP_CLAUSE_SIZE (node)
-+ = TYPE_SIZE_UNIT (TREE_TYPE (ptr));
-+ }
-+ else
-+ {
-+ gfc_conv_expr_descriptor (&se, n->expr);
-+ ptr = gfc_conv_array_data (se.expr);
-+ tree type = TREE_TYPE (se.expr);
-+ gfc_add_block_to_block (block, &se.pre);
-+ OMP_CLAUSE_SIZE (node)
-+ = gfc_full_array_size (block, se.expr,
-+ GFC_TYPE_ARRAY_RANK (type));
-+ tree elemsz
-+ = TYPE_SIZE_UNIT (gfc_get_element_type (type));
-+ elemsz = fold_convert (gfc_array_index_type, elemsz);
-+ OMP_CLAUSE_SIZE (node)
-+ = fold_build2 (MULT_EXPR, gfc_array_index_type,
-+ OMP_CLAUSE_SIZE (node), elemsz);
-+ }
-+ gfc_add_block_to_block (block, &se.post);
-+ ptr = fold_convert (build_pointer_type (char_type_node),
-+ ptr);
-+ OMP_CLAUSE_DECL (node) = build_fold_indirect_ref (ptr);
-+ }
-+ omp_clauses = gfc_trans_add_clause (node, omp_clauses);
-+ }
-+ break;
- default:
- break;
- }
-@@ -1000,7 +2273,146 @@
- omp_clauses = gfc_trans_add_clause (c, omp_clauses);
- }
-
-- return omp_clauses;
-+ if (clauses->inbranch)
-+ {
-+ c = build_omp_clause (where.lb->location, OMP_CLAUSE_INBRANCH);
-+ omp_clauses = gfc_trans_add_clause (c, omp_clauses);
-+ }
-+
-+ if (clauses->notinbranch)
-+ {
-+ c = build_omp_clause (where.lb->location, OMP_CLAUSE_NOTINBRANCH);
-+ omp_clauses = gfc_trans_add_clause (c, omp_clauses);
-+ }
-+
-+ switch (clauses->cancel)
-+ {
-+ case OMP_CANCEL_UNKNOWN:
-+ break;
-+ case OMP_CANCEL_PARALLEL:
-+ c = build_omp_clause (where.lb->location, OMP_CLAUSE_PARALLEL);
-+ omp_clauses = gfc_trans_add_clause (c, omp_clauses);
-+ break;
-+ case OMP_CANCEL_SECTIONS:
-+ c = build_omp_clause (where.lb->location, OMP_CLAUSE_SECTIONS);
-+ omp_clauses = gfc_trans_add_clause (c, omp_clauses);
-+ break;
-+ case OMP_CANCEL_DO:
-+ c = build_omp_clause (where.lb->location, OMP_CLAUSE_FOR);
-+ omp_clauses = gfc_trans_add_clause (c, omp_clauses);
-+ break;
-+ case OMP_CANCEL_TASKGROUP:
-+ c = build_omp_clause (where.lb->location, OMP_CLAUSE_TASKGROUP);
-+ omp_clauses = gfc_trans_add_clause (c, omp_clauses);
-+ break;
-+ }
-+
-+ if (clauses->proc_bind != OMP_PROC_BIND_UNKNOWN)
-+ {
-+ c = build_omp_clause (where.lb->location, OMP_CLAUSE_PROC_BIND);
-+ switch (clauses->proc_bind)
-+ {
-+ case OMP_PROC_BIND_MASTER:
-+ OMP_CLAUSE_PROC_BIND_KIND (c) = OMP_CLAUSE_PROC_BIND_MASTER;
-+ break;
-+ case OMP_PROC_BIND_SPREAD:
-+ OMP_CLAUSE_PROC_BIND_KIND (c) = OMP_CLAUSE_PROC_BIND_SPREAD;
-+ break;
-+ case OMP_PROC_BIND_CLOSE:
-+ OMP_CLAUSE_PROC_BIND_KIND (c) = OMP_CLAUSE_PROC_BIND_CLOSE;
-+ break;
-+ default:
-+ gcc_unreachable ();
-+ }
-+ omp_clauses = gfc_trans_add_clause (c, omp_clauses);
-+ }
-+
-+ if (clauses->safelen_expr)
-+ {
-+ tree safelen_var;
-+
-+ gfc_init_se (&se, NULL);
-+ gfc_conv_expr (&se, clauses->safelen_expr);
-+ gfc_add_block_to_block (block, &se.pre);
-+ safelen_var = gfc_evaluate_now (se.expr, block);
-+ gfc_add_block_to_block (block, &se.post);
-+
-+ c = build_omp_clause (where.lb->location, OMP_CLAUSE_SAFELEN);
-+ OMP_CLAUSE_SAFELEN_EXPR (c) = safelen_var;
-+ omp_clauses = gfc_trans_add_clause (c, omp_clauses);
-+ }
-+
-+ if (clauses->simdlen_expr)
-+ {
-+ c = build_omp_clause (where.lb->location, OMP_CLAUSE_SIMDLEN);
-+ OMP_CLAUSE_SIMDLEN_EXPR (c)
-+ = gfc_conv_constant_to_tree (clauses->simdlen_expr);
-+ omp_clauses = gfc_trans_add_clause (c, omp_clauses);
-+ }
-+
-+ if (clauses->num_teams)
-+ {
-+ tree num_teams;
-+
-+ gfc_init_se (&se, NULL);
-+ gfc_conv_expr (&se, clauses->num_teams);
-+ gfc_add_block_to_block (block, &se.pre);
-+ num_teams = gfc_evaluate_now (se.expr, block);
-+ gfc_add_block_to_block (block, &se.post);
-+
-+ c = build_omp_clause (where.lb->location, OMP_CLAUSE_NUM_TEAMS);
-+ OMP_CLAUSE_NUM_TEAMS_EXPR (c) = num_teams;
-+ omp_clauses = gfc_trans_add_clause (c, omp_clauses);
-+ }
-+
-+ if (clauses->device)
-+ {
-+ tree device;
-+
-+ gfc_init_se (&se, NULL);
-+ gfc_conv_expr (&se, clauses->device);
-+ gfc_add_block_to_block (block, &se.pre);
-+ device = gfc_evaluate_now (se.expr, block);
-+ gfc_add_block_to_block (block, &se.post);
-+
-+ c = build_omp_clause (where.lb->location, OMP_CLAUSE_DEVICE);
-+ OMP_CLAUSE_DEVICE_ID (c) = device;
-+ omp_clauses = gfc_trans_add_clause (c, omp_clauses);
-+ }
-+
-+ if (clauses->thread_limit)
-+ {
-+ tree thread_limit;
-+
-+ gfc_init_se (&se, NULL);
-+ gfc_conv_expr (&se, clauses->thread_limit);
-+ gfc_add_block_to_block (block, &se.pre);
-+ thread_limit = gfc_evaluate_now (se.expr, block);
-+ gfc_add_block_to_block (block, &se.post);
-+
-+ c = build_omp_clause (where.lb->location, OMP_CLAUSE_THREAD_LIMIT);
-+ OMP_CLAUSE_THREAD_LIMIT_EXPR (c) = thread_limit;
-+ omp_clauses = gfc_trans_add_clause (c, omp_clauses);
-+ }
-+
-+ chunk_size = NULL_TREE;
-+ if (clauses->dist_chunk_size)
-+ {
-+ gfc_init_se (&se, NULL);
-+ gfc_conv_expr (&se, clauses->dist_chunk_size);
-+ gfc_add_block_to_block (block, &se.pre);
-+ chunk_size = gfc_evaluate_now (se.expr, block);
-+ gfc_add_block_to_block (block, &se.post);
-+ }
-+
-+ if (clauses->dist_sched_kind != OMP_SCHED_NONE)
-+ {
-+ c = build_omp_clause (where.lb->location, OMP_CLAUSE_DIST_SCHEDULE);
-+ OMP_CLAUSE_DIST_SCHEDULE_CHUNK_EXPR (c) = chunk_size;
-+ omp_clauses = gfc_trans_add_clause (c, omp_clauses);
-+ }
-+
-+ return nreverse (omp_clauses);
- }
-
- /* Like gfc_trans_code, but force creation of a BIND_EXPR around it. */
-@@ -1045,6 +2457,7 @@
- enum tree_code op = ERROR_MARK;
- enum tree_code aop = OMP_ATOMIC;
- bool var_on_left = false;
-+ bool seq_cst = (atomic_code->ext.omp_atomic & GFC_OMP_ATOMIC_SEQ_CST) != 0;
-
- code = code->block->next;
- gcc_assert (code->op == EXEC_ASSIGN);
-@@ -1060,7 +2473,7 @@
- && expr2->value.function.isym->id == GFC_ISYM_CONVERSION)
- expr2 = expr2->value.function.actual->expr;
-
-- switch (atomic_code->ext.omp_atomic)
-+ switch (atomic_code->ext.omp_atomic & GFC_OMP_ATOMIC_MASK)
- {
- case GFC_OMP_ATOMIC_READ:
- gfc_conv_expr (&vse, code->expr1);
-@@ -1072,6 +2485,7 @@
- lhsaddr = gfc_build_addr_expr (NULL, lse.expr);
-
- x = build1 (OMP_ATOMIC_READ, type, lhsaddr);
-+ OMP_ATOMIC_SEQ_CST (x) = seq_cst;
- x = convert (TREE_TYPE (vse.expr), x);
- gfc_add_modify (&block, vse.expr, x);
-
-@@ -1107,7 +2521,9 @@
- type = TREE_TYPE (lse.expr);
- lhsaddr = gfc_build_addr_expr (NULL, lse.expr);
-
-- if (atomic_code->ext.omp_atomic == GFC_OMP_ATOMIC_WRITE)
-+ if (((atomic_code->ext.omp_atomic & GFC_OMP_ATOMIC_MASK)
-+ == GFC_OMP_ATOMIC_WRITE)
-+ || (atomic_code->ext.omp_atomic & GFC_OMP_ATOMIC_SWAP))
- {
- gfc_conv_expr (&rse, expr2);
- gfc_add_block_to_block (&block, &rse.pre);
-@@ -1229,7 +2645,9 @@
- lhsaddr = save_expr (lhsaddr);
- rhs = gfc_evaluate_now (rse.expr, &block);
-
-- if (atomic_code->ext.omp_atomic == GFC_OMP_ATOMIC_WRITE)
-+ if (((atomic_code->ext.omp_atomic & GFC_OMP_ATOMIC_MASK)
-+ == GFC_OMP_ATOMIC_WRITE)
-+ || (atomic_code->ext.omp_atomic & GFC_OMP_ATOMIC_SWAP))
- x = rhs;
- else
- {
-@@ -1252,6 +2670,7 @@
- if (aop == OMP_ATOMIC)
- {
- x = build2_v (OMP_ATOMIC, lhsaddr, convert (type, x));
-+ OMP_ATOMIC_SEQ_CST (x) = seq_cst;
- gfc_add_expr_to_block (&block, x);
- }
- else
-@@ -1273,6 +2692,7 @@
- gfc_add_block_to_block (&block, &lse.pre);
- }
- x = build2 (aop, type, lhsaddr, convert (type, x));
-+ OMP_ATOMIC_SEQ_CST (x) = seq_cst;
- x = convert (TREE_TYPE (vse.expr), x);
- gfc_add_modify (&block, vse.expr, x);
- }
-@@ -1288,6 +2708,63 @@
- }
-
- static tree
-+gfc_trans_omp_cancel (gfc_code *code)
-+{
-+ int mask = 0;
-+ tree ifc = boolean_true_node;
-+ stmtblock_t block;
-+ switch (code->ext.omp_clauses->cancel)
-+ {
-+ case OMP_CANCEL_PARALLEL: mask = 1; break;
-+ case OMP_CANCEL_DO: mask = 2; break;
-+ case OMP_CANCEL_SECTIONS: mask = 4; break;
-+ case OMP_CANCEL_TASKGROUP: mask = 8; break;
-+ default: gcc_unreachable ();
-+ }
-+ gfc_start_block (&block);
-+ if (code->ext.omp_clauses->if_expr)
-+ {
-+ gfc_se se;
-+ tree if_var;
-+
-+ gfc_init_se (&se, NULL);
-+ gfc_conv_expr (&se, code->ext.omp_clauses->if_expr);
-+ gfc_add_block_to_block (&block, &se.pre);
-+ if_var = gfc_evaluate_now (se.expr, &block);
-+ gfc_add_block_to_block (&block, &se.post);
-+ tree type = TREE_TYPE (if_var);
-+ ifc = fold_build2_loc (input_location, NE_EXPR,
-+ boolean_type_node, if_var,
-+ build_zero_cst (type));
-+ }
-+ tree decl = builtin_decl_explicit (BUILT_IN_GOMP_CANCEL);
-+ tree c_bool_type = TREE_TYPE (TREE_TYPE (decl));
-+ ifc = fold_convert (c_bool_type, ifc);
-+ gfc_add_expr_to_block (&block,
-+ build_call_expr_loc (input_location, decl, 2,
-+ build_int_cst (integer_type_node,
-+ mask), ifc));
-+ return gfc_finish_block (&block);
-+}
-+
-+static tree
-+gfc_trans_omp_cancellation_point (gfc_code *code)
-+{
-+ int mask = 0;
-+ switch (code->ext.omp_clauses->cancel)
-+ {
-+ case OMP_CANCEL_PARALLEL: mask = 1; break;
-+ case OMP_CANCEL_DO: mask = 2; break;
-+ case OMP_CANCEL_SECTIONS: mask = 4; break;
-+ case OMP_CANCEL_TASKGROUP: mask = 8; break;
-+ default: gcc_unreachable ();
-+ }
-+ tree decl = builtin_decl_explicit (BUILT_IN_GOMP_CANCELLATION_POINT);
-+ return build_call_expr_loc (input_location, decl, 1,
-+ build_int_cst (integer_type_node, mask));
-+}
-+
-+static tree
- gfc_trans_omp_critical (gfc_code *code)
- {
- tree name = NULL_TREE, stmt;
-@@ -1304,7 +2781,7 @@
-
-
- static tree
--gfc_trans_omp_do (gfc_code *code, stmtblock_t *pblock,
-+gfc_trans_omp_do (gfc_code *code, gfc_exec_op op, stmtblock_t *pblock,
- gfc_omp_clauses *do_clauses, tree par_clauses)
- {
- gfc_se se;
-@@ -1344,14 +2821,16 @@
-
- if (clauses)
- {
-- gfc_namelist *n;
-- for (n = clauses->lists[OMP_LIST_LASTPRIVATE]; n != NULL;
-- n = n->next)
-- if (code->ext.iterator->var->symtree->n.sym == n->sym)
-- break;
-+ gfc_omp_namelist *n = NULL;
-+ if (op != EXEC_OMP_DISTRIBUTE)
-+ for (n = clauses->lists[(op == EXEC_OMP_SIMD && collapse == 1)
-+ ? OMP_LIST_LINEAR : OMP_LIST_LASTPRIVATE];
-+ n != NULL; n = n->next)
-+ if (code->ext.iterator->var->symtree->n.sym == n->sym)
-+ break;
- if (n != NULL)
- dovar_found = 1;
-- else if (n == NULL)
-+ else if (n == NULL && op != EXEC_OMP_SIMD)
- for (n = clauses->lists[OMP_LIST_PRIVATE]; n != NULL; n = n->next)
- if (code->ext.iterator->var->symtree->n.sym == n->sym)
- break;
-@@ -1393,7 +2872,8 @@
- }
- else
- dovar_decl
-- = gfc_trans_omp_variable (code->ext.iterator->var->symtree->n.sym);
-+ = gfc_trans_omp_variable (code->ext.iterator->var->symtree->n.sym,
-+ false);
-
- /* Loop body. */
- if (simple)
-@@ -1447,11 +2927,24 @@
-
- if (!dovar_found)
- {
-- tmp = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
-+ if (op == EXEC_OMP_SIMD)
-+ {
-+ if (collapse == 1)
-+ {
-+ tmp = build_omp_clause (input_location, OMP_CLAUSE_LINEAR);
-+ OMP_CLAUSE_LINEAR_STEP (tmp) = step;
-+ }
-+ else
-+ tmp = build_omp_clause (input_location, OMP_CLAUSE_LASTPRIVATE);
-+ if (!simple)
-+ dovar_found = 2;
-+ }
-+ else
-+ tmp = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
- OMP_CLAUSE_DECL (tmp) = dovar_decl;
- omp_clauses = gfc_trans_add_clause (tmp, omp_clauses);
- }
-- else if (dovar_found == 2)
-+ if (dovar_found == 2)
- {
- tree c = NULL;
-
-@@ -1475,8 +2968,14 @@
- OMP_CLAUSE_LASTPRIVATE_STMT (c) = tmp;
- break;
- }
-+ else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LINEAR
-+ && OMP_CLAUSE_DECL (c) == dovar_decl)
-+ {
-+ OMP_CLAUSE_LINEAR_STMT (c) = tmp;
-+ break;
-+ }
- }
-- if (c == NULL && par_clauses != NULL)
-+ if (c == NULL && op == EXEC_OMP_DO && par_clauses != NULL)
- {
- for (c = par_clauses; c ; c = OMP_CLAUSE_CHAIN (c))
- if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
-@@ -1496,7 +2995,17 @@
- }
- if (!simple)
- {
-- tmp = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
-+ if (op != EXEC_OMP_SIMD)
-+ tmp = build_omp_clause (input_location, OMP_CLAUSE_PRIVATE);
-+ else if (collapse == 1)
-+ {
-+ tmp = build_omp_clause (input_location, OMP_CLAUSE_LINEAR);
-+ OMP_CLAUSE_LINEAR_STEP (tmp) = step;
-+ OMP_CLAUSE_LINEAR_NO_COPYIN (tmp) = 1;
-+ OMP_CLAUSE_LINEAR_NO_COPYOUT (tmp) = 1;
-+ }
-+ else
-+ tmp = build_omp_clause (input_location, OMP_CLAUSE_LASTPRIVATE);
- OMP_CLAUSE_DECL (tmp) = count;
- omp_clauses = gfc_trans_add_clause (tmp, omp_clauses);
- }
-@@ -1538,7 +3047,13 @@
- }
-
- /* End of loop body. */
-- stmt = make_node (OMP_FOR);
-+ switch (op)
-+ {
-+ case EXEC_OMP_SIMD: stmt = make_node (OMP_SIMD); break;
-+ case EXEC_OMP_DO: stmt = make_node (OMP_FOR); break;
-+ case EXEC_OMP_DISTRIBUTE: stmt = make_node (OMP_DISTRIBUTE); break;
-+ default: gcc_unreachable ();
-+ }
-
- TREE_TYPE (stmt) = void_type_node;
- OMP_FOR_BODY (stmt) = gfc_finish_block (&body);
-@@ -1589,41 +3104,352 @@
- return gfc_finish_block (&block);
- }
-
--static tree
--gfc_trans_omp_parallel_do (gfc_code *code)
-+enum
- {
-- stmtblock_t block, *pblock = NULL;
-- gfc_omp_clauses parallel_clauses, do_clauses;
-- tree stmt, omp_clauses = NULL_TREE;
-+ GFC_OMP_SPLIT_SIMD,
-+ GFC_OMP_SPLIT_DO,
-+ GFC_OMP_SPLIT_PARALLEL,
-+ GFC_OMP_SPLIT_DISTRIBUTE,
-+ GFC_OMP_SPLIT_TEAMS,
-+ GFC_OMP_SPLIT_TARGET,
-+ GFC_OMP_SPLIT_NUM
-+};
-
-- gfc_start_block (&block);
-+enum
-+{
-+ GFC_OMP_MASK_SIMD = (1 << GFC_OMP_SPLIT_SIMD),
-+ GFC_OMP_MASK_DO = (1 << GFC_OMP_SPLIT_DO),
-+ GFC_OMP_MASK_PARALLEL = (1 << GFC_OMP_SPLIT_PARALLEL),
-+ GFC_OMP_MASK_DISTRIBUTE = (1 << GFC_OMP_SPLIT_DISTRIBUTE),
-+ GFC_OMP_MASK_TEAMS = (1 << GFC_OMP_SPLIT_TEAMS),
-+ GFC_OMP_MASK_TARGET = (1 << GFC_OMP_SPLIT_TARGET)
-+};
-
-- memset (&do_clauses, 0, sizeof (do_clauses));
-+static void
-+gfc_split_omp_clauses (gfc_code *code,
-+ gfc_omp_clauses clausesa[GFC_OMP_SPLIT_NUM])
-+{
-+ int mask = 0, innermost = 0;
-+ memset (clausesa, 0, GFC_OMP_SPLIT_NUM * sizeof (gfc_omp_clauses));
-+ switch (code->op)
-+ {
-+ case EXEC_OMP_DISTRIBUTE:
-+ innermost = GFC_OMP_SPLIT_DISTRIBUTE;
-+ break;
-+ case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
-+ mask = GFC_OMP_MASK_DISTRIBUTE | GFC_OMP_MASK_PARALLEL | GFC_OMP_MASK_DO;
-+ innermost = GFC_OMP_SPLIT_DO;
-+ break;
-+ case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ mask = GFC_OMP_MASK_DISTRIBUTE | GFC_OMP_MASK_PARALLEL
-+ | GFC_OMP_MASK_DO | GFC_OMP_MASK_SIMD;
-+ innermost = GFC_OMP_SPLIT_SIMD;
-+ break;
-+ case EXEC_OMP_DISTRIBUTE_SIMD:
-+ mask = GFC_OMP_MASK_DISTRIBUTE | GFC_OMP_MASK_SIMD;
-+ innermost = GFC_OMP_SPLIT_SIMD;
-+ break;
-+ case EXEC_OMP_DO:
-+ innermost = GFC_OMP_SPLIT_DO;
-+ break;
-+ case EXEC_OMP_DO_SIMD:
-+ mask = GFC_OMP_MASK_DO | GFC_OMP_MASK_SIMD;
-+ innermost = GFC_OMP_SPLIT_SIMD;
-+ break;
-+ case EXEC_OMP_PARALLEL:
-+ innermost = GFC_OMP_SPLIT_PARALLEL;
-+ break;
-+ case EXEC_OMP_PARALLEL_DO:
-+ mask = GFC_OMP_MASK_PARALLEL | GFC_OMP_MASK_DO;
-+ innermost = GFC_OMP_SPLIT_DO;
-+ break;
-+ case EXEC_OMP_PARALLEL_DO_SIMD:
-+ mask = GFC_OMP_MASK_PARALLEL | GFC_OMP_MASK_DO | GFC_OMP_MASK_SIMD;
-+ innermost = GFC_OMP_SPLIT_SIMD;
-+ break;
-+ case EXEC_OMP_SIMD:
-+ innermost = GFC_OMP_SPLIT_SIMD;
-+ break;
-+ case EXEC_OMP_TARGET:
-+ innermost = GFC_OMP_SPLIT_TARGET;
-+ break;
-+ case EXEC_OMP_TARGET_TEAMS:
-+ mask = GFC_OMP_MASK_TARGET | GFC_OMP_MASK_TEAMS;
-+ innermost = GFC_OMP_SPLIT_TEAMS;
-+ break;
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
-+ mask = GFC_OMP_MASK_TARGET | GFC_OMP_MASK_TEAMS
-+ | GFC_OMP_MASK_DISTRIBUTE;
-+ innermost = GFC_OMP_SPLIT_DISTRIBUTE;
-+ break;
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ mask = GFC_OMP_MASK_TARGET | GFC_OMP_MASK_TEAMS | GFC_OMP_MASK_DISTRIBUTE
-+ | GFC_OMP_MASK_PARALLEL | GFC_OMP_MASK_DO;
-+ innermost = GFC_OMP_SPLIT_DO;
-+ break;
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ mask = GFC_OMP_MASK_TARGET | GFC_OMP_MASK_TEAMS | GFC_OMP_MASK_DISTRIBUTE
-+ | GFC_OMP_MASK_PARALLEL | GFC_OMP_MASK_DO | GFC_OMP_MASK_SIMD;
-+ innermost = GFC_OMP_SPLIT_SIMD;
-+ break;
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
-+ mask = GFC_OMP_MASK_TARGET | GFC_OMP_MASK_TEAMS
-+ | GFC_OMP_MASK_DISTRIBUTE | GFC_OMP_MASK_SIMD;
-+ innermost = GFC_OMP_SPLIT_SIMD;
-+ break;
-+ case EXEC_OMP_TEAMS:
-+ innermost = GFC_OMP_SPLIT_TEAMS;
-+ break;
-+ case EXEC_OMP_TEAMS_DISTRIBUTE:
-+ mask = GFC_OMP_MASK_TEAMS | GFC_OMP_MASK_DISTRIBUTE;
-+ innermost = GFC_OMP_SPLIT_DISTRIBUTE;
-+ break;
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ mask = GFC_OMP_MASK_TEAMS | GFC_OMP_MASK_DISTRIBUTE
-+ | GFC_OMP_MASK_PARALLEL | GFC_OMP_MASK_DO;
-+ innermost = GFC_OMP_SPLIT_DO;
-+ break;
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ mask = GFC_OMP_MASK_TEAMS | GFC_OMP_MASK_DISTRIBUTE
-+ | GFC_OMP_MASK_PARALLEL | GFC_OMP_MASK_DO | GFC_OMP_MASK_SIMD;
-+ innermost = GFC_OMP_SPLIT_SIMD;
-+ break;
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
-+ mask = GFC_OMP_MASK_TEAMS | GFC_OMP_MASK_DISTRIBUTE | GFC_OMP_MASK_SIMD;
-+ innermost = GFC_OMP_SPLIT_SIMD;
-+ break;
-+ default:
-+ gcc_unreachable ();
-+ }
-+ if (mask == 0)
-+ {
-+ clausesa[innermost] = *code->ext.omp_clauses;
-+ return;
-+ }
- if (code->ext.omp_clauses != NULL)
- {
-- memcpy (&parallel_clauses, code->ext.omp_clauses,
-- sizeof (parallel_clauses));
-- do_clauses.sched_kind = parallel_clauses.sched_kind;
-- do_clauses.chunk_size = parallel_clauses.chunk_size;
-- do_clauses.ordered = parallel_clauses.ordered;
-- do_clauses.collapse = parallel_clauses.collapse;
-- parallel_clauses.sched_kind = OMP_SCHED_NONE;
-- parallel_clauses.chunk_size = NULL;
-- parallel_clauses.ordered = false;
-- parallel_clauses.collapse = 0;
-- omp_clauses = gfc_trans_omp_clauses (&block, &parallel_clauses,
-- code->loc);
-+ if (mask & GFC_OMP_MASK_TARGET)
-+ {
-+ /* First the clauses that are unique to some constructs. */
-+ clausesa[GFC_OMP_SPLIT_TARGET].lists[OMP_LIST_MAP]
-+ = code->ext.omp_clauses->lists[OMP_LIST_MAP];
-+ clausesa[GFC_OMP_SPLIT_TARGET].device
-+ = code->ext.omp_clauses->device;
-+ }
-+ if (mask & GFC_OMP_MASK_TEAMS)
-+ {
-+ /* First the clauses that are unique to some constructs. */
-+ clausesa[GFC_OMP_SPLIT_TEAMS].num_teams
-+ = code->ext.omp_clauses->num_teams;
-+ clausesa[GFC_OMP_SPLIT_TEAMS].thread_limit
-+ = code->ext.omp_clauses->thread_limit;
-+ /* Shared and default clauses are allowed on parallel and teams. */
-+ clausesa[GFC_OMP_SPLIT_TEAMS].lists[OMP_LIST_SHARED]
-+ = code->ext.omp_clauses->lists[OMP_LIST_SHARED];
-+ clausesa[GFC_OMP_SPLIT_TEAMS].default_sharing
-+ = code->ext.omp_clauses->default_sharing;
-+ }
-+ if (mask & GFC_OMP_MASK_DISTRIBUTE)
-+ {
-+ /* First the clauses that are unique to some constructs. */
-+ clausesa[GFC_OMP_SPLIT_DISTRIBUTE].dist_sched_kind
-+ = code->ext.omp_clauses->dist_sched_kind;
-+ clausesa[GFC_OMP_SPLIT_DISTRIBUTE].dist_chunk_size
-+ = code->ext.omp_clauses->dist_chunk_size;
-+ /* Duplicate collapse. */
-+ clausesa[GFC_OMP_SPLIT_DISTRIBUTE].collapse
-+ = code->ext.omp_clauses->collapse;
-+ }
-+ if (mask & GFC_OMP_MASK_PARALLEL)
-+ {
-+ /* First the clauses that are unique to some constructs. */
-+ clausesa[GFC_OMP_SPLIT_PARALLEL].lists[OMP_LIST_COPYIN]
-+ = code->ext.omp_clauses->lists[OMP_LIST_COPYIN];
-+ clausesa[GFC_OMP_SPLIT_PARALLEL].num_threads
-+ = code->ext.omp_clauses->num_threads;
-+ clausesa[GFC_OMP_SPLIT_PARALLEL].proc_bind
-+ = code->ext.omp_clauses->proc_bind;
-+ /* Shared and default clauses are allowed on parallel and teams. */
-+ clausesa[GFC_OMP_SPLIT_PARALLEL].lists[OMP_LIST_SHARED]
-+ = code->ext.omp_clauses->lists[OMP_LIST_SHARED];
-+ clausesa[GFC_OMP_SPLIT_PARALLEL].default_sharing
-+ = code->ext.omp_clauses->default_sharing;
-+ }
-+ if (mask & GFC_OMP_MASK_DO)
-+ {
-+ /* First the clauses that are unique to some constructs. */
-+ clausesa[GFC_OMP_SPLIT_DO].ordered
-+ = code->ext.omp_clauses->ordered;
-+ clausesa[GFC_OMP_SPLIT_DO].sched_kind
-+ = code->ext.omp_clauses->sched_kind;
-+ clausesa[GFC_OMP_SPLIT_DO].chunk_size
-+ = code->ext.omp_clauses->chunk_size;
-+ clausesa[GFC_OMP_SPLIT_DO].nowait
-+ = code->ext.omp_clauses->nowait;
-+ /* Duplicate collapse. */
-+ clausesa[GFC_OMP_SPLIT_DO].collapse
-+ = code->ext.omp_clauses->collapse;
-+ }
-+ if (mask & GFC_OMP_MASK_SIMD)
-+ {
-+ clausesa[GFC_OMP_SPLIT_SIMD].safelen_expr
-+ = code->ext.omp_clauses->safelen_expr;
-+ clausesa[GFC_OMP_SPLIT_SIMD].lists[OMP_LIST_LINEAR]
-+ = code->ext.omp_clauses->lists[OMP_LIST_LINEAR];
-+ clausesa[GFC_OMP_SPLIT_SIMD].lists[OMP_LIST_ALIGNED]
-+ = code->ext.omp_clauses->lists[OMP_LIST_ALIGNED];
-+ /* Duplicate collapse. */
-+ clausesa[GFC_OMP_SPLIT_SIMD].collapse
-+ = code->ext.omp_clauses->collapse;
-+ }
-+ /* Private clause is supported on all constructs but target,
-+ it is enough to put it on the innermost one. For
-+ !$ omp do put it on parallel though,
-+ as that's what we did for OpenMP 3.1. */
-+ clausesa[innermost == GFC_OMP_SPLIT_DO
-+ ? (int) GFC_OMP_SPLIT_PARALLEL
-+ : innermost].lists[OMP_LIST_PRIVATE]
-+ = code->ext.omp_clauses->lists[OMP_LIST_PRIVATE];
-+ /* Firstprivate clause is supported on all constructs but
-+ target and simd. Put it on the outermost of those and
-+ duplicate on parallel. */
-+ if (mask & GFC_OMP_MASK_TEAMS)
-+ clausesa[GFC_OMP_SPLIT_TEAMS].lists[OMP_LIST_FIRSTPRIVATE]
-+ = code->ext.omp_clauses->lists[OMP_LIST_FIRSTPRIVATE];
-+ else if (mask & GFC_OMP_MASK_DISTRIBUTE)
-+ clausesa[GFC_OMP_SPLIT_DISTRIBUTE].lists[OMP_LIST_FIRSTPRIVATE]
-+ = code->ext.omp_clauses->lists[OMP_LIST_FIRSTPRIVATE];
-+ if (mask & GFC_OMP_MASK_PARALLEL)
-+ clausesa[GFC_OMP_SPLIT_PARALLEL].lists[OMP_LIST_FIRSTPRIVATE]
-+ = code->ext.omp_clauses->lists[OMP_LIST_FIRSTPRIVATE];
-+ else if (mask & GFC_OMP_MASK_DO)
-+ clausesa[GFC_OMP_SPLIT_DO].lists[OMP_LIST_FIRSTPRIVATE]
-+ = code->ext.omp_clauses->lists[OMP_LIST_FIRSTPRIVATE];
-+ /* Lastprivate is allowed on do and simd. In
-+ parallel do{, simd} we actually want to put it on
-+ parallel rather than do. */
-+ if (mask & GFC_OMP_MASK_PARALLEL)
-+ clausesa[GFC_OMP_SPLIT_PARALLEL].lists[OMP_LIST_LASTPRIVATE]
-+ = code->ext.omp_clauses->lists[OMP_LIST_LASTPRIVATE];
-+ else if (mask & GFC_OMP_MASK_DO)
-+ clausesa[GFC_OMP_SPLIT_DO].lists[OMP_LIST_LASTPRIVATE]
-+ = code->ext.omp_clauses->lists[OMP_LIST_LASTPRIVATE];
-+ if (mask & GFC_OMP_MASK_SIMD)
-+ clausesa[GFC_OMP_SPLIT_SIMD].lists[OMP_LIST_LASTPRIVATE]
-+ = code->ext.omp_clauses->lists[OMP_LIST_LASTPRIVATE];
-+ /* Reduction is allowed on simd, do, parallel and teams.
-+ Duplicate it on all of them, but omit on do if
-+ parallel is present. */
-+ if (mask & GFC_OMP_MASK_TEAMS)
-+ clausesa[GFC_OMP_SPLIT_TEAMS].lists[OMP_LIST_REDUCTION]
-+ = code->ext.omp_clauses->lists[OMP_LIST_REDUCTION];
-+ if (mask & GFC_OMP_MASK_PARALLEL)
-+ clausesa[GFC_OMP_SPLIT_PARALLEL].lists[OMP_LIST_REDUCTION]
-+ = code->ext.omp_clauses->lists[OMP_LIST_REDUCTION];
-+ else if (mask & GFC_OMP_MASK_DO)
-+ clausesa[GFC_OMP_SPLIT_DO].lists[OMP_LIST_REDUCTION]
-+ = code->ext.omp_clauses->lists[OMP_LIST_REDUCTION];
-+ if (mask & GFC_OMP_MASK_SIMD)
-+ clausesa[GFC_OMP_SPLIT_SIMD].lists[OMP_LIST_REDUCTION]
-+ = code->ext.omp_clauses->lists[OMP_LIST_REDUCTION];
-+ /* FIXME: This is currently being discussed. */
-+ if (mask & GFC_OMP_MASK_PARALLEL)
-+ clausesa[GFC_OMP_SPLIT_PARALLEL].if_expr
-+ = code->ext.omp_clauses->if_expr;
-+ else
-+ clausesa[GFC_OMP_SPLIT_TARGET].if_expr
-+ = code->ext.omp_clauses->if_expr;
- }
-- do_clauses.nowait = true;
-- if (!do_clauses.ordered && do_clauses.sched_kind != OMP_SCHED_STATIC)
-- pblock = &block;
-+ if ((mask & (GFC_OMP_MASK_PARALLEL | GFC_OMP_MASK_DO))
-+ == (GFC_OMP_MASK_PARALLEL | GFC_OMP_MASK_DO))
-+ clausesa[GFC_OMP_SPLIT_DO].nowait = true;
-+}
-+
-+static tree
-+gfc_trans_omp_do_simd (gfc_code *code, stmtblock_t *pblock,
-+ gfc_omp_clauses *clausesa, tree omp_clauses)
-+{
-+ stmtblock_t block;
-+ gfc_omp_clauses clausesa_buf[GFC_OMP_SPLIT_NUM];
-+ tree stmt, body, omp_do_clauses = NULL_TREE;
-+
-+ if (pblock == NULL)
-+ gfc_start_block (&block);
- else
-- pushlevel ();
-- stmt = gfc_trans_omp_do (code, pblock, &do_clauses, omp_clauses);
-- if (TREE_CODE (stmt) != BIND_EXPR)
-- stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0));
-+ gfc_init_block (&block);
-+
-+ if (clausesa == NULL)
-+ {
-+ clausesa = clausesa_buf;
-+ gfc_split_omp_clauses (code, clausesa);
-+ }
-+ if (gfc_option.gfc_flag_openmp)
-+ omp_do_clauses
-+ = gfc_trans_omp_clauses (&block, &clausesa[GFC_OMP_SPLIT_DO], code->loc);
-+ body = gfc_trans_omp_do (code, EXEC_OMP_SIMD, pblock ? pblock : &block,
-+ &clausesa[GFC_OMP_SPLIT_SIMD], omp_clauses);
-+ if (pblock == NULL)
-+ {
-+ if (TREE_CODE (body) != BIND_EXPR)
-+ body = build3_v (BIND_EXPR, NULL, body, poplevel (1, 0));
-+ else
-+ poplevel (0, 0);
-+ }
-+ else if (TREE_CODE (body) != BIND_EXPR)
-+ body = build3_v (BIND_EXPR, NULL, body, NULL_TREE);
-+ if (gfc_option.gfc_flag_openmp)
-+ {
-+ stmt = make_node (OMP_FOR);
-+ TREE_TYPE (stmt) = void_type_node;
-+ OMP_FOR_BODY (stmt) = body;
-+ OMP_FOR_CLAUSES (stmt) = omp_do_clauses;
-+ }
- else
-- poplevel (0, 0);
-+ stmt = body;
-+ gfc_add_expr_to_block (&block, stmt);
-+ return gfc_finish_block (&block);
-+}
-+
-+static tree
-+gfc_trans_omp_parallel_do (gfc_code *code, stmtblock_t *pblock,
-+ gfc_omp_clauses *clausesa)
-+{
-+ stmtblock_t block, *new_pblock = pblock;
-+ gfc_omp_clauses clausesa_buf[GFC_OMP_SPLIT_NUM];
-+ tree stmt, omp_clauses = NULL_TREE;
-+
-+ if (pblock == NULL)
-+ gfc_start_block (&block);
-+ else
-+ gfc_init_block (&block);
-+
-+ if (clausesa == NULL)
-+ {
-+ clausesa = clausesa_buf;
-+ gfc_split_omp_clauses (code, clausesa);
-+ }
-+ omp_clauses
-+ = gfc_trans_omp_clauses (&block, &clausesa[GFC_OMP_SPLIT_PARALLEL],
-+ code->loc);
-+ if (pblock == NULL)
-+ {
-+ if (!clausesa[GFC_OMP_SPLIT_DO].ordered
-+ && clausesa[GFC_OMP_SPLIT_DO].sched_kind != OMP_SCHED_STATIC)
-+ new_pblock = &block;
-+ else
-+ pushlevel ();
-+ }
-+ stmt = gfc_trans_omp_do (code, EXEC_OMP_DO, new_pblock,
-+ &clausesa[GFC_OMP_SPLIT_DO], omp_clauses);
-+ if (pblock == NULL)
-+ {
-+ if (TREE_CODE (stmt) != BIND_EXPR)
-+ stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0));
-+ else
-+ poplevel (0, 0);
-+ }
-+ else if (TREE_CODE (stmt) != BIND_EXPR)
-+ stmt = build3_v (BIND_EXPR, NULL, stmt, NULL_TREE);
- stmt = build2_loc (input_location, OMP_PARALLEL, void_type_node, stmt,
- omp_clauses);
- OMP_PARALLEL_COMBINED (stmt) = 1;
-@@ -1632,6 +3458,50 @@
- }
-
- static tree
-+gfc_trans_omp_parallel_do_simd (gfc_code *code, stmtblock_t *pblock,
-+ gfc_omp_clauses *clausesa)
-+{
-+ stmtblock_t block;
-+ gfc_omp_clauses clausesa_buf[GFC_OMP_SPLIT_NUM];
-+ tree stmt, omp_clauses = NULL_TREE;
-+
-+ if (pblock == NULL)
-+ gfc_start_block (&block);
-+ else
-+ gfc_init_block (&block);
-+
-+ if (clausesa == NULL)
-+ {
-+ clausesa = clausesa_buf;
-+ gfc_split_omp_clauses (code, clausesa);
-+ }
-+ if (gfc_option.gfc_flag_openmp)
-+ omp_clauses
-+ = gfc_trans_omp_clauses (&block, &clausesa[GFC_OMP_SPLIT_PARALLEL],
-+ code->loc);
-+ if (pblock == NULL)
-+ pushlevel ();
-+ stmt = gfc_trans_omp_do_simd (code, pblock, clausesa, omp_clauses);
-+ if (pblock == NULL)
-+ {
-+ if (TREE_CODE (stmt) != BIND_EXPR)
-+ stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0));
-+ else
-+ poplevel (0, 0);
-+ }
-+ else if (TREE_CODE (stmt) != BIND_EXPR)
-+ stmt = build3_v (BIND_EXPR, NULL, stmt, NULL_TREE);
-+ if (gfc_option.gfc_flag_openmp)
-+ {
-+ stmt = build2_loc (input_location, OMP_PARALLEL, void_type_node, stmt,
-+ omp_clauses);
-+ OMP_PARALLEL_COMBINED (stmt) = 1;
-+ }
-+ gfc_add_expr_to_block (&block, stmt);
-+ return gfc_finish_block (&block);
-+}
-+
-+static tree
- gfc_trans_omp_parallel_sections (gfc_code *code)
- {
- stmtblock_t block;
-@@ -1743,6 +3613,13 @@
- }
-
- static tree
-+gfc_trans_omp_taskgroup (gfc_code *code)
-+{
-+ tree stmt = gfc_trans_code (code->block->next);
-+ return build1_loc (input_location, OMP_TASKGROUP, void_type_node, stmt);
-+}
-+
-+static tree
- gfc_trans_omp_taskwait (void)
- {
- tree decl = builtin_decl_explicit (BUILT_IN_GOMP_TASKWAIT);
-@@ -1757,6 +3634,170 @@
- }
-
- static tree
-+gfc_trans_omp_distribute (gfc_code *code, gfc_omp_clauses *clausesa)
-+{
-+ stmtblock_t block;
-+ gfc_omp_clauses clausesa_buf[GFC_OMP_SPLIT_NUM];
-+ tree stmt, omp_clauses = NULL_TREE;
-+
-+ gfc_start_block (&block);
-+ if (clausesa == NULL)
-+ {
-+ clausesa = clausesa_buf;
-+ gfc_split_omp_clauses (code, clausesa);
-+ }
-+ if (gfc_option.gfc_flag_openmp)
-+ omp_clauses
-+ = gfc_trans_omp_clauses (&block, &clausesa[GFC_OMP_SPLIT_DISTRIBUTE],
-+ code->loc);
-+ switch (code->op)
-+ {
-+ case EXEC_OMP_DISTRIBUTE:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE:
-+ /* This is handled in gfc_trans_omp_do. */
-+ gcc_unreachable ();
-+ break;
-+ case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ stmt = gfc_trans_omp_parallel_do (code, &block, clausesa);
-+ if (TREE_CODE (stmt) != BIND_EXPR)
-+ stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0));
-+ else
-+ poplevel (0, 0);
-+ break;
-+ case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ stmt = gfc_trans_omp_parallel_do_simd (code, &block, clausesa);
-+ if (TREE_CODE (stmt) != BIND_EXPR)
-+ stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0));
-+ else
-+ poplevel (0, 0);
-+ break;
-+ case EXEC_OMP_DISTRIBUTE_SIMD:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
-+ stmt = gfc_trans_omp_do (code, EXEC_OMP_SIMD, &block,
-+ &clausesa[GFC_OMP_SPLIT_SIMD], NULL_TREE);
-+ if (TREE_CODE (stmt) != BIND_EXPR)
-+ stmt = build3_v (BIND_EXPR, NULL, stmt, poplevel (1, 0));
-+ else
-+ poplevel (0, 0);
-+ break;
-+ default:
-+ gcc_unreachable ();
-+ }
-+ if (gfc_option.gfc_flag_openmp)
-+ {
-+ tree distribute = make_node (OMP_DISTRIBUTE);
-+ TREE_TYPE (distribute) = void_type_node;
-+ OMP_FOR_BODY (distribute) = stmt;
-+ OMP_FOR_CLAUSES (distribute) = omp_clauses;
-+ stmt = distribute;
-+ }
-+ gfc_add_expr_to_block (&block, stmt);
-+ return gfc_finish_block (&block);
-+}
-+
-+static tree
-+gfc_trans_omp_teams (gfc_code *code, gfc_omp_clauses *clausesa)
-+{
-+ stmtblock_t block;
-+ gfc_omp_clauses clausesa_buf[GFC_OMP_SPLIT_NUM];
-+ tree stmt, omp_clauses = NULL_TREE;
-+
-+ gfc_start_block (&block);
-+ if (clausesa == NULL)
-+ {
-+ clausesa = clausesa_buf;
-+ gfc_split_omp_clauses (code, clausesa);
-+ }
-+ if (gfc_option.gfc_flag_openmp)
-+ omp_clauses
-+ = gfc_trans_omp_clauses (&block, &clausesa[GFC_OMP_SPLIT_TEAMS],
-+ code->loc);
-+ switch (code->op)
-+ {
-+ case EXEC_OMP_TARGET_TEAMS:
-+ case EXEC_OMP_TEAMS:
-+ stmt = gfc_trans_omp_code (code->block->next, true);
-+ break;
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE:
-+ stmt = gfc_trans_omp_do (code, EXEC_OMP_DISTRIBUTE, NULL,
-+ &clausesa[GFC_OMP_SPLIT_DISTRIBUTE],
-+ NULL);
-+ break;
-+ default:
-+ stmt = gfc_trans_omp_distribute (code, clausesa);
-+ break;
-+ }
-+ stmt = build2_loc (input_location, OMP_TEAMS, void_type_node, stmt,
-+ omp_clauses);
-+ gfc_add_expr_to_block (&block, stmt);
-+ return gfc_finish_block (&block);
-+}
-+
-+static tree
-+gfc_trans_omp_target (gfc_code *code)
-+{
-+ stmtblock_t block;
-+ gfc_omp_clauses clausesa[GFC_OMP_SPLIT_NUM];
-+ tree stmt, omp_clauses = NULL_TREE;
-+
-+ gfc_start_block (&block);
-+ gfc_split_omp_clauses (code, clausesa);
-+ if (gfc_option.gfc_flag_openmp)
-+ omp_clauses
-+ = gfc_trans_omp_clauses (&block, &clausesa[GFC_OMP_SPLIT_TARGET],
-+ code->loc);
-+ if (code->op == EXEC_OMP_TARGET)
-+ stmt = gfc_trans_omp_code (code->block->next, true);
-+ else
-+ stmt = gfc_trans_omp_teams (code, clausesa);
-+ if (TREE_CODE (stmt) != BIND_EXPR)
-+ stmt = build3_v (BIND_EXPR, NULL, stmt, NULL_TREE);
-+ if (gfc_option.gfc_flag_openmp)
-+ stmt = build2_loc (input_location, OMP_TARGET, void_type_node, stmt,
-+ omp_clauses);
-+ gfc_add_expr_to_block (&block, stmt);
-+ return gfc_finish_block (&block);
-+}
-+
-+static tree
-+gfc_trans_omp_target_data (gfc_code *code)
-+{
-+ stmtblock_t block;
-+ tree stmt, omp_clauses;
-+
-+ gfc_start_block (&block);
-+ omp_clauses = gfc_trans_omp_clauses (&block, code->ext.omp_clauses,
-+ code->loc);
-+ stmt = gfc_trans_omp_code (code->block->next, true);
-+ stmt = build2_loc (input_location, OMP_TARGET_DATA, void_type_node, stmt,
-+ omp_clauses);
-+ gfc_add_expr_to_block (&block, stmt);
-+ return gfc_finish_block (&block);
-+}
-+
-+static tree
-+gfc_trans_omp_target_update (gfc_code *code)
-+{
-+ stmtblock_t block;
-+ tree stmt, omp_clauses;
-+
-+ gfc_start_block (&block);
-+ omp_clauses = gfc_trans_omp_clauses (&block, code->ext.omp_clauses,
-+ code->loc);
-+ stmt = build1_loc (input_location, OMP_TARGET_UPDATE, void_type_node,
-+ omp_clauses);
-+ gfc_add_expr_to_block (&block, stmt);
-+ return gfc_finish_block (&block);
-+}
-+
-+static tree
- gfc_trans_omp_workshare (gfc_code *code, gfc_omp_clauses *clauses)
- {
- tree res, tmp, stmt;
-@@ -1923,10 +3964,23 @@
- return gfc_trans_omp_atomic (code);
- case EXEC_OMP_BARRIER:
- return gfc_trans_omp_barrier ();
-+ case EXEC_OMP_CANCEL:
-+ return gfc_trans_omp_cancel (code);
-+ case EXEC_OMP_CANCELLATION_POINT:
-+ return gfc_trans_omp_cancellation_point (code);
- case EXEC_OMP_CRITICAL:
- return gfc_trans_omp_critical (code);
-+ case EXEC_OMP_DISTRIBUTE:
- case EXEC_OMP_DO:
-- return gfc_trans_omp_do (code, NULL, code->ext.omp_clauses, NULL);
-+ case EXEC_OMP_SIMD:
-+ return gfc_trans_omp_do (code, code->op, NULL, code->ext.omp_clauses,
-+ NULL);
-+ case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_DISTRIBUTE_SIMD:
-+ return gfc_trans_omp_distribute (code, NULL);
-+ case EXEC_OMP_DO_SIMD:
-+ return gfc_trans_omp_do_simd (code, NULL, NULL, NULL_TREE);
- case EXEC_OMP_FLUSH:
- return gfc_trans_omp_flush ();
- case EXEC_OMP_MASTER:
-@@ -1936,7 +3990,9 @@
- case EXEC_OMP_PARALLEL:
- return gfc_trans_omp_parallel (code);
- case EXEC_OMP_PARALLEL_DO:
-- return gfc_trans_omp_parallel_do (code);
-+ return gfc_trans_omp_parallel_do (code, NULL, NULL);
-+ case EXEC_OMP_PARALLEL_DO_SIMD:
-+ return gfc_trans_omp_parallel_do_simd (code, NULL, NULL);
- case EXEC_OMP_PARALLEL_SECTIONS:
- return gfc_trans_omp_parallel_sections (code);
- case EXEC_OMP_PARALLEL_WORKSHARE:
-@@ -1945,12 +4001,31 @@
- return gfc_trans_omp_sections (code, code->ext.omp_clauses);
- case EXEC_OMP_SINGLE:
- return gfc_trans_omp_single (code, code->ext.omp_clauses);
-+ case EXEC_OMP_TARGET:
-+ case EXEC_OMP_TARGET_TEAMS:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
-+ return gfc_trans_omp_target (code);
-+ case EXEC_OMP_TARGET_DATA:
-+ return gfc_trans_omp_target_data (code);
-+ case EXEC_OMP_TARGET_UPDATE:
-+ return gfc_trans_omp_target_update (code);
- case EXEC_OMP_TASK:
- return gfc_trans_omp_task (code);
-+ case EXEC_OMP_TASKGROUP:
-+ return gfc_trans_omp_taskgroup (code);
- case EXEC_OMP_TASKWAIT:
- return gfc_trans_omp_taskwait ();
- case EXEC_OMP_TASKYIELD:
- return gfc_trans_omp_taskyield ();
-+ case EXEC_OMP_TEAMS:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
-+ return gfc_trans_omp_teams (code, NULL);
- case EXEC_OMP_WORKSHARE:
- return gfc_trans_omp_workshare (code, code->ext.omp_clauses);
- default:
-@@ -1957,3 +4032,22 @@
- gcc_unreachable ();
- }
- }
-+
-+void
-+gfc_trans_omp_declare_simd (gfc_namespace *ns)
-+{
-+ if (ns->entries)
-+ return;
-+
-+ gfc_omp_declare_simd *ods;
-+ for (ods = ns->omp_declare_simd; ods; ods = ods->next)
-+ {
-+ tree c = gfc_trans_omp_clauses (NULL, ods->clauses, ods->where, true);
-+ tree fndecl = ns->proc_name->backend_decl;
-+ if (c != NULL_TREE)
-+ c = tree_cons (NULL_TREE, c, NULL_TREE);
-+ c = build_tree_list (get_identifier ("omp declare simd"), c);
-+ TREE_CHAIN (c) = DECL_ATTRIBUTES (fndecl);
-+ DECL_ATTRIBUTES (fndecl) = c;
-+ }
-+}
-Index: gcc/fortran/gfortran.h
-===================================================================
---- a/src/gcc/fortran/gfortran.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/gfortran.h (.../branches/gcc-4_9-branch)
-@@ -211,8 +211,30 @@
- ST_OMP_PARALLEL, ST_OMP_PARALLEL_DO, ST_OMP_PARALLEL_SECTIONS,
- ST_OMP_PARALLEL_WORKSHARE, ST_OMP_SECTIONS, ST_OMP_SECTION, ST_OMP_SINGLE,
- ST_OMP_THREADPRIVATE, ST_OMP_WORKSHARE, ST_OMP_TASK, ST_OMP_END_TASK,
-- ST_OMP_TASKWAIT, ST_OMP_TASKYIELD, ST_PROCEDURE, ST_GENERIC, ST_CRITICAL,
-- ST_END_CRITICAL, ST_GET_FCN_CHARACTERISTICS, ST_LOCK, ST_UNLOCK, ST_NONE
-+ ST_OMP_TASKWAIT, ST_OMP_TASKYIELD, ST_OMP_CANCEL, ST_OMP_CANCELLATION_POINT,
-+ ST_OMP_TASKGROUP, ST_OMP_END_TASKGROUP, ST_OMP_SIMD, ST_OMP_END_SIMD,
-+ ST_OMP_DO_SIMD, ST_OMP_END_DO_SIMD, ST_OMP_PARALLEL_DO_SIMD,
-+ ST_OMP_END_PARALLEL_DO_SIMD, ST_OMP_DECLARE_SIMD, ST_OMP_DECLARE_REDUCTION,
-+ ST_OMP_TARGET, ST_OMP_END_TARGET, ST_OMP_TARGET_DATA, ST_OMP_END_TARGET_DATA,
-+ ST_OMP_TARGET_UPDATE, ST_OMP_DECLARE_TARGET,
-+ ST_OMP_TEAMS, ST_OMP_END_TEAMS, ST_OMP_DISTRIBUTE, ST_OMP_END_DISTRIBUTE,
-+ ST_OMP_DISTRIBUTE_SIMD, ST_OMP_END_DISTRIBUTE_SIMD,
-+ ST_OMP_DISTRIBUTE_PARALLEL_DO, ST_OMP_END_DISTRIBUTE_PARALLEL_DO,
-+ ST_OMP_DISTRIBUTE_PARALLEL_DO_SIMD, ST_OMP_END_DISTRIBUTE_PARALLEL_DO_SIMD,
-+ ST_OMP_TARGET_TEAMS, ST_OMP_END_TARGET_TEAMS, ST_OMP_TEAMS_DISTRIBUTE,
-+ ST_OMP_END_TEAMS_DISTRIBUTE, ST_OMP_TEAMS_DISTRIBUTE_SIMD,
-+ ST_OMP_END_TEAMS_DISTRIBUTE_SIMD, ST_OMP_TARGET_TEAMS_DISTRIBUTE,
-+ ST_OMP_END_TARGET_TEAMS_DISTRIBUTE, ST_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD,
-+ ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_SIMD, ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO,
-+ ST_OMP_END_TEAMS_DISTRIBUTE_PARALLEL_DO,
-+ ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO,
-+ ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO,
-+ ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD,
-+ ST_OMP_END_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD,
-+ ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD,
-+ ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD,
-+ ST_PROCEDURE, ST_GENERIC, ST_CRITICAL, ST_END_CRITICAL,
-+ ST_GET_FCN_CHARACTERISTICS, ST_LOCK, ST_UNLOCK, ST_NONE
- }
- gfc_statement;
-
-@@ -808,6 +830,13 @@
- variable for SELECT_TYPE or ASSOCIATE. */
- unsigned select_type_temporary:1, associate_var:1;
-
-+ /* This is omp_{out,in,priv,orig} artificial variable in
-+ !$OMP DECLARE REDUCTION. */
-+ unsigned omp_udr_artificial_var:1;
-+
-+ /* Mentioned in OMP DECLARE TARGET. */
-+ unsigned omp_declare_target:1;
-+
- /* Attributes set by compiler extensions (!GCC$ ATTRIBUTES). */
- unsigned ext_attr:EXT_ATTR_NUM;
-
-@@ -1028,6 +1057,62 @@
-
- #define gfc_get_namelist() XCNEW (gfc_namelist)
-
-+typedef enum
-+{
-+ OMP_REDUCTION_NONE = -1,
-+ OMP_REDUCTION_PLUS = INTRINSIC_PLUS,
-+ OMP_REDUCTION_MINUS = INTRINSIC_MINUS,
-+ OMP_REDUCTION_TIMES = INTRINSIC_TIMES,
-+ OMP_REDUCTION_AND = INTRINSIC_AND,
-+ OMP_REDUCTION_OR = INTRINSIC_OR,
-+ OMP_REDUCTION_EQV = INTRINSIC_EQV,
-+ OMP_REDUCTION_NEQV = INTRINSIC_NEQV,
-+ OMP_REDUCTION_MAX = GFC_INTRINSIC_END,
-+ OMP_REDUCTION_MIN,
-+ OMP_REDUCTION_IAND,
-+ OMP_REDUCTION_IOR,
-+ OMP_REDUCTION_IEOR,
-+ OMP_REDUCTION_USER
-+}
-+gfc_omp_reduction_op;
-+
-+typedef enum
-+{
-+ OMP_DEPEND_IN,
-+ OMP_DEPEND_OUT,
-+ OMP_DEPEND_INOUT
-+}
-+gfc_omp_depend_op;
-+
-+typedef enum
-+{
-+ OMP_MAP_ALLOC,
-+ OMP_MAP_TO,
-+ OMP_MAP_FROM,
-+ OMP_MAP_TOFROM
-+}
-+gfc_omp_map_op;
-+
-+/* For use in OpenMP clauses in case we need extra information
-+ (aligned clause alignment, linear clause step, etc.). */
-+
-+typedef struct gfc_omp_namelist
-+{
-+ struct gfc_symbol *sym;
-+ struct gfc_expr *expr;
-+ union
-+ {
-+ gfc_omp_reduction_op reduction_op;
-+ gfc_omp_depend_op depend_op;
-+ gfc_omp_map_op map_op;
-+ } u;
-+ struct gfc_omp_namelist_udr *udr;
-+ struct gfc_omp_namelist *next;
-+}
-+gfc_omp_namelist;
-+
-+#define gfc_get_omp_namelist() XCNEW (gfc_omp_namelist)
-+
- enum
- {
- OMP_LIST_PRIVATE,
-@@ -1036,20 +1121,14 @@
- OMP_LIST_COPYPRIVATE,
- OMP_LIST_SHARED,
- OMP_LIST_COPYIN,
-- OMP_LIST_PLUS,
-- OMP_LIST_REDUCTION_FIRST = OMP_LIST_PLUS,
-- OMP_LIST_MULT,
-- OMP_LIST_SUB,
-- OMP_LIST_AND,
-- OMP_LIST_OR,
-- OMP_LIST_EQV,
-- OMP_LIST_NEQV,
-- OMP_LIST_MAX,
-- OMP_LIST_MIN,
-- OMP_LIST_IAND,
-- OMP_LIST_IOR,
-- OMP_LIST_IEOR,
-- OMP_LIST_REDUCTION_LAST = OMP_LIST_IEOR,
-+ OMP_LIST_UNIFORM,
-+ OMP_LIST_ALIGNED,
-+ OMP_LIST_LINEAR,
-+ OMP_LIST_DEPEND,
-+ OMP_LIST_MAP,
-+ OMP_LIST_TO,
-+ OMP_LIST_FROM,
-+ OMP_LIST_REDUCTION,
- OMP_LIST_NUM
- };
-
-@@ -1075,17 +1154,44 @@
- OMP_DEFAULT_FIRSTPRIVATE
- };
-
-+enum gfc_omp_proc_bind_kind
-+{
-+ OMP_PROC_BIND_UNKNOWN,
-+ OMP_PROC_BIND_MASTER,
-+ OMP_PROC_BIND_SPREAD,
-+ OMP_PROC_BIND_CLOSE
-+};
-+
-+enum gfc_omp_cancel_kind
-+{
-+ OMP_CANCEL_UNKNOWN,
-+ OMP_CANCEL_PARALLEL,
-+ OMP_CANCEL_SECTIONS,
-+ OMP_CANCEL_DO,
-+ OMP_CANCEL_TASKGROUP
-+};
-+
- typedef struct gfc_omp_clauses
- {
- struct gfc_expr *if_expr;
- struct gfc_expr *final_expr;
- struct gfc_expr *num_threads;
-- gfc_namelist *lists[OMP_LIST_NUM];
-+ gfc_omp_namelist *lists[OMP_LIST_NUM];
- enum gfc_omp_sched_kind sched_kind;
- struct gfc_expr *chunk_size;
- enum gfc_omp_default_sharing default_sharing;
- int collapse;
- bool nowait, ordered, untied, mergeable;
-+ bool inbranch, notinbranch;
-+ enum gfc_omp_cancel_kind cancel;
-+ enum gfc_omp_proc_bind_kind proc_bind;
-+ struct gfc_expr *safelen_expr;
-+ struct gfc_expr *simdlen_expr;
-+ struct gfc_expr *num_teams;
-+ struct gfc_expr *device;
-+ struct gfc_expr *thread_limit;
-+ enum gfc_omp_sched_kind dist_sched_kind;
-+ struct gfc_expr *dist_chunk_size;
- }
- gfc_omp_clauses;
-
-@@ -1092,6 +1198,49 @@
- #define gfc_get_omp_clauses() XCNEW (gfc_omp_clauses)
-
-
-+/* Node in the linked list used for storing !$omp declare simd constructs. */
-+
-+typedef struct gfc_omp_declare_simd
-+{
-+ struct gfc_omp_declare_simd *next;
-+ locus where; /* Where the !$omp declare simd construct occurred. */
-+
-+ gfc_symbol *proc_name;
-+
-+ gfc_omp_clauses *clauses;
-+}
-+gfc_omp_declare_simd;
-+#define gfc_get_omp_declare_simd() XCNEW (gfc_omp_declare_simd)
-+
-+typedef struct gfc_omp_udr
-+{
-+ struct gfc_omp_udr *next;
-+ locus where; /* Where the !$omp declare reduction construct occurred. */
-+
-+ const char *name;
-+ gfc_typespec ts;
-+ gfc_omp_reduction_op rop;
-+
-+ struct gfc_symbol *omp_out;
-+ struct gfc_symbol *omp_in;
-+ struct gfc_namespace *combiner_ns;
-+
-+ struct gfc_symbol *omp_priv;
-+ struct gfc_symbol *omp_orig;
-+ struct gfc_namespace *initializer_ns;
-+}
-+gfc_omp_udr;
-+#define gfc_get_omp_udr() XCNEW (gfc_omp_udr)
-+
-+typedef struct gfc_omp_namelist_udr
-+{
-+ struct gfc_omp_udr *udr;
-+ struct gfc_code *combiner;
-+ struct gfc_code *initializer;
-+}
-+gfc_omp_namelist_udr;
-+#define gfc_get_omp_namelist_udr() XCNEW (gfc_omp_namelist_udr)
-+
- /* The gfc_st_label structure is a BBT attached to a namespace that
- records the usage of statement labels within that space. */
-
-@@ -1292,7 +1441,7 @@
- typedef struct gfc_common_head
- {
- locus where;
-- char use_assoc, saved, threadprivate;
-+ char use_assoc, saved, threadprivate, omp_declare_target;
- char name[GFC_MAX_SYMBOL_LEN + 1];
- struct gfc_symbol *head;
- const char* binding_label;
-@@ -1368,6 +1517,7 @@
- gfc_user_op *uop;
- gfc_common_head *common;
- gfc_typebound_proc *tb;
-+ gfc_omp_udr *omp_udr;
- }
- n;
- }
-@@ -1398,6 +1548,8 @@
- gfc_symtree *uop_root;
- /* Tree containing all the common blocks. */
- gfc_symtree *common_root;
-+ /* Tree containing all the OpenMP user defined reductions. */
-+ gfc_symtree *omp_udr_root;
-
- /* Tree containing type-bound procedures. */
- gfc_symtree *tb_sym_root;
-@@ -1464,6 +1616,9 @@
- /* A list of USE statements in this namespace. */
- gfc_use_list *use_stmts;
-
-+ /* Linked list of !$omp declare simd constructs. */
-+ struct gfc_omp_declare_simd *omp_declare_simd;
-+
- /* Set to 1 if namespace is a BLOCK DATA program unit. */
- unsigned is_block_data:1;
-
-@@ -1480,6 +1635,9 @@
- /* Set to 1 if symbols in this namespace should be 'construct entities',
- i.e. for BLOCK local variables. */
- unsigned construct_entities:1;
-+
-+ /* Set to 1 for !$OMP DECLARE REDUCTION namespaces. */
-+ unsigned omp_udr_ns:1;
- }
- gfc_namespace;
-
-@@ -2111,16 +2269,31 @@
- EXEC_OMP_SECTIONS, EXEC_OMP_SINGLE, EXEC_OMP_WORKSHARE,
- EXEC_OMP_ATOMIC, EXEC_OMP_BARRIER, EXEC_OMP_END_NOWAIT,
- EXEC_OMP_END_SINGLE, EXEC_OMP_TASK, EXEC_OMP_TASKWAIT,
-- EXEC_OMP_TASKYIELD
-+ EXEC_OMP_TASKYIELD, EXEC_OMP_CANCEL, EXEC_OMP_CANCELLATION_POINT,
-+ EXEC_OMP_TASKGROUP, EXEC_OMP_SIMD, EXEC_OMP_DO_SIMD,
-+ EXEC_OMP_PARALLEL_DO_SIMD, EXEC_OMP_TARGET, EXEC_OMP_TARGET_DATA,
-+ EXEC_OMP_TEAMS, EXEC_OMP_DISTRIBUTE, EXEC_OMP_DISTRIBUTE_SIMD,
-+ EXEC_OMP_DISTRIBUTE_PARALLEL_DO, EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD,
-+ EXEC_OMP_TARGET_TEAMS, EXEC_OMP_TEAMS_DISTRIBUTE,
-+ EXEC_OMP_TEAMS_DISTRIBUTE_SIMD, EXEC_OMP_TARGET_TEAMS_DISTRIBUTE,
-+ EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD,
-+ EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO,
-+ EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO,
-+ EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD,
-+ EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD,
-+ EXEC_OMP_TARGET_UPDATE
- }
- gfc_exec_op;
-
- typedef enum
- {
-- GFC_OMP_ATOMIC_UPDATE,
-- GFC_OMP_ATOMIC_READ,
-- GFC_OMP_ATOMIC_WRITE,
-- GFC_OMP_ATOMIC_CAPTURE
-+ GFC_OMP_ATOMIC_UPDATE = 0,
-+ GFC_OMP_ATOMIC_READ = 1,
-+ GFC_OMP_ATOMIC_WRITE = 2,
-+ GFC_OMP_ATOMIC_CAPTURE = 3,
-+ GFC_OMP_ATOMIC_MASK = 3,
-+ GFC_OMP_ATOMIC_SEQ_CST = 4,
-+ GFC_OMP_ATOMIC_SWAP = 8
- }
- gfc_omp_atomic_op;
-
-@@ -2172,7 +2345,7 @@
- gfc_entry_list *entry;
- gfc_omp_clauses *omp_clauses;
- const char *omp_name;
-- gfc_namelist *omp_namelist;
-+ gfc_omp_namelist *omp_namelist;
- bool omp_bool;
- gfc_omp_atomic_op omp_atomic;
- }
-@@ -2573,6 +2746,7 @@
- bool gfc_add_result (symbol_attribute *, const char *, locus *);
- bool gfc_add_save (symbol_attribute *, save_state, const char *, locus *);
- bool gfc_add_threadprivate (symbol_attribute *, const char *, locus *);
-+bool gfc_add_omp_declare_target (symbol_attribute *, const char *, locus *);
- bool gfc_add_saved_common (symbol_attribute *, locus *);
- bool gfc_add_target (symbol_attribute *, locus *);
- bool gfc_add_dummy (symbol_attribute *, const char *, locus *);
-@@ -2728,6 +2902,7 @@
- void gfc_free_forall_iterator (gfc_forall_iterator *);
- void gfc_free_alloc_list (gfc_alloc *);
- void gfc_free_namelist (gfc_namelist *);
-+void gfc_free_omp_namelist (gfc_omp_namelist *);
- void gfc_free_equiv (gfc_equiv *);
- void gfc_free_equiv_until (gfc_equiv *, gfc_equiv *);
- void gfc_free_data (gfc_data *);
-@@ -2739,10 +2914,16 @@
- /* openmp.c */
- struct gfc_omp_saved_state { void *ptrs[2]; int ints[1]; };
- void gfc_free_omp_clauses (gfc_omp_clauses *);
-+void gfc_free_omp_declare_simd (gfc_omp_declare_simd *);
-+void gfc_free_omp_declare_simd_list (gfc_omp_declare_simd *);
-+void gfc_free_omp_udr (gfc_omp_udr *);
-+gfc_omp_udr *gfc_omp_udr_find (gfc_symtree *, gfc_typespec *);
- void gfc_resolve_omp_directive (gfc_code *, gfc_namespace *);
- void gfc_resolve_do_iterator (gfc_code *, gfc_symbol *);
- void gfc_resolve_omp_parallel_blocks (gfc_code *, gfc_namespace *);
- void gfc_resolve_omp_do_blocks (gfc_code *, gfc_namespace *);
-+void gfc_resolve_omp_declare_simd (gfc_namespace *);
-+void gfc_resolve_omp_udrs (gfc_symtree *);
- void gfc_omp_save_and_clear_state (struct gfc_omp_saved_state *);
- void gfc_omp_restore_state (struct gfc_omp_saved_state *);
-
-@@ -2833,6 +3014,7 @@
- /* resolve.c */
- bool gfc_resolve_expr (gfc_expr *);
- void gfc_resolve (gfc_namespace *);
-+void gfc_resolve_code (gfc_code *, gfc_namespace *);
- void gfc_resolve_blocks (gfc_code *, gfc_namespace *);
- int gfc_impure_variable (gfc_symbol *);
- int gfc_pure (gfc_symbol *);
-@@ -3019,6 +3201,7 @@
- typedef int (*walk_code_fn_t) (gfc_code **, int *, void *);
- typedef int (*walk_expr_fn_t) (gfc_expr **, int *, void *);
-
-+int gfc_dummy_code_callback (gfc_code **, int *, void *);
- int gfc_expr_walker (gfc_expr **, walk_expr_fn_t, void *);
- int gfc_code_walker (gfc_code **, walk_code_fn_t, walk_expr_fn_t, void *);
-
-Index: gcc/fortran/ChangeLog
-===================================================================
---- a/src/gcc/fortran/ChangeLog (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/ChangeLog (.../branches/gcc-4_9-branch)
-@@ -1,3 +1,617 @@
-+2014-07-07 Paul Thomas <pault@gcc.gnu.org>
-+
-+ PR fortran/61459
-+ PR fortran/58883
-+ * trans-expr.c (fcncall_realloc_result): Use the natural type
-+ for the address expression of 'res_desc'.
-+
-+2014-07-07 Dominique d'Humieres <dominiq@lps.ens.fr>
-+ Mikael Morin <mikael@gcc.gnu.org>
-+
-+ PR fortran/41936
-+ * trans-expr.c (gfc_conv_expr_reference): Deallocate array
-+ components.
-+
-+2014-07-02 Jakub Jelinek <jakub@redhat.com>
-+ Fritz Reese <Reese-Fritz@zai.com>
-+
-+ * decl.c (variable_decl): Reject old style initialization
-+ for derived type components.
-+
-+2014-06-30 Jakub Jelinek <jakub@redhat.com>
-+
-+ * module.c (MOD_VERSION): Revert back to 12.
-+ (MOD_VERSION_OMP4): Define.
-+ (module_omp4): New variable.
-+ (mio_symbol): Call mio_omp_declare_simd only if module_omp4.
-+ (read_module): Load omp udrs only if module_omp4.
-+ (write_module): Write omp udrs only if module_omp4.
-+ (find_omp_declare_simd): New function.
-+ (gfc_dump_module): Compute module_omp4. Use MOD_VERSION_OMP4
-+ if module_omp4.
-+ (gfc_use_module): Handle MOD_VERSION_OMP4, set module_omp4.
-+
-+ Backported from mainline
-+ 2014-06-25 Jakub Jelinek <jakub@redhat.com>
-+
-+ * trans.h (gfc_omp_clause_linear_ctor): New prototype.
-+ * trans-openmp.c (gfc_omp_linear_clause_add_loop,
-+ gfc_omp_clause_linear_ctor): New functions.
-+ (gfc_trans_omp_clauses): Make sure OMP_CLAUSE_LINEAR_STEP has
-+ correct type. Set OMP_CLAUSE_LINEAR_ARRAY flag if needed.
-+ * f95-lang.c (LANG_HOOKS_OMP_CLAUSE_LINEAR_CTOR): Redefine.
-+
-+ 2014-06-24 Jakub Jelinek <jakub@redhat.com>
-+
-+ * dump-parse-tree.c (show_omp_namelist): Use n->udr->udr instead
-+ of n->udr.
-+ * f95-lang.c (gfc_init_builtin_functions): Initialize
-+ BUILT_IN_ASSUME_ALIGNED.
-+ * gfortran.h (gfc_omp_namelist): Change udr field type to
-+ struct gfc_omp_namelist_udr.
-+ (gfc_omp_namelist_udr): New type.
-+ (gfc_get_omp_namelist_udr): Define.
-+ (gfc_resolve_code): New prototype.
-+ * match.c (gfc_free_omp_namelist): Free name->udr.
-+ * module.c (intrinsics): Add INTRINSIC_USER.
-+ (fix_mio_expr): Likewise.
-+ (mio_expr): Handle INSTRINSIC_USER and non-resolved EXPR_FUNCTION.
-+ * openmp.c (gfc_match_omp_clauses): Adjust initialization of n->udr.
-+ (gfc_match_omp_declare_reduction): Treat len=: the same as len=*.
-+ Set attr.flavor on omp_{out,in,priv,orig} artificial variables.
-+ (struct resolve_omp_udr_callback_data): New type.
-+ (resolve_omp_udr_callback, resolve_omp_udr_callback2,
-+ resolve_omp_udr_clause): New functions.
-+ (resolve_omp_clauses): Adjust for n->udr changes, resolve UDR clauses
-+ here.
-+ (omp_udr_callback): Don't check for implicitly declared functions
-+ here.
-+ (gfc_resolve_omp_udr): Don't call gfc_resolve. Don't check for
-+ implicitly declared subroutines here.
-+ * resolve.c (resolve_function): If value.function.isym is non-NULL,
-+ consider it already resolved.
-+ (resolve_code): Renamed to ...
-+ (gfc_resolve_code): ... this. No longer static.
-+ (gfc_resolve_blocks, generate_component_assignments, resolve_codes):
-+ Adjust callers.
-+ * trans-openmp.c (gfc_omp_privatize_by_reference): Don't privatize
-+ by reference type (C_PTR) variables.
-+ (gfc_omp_finish_clause): Make sure OMP_CLAUSE_SIZE is non-NULL.
-+ (gfc_trans_omp_udr_expr): Remove.
-+ (gfc_trans_omp_array_reduction_or_udr): Adjust for n->udr changes.
-+ Don't call gfc_trans_omp_udr_expr, even for sym->attr.dimension
-+ expand it as assignment or subroutine call. Don't initialize
-+ value.function.isym.
-+
-+ 2014-06-18 Tobias Burnus <burnus@net-b.de>
-+
-+ * gfortran.texi (OpenMP): Update refs to OpenMP 4.0.
-+ * intrinsic.texi (OpenMP Modules): Ditto.
-+
-+ 2014-06-18 Jakub Jelinek <jakub@redhat.com>
-+
-+ * cpp.c (cpp_define_builtins): Change _OPENMP macro to
-+ 201307.
-+ * dump-parse-tree.c (show_omp_namelist): Add list_type
-+ argument. Adjust for rop being u.reduction_op now,
-+ handle depend_op or map_op.
-+ (show_omp_node): Adjust callers. Print some new
-+ OpenMP 4.0 clauses, adjust for OMP_LIST_DEPEND_{IN,OUT}
-+ becoming a single OMP_LIST_DEPEND.
-+ * f95-lang.c (gfc_handle_omp_declare_target_attribute): New
-+ function.
-+ (gfc_attribute_table): New variable.
-+ (LANG_HOOKS_OMP_FINISH_CLAUSE, LANG_HOOKS_ATTRIBUTE_TABLE): Redefine.
-+ * frontend-passes.c (gfc_code_walker): Handle new OpenMP target
-+ EXEC_OMP_* codes and new clauses.
-+ * gfortran.h (gfc_statement): Add ST_OMP_TARGET, ST_OMP_END_TARGET,
-+ ST_OMP_TARGET_DATA, ST_OMP_END_TARGET_DATA, ST_OMP_TARGET_UPDATE,
-+ ST_OMP_DECLARE_TARGET, ST_OMP_TEAMS, ST_OMP_END_TEAMS,
-+ ST_OMP_DISTRIBUTE, ST_OMP_END_DISTRIBUTE, ST_OMP_DISTRIBUTE_SIMD,
-+ ST_OMP_END_DISTRIBUTE_SIMD, ST_OMP_DISTRIBUTE_PARALLEL_DO,
-+ ST_OMP_END_DISTRIBUTE_PARALLEL_DO, ST_OMP_DISTRIBUTE_PARALLEL_DO_SIMD,
-+ ST_OMP_END_DISTRIBUTE_PARALLEL_DO_SIMD, ST_OMP_TARGET_TEAMS,
-+ ST_OMP_END_TARGET_TEAMS, ST_OMP_TEAMS_DISTRIBUTE,
-+ ST_OMP_END_TEAMS_DISTRIBUTE, ST_OMP_TEAMS_DISTRIBUTE_SIMD,
-+ ST_OMP_END_TEAMS_DISTRIBUTE_SIMD, ST_OMP_TARGET_TEAMS_DISTRIBUTE,
-+ ST_OMP_END_TARGET_TEAMS_DISTRIBUTE,
-+ ST_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD,
-+ ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_SIMD,
-+ ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO,
-+ ST_OMP_END_TEAMS_DISTRIBUTE_PARALLEL_DO,
-+ ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO,
-+ ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO,
-+ ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD,
-+ ST_OMP_END_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD,
-+ ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD and
-+ ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD.
-+ (symbol_attribute): Add omp_declare_target field.
-+ (gfc_omp_depend_op, gfc_omp_map_op): New enums.
-+ (gfc_omp_namelist): Replace rop field with union
-+ containing reduction_op, depend_op and map_op.
-+ (OMP_LIST_DEPEND_IN, OMP_LIST_DEPEND_OUT): Remove.
-+ (OMP_LIST_DEPEND, OMP_LIST_MAP, OMP_LIST_TO, OMP_LIST_FROM): New.
-+ (gfc_omp_clauses): Add num_teams, device, thread_limit,
-+ dist_sched_kind, dist_chunk_size fields.
-+ (gfc_common_head): Add omp_declare_target field.
-+ (gfc_exec_op): Add EXEC_OMP_TARGET, EXEC_OMP_TARGET_DATA,
-+ EXEC_OMP_TEAMS, EXEC_OMP_DISTRIBUTE, EXEC_OMP_DISTRIBUTE_SIMD,
-+ EXEC_OMP_DISTRIBUTE_PARALLEL_DO, EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD,
-+ EXEC_OMP_TARGET_TEAMS, EXEC_OMP_TEAMS_DISTRIBUTE,
-+ EXEC_OMP_TEAMS_DISTRIBUTE_SIMD, EXEC_OMP_TARGET_TEAMS_DISTRIBUTE,
-+ EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD,
-+ EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO,
-+ EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO,
-+ EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD,
-+ EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD and
-+ EXEC_OMP_TARGET_UPDATE.
-+ (gfc_add_omp_declare_target): New prototype.
-+ * match.h (gfc_match_omp_declare_target, gfc_match_omp_distribute,
-+ gfc_match_omp_distribute_parallel_do,
-+ gfc_match_omp_distribute_parallel_do_simd,
-+ gfc_match_omp_distribute_simd, gfc_match_omp_target,
-+ gfc_match_omp_target_data, gfc_match_omp_target_teams,
-+ gfc_match_omp_target_teams_distribute,
-+ gfc_match_omp_target_teams_distribute_parallel_do,
-+ gfc_match_omp_target_teams_distribute_parallel_do_simd,
-+ gfc_match_omp_target_teams_distribute_simd,
-+ gfc_match_omp_target_update, gfc_match_omp_teams,
-+ gfc_match_omp_teams_distribute,
-+ gfc_match_omp_teams_distribute_parallel_do,
-+ gfc_match_omp_teams_distribute_parallel_do_simd,
-+ gfc_match_omp_teams_distribute_simd): New prototypes.
-+ * module.c (ab_attribute): Add AB_OMP_DECLARE_TARGET.
-+ (attr_bits): Likewise.
-+ (mio_symbol_attribute): Handle omp_declare_target attribute.
-+ (gfc_free_omp_clauses): Free num_teams, device, thread_limit
-+ and dist_chunk_size expressions.
-+ (OMP_CLAUSE_PRIVATE, OMP_CLAUSE_FIRSTPRIVATE, OMP_CLAUSE_LASTPRIVATE,
-+ OMP_CLAUSE_COPYPRIVATE, OMP_CLAUSE_SHARED, OMP_CLAUSE_COPYIN,
-+ OMP_CLAUSE_REDUCTION, OMP_CLAUSE_IF, OMP_CLAUSE_NUM_THREADS,
-+ OMP_CLAUSE_SCHEDULE, OMP_CLAUSE_DEFAULT, OMP_CLAUSE_ORDERED,
-+ OMP_CLAUSE_COLLAPSE, OMP_CLAUSE_UNTIED, OMP_CLAUSE_FINAL,
-+ OMP_CLAUSE_MERGEABLE, OMP_CLAUSE_ALIGNED, OMP_CLAUSE_DEPEND,
-+ OMP_CLAUSE_INBRANCH, OMP_CLAUSE_LINEAR, OMP_CLAUSE_NOTINBRANCH,
-+ OMP_CLAUSE_PROC_BIND, OMP_CLAUSE_SAFELEN, OMP_CLAUSE_SIMDLEN,
-+ OMP_CLAUSE_UNIFORM): Use 1U instead of 1.
-+ (OMP_CLAUSE_DEVICE, OMP_CLAUSE_MAP, OMP_CLAUSE_TO, OMP_CLAUSE_FROM,
-+ OMP_CLAUSE_NUM_TEAMS, OMP_CLAUSE_THREAD_LIMIT,
-+ OMP_CLAUSE_DIST_SCHEDULE): Define.
-+ (gfc_match_omp_clauses): Change mask parameter to unsigned int.
-+ Adjust for rop becoming u.reduction_op. Disallow inbranch with
-+ notinbranch. For depend clause, always create OMP_LIST_DEPEND
-+ and fill in u.depend_op. Handle num_teams, device, map,
-+ to, from, thread_limit and dist_schedule clauses.
-+ (OMP_DECLARE_SIMD_CLAUSES): Or in OMP_CLAUSE_INBRANCH and
-+ OMP_CLAUSE_NOTINBRANCH.
-+ (OMP_TARGET_CLAUSES, OMP_TARGET_DATA_CLAUSES,
-+ OMP_TARGET_UPDATE_CLAUSES, OMP_TEAMS_CLAUSES,
-+ OMP_DISTRIBUTE_CLAUSES): Define.
-+ (match_omp): New function.
-+ (gfc_match_omp_do, gfc_match_omp_do_simd, gfc_match_omp_parallel,
-+ gfc_match_omp_parallel_do, gfc_match_omp_parallel_do_simd,
-+ gfc_match_omp_parallel_sections, gfc_match_omp_parallel_workshare,
-+ gfc_match_omp_sections, gfc_match_omp_simd, gfc_match_omp_single,
-+ gfc_match_omp_task): Rewritten using match_omp.
-+ (gfc_match_omp_threadprivate, gfc_match_omp_declare_reduction):
-+ Diagnose if the directives are followed by unexpected junk.
-+ (gfc_match_omp_distribute, gfc_match_omp_distribute_parallel_do,
-+ gfc_match_omp_distribute_parallel_do_simd,
-+ gfc_match_omp_distrbute_simd, gfc_match_omp_declare_target,
-+ gfc_match_omp_target, gfc_match_omp_target_data,
-+ gfc_match_omp_target_teams, gfc_match_omp_target_teams_distribute,
-+ gfc_match_omp_target_teams_distribute_parallel_do,
-+ gfc_match_omp_target_teams_distribute_parallel_do_simd,
-+ gfc_match_omp_target_teams_distrbute_simd, gfc_match_omp_target_update,
-+ gfc_match_omp_teams, gfc_match_omp_teams_distribute,
-+ gfc_match_omp_teams_distribute_parallel_do,
-+ gfc_match_omp_teams_distribute_parallel_do_simd,
-+ gfc_match_omp_teams_distrbute_simd): New functions.
-+ * openmp.c (resolve_omp_clauses): Adjust for
-+ OMP_LIST_DEPEND_{IN,OUT} being changed to OMP_LIST_DEPEND. Handle
-+ OMP_LIST_MAP, OMP_LIST_FROM, OMP_LIST_TO, num_teams, device,
-+ dist_chunk_size and thread_limit.
-+ (gfc_resolve_omp_parallel_blocks): Only put sharing clauses into
-+ ctx.sharing_clauses. Call gfc_resolve_omp_do_blocks for various
-+ new EXEC_OMP_* codes.
-+ (resolve_omp_do): Handle various new EXEC_OMP_* codes.
-+ (gfc_resolve_omp_directive): Likewise.
-+ (gfc_resolve_omp_declare_simd): Add missing space to diagnostics.
-+ * parse.c (decode_omp_directive): Handle parsing of OpenMP 4.0
-+ offloading related directives.
-+ (case_executable): Add ST_OMP_TARGET_UPDATE.
-+ (case_exec_markers): Add ST_OMP_TARGET*, ST_OMP_TEAMS*,
-+ ST_OMP_DISTRIBUTE*.
-+ (case_decl): Add ST_OMP_DECLARE_TARGET.
-+ (gfc_ascii_statement): Handle new ST_OMP_* codes.
-+ (parse_omp_do): Handle various new ST_OMP_* codes.
-+ (parse_executable): Likewise.
-+ * resolve.c (gfc_resolve_blocks): Handle various new EXEC_OMP_*
-+ codes.
-+ (resolve_code): Likewise.
-+ (resolve_symbol): Change that !$OMP DECLARE TARGET variables
-+ are saved.
-+ * st.c (gfc_free_statement): Handle various new EXEC_OMP_* codes.
-+ * symbol.c (check_conflict): Check omp_declare_target conflicts.
-+ (gfc_add_omp_declare_target): New function.
-+ (gfc_copy_attr): Copy omp_declare_target.
-+ * trans.c (trans_code): Handle various new EXEC_OMP_* codes.
-+ * trans-common.c (build_common_decl): Add "omp declare target"
-+ attribute if needed.
-+ * trans-decl.c (add_attributes_to_decl): Likewise.
-+ * trans.h (gfc_omp_finish_clause): New prototype.
-+ * trans-openmp.c (gfc_omp_finish_clause): New function.
-+ (gfc_trans_omp_reduction_list): Adjust for rop being renamed
-+ to u.reduction_op.
-+ (gfc_trans_omp_clauses): Adjust for OMP_LIST_DEPEND_{IN,OUT}
-+ change to OMP_LIST_DEPEND and fix up depend handling.
-+ Handle OMP_LIST_MAP, OMP_LIST_TO, OMP_LIST_FROM, num_teams,
-+ thread_limit, device, dist_chunk_size and dist_sched_kind.
-+ (gfc_trans_omp_do): Handle EXEC_OMP_DISTRIBUTE.
-+ (GFC_OMP_SPLIT_DISTRIBUTE, GFC_OMP_SPLIT_TEAMS,
-+ GFC_OMP_SPLIT_TARGET, GFC_OMP_SPLIT_NUM, GFC_OMP_MASK_DISTRIBUTE,
-+ GFC_OMP_MASK_TEAMS, GFC_OMP_MASK_TARGET, GFC_OMP_MASK_NUM): New.
-+ (gfc_split_omp_clauses): Handle splitting of clauses for new
-+ EXEC_OMP_* codes.
-+ (gfc_trans_omp_do_simd): Add pblock argument, adjust for being
-+ callable for combined constructs.
-+ (gfc_trans_omp_parallel_do, gfc_trans_omp_parallel_do_simd): Likewise.
-+ (gfc_trans_omp_distribute, gfc_trans_omp_teams,
-+ gfc_trans_omp_target, gfc_trans_omp_target_data,
-+ gfc_trans_omp_target_update): New functions.
-+ (gfc_trans_omp_directive): Adjust gfc_trans_omp_* callers, handle
-+ new EXEC_OMP_* codes.
-+
-+ 2014-06-10 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR fortran/60928
-+ * f95-lang.c (gfc_init_builtin_functions): Handle -fopenmp-simd
-+ like -fopenmp.
-+ * openmp.c (resolve_omp_clauses): Remove allocatable components
-+ diagnostics. Add associate-name and intent(in) pointer
-+ diagnostics for various clauses, diagnose procedure pointers in
-+ reduction clause.
-+ * parse.c (match_word_omp_simd): New function.
-+ (matchs, matcho): New macros.
-+ (decode_omp_directive): Change match macros to either matchs
-+ or matcho. Handle -fopenmp-simd.
-+ (next_free, next_fixed): Handle -fopenmp-simd like -fopenmp.
-+ * scanner.c (skip_free_comments, skip_fixed_comments, include_line):
-+ Likewise.
-+ * trans-array.c (get_full_array_size): Rename to...
-+ (gfc_full_array_size): ... this. No longer static.
-+ (duplicate_allocatable): Adjust caller. Add NO_MEMCPY argument
-+ and handle it.
-+ (gfc_duplicate_allocatable, gfc_copy_allocatable_data): Adjust
-+ duplicate_allocatable callers.
-+ (gfc_duplicate_allocatable_nocopy): New function.
-+ (structure_alloc_comps): Adjust g*_full_array_size and
-+ duplicate_allocatable caller.
-+ * trans-array.h (gfc_full_array_size,
-+ gfc_duplicate_allocatable_nocopy): New prototypes.
-+ * trans-common.c (create_common): Call gfc_finish_decl_attrs.
-+ * trans-decl.c (gfc_finish_decl_attrs): New function.
-+ (gfc_finish_var_decl, create_function_arglist,
-+ gfc_get_fake_result_decl): Call it.
-+ (gfc_allocate_lang_decl): If DECL_LANG_SPECIFIC is already allocated,
-+ don't allocate it again.
-+ (gfc_get_symbol_decl): Set GFC_DECL_ASSOCIATE_VAR_P on
-+ associate-names.
-+ * trans.h (gfc_finish_decl_attrs): New prototype.
-+ (struct lang_decl): Add scalar_allocatable and scalar_pointer
-+ bitfields.
-+ (GFC_DECL_SCALAR_ALLOCATABLE, GFC_DECL_SCALAR_POINTER,
-+ GFC_DECL_GET_SCALAR_ALLOCATABLE, GFC_DECL_GET_SCALAR_POINTER,
-+ GFC_DECL_ASSOCIATE_VAR_P): Define.
-+ (GFC_POINTER_TYPE_P): Remove.
-+ * trans-openmp.c (gfc_omp_privatize_by_reference): Don't check
-+ GFC_POINTER_TYPE_P, instead test GFC_DECL_GET_SCALAR_ALLOCATABLE,
-+ GFC_DECL_GET_SCALAR_POINTER or GFC_DECL_CRAY_POINTEE on decl.
-+ (gfc_omp_predetermined_sharing): Associate-names are predetermined.
-+ (enum walk_alloc_comps): New.
-+ (gfc_has_alloc_comps, gfc_omp_unshare_expr_r, gfc_omp_unshare_expr,
-+ gfc_walk_alloc_comps): New functions.
-+ (gfc_omp_private_outer_ref): Return true for scalar allocatables or
-+ decls with allocatable components.
-+ (gfc_omp_clause_default_ctor, gfc_omp_clause_copy_ctor,
-+ gfc_omp_clause_assign_op, gfc_omp_clause_dtor): Fix up handling of
-+ allocatables, handle also OMP_CLAUSE_REDUCTION, handle scalar
-+ allocatables and decls with allocatable components.
-+ (gfc_trans_omp_array_reduction_or_udr): Don't handle allocatable
-+ arrays here.
-+ (gfc_trans_omp_reduction_list): Call
-+ gfc_trans_omp_array_reduction_or_udr even for allocatable scalars.
-+ (gfc_trans_omp_do_simd): If -fno-openmp, just expand it as OMP_SIMD.
-+ (gfc_trans_omp_parallel_do_simd): Likewise.
-+ * trans-types.c (gfc_sym_type): Don't set GFC_POINTER_TYPE_P.
-+ (gfc_get_derived_type): Call gfc_finish_decl_attrs.
-+
-+ 2014-06-06 Jakub Jelinek <jakub@redhat.com>
-+
-+ * dump-parse-tree.c (show_omp_namelist): Dump reduction
-+ id in each list item.
-+ (show_omp_node): Only handle OMP_LIST_REDUCTION, not
-+ OMP_LIST_REDUCTION_FIRST .. OMP_LIST_REDUCTION_LAST. Don't
-+ dump reduction id here.
-+ * frontend-passes.c (dummy_code_callback): Renamed to...
-+ (gfc_dummy_code_callback): ... this. No longer static.
-+ (optimize_reduction): Use gfc_dummy_code_callback instead of
-+ dummy_code_callback.
-+ * gfortran.h (gfc_statement): Add ST_OMP_DECLARE_REDUCTION.
-+ (symbol_attribute): Add omp_udr_artificial_var bitfield.
-+ (gfc_omp_reduction_op): New enum.
-+ (gfc_omp_namelist): Add rop and udr fields.
-+ (OMP_LIST_PLUS, OMP_LIST_REDUCTION_FIRST, OMP_LIST_MULT,
-+ OMP_LIST_SUB, OMP_LIST_AND, OMP_LIST_OR, OMP_LIST_EQV,
-+ OMP_LIST_NEQV, OMP_LIST_MAX, OMP_LIST_MIN, OMP_LIST_IAND,
-+ OMP_LIST_IOR, OMP_LIST_IEOR, OMP_LIST_REDUCTION_LAST): Removed.
-+ (OMP_LIST_REDUCTION): New.
-+ (gfc_omp_udr): New type.
-+ (gfc_get_omp_udr): Define.
-+ (gfc_symtree): Add n.omp_udr field.
-+ (gfc_namespace): Add omp_udr_root field, add omp_udr_ns bitfield.
-+ (gfc_free_omp_udr, gfc_omp_udr_find, gfc_resolve_omp_udrs,
-+ gfc_dummy_code_callback): New prototypes.
-+ * match.h (gfc_match_omp_declare_reduction): New prototype.
-+ * module.c (MOD_VERSION): Increase to 13.
-+ (omp_declare_reduction_stmt): New array.
-+ (mio_omp_udr_expr, write_omp_udr, write_omp_udrs, load_omp_udrs):
-+ New functions.
-+ (read_module): Read OpenMP user defined reductions.
-+ (write_module): Write OpenMP user defined reductions.
-+ * openmp.c: Include arith.h.
-+ (gfc_free_omp_udr, gfc_find_omp_udr): New functions.
-+ (gfc_match_omp_clauses): Handle user defined reductions.
-+ Store reduction kind into gfc_omp_namelist instead of using
-+ several OMP_LIST_* entries.
-+ (match_udr_expr, gfc_omp_udr_predef, gfc_omp_udr_find,
-+ gfc_match_omp_declare_reduction): New functions.
-+ (resolve_omp_clauses): Adjust for reduction clauses being only
-+ in OMP_LIST_REDUCTION list. Diagnose missing UDRs.
-+ (struct omp_udr_callback_data): New type.
-+ (omp_udr_callback, gfc_resolve_omp_udr, gfc_resolve_omp_udrs): New
-+ functions.
-+ * parse.c (decode_omp_directive): Handle !$omp declare reduction.
-+ (case_decl): Add ST_OMP_DECLARE_REDUCTION.
-+ (gfc_ascii_statement): Print ST_OMP_DECLARE_REDUCTION.
-+ * resolve.c (resolve_fl_variable): Allow len=: or len=* on
-+ sym->attr.omp_udr_artificial_var symbols.
-+ (resolve_types): Call gfc_resolve_omp_udrs.
-+ * symbol.c (gfc_get_uop): If gfc_current_ns->omp_udr_ns,
-+ use parent ns instead of gfc_current_ns.
-+ (gfc_get_sym_tree): Don't insert symbols into
-+ namespaces with omp_udr_ns set.
-+ (free_omp_udr_tree): New function.
-+ (gfc_free_namespace): Call it.
-+ * trans-openmp.c (struct omp_udr_find_orig_data): New type.
-+ (omp_udr_find_orig, gfc_trans_omp_udr_expr): New functions.
-+ (gfc_trans_omp_array_reduction): Renamed to...
-+ (gfc_trans_omp_array_reduction_or_udr): ... this. Remove SYM
-+ argument, instead pass gfc_omp_namelist pointer N. Handle
-+ user defined reductions.
-+ (gfc_trans_omp_reduction_list): Remove REDUCTION_CODE argument.
-+ Handle user defined reductions and reduction ops in gfc_omp_namelist.
-+ (gfc_trans_omp_clauses): Adjust for just a single OMP_LIST_REDUCTION
-+ list.
-+ (gfc_split_omp_clauses): Likewise.
-+
-+ 2014-05-12 Tobias Burnus <burnus@net-b.de>
-+
-+ PR fortran/60127
-+ * openmp.c (resolve_omp_do): Reject do concurrent loops.
-+
-+ 2014-05-11 Jakub Jelinek <jakub@redhat.com>
-+
-+ * gfortran.h (gfc_statement): Add ST_OMP_CANCEL,
-+ ST_OMP_CANCELLATION_POINT, ST_OMP_TASKGROUP, ST_OMP_END_TASKGROUP,
-+ ST_OMP_SIMD, ST_OMP_END_SIMD, ST_OMP_DO_SIMD, ST_OMP_END_DO_SIMD,
-+ ST_OMP_PARALLEL_DO_SIMD, ST_OMP_END_PARALLEL_DO_SIMD and
-+ ST_OMP_DECLARE_SIMD.
-+ (gfc_omp_namelist): New typedef.
-+ (gfc_get_omp_namelist): Define.
-+ (OMP_LIST_UNIFORM, OMP_LIST_ALIGNED, OMP_LIST_LINEAR,
-+ OMP_LIST_DEPEND_IN, OMP_LIST_DEPEND_OUT): New clause list kinds.
-+ (gfc_omp_proc_bind_kind, gfc_omp_cancel_kind): New enums.
-+ (gfc_omp_clauses): Change type of lists to gfc_omp_namelist *.
-+ Add inbranch, notinbranch, cancel, proc_bind, safelen_expr and
-+ simdlen_expr fields.
-+ (gfc_omp_declare_simd): New typedef.
-+ (gfc_get_omp_declare_simd): Define.
-+ (gfc_namespace): Add omp_declare_simd field.
-+ (gfc_exec_op): Add EXEC_OMP_CANCEL, EXEC_OMP_CANCELLATION_POINT,
-+ EXEC_OMP_TASKGROUP, EXEC_OMP_SIMD, EXEC_OMP_DO_SIMD and
-+ EXEC_OMP_PARALLEL_DO_SIMD.
-+ (gfc_omp_atomic_op): Add GFC_OMP_ATOMIC_MASK, GFC_OMP_ATOMIC_SEQ_CST
-+ and GFC_OMP_ATOMIC_SWAP.
-+ (gfc_code): Change type of omp_namelist field to gfc_omp_namelist *.
-+ (gfc_free_omp_namelist, gfc_free_omp_declare_simd,
-+ gfc_free_omp_declare_simd_list, gfc_resolve_omp_declare_simd): New
-+ prototypes.
-+ * trans-stmt.h (gfc_trans_omp_declare_simd): New prototype.
-+ * symbol.c (gfc_free_namespace): Call gfc_free_omp_declare_simd.
-+ * openmp.c (gfc_free_omp_clauses): Free safelen_expr and
-+ simdlen_expr. Use gfc_free_omp_namelist instead of
-+ gfc_free_namelist.
-+ (gfc_free_omp_declare_simd, gfc_free_omp_declare_simd_list): New
-+ functions.
-+ (gfc_match_omp_variable_list): Add end_colon, headp and
-+ allow_sections arguments. Handle parsing of array sections.
-+ Use *omp_namelist* instead of *namelist* data structure and
-+ functions/macros. Allow termination at : character.
-+ (OMP_CLAUSE_ALIGNED, OMP_CLAUSE_DEPEND, OMP_CLAUSE_INBRANCH,
-+ OMP_CLAUSE_LINEAR, OMP_CLAUSE_NOTINBRANCH, OMP_CLAUSE_PROC_BIND,
-+ OMP_CLAUSE_SAFELEN, OMP_CLAUSE_SIMDLEN, OMP_CLAUSE_UNIFORM): Define.
-+ (gfc_match_omp_clauses): Change first and needs_space variables
-+ into arguments with default values. Parse inbranch, notinbranch,
-+ proc_bind, safelen, simdlen, uniform, linear, aligned and
-+ depend clauses.
-+ (OMP_PARALLEL_CLAUSES): Add OMP_CLAUSE_PROC_BIND.
-+ (OMP_DECLARE_SIMD_CLAUSES, OMP_SIMD_CLAUSES): Define.
-+ (OMP_TASK_CLAUSES): Add OMP_CLAUSE_DEPEND.
-+ (gfc_match_omp_do_simd): New function.
-+ (gfc_match_omp_flush): Use *omp_namelist* instead of *namelist*
-+ data structure and functions/macros.
-+ (gfc_match_omp_simd, gfc_match_omp_declare_simd,
-+ gfc_match_omp_parallel_do_simd): New functions.
-+ (gfc_match_omp_atomic): Handle seq_cst clause. Handle atomic swap.
-+ (gfc_match_omp_taskgroup, gfc_match_omp_cancel_kind,
-+ gfc_match_omp_cancel, gfc_match_omp_cancellation_point): New
-+ functions.
-+ (resolve_omp_clauses): Add where, omp_clauses and ns arguments.
-+ Use *omp_namelist* instead of *namelist* data structure and
-+ functions/macros. Resolve uniform, aligned, linear, depend,
-+ safelen and simdlen clauses.
-+ (resolve_omp_atomic): Adjust for GFC_OMP_ATOMIC_{MASK,SEQ_CST,SWAP}
-+ addition, recognize atomic swap.
-+ (gfc_resolve_omp_parallel_blocks): Use gfc_omp_namelist instead
-+ of gfc_namelist. Handle EXEC_OMP_PARALLEL_DO_SIMD the same as
-+ EXEC_OMP_PARALLEL_DO.
-+ (gfc_resolve_do_iterator): Use *omp_namelist* instead of *namelist*
-+ data structure and functions/macros.
-+ (resolve_omp_do): Likewise. Handle EXEC_OMP_SIMD, EXEC_OMP_DO_SIMD,
-+ EXEC_OMP_PARALLEL_DO_SIMD.
-+ (gfc_resolve_omp_directive): Handle EXEC_OMP_SIMD, EXEC_OMP_DO_SIMD,
-+ EXEC_OMP_PARALLEL_DO_SIMD and EXEC_OMP_CANCEL. Adjust
-+ resolve_omp_clauses caller.
-+ (gfc_resolve_omp_declare_simd): New function.
-+ * parse.c (decode_omp_directive): Parse cancellation point, cancel,
-+ declare simd, end do simd, end simd, end parallel do simd,
-+ end taskgroup, parallel do simd, simd and taskgroup directives.
-+ (case_executable): Add ST_OMP_CANCEL and ST_OMP_CANCELLATION_POINT.
-+ (case_exec_markers): Add ST_OMP_TASKGROUP, case ST_OMP_SIMD,
-+ ST_OMP_DO_SIMD and ST_OMP_PARALLEL_DO_SIMD.
-+ (case_decl): Add ST_OMP_DECLARE_SIMD.
-+ (gfc_ascii_statement): Handle ST_OMP_CANCEL,
-+ ST_OMP_CANCELLATION_POINT, ST_OMP_TASKGROUP, ST_OMP_END_TASKGROUP,
-+ ST_OMP_SIMD, ST_OMP_END_SIMD, ST_OMP_DO_SIMD, ST_OMP_END_DO_SIMD,
-+ ST_OMP_PARALLEL_DO_SIMD, ST_OMP_END_PARALLEL_DO_SIMD and
-+ ST_OMP_DECLARE_SIMD.
-+ (parse_omp_do): Handle ST_OMP_SIMD, ST_OMP_DO_SIMD and
-+ ST_OMP_PARALLEL_DO_SIMD.
-+ (parse_omp_atomic): Adjust for GFC_OMP_ATOMIC_* additions.
-+ (parse_omp_structured_block): Handle ST_OMP_TASKGROUP and
-+ ST_OMP_PARALLEL_DO_SIMD.
-+ (parse_executable): Handle ST_OMP_SIMD, ST_OMP_DO_SIMD,
-+ ST_OMP_PARALLEL_DO_SIMD and ST_OMP_TASKGROUP.
-+ * trans-decl.c (gfc_get_extern_function_decl,
-+ gfc_create_function_decl): Call gfc_trans_omp_declare_simd if
-+ needed.
-+ * frontend-passes.c (gfc_code_walker): Handle EXEC_OMP_SIMD,
-+ EXEC_OMP_DO_SIMD and EXEC_OMP_PARALLEL_DO_SIMD. Walk
-+ safelen_expr and simdlen_expr. Walk expressions in gfc_omp_namelist
-+ of depend, aligned and linear clauses.
-+ * match.c (match_exit_cycle): Handle EXEC_OMP_SIMD, EXEC_OMP_DO_SIMD
-+ and EXEC_OMP_PARALLEL_DO_SIMD.
-+ (gfc_free_omp_namelist): New function.
-+ * dump-parse-tree.c (show_namelist): Removed.
-+ (show_omp_namelist): New function.
-+ (show_omp_node): Handle OpenMP 4.0 additions.
-+ (show_code_node): Handle EXEC_OMP_CANCEL, EXEC_OMP_CANCELLATION_POINT,
-+ EXEC_OMP_DO_SIMD, EXEC_OMP_PARALLEL_DO_SIMD, EXEC_OMP_SIMD and
-+ EXEC_OMP_TASKGROUP.
-+ * match.h (gfc_match_omp_cancel, gfc_match_omp_cancellation_point,
-+ gfc_match_omp_declare_simd, gfc_match_omp_do_simd,
-+ gfc_match_omp_parallel_do_simd, gfc_match_omp_simd,
-+ gfc_match_omp_taskgroup): New prototypes.
-+ * trans-openmp.c (gfc_trans_omp_variable): Add declare_simd
-+ argument, handle it. Allow current_function_decl to be NULL.
-+ (gfc_trans_omp_variable_list): Add declare_simd argument, pass
-+ it through to gfc_trans_omp_variable and disregard whether
-+ sym is referenced if declare_simd is true. Work on gfc_omp_namelist
-+ instead of gfc_namelist.
-+ (gfc_trans_omp_reduction_list): Work on gfc_omp_namelist instead of
-+ gfc_namelist. Adjust gfc_trans_omp_variable caller.
-+ (gfc_trans_omp_clauses): Add declare_simd argument, pass it through
-+ to gfc_trans_omp_variable{,_list} callers. Work on gfc_omp_namelist
-+ instead of gfc_namelist. Handle inbranch, notinbranch, safelen,
-+ simdlen, depend, uniform, linear, proc_bind and aligned clauses.
-+ Handle cancel kind.
-+ (gfc_trans_omp_atomic): Handle seq_cst clause, handle atomic swap,
-+ adjust for GFC_OMP_ATOMIC_* changes.
-+ (gfc_trans_omp_cancel, gfc_trans_omp_cancellation_point): New
-+ functions.
-+ (gfc_trans_omp_do): Add op argument, handle simd translation into
-+ generic.
-+ (GFC_OMP_SPLIT_SIMD, GFC_OMP_SPLIT_DO, GFC_OMP_SPLIT_PARALLEL,
-+ GFC_OMP_SPLIT_NUM, GFC_OMP_MASK_SIMD, GFC_OMP_MASK_DO,
-+ GFC_OMP_MASK_PARALLEL): New.
-+ (gfc_split_omp_clauses, gfc_trans_omp_do_simd): New functions.
-+ (gfc_trans_omp_parallel_do): Rework to use gfc_split_omp_clauses.
-+ (gfc_trans_omp_parallel_do_simd, gfc_trans_omp_taskgroup): New
-+ functions.
-+ (gfc_trans_omp_directive): Handle EXEC_OMP_CANCEL,
-+ EXEC_OMP_CANCELLATION_POINT, EXEC_OMP_DO_SIMD,
-+ EXEC_OMP_PARALLEL_DO_SIMD, EXEC_OMP_SIMD and EXEC_OMP_TASKGROUP.
-+ Adjust gfc_trans_omp_do caller.
-+ (gfc_trans_omp_declare_simd): New function.
-+ * st.c (gfc_free_statement): Handle EXEC_OMP_CANCEL,
-+ EXEC_OMP_CANCELLATION_POINT, EXEC_OMP_DO_SIMD,
-+ EXEC_OMP_PARALLEL_DO_SIMD, EXEC_OMP_SIMD and EXEC_OMP_TASKGROUP.
-+ For EXEC_OMP_FLUSH call gfc_free_omp_namelist instead of
-+ gfc_free_namelist.
-+ * module.c (omp_declare_simd_clauses): New variable.
-+ (mio_omp_declare_simd): New function.
-+ (mio_symbol): Call it.
-+ * trans.c (trans_code): Handle EXEC_OMP_CANCEL,
-+ EXEC_OMP_CANCELLATION_POINT, EXEC_OMP_DO_SIMD,
-+ EXEC_OMP_PARALLEL_DO_SIMD, EXEC_OMP_SIMD and EXEC_OMP_TASKGROUP.
-+ * resolve.c (gfc_resolve_blocks): Handle EXEC_OMP_DO_SIMD,
-+ EXEC_OMP_PARALLEL_DO_SIMD, EXEC_OMP_SIMD and EXEC_OMP_TASKGROUP.
-+ (resolve_code): Handle EXEC_OMP_CANCEL,
-+ EXEC_OMP_CANCELLATION_POINT, EXEC_OMP_DO_SIMD,
-+ EXEC_OMP_PARALLEL_DO_SIMD, EXEC_OMP_SIMD and EXEC_OMP_TASKGROUP.
-+ (resolve_types): Call gfc_resolve_omp_declare_simd.
-+
-+2014-06-15 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
-+
-+ Backport from trunk.
-+ PR fortran/45187
-+ * trans-decl.c (gfc_create_module_variable): Don't create
-+ Cray-pointee decls twice.
-+
-+2014-06-09 Paul Thomas <pault@gcc.gnu.org>
-+
-+ Backport from trunk.
-+ PR fortran/61406
-+ * trans-stmt.c (trans_associate_var): Check that array
-+ constructors are constant for direct reference.
-+
-+2014-06-05 Richard Biener <rguenther@suse.de>
-+
-+ PR fortran/61418
-+ * gfortranspec.c (spec_file): Remove.
-+ (find_spec_file): Likewise.
-+ (lang_specific_driver): Do not look for specs file in -L
-+ or append -specs command line argument.
-+ (lang_specific_pre_link): Always %:include libgfortran.spec.
-+
-+2014-05-29 Thomas Koenig <tkoenig@gcc.gnu.org>
-+
-+ PR fortran/60834
-+ Backport from mainline
-+ * frontend-passes.c (in_assoc_list): New variable.
-+ (optimize_namespace): Initialize in_assoc_list
-+ (combine_array_constructor): Don't try to combine
-+ assoc lists.
-+ (gfc_code_walker): Keep track of in_assoc_list.
-+
-+2014-05-26 Janne Blomqvist <jb@gcc.gnu.org>
-+
-+ Backport from mainline
-+ PR libfortran/61310
-+ * intrinsics.texi (CTIME): Remove mention of locale-dependent
-+ behavior.
-+
-+2014-04-22 Tobias Burnus <burnus@net-b.de>
-+
-+ Backport from mainline
-+ 2014-04-11 Tobias Burnus <burnus@net-b.de>
-+
-+ PR fortran/58880
-+ PR fortran/60495
-+ * resolve.c (gfc_resolve_finalizers): Ensure that vtables
-+ and finalization wrappers are generated.
-+
- 2014-04-22 Release Manager
-
- * GCC 4.9.0 released.
-Index: gcc/fortran/trans-stmt.c
-===================================================================
---- a/src/gcc/fortran/trans-stmt.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/trans-stmt.c (.../branches/gcc-4_9-branch)
-@@ -1164,13 +1164,16 @@
- {
- gfc_se se;
- tree desc;
-+ bool cst_array_ctor;
-
- desc = sym->backend_decl;
-+ cst_array_ctor = e->expr_type == EXPR_ARRAY
-+ && gfc_constant_array_constructor_p (e->value.constructor);
-
- /* If association is to an expression, evaluate it and create temporary.
- Otherwise, get descriptor of target for pointer assignment. */
- gfc_init_se (&se, NULL);
-- if (sym->assoc->variable || e->expr_type == EXPR_ARRAY)
-+ if (sym->assoc->variable || cst_array_ctor)
- {
- se.direct_byref = 1;
- se.use_offset = 1;
-@@ -1181,7 +1184,7 @@
-
- /* If we didn't already do the pointer assignment, set associate-name
- descriptor to the one generated for the temporary. */
-- if (!sym->assoc->variable && e->expr_type != EXPR_ARRAY)
-+ if (!sym->assoc->variable && !cst_array_ctor)
- {
- int dim;
-
-Index: gcc/fortran/trans-stmt.h
-===================================================================
---- a/src/gcc/fortran/trans-stmt.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/trans-stmt.h (.../branches/gcc-4_9-branch)
-@@ -63,6 +63,7 @@
-
- /* trans-openmp.c */
- tree gfc_trans_omp_directive (gfc_code *);
-+void gfc_trans_omp_declare_simd (gfc_namespace *);
-
- /* trans-io.c */
- tree gfc_trans_open (gfc_code *);
-Index: gcc/fortran/module.c
-===================================================================
---- a/src/gcc/fortran/module.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/module.c (.../branches/gcc-4_9-branch)
-@@ -83,6 +83,7 @@
- /* Don't put any single quote (') in MOD_VERSION, if you want it to be
- recognized. */
- #define MOD_VERSION "12"
-+#define MOD_VERSION_OMP4 "12 OpenMP 4"
-
-
- /* Structure that describes a position within a module file. */
-@@ -196,6 +197,7 @@
- static long module_pos;
- static int module_line, module_column, only_flag;
- static int prev_module_line, prev_module_column;
-+static bool module_omp4;
-
- static enum
- { IO_INPUT, IO_OUTPUT }
-@@ -1877,7 +1879,7 @@
- AB_IS_BIND_C, AB_IS_C_INTEROP, AB_IS_ISO_C, AB_ABSTRACT, AB_ZERO_COMP,
- AB_IS_CLASS, AB_PROCEDURE, AB_PROC_POINTER, AB_ASYNCHRONOUS, AB_CODIMENSION,
- AB_COARRAY_COMP, AB_VTYPE, AB_VTAB, AB_CONTIGUOUS, AB_CLASS_POINTER,
-- AB_IMPLICIT_PURE, AB_ARTIFICIAL, AB_UNLIMITED_POLY
-+ AB_IMPLICIT_PURE, AB_ARTIFICIAL, AB_UNLIMITED_POLY, AB_OMP_DECLARE_TARGET
- }
- ab_attribute;
-
-@@ -1932,6 +1934,7 @@
- minit ("CLASS_POINTER", AB_CLASS_POINTER),
- minit ("IMPLICIT_PURE", AB_IMPLICIT_PURE),
- minit ("UNLIMITED_POLY", AB_UNLIMITED_POLY),
-+ minit ("OMP_DECLARE_TARGET", AB_OMP_DECLARE_TARGET),
- minit (NULL, -1)
- };
-
-@@ -2110,6 +2113,8 @@
- MIO_NAME (ab_attribute) (AB_VTYPE, attr_bits);
- if (attr->vtab)
- MIO_NAME (ab_attribute) (AB_VTAB, attr_bits);
-+ if (attr->omp_declare_target)
-+ MIO_NAME (ab_attribute) (AB_OMP_DECLARE_TARGET, attr_bits);
-
- mio_rparen ();
-
-@@ -2273,6 +2278,9 @@
- case AB_VTAB:
- attr->vtab = 1;
- break;
-+ case AB_OMP_DECLARE_TARGET:
-+ attr->omp_declare_target = 1;
-+ break;
- }
- }
- }
-@@ -3130,6 +3138,7 @@
- minit ("LE", INTRINSIC_LE_OS),
- minit ("NOT", INTRINSIC_NOT),
- minit ("PARENTHESES", INTRINSIC_PARENTHESES),
-+ minit ("USER", INTRINSIC_USER),
- minit (NULL, -1)
- };
-
-@@ -3166,7 +3175,8 @@
- && !e->symtree->n.sym->attr.dummy)
- e->symtree = ns_st;
- }
-- else if (e->expr_type == EXPR_FUNCTION && e->value.function.name)
-+ else if (e->expr_type == EXPR_FUNCTION
-+ && (e->value.function.name || e->value.function.isym))
- {
- gfc_symbol *sym;
-
-@@ -3281,6 +3291,32 @@
- mio_expr (&e->value.op.op2);
- break;
-
-+ case INTRINSIC_USER:
-+ /* INTRINSIC_USER should not appear in resolved expressions,
-+ though for UDRs we need to stream unresolved ones. */
-+ if (iomode == IO_OUTPUT)
-+ write_atom (ATOM_STRING, e->value.op.uop->name);
-+ else
-+ {
-+ char *name = read_string ();
-+ const char *uop_name = find_use_name (name, true);
-+ if (uop_name == NULL)
-+ {
-+ size_t len = strlen (name);
-+ char *name2 = XCNEWVEC (char, len + 2);
-+ memcpy (name2, name, len);
-+ name2[len] = ' ';
-+ name2[len + 1] = '\0';
-+ free (name);
-+ uop_name = name = name2;
-+ }
-+ e->value.op.uop = gfc_get_uop (uop_name);
-+ free (name);
-+ }
-+ mio_expr (&e->value.op.op1);
-+ mio_expr (&e->value.op.op2);
-+ break;
-+
- default:
- bad_module ("Bad operator");
- }
-@@ -3299,6 +3335,8 @@
- flag = 1;
- else if (e->ref)
- flag = 2;
-+ else if (e->value.function.isym == NULL)
-+ flag = 3;
- else
- flag = 0;
- mio_integer (&flag);
-@@ -3310,6 +3348,8 @@
- case 2:
- mio_ref_list (&e->ref);
- break;
-+ case 3:
-+ break;
- default:
- write_atom (ATOM_STRING, e->value.function.isym->name);
- }
-@@ -3317,7 +3357,10 @@
- else
- {
- require_atom (ATOM_STRING);
-- e->value.function.name = gfc_get_string (atom_string);
-+ if (atom_string[0] == '\0')
-+ e->value.function.name = NULL;
-+ else
-+ e->value.function.name = gfc_get_string (atom_string);
- free (atom_string);
-
- mio_integer (&flag);
-@@ -3329,6 +3372,8 @@
- case 2:
- mio_ref_list (&e->ref);
- break;
-+ case 3:
-+ break;
- default:
- require_atom (ATOM_STRING);
- e->value.function.isym = gfc_find_function (atom_string);
-@@ -3790,7 +3835,204 @@
- mio_rparen ();
- }
-
-+static const mstring omp_declare_simd_clauses[] =
-+{
-+ minit ("INBRANCH", 0),
-+ minit ("NOTINBRANCH", 1),
-+ minit ("SIMDLEN", 2),
-+ minit ("UNIFORM", 3),
-+ minit ("LINEAR", 4),
-+ minit ("ALIGNED", 5),
-+ minit (NULL, -1)
-+};
-
-+/* Handle !$omp declare simd. */
-+
-+static void
-+mio_omp_declare_simd (gfc_namespace *ns, gfc_omp_declare_simd **odsp)
-+{
-+ if (iomode == IO_OUTPUT)
-+ {
-+ if (*odsp == NULL)
-+ return;
-+ }
-+ else if (peek_atom () != ATOM_LPAREN)
-+ return;
-+
-+ gfc_omp_declare_simd *ods = *odsp;
-+
-+ mio_lparen ();
-+ if (iomode == IO_OUTPUT)
-+ {
-+ write_atom (ATOM_NAME, "OMP_DECLARE_SIMD");
-+ if (ods->clauses)
-+ {
-+ gfc_omp_namelist *n;
-+
-+ if (ods->clauses->inbranch)
-+ mio_name (0, omp_declare_simd_clauses);
-+ if (ods->clauses->notinbranch)
-+ mio_name (1, omp_declare_simd_clauses);
-+ if (ods->clauses->simdlen_expr)
-+ {
-+ mio_name (2, omp_declare_simd_clauses);
-+ mio_expr (&ods->clauses->simdlen_expr);
-+ }
-+ for (n = ods->clauses->lists[OMP_LIST_UNIFORM]; n; n = n->next)
-+ {
-+ mio_name (3, omp_declare_simd_clauses);
-+ mio_symbol_ref (&n->sym);
-+ }
-+ for (n = ods->clauses->lists[OMP_LIST_LINEAR]; n; n = n->next)
-+ {
-+ mio_name (4, omp_declare_simd_clauses);
-+ mio_symbol_ref (&n->sym);
-+ mio_expr (&n->expr);
-+ }
-+ for (n = ods->clauses->lists[OMP_LIST_ALIGNED]; n; n = n->next)
-+ {
-+ mio_name (5, omp_declare_simd_clauses);
-+ mio_symbol_ref (&n->sym);
-+ mio_expr (&n->expr);
-+ }
-+ }
-+ }
-+ else
-+ {
-+ gfc_omp_namelist **ptrs[3] = { NULL, NULL, NULL };
-+
-+ require_atom (ATOM_NAME);
-+ *odsp = ods = gfc_get_omp_declare_simd ();
-+ ods->where = gfc_current_locus;
-+ ods->proc_name = ns->proc_name;
-+ if (peek_atom () == ATOM_NAME)
-+ {
-+ ods->clauses = gfc_get_omp_clauses ();
-+ ptrs[0] = &ods->clauses->lists[OMP_LIST_UNIFORM];
-+ ptrs[1] = &ods->clauses->lists[OMP_LIST_LINEAR];
-+ ptrs[2] = &ods->clauses->lists[OMP_LIST_ALIGNED];
-+ }
-+ while (peek_atom () == ATOM_NAME)
-+ {
-+ gfc_omp_namelist *n;
-+ int t = mio_name (0, omp_declare_simd_clauses);
-+
-+ switch (t)
-+ {
-+ case 0: ods->clauses->inbranch = true; break;
-+ case 1: ods->clauses->notinbranch = true; break;
-+ case 2: mio_expr (&ods->clauses->simdlen_expr); break;
-+ case 3:
-+ case 4:
-+ case 5:
-+ *ptrs[t - 3] = n = gfc_get_omp_namelist ();
-+ ptrs[t - 3] = &n->next;
-+ mio_symbol_ref (&n->sym);
-+ if (t != 3)
-+ mio_expr (&n->expr);
-+ break;
-+ }
-+ }
-+ }
-+
-+ mio_omp_declare_simd (ns, &ods->next);
-+
-+ mio_rparen ();
-+}
-+
-+
-+static const mstring omp_declare_reduction_stmt[] =
-+{
-+ minit ("ASSIGN", 0),
-+ minit ("CALL", 1),
-+ minit (NULL, -1)
-+};
-+
-+
-+static void
-+mio_omp_udr_expr (gfc_omp_udr *udr, gfc_symbol **sym1, gfc_symbol **sym2,
-+ gfc_namespace *ns, bool is_initializer)
-+{
-+ if (iomode == IO_OUTPUT)
-+ {
-+ if ((*sym1)->module == NULL)
-+ {
-+ (*sym1)->module = module_name;
-+ (*sym2)->module = module_name;
-+ }
-+ mio_symbol_ref (sym1);
-+ mio_symbol_ref (sym2);
-+ if (ns->code->op == EXEC_ASSIGN)
-+ {
-+ mio_name (0, omp_declare_reduction_stmt);
-+ mio_expr (&ns->code->expr1);
-+ mio_expr (&ns->code->expr2);
-+ }
-+ else
-+ {
-+ int flag;
-+ mio_name (1, omp_declare_reduction_stmt);
-+ mio_symtree_ref (&ns->code->symtree);
-+ mio_actual_arglist (&ns->code->ext.actual);
-+
-+ flag = ns->code->resolved_isym != NULL;
-+ mio_integer (&flag);
-+ if (flag)
-+ write_atom (ATOM_STRING, ns->code->resolved_isym->name);
-+ else
-+ mio_symbol_ref (&ns->code->resolved_sym);
-+ }
-+ }
-+ else
-+ {
-+ pointer_info *p1 = mio_symbol_ref (sym1);
-+ pointer_info *p2 = mio_symbol_ref (sym2);
-+ gfc_symbol *sym;
-+ gcc_assert (p1->u.rsym.ns == p2->u.rsym.ns);
-+ gcc_assert (p1->u.rsym.sym == NULL);
-+ /* Add hidden symbols to the symtree. */
-+ pointer_info *q = get_integer (p1->u.rsym.ns);
-+ q->u.pointer = (void *) ns;
-+ sym = gfc_new_symbol (is_initializer ? "omp_priv" : "omp_out", ns);
-+ sym->ts = udr->ts;
-+ sym->module = gfc_get_string (p1->u.rsym.module);
-+ associate_integer_pointer (p1, sym);
-+ sym->attr.omp_udr_artificial_var = 1;
-+ gcc_assert (p2->u.rsym.sym == NULL);
-+ sym = gfc_new_symbol (is_initializer ? "omp_orig" : "omp_in", ns);
-+ sym->ts = udr->ts;
-+ sym->module = gfc_get_string (p2->u.rsym.module);
-+ associate_integer_pointer (p2, sym);
-+ sym->attr.omp_udr_artificial_var = 1;
-+ if (mio_name (0, omp_declare_reduction_stmt) == 0)
-+ {
-+ ns->code = gfc_get_code (EXEC_ASSIGN);
-+ mio_expr (&ns->code->expr1);
-+ mio_expr (&ns->code->expr2);
-+ }
-+ else
-+ {
-+ int flag;
-+ ns->code = gfc_get_code (EXEC_CALL);
-+ mio_symtree_ref (&ns->code->symtree);
-+ mio_actual_arglist (&ns->code->ext.actual);
-+
-+ mio_integer (&flag);
-+ if (flag)
-+ {
-+ require_atom (ATOM_STRING);
-+ ns->code->resolved_isym = gfc_find_subroutine (atom_string);
-+ free (atom_string);
-+ }
-+ else
-+ mio_symbol_ref (&ns->code->resolved_sym);
-+ }
-+ ns->code->loc = gfc_current_locus;
-+ ns->omp_udr_ns = 1;
-+ }
-+}
-+
-+
- /* Unlike most other routines, the address of the symbol node is already
- fixed on input and the name/module has already been filled in.
- If you update the symbol format here, don't forget to update read_module
-@@ -3864,6 +4106,17 @@
- if (sym->attr.flavor == FL_DERIVED)
- mio_integer (&(sym->hash_value));
-
-+ if (sym->formal_ns
-+ && sym->formal_ns->proc_name == sym
-+ && sym->formal_ns->entries == NULL)
-+ {
-+ if (module_omp4)
-+ mio_omp_declare_simd (sym->formal_ns,
-+ &sym->formal_ns->omp_declare_simd);
-+ else if (iomode == IO_OUTPUT)
-+ gcc_assert (sym->formal_ns->omp_declare_simd == NULL);
-+ }
-+
- mio_rparen ();
- }
-
-@@ -4343,6 +4596,119 @@
- }
-
-
-+/* This function loads OpenMP user defined reductions. */
-+static void
-+load_omp_udrs (void)
-+{
-+ mio_lparen ();
-+ while (peek_atom () != ATOM_RPAREN)
-+ {
-+ const char *name, *newname;
-+ char *altname;
-+ gfc_typespec ts;
-+ gfc_symtree *st;
-+ gfc_omp_reduction_op rop = OMP_REDUCTION_USER;
-+
-+ mio_lparen ();
-+ mio_pool_string (&name);
-+ mio_typespec (&ts);
-+ if (strncmp (name, "operator ", sizeof ("operator ") - 1) == 0)
-+ {
-+ const char *p = name + sizeof ("operator ") - 1;
-+ if (strcmp (p, "+") == 0)
-+ rop = OMP_REDUCTION_PLUS;
-+ else if (strcmp (p, "*") == 0)
-+ rop = OMP_REDUCTION_TIMES;
-+ else if (strcmp (p, "-") == 0)
-+ rop = OMP_REDUCTION_MINUS;
-+ else if (strcmp (p, ".and.") == 0)
-+ rop = OMP_REDUCTION_AND;
-+ else if (strcmp (p, ".or.") == 0)
-+ rop = OMP_REDUCTION_OR;
-+ else if (strcmp (p, ".eqv.") == 0)
-+ rop = OMP_REDUCTION_EQV;
-+ else if (strcmp (p, ".neqv.") == 0)
-+ rop = OMP_REDUCTION_NEQV;
-+ }
-+ altname = NULL;
-+ if (rop == OMP_REDUCTION_USER && name[0] == '.')
-+ {
-+ size_t len = strlen (name + 1);
-+ altname = XALLOCAVEC (char, len);
-+ gcc_assert (name[len] == '.');
-+ memcpy (altname, name + 1, len - 1);
-+ altname[len - 1] = '\0';
-+ }
-+ newname = name;
-+ if (rop == OMP_REDUCTION_USER)
-+ newname = find_use_name (altname ? altname : name, !!altname);
-+ else if (only_flag && find_use_operator ((gfc_intrinsic_op) rop) == NULL)
-+ newname = NULL;
-+ if (newname == NULL)
-+ {
-+ skip_list (1);
-+ continue;
-+ }
-+ if (altname && newname != altname)
-+ {
-+ size_t len = strlen (newname);
-+ altname = XALLOCAVEC (char, len + 3);
-+ altname[0] = '.';
-+ memcpy (altname + 1, newname, len);
-+ altname[len + 1] = '.';
-+ altname[len + 2] = '\0';
-+ name = gfc_get_string (altname);
-+ }
-+ st = gfc_find_symtree (gfc_current_ns->omp_udr_root, name);
-+ gfc_omp_udr *udr = gfc_omp_udr_find (st, &ts);
-+ if (udr)
-+ {
-+ require_atom (ATOM_INTEGER);
-+ pointer_info *p = get_integer (atom_int);
-+ if (strcmp (p->u.rsym.module, udr->omp_out->module))
-+ {
-+ gfc_error ("Ambiguous !$OMP DECLARE REDUCTION from "
-+ "module %s at %L",
-+ p->u.rsym.module, &gfc_current_locus);
-+ gfc_error ("Previous !$OMP DECLARE REDUCTION from module "
-+ "%s at %L",
-+ udr->omp_out->module, &udr->where);
-+ }
-+ skip_list (1);
-+ continue;
-+ }
-+ udr = gfc_get_omp_udr ();
-+ udr->name = name;
-+ udr->rop = rop;
-+ udr->ts = ts;
-+ udr->where = gfc_current_locus;
-+ udr->combiner_ns = gfc_get_namespace (gfc_current_ns, 1);
-+ udr->combiner_ns->proc_name = gfc_current_ns->proc_name;
-+ mio_omp_udr_expr (udr, &udr->omp_out, &udr->omp_in, udr->combiner_ns,
-+ false);
-+ if (peek_atom () != ATOM_RPAREN)
-+ {
-+ udr->initializer_ns = gfc_get_namespace (gfc_current_ns, 1);
-+ udr->initializer_ns->proc_name = gfc_current_ns->proc_name;
-+ mio_omp_udr_expr (udr, &udr->omp_priv, &udr->omp_orig,
-+ udr->initializer_ns, true);
-+ }
-+ if (st)
-+ {
-+ udr->next = st->n.omp_udr;
-+ st->n.omp_udr = udr;
-+ }
-+ else
-+ {
-+ st = gfc_new_symtree (&gfc_current_ns->omp_udr_root, name);
-+ st->n.omp_udr = udr;
-+ }
-+ mio_rparen ();
-+ }
-+ mio_rparen ();
-+}
-+
-+
- /* Recursive function to traverse the pointer_info tree and load a
- needed symbol. We return nonzero if we load a symbol and stop the
- traversal, because the act of loading can alter the tree. */
-@@ -4530,7 +4896,7 @@
- static void
- read_module (void)
- {
-- module_locus operator_interfaces, user_operators, extensions;
-+ module_locus operator_interfaces, user_operators, extensions, omp_udrs;
- const char *p;
- char name[GFC_MAX_SYMBOL_LEN + 1];
- int i;
-@@ -4554,6 +4920,11 @@
- get_module_locus (&extensions);
- skip_list ();
-
-+ /* Skip OpenMP UDRs. */
-+ get_module_locus (&omp_udrs);
-+ if (module_omp4)
-+ skip_list ();
-+
- mio_lparen ();
-
- /* Create the fixup nodes for all the symbols. */
-@@ -4819,6 +5190,13 @@
- load_commons ();
- load_equiv ();
-
-+ if (module_omp4)
-+ {
-+ /* Load OpenMP user defined reductions. */
-+ set_module_locus (&omp_udrs);
-+ load_omp_udrs ();
-+ }
-+
- /* At this point, we read those symbols that are needed but haven't
- been loaded yet. If one symbol requires another, the other gets
- marked as NEEDED if its previous state was UNUSED. */
-@@ -5197,6 +5575,80 @@
- }
-
-
-+static void
-+write_omp_udr (gfc_omp_udr *udr)
-+{
-+ switch (udr->rop)
-+ {
-+ case OMP_REDUCTION_USER:
-+ /* Non-operators can't be used outside of the module. */
-+ if (udr->name[0] != '.')
-+ return;
-+ else
-+ {
-+ gfc_symtree *st;
-+ size_t len = strlen (udr->name + 1);
-+ char *name = XALLOCAVEC (char, len);
-+ memcpy (name, udr->name, len - 1);
-+ name[len - 1] = '\0';
-+ st = gfc_find_symtree (gfc_current_ns->uop_root, name);
-+ /* If corresponding user operator is private, don't write
-+ the UDR. */
-+ if (st != NULL)
-+ {
-+ gfc_user_op *uop = st->n.uop;
-+ if (!check_access (uop->access, uop->ns->default_access))
-+ return;
-+ }
-+ }
-+ break;
-+ case OMP_REDUCTION_PLUS:
-+ case OMP_REDUCTION_MINUS:
-+ case OMP_REDUCTION_TIMES:
-+ case OMP_REDUCTION_AND:
-+ case OMP_REDUCTION_OR:
-+ case OMP_REDUCTION_EQV:
-+ case OMP_REDUCTION_NEQV:
-+ /* If corresponding operator is private, don't write the UDR. */
-+ if (!check_access (gfc_current_ns->operator_access[udr->rop],
-+ gfc_current_ns->default_access))
-+ return;
-+ break;
-+ default:
-+ break;
-+ }
-+ if (udr->ts.type == BT_DERIVED || udr->ts.type == BT_CLASS)
-+ {
-+ /* If derived type is private, don't write the UDR. */
-+ if (!gfc_check_symbol_access (udr->ts.u.derived))
-+ return;
-+ }
-+
-+ mio_lparen ();
-+ mio_pool_string (&udr->name);
-+ mio_typespec (&udr->ts);
-+ mio_omp_udr_expr (udr, &udr->omp_out, &udr->omp_in, udr->combiner_ns, false);
-+ if (udr->initializer_ns)
-+ mio_omp_udr_expr (udr, &udr->omp_priv, &udr->omp_orig,
-+ udr->initializer_ns, true);
-+ mio_rparen ();
-+}
-+
-+
-+static void
-+write_omp_udrs (gfc_symtree *st)
-+{
-+ if (st == NULL)
-+ return;
-+
-+ write_omp_udrs (st->left);
-+ gfc_omp_udr *udr;
-+ for (udr = st->n.omp_udr; udr; udr = udr->next)
-+ write_omp_udr (udr);
-+ write_omp_udrs (st->right);
-+}
-+
-+
- /* Type for the temporary tree used when writing secondary symbols. */
-
- struct sorted_pointer_info
-@@ -5445,6 +5897,17 @@
- write_char ('\n');
- write_char ('\n');
-
-+ if (module_omp4)
-+ {
-+ mio_lparen ();
-+ write_omp_udrs (gfc_current_ns->omp_udr_root);
-+ mio_rparen ();
-+ write_char ('\n');
-+ write_char ('\n');
-+ }
-+ else
-+ gcc_assert (gfc_current_ns->omp_udr_root == NULL);
-+
- /* Write symbol information. First we traverse all symbols in the
- primary namespace, writing those that need to be written.
- Sometimes writing one symbol will cause another to need to be
-@@ -5513,6 +5976,21 @@
- }
-
-
-+/* Set module_omp4 if any symbol has !$OMP DECLARE SIMD directives. */
-+
-+static void
-+find_omp_declare_simd (gfc_symtree *st)
-+{
-+ gfc_symbol *sym = st->n.sym;
-+ if (sym->formal_ns
-+ && sym->formal_ns->proc_name == sym
-+ && sym->formal_ns->omp_declare_simd)
-+ module_omp4 = true;
-+ else if (sym->attr.omp_declare_target)
-+ module_omp4 = true;
-+}
-+
-+
- /* Given module, dump it to disk. If there was an error while
- processing the module, dump_flag will be set to zero and we delete
- the module file, even if it was already there. */
-@@ -5555,6 +6033,12 @@
- if (gfc_cpp_makedep ())
- gfc_cpp_add_target (filename);
-
-+ module_omp4 = false;
-+ if (gfc_current_ns->omp_udr_root)
-+ module_omp4 = true;
-+ else
-+ gfc_traverse_symtree (gfc_current_ns->sym_root, find_omp_declare_simd);
-+
- /* Write the module to the temporary file. */
- module_fp = gzopen (filename_tmp, "w");
- if (module_fp == NULL)
-@@ -5562,7 +6046,7 @@
- filename_tmp, xstrerror (errno));
-
- gzprintf (module_fp, "GFORTRAN module version '%s' created from %s\n",
-- MOD_VERSION, gfc_source_file);
-+ module_omp4 ? MOD_VERSION_OMP4 : MOD_VERSION, gfc_source_file);
-
- /* Write the module itself. */
- iomode = IO_OUTPUT;
-@@ -6353,6 +6837,8 @@
- read_module_to_tmpbuf ();
- gzclose (module_fp);
-
-+ module_omp4 = false;
-+
- /* Skip the first line of the module, after checking that this is
- a gfortran module file. */
- line = 0;
-@@ -6372,11 +6858,15 @@
- if (strcmp (atom_name, " version") != 0
- || module_char () != ' '
- || parse_atom () != ATOM_STRING
-- || strcmp (atom_string, MOD_VERSION))
-+ || (strcmp (atom_string, MOD_VERSION)
-+ && strcmp (atom_string, MOD_VERSION_OMP4)))
- gfc_fatal_error ("Cannot read module file '%s' opened at %C,"
- " because it was created by a different"
- " version of GNU Fortran", filename);
-
-+ if (strcmp (atom_string, MOD_VERSION_OMP4) == 0)
-+ module_omp4 = true;
-+
- free (atom_string);
- }
-
-Index: gcc/fortran/trans.c
-===================================================================
---- a/src/gcc/fortran/trans.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/trans.c (.../branches/gcc-4_9-branch)
-@@ -1848,20 +1848,43 @@
-
- case EXEC_OMP_ATOMIC:
- case EXEC_OMP_BARRIER:
-+ case EXEC_OMP_CANCEL:
-+ case EXEC_OMP_CANCELLATION_POINT:
- case EXEC_OMP_CRITICAL:
-+ case EXEC_OMP_DISTRIBUTE:
-+ case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_DISTRIBUTE_SIMD:
- case EXEC_OMP_DO:
-+ case EXEC_OMP_DO_SIMD:
- case EXEC_OMP_FLUSH:
- case EXEC_OMP_MASTER:
- case EXEC_OMP_ORDERED:
- case EXEC_OMP_PARALLEL:
- case EXEC_OMP_PARALLEL_DO:
-+ case EXEC_OMP_PARALLEL_DO_SIMD:
- case EXEC_OMP_PARALLEL_SECTIONS:
- case EXEC_OMP_PARALLEL_WORKSHARE:
- case EXEC_OMP_SECTIONS:
-+ case EXEC_OMP_SIMD:
- case EXEC_OMP_SINGLE:
-+ case EXEC_OMP_TARGET:
-+ case EXEC_OMP_TARGET_DATA:
-+ case EXEC_OMP_TARGET_TEAMS:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
-+ case EXEC_OMP_TARGET_UPDATE:
- case EXEC_OMP_TASK:
-+ case EXEC_OMP_TASKGROUP:
- case EXEC_OMP_TASKWAIT:
- case EXEC_OMP_TASKYIELD:
-+ case EXEC_OMP_TEAMS:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
- case EXEC_OMP_WORKSHARE:
- res = gfc_trans_omp_directive (code);
- break;
-Index: gcc/fortran/trans-types.c
-===================================================================
---- a/src/gcc/fortran/trans-types.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/trans-types.c (.../branches/gcc-4_9-branch)
-@@ -2162,9 +2162,6 @@
- restricted);
- byref = 0;
- }
--
-- if (sym->attr.cray_pointee)
-- GFC_POINTER_TYPE_P (type) = 1;
- }
- else
- {
-@@ -2183,8 +2180,6 @@
- if (sym->attr.allocatable || sym->attr.pointer
- || gfc_is_associate_pointer (sym))
- type = gfc_build_pointer_type (sym, type);
-- if (sym->attr.pointer || sym->attr.cray_pointee)
-- GFC_POINTER_TYPE_P (type) = 1;
- }
-
- /* We currently pass all parameters by reference.
-@@ -2554,6 +2549,8 @@
- else if (derived->declared_at.lb)
- gfc_set_decl_location (field, &derived->declared_at);
-
-+ gfc_finish_decl_attrs (field, &c->attr);
-+
- DECL_PACKED (field) |= TYPE_PACKED (typenode);
-
- gcc_assert (field);
-Index: gcc/fortran/scanner.c
-===================================================================
---- a/src/gcc/fortran/scanner.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/scanner.c (.../branches/gcc-4_9-branch)
-@@ -752,7 +752,8 @@
- 2) handle OpenMP conditional compilation, where
- !$ should be treated as 2 spaces (for initial lines
- only if followed by space). */
-- if (gfc_option.gfc_flag_openmp && at_bol)
-+ if ((gfc_option.gfc_flag_openmp
-+ || gfc_option.gfc_flag_openmp_simd) && at_bol)
- {
- locus old_loc = gfc_current_locus;
- if (next_char () == '$')
-@@ -878,7 +879,7 @@
- && continue_line < gfc_linebuf_linenum (gfc_current_locus.lb))
- continue_line = gfc_linebuf_linenum (gfc_current_locus.lb);
-
-- if (gfc_option.gfc_flag_openmp)
-+ if (gfc_option.gfc_flag_openmp || gfc_option.gfc_flag_openmp_simd)
- {
- if (next_char () == '$')
- {
-@@ -1821,7 +1822,7 @@
-
- c = line;
-
-- if (gfc_option.gfc_flag_openmp)
-+ if (gfc_option.gfc_flag_openmp || gfc_option.gfc_flag_openmp_simd)
- {
- if (gfc_current_form == FORM_FREE)
- {
-Index: gcc/fortran/trans.h
-===================================================================
---- a/src/gcc/fortran/trans.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/trans.h (.../branches/gcc-4_9-branch)
-@@ -547,6 +547,9 @@
- /* Returns true if a variable of specified size should go on the stack. */
- int gfc_can_put_var_on_stack (tree);
-
-+/* Set GFC_DECL_SCALAR_* on decl from sym if needed. */
-+void gfc_finish_decl_attrs (tree, symbol_attribute *);
-+
- /* Allocate the lang-specific part of a decl node. */
- void gfc_allocate_lang_decl (tree);
-
-@@ -666,7 +669,9 @@
- tree gfc_omp_clause_default_ctor (tree, tree, tree);
- tree gfc_omp_clause_copy_ctor (tree, tree, tree);
- tree gfc_omp_clause_assign_op (tree, tree, tree);
-+tree gfc_omp_clause_linear_ctor (tree, tree, tree, tree);
- tree gfc_omp_clause_dtor (tree, tree);
-+void gfc_omp_finish_clause (tree, gimple_seq *);
- bool gfc_omp_disregard_value_expr (tree, bool);
- bool gfc_omp_private_debug_clause (tree, bool);
- bool gfc_omp_private_outer_ref (tree);
-@@ -824,6 +829,8 @@
- tree span;
- /* For assumed-shape coarrays. */
- tree token, caf_offset;
-+ unsigned int scalar_allocatable : 1;
-+ unsigned int scalar_pointer : 1;
- };
-
-
-@@ -834,6 +841,14 @@
- #define GFC_DECL_CAF_OFFSET(node) DECL_LANG_SPECIFIC(node)->caf_offset
- #define GFC_DECL_SAVED_DESCRIPTOR(node) \
- (DECL_LANG_SPECIFIC(node)->saved_descriptor)
-+#define GFC_DECL_SCALAR_ALLOCATABLE(node) \
-+ (DECL_LANG_SPECIFIC (node)->scalar_allocatable)
-+#define GFC_DECL_SCALAR_POINTER(node) \
-+ (DECL_LANG_SPECIFIC (node)->scalar_pointer)
-+#define GFC_DECL_GET_SCALAR_ALLOCATABLE(node) \
-+ (DECL_LANG_SPECIFIC (node) ? GFC_DECL_SCALAR_ALLOCATABLE (node) : 0)
-+#define GFC_DECL_GET_SCALAR_POINTER(node) \
-+ (DECL_LANG_SPECIFIC (node) ? GFC_DECL_SCALAR_POINTER (node) : 0)
- #define GFC_DECL_PACKED_ARRAY(node) DECL_LANG_FLAG_0(node)
- #define GFC_DECL_PARTIAL_PACKED_ARRAY(node) DECL_LANG_FLAG_1(node)
- #define GFC_DECL_ASSIGN(node) DECL_LANG_FLAG_2(node)
-@@ -841,6 +856,7 @@
- #define GFC_DECL_CRAY_POINTEE(node) DECL_LANG_FLAG_4(node)
- #define GFC_DECL_RESULT(node) DECL_LANG_FLAG_5(node)
- #define GFC_DECL_SUBREF_ARRAY_P(node) DECL_LANG_FLAG_6(node)
-+#define GFC_DECL_ASSOCIATE_VAR_P(node) DECL_LANG_FLAG_7(node)
- #define GFC_DECL_CLASS(node) DECL_LANG_FLAG_8(node)
-
- /* An array descriptor. */
-@@ -847,8 +863,6 @@
- #define GFC_DESCRIPTOR_TYPE_P(node) TYPE_LANG_FLAG_1(node)
- /* An array without a descriptor. */
- #define GFC_ARRAY_TYPE_P(node) TYPE_LANG_FLAG_2(node)
--/* Fortran POINTER type. */
--#define GFC_POINTER_TYPE_P(node) TYPE_LANG_FLAG_3(node)
- /* Fortran CLASS type. */
- #define GFC_CLASS_TYPE_P(node) TYPE_LANG_FLAG_4(node)
- /* The GFC_TYPE_ARRAY_* members are present in both descriptor and
-Index: gcc/fortran/gfortranspec.c
-===================================================================
---- a/src/gcc/fortran/gfortranspec.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/gfortranspec.c (.../branches/gcc-4_9-branch)
-@@ -73,34 +73,11 @@
- static unsigned int g77_newargc;
- static struct cl_decoded_option *g77_new_decoded_options;
-
--/* The path to the spec file. */
--static char *spec_file = NULL;
--
- /* This will be NULL if we encounter a situation where we should not
- link in the fortran libraries. */
- static const char *library = NULL;
-
-
--/* Return full path name of spec file if it is in DIR, or NULL if
-- not. */
--static char *
--find_spec_file (const char *dir)
--{
-- const char dirsep_string[] = { DIR_SEPARATOR, '\0' };
-- char *spec;
-- struct stat sb;
--
-- spec = XNEWVEC (char, strlen (dir) + sizeof (SPEC_FILE) + 4);
-- strcpy (spec, dir);
-- strcat (spec, dirsep_string);
-- strcat (spec, SPEC_FILE);
-- if (!stat (spec, &sb))
-- return spec;
-- free (spec);
-- return NULL;
--}
--
--
- /* Return whether strings S1 and S2 are both NULL or both the same
- string. */
-
-@@ -313,12 +290,6 @@
- cool facility for handling --help and --verbose --help. */
- return;
-
-- case OPT_L:
-- if (!spec_file)
-- spec_file = find_spec_file (decoded_options[i].arg);
-- break;
--
--
- default:
- break;
- }
-@@ -449,12 +420,6 @@
-
- #endif
-
-- /* Read the specs file corresponding to libgfortran.
-- If we didn't find the spec file on the -L path, we load it
-- via lang_specific_pre_link. */
-- if (spec_file)
-- append_option (OPT_specs_, spec_file, 1);
--
- if (verbose && g77_new_decoded_options != g77_x_decoded_options)
- {
- fprintf (stderr, _("Driving:"));
-@@ -473,8 +438,7 @@
- int
- lang_specific_pre_link (void)
- {
-- free (spec_file);
-- if (spec_file == NULL && library)
-+ if (library)
- do_spec ("%:include(libgfortran.spec)");
-
- return 0;
-Index: gcc/fortran/frontend-passes.c
-===================================================================
---- a/src/gcc/fortran/frontend-passes.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/frontend-passes.c (.../branches/gcc-4_9-branch)
-@@ -88,6 +88,10 @@
-
- struct my_struct *evec;
-
-+/* Keep track of association lists. */
-+
-+static bool in_assoc_list;
-+
- /* Entry point - run all passes for a namespace. */
-
- void
-@@ -672,10 +676,10 @@
-
- /* Dummy function for code callback, for use when we really
- don't want to do anything. */
--static int
--dummy_code_callback (gfc_code **e ATTRIBUTE_UNUSED,
-- int *walk_subtrees ATTRIBUTE_UNUSED,
-- void *data ATTRIBUTE_UNUSED)
-+int
-+gfc_dummy_code_callback (gfc_code **e ATTRIBUTE_UNUSED,
-+ int *walk_subtrees ATTRIBUTE_UNUSED,
-+ void *data ATTRIBUTE_UNUSED)
- {
- return 0;
- }
-@@ -820,6 +824,7 @@
- current_ns = ns;
- forall_level = 0;
- iterator_level = 0;
-+ in_assoc_list = false;
- in_omp_workshare = false;
-
- gfc_code_walker (&ns->code, convert_do_while, dummy_expr_callback, NULL);
-@@ -839,7 +844,8 @@
- optimize_reduction (gfc_namespace *ns)
- {
- current_ns = ns;
-- gfc_code_walker (&ns->code, dummy_code_callback, callback_reduction, NULL);
-+ gfc_code_walker (&ns->code, gfc_dummy_code_callback,
-+ callback_reduction, NULL);
-
- /* BLOCKs are handled in the expression walker below. */
- for (ns = ns->contained; ns; ns = ns->sibling)
-@@ -1054,6 +1060,11 @@
- if (e->rank != 1)
- return false;
-
-+ /* Don't try to combine association lists, this makes no sense
-+ and leads to an ICE. */
-+ if (in_assoc_list)
-+ return false;
-+
- op1 = e->value.op.op1;
- op2 = e->value.op.op2;
-
-@@ -1940,8 +1951,17 @@
-
- case EXEC_BLOCK:
- WALK_SUBCODE (co->ext.block.ns->code);
-- for (alist = co->ext.block.assoc; alist; alist = alist->next)
-- WALK_SUBEXPR (alist->target);
-+ if (co->ext.block.assoc)
-+ {
-+ bool saved_in_assoc_list = in_assoc_list;
-+
-+ in_assoc_list = true;
-+ for (alist = co->ext.block.assoc; alist; alist = alist->next)
-+ WALK_SUBEXPR (alist->target);
-+
-+ in_assoc_list = saved_in_assoc_list;
-+ }
-+
- break;
-
- case EXEC_DO:
-@@ -2112,6 +2132,7 @@
-
- case EXEC_OMP_PARALLEL:
- case EXEC_OMP_PARALLEL_DO:
-+ case EXEC_OMP_PARALLEL_DO_SIMD:
- case EXEC_OMP_PARALLEL_SECTIONS:
-
- in_omp_workshare = false;
-@@ -2126,12 +2147,31 @@
- in_omp_workshare = true;
-
- /* Fall through */
--
-+
-+ case EXEC_OMP_DISTRIBUTE:
-+ case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_DISTRIBUTE_SIMD:
- case EXEC_OMP_DO:
-+ case EXEC_OMP_DO_SIMD:
- case EXEC_OMP_SECTIONS:
- case EXEC_OMP_SINGLE:
- case EXEC_OMP_END_SINGLE:
-+ case EXEC_OMP_SIMD:
-+ case EXEC_OMP_TARGET:
-+ case EXEC_OMP_TARGET_DATA:
-+ case EXEC_OMP_TARGET_TEAMS:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
-+ case EXEC_OMP_TARGET_UPDATE:
- case EXEC_OMP_TASK:
-+ case EXEC_OMP_TEAMS:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
-
- /* Come to this label only from the
- EXEC_OMP_PARALLEL_* cases above. */
-@@ -2140,10 +2180,27 @@
-
- if (co->ext.omp_clauses)
- {
-+ gfc_omp_namelist *n;
-+ static int list_types[]
-+ = { OMP_LIST_ALIGNED, OMP_LIST_LINEAR, OMP_LIST_DEPEND,
-+ OMP_LIST_MAP, OMP_LIST_TO, OMP_LIST_FROM };
-+ size_t idx;
- WALK_SUBEXPR (co->ext.omp_clauses->if_expr);
- WALK_SUBEXPR (co->ext.omp_clauses->final_expr);
- WALK_SUBEXPR (co->ext.omp_clauses->num_threads);
- WALK_SUBEXPR (co->ext.omp_clauses->chunk_size);
-+ WALK_SUBEXPR (co->ext.omp_clauses->safelen_expr);
-+ WALK_SUBEXPR (co->ext.omp_clauses->simdlen_expr);
-+ WALK_SUBEXPR (co->ext.omp_clauses->num_teams);
-+ WALK_SUBEXPR (co->ext.omp_clauses->device);
-+ WALK_SUBEXPR (co->ext.omp_clauses->thread_limit);
-+ WALK_SUBEXPR (co->ext.omp_clauses->dist_chunk_size);
-+ for (idx = 0;
-+ idx < sizeof (list_types) / sizeof (list_types[0]);
-+ idx++)
-+ for (n = co->ext.omp_clauses->lists[list_types[idx]];
-+ n; n = n->next)
-+ WALK_SUBEXPR (n->expr);
- }
- break;
- default:
-Index: gcc/fortran/resolve.c
-===================================================================
---- a/src/gcc/fortran/resolve.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/resolve.c (.../branches/gcc-4_9-branch)
-@@ -40,7 +40,7 @@
- seq_type;
-
- /* Stack to keep track of the nesting of blocks as we move through the
-- code. See resolve_branch() and resolve_code(). */
-+ code. See resolve_branch() and gfc_resolve_code(). */
-
- typedef struct code_stack
- {
-@@ -2887,7 +2887,8 @@
-
- /* See if function is already resolved. */
-
-- if (expr->value.function.name != NULL)
-+ if (expr->value.function.name != NULL
-+ || expr->value.function.isym != NULL)
- {
- if (expr->ts.type == BT_UNKNOWN)
- expr->ts = sym->ts;
-@@ -4884,7 +4885,7 @@
- if (check_assumed_size_reference (sym, e))
- return false;
-
-- /* Deal with forward references to entries during resolve_code, to
-+ /* Deal with forward references to entries during gfc_resolve_code, to
- satisfy, at least partially, 12.5.2.5. */
- if (gfc_current_ns->entries
- && current_entry_id == sym->entry_id
-@@ -8926,8 +8927,6 @@
- /* Resolve lists of blocks found in IF, SELECT CASE, WHERE, FORALL, GOTO and
- DO code nodes. */
-
--static void resolve_code (gfc_code *, gfc_namespace *);
--
- void
- gfc_resolve_blocks (gfc_code *b, gfc_namespace *ns)
- {
-@@ -8979,18 +8978,39 @@
-
- case EXEC_OMP_ATOMIC:
- case EXEC_OMP_CRITICAL:
-+ case EXEC_OMP_DISTRIBUTE:
-+ case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_DISTRIBUTE_SIMD:
- case EXEC_OMP_DO:
-+ case EXEC_OMP_DO_SIMD:
- case EXEC_OMP_MASTER:
- case EXEC_OMP_ORDERED:
- case EXEC_OMP_PARALLEL:
- case EXEC_OMP_PARALLEL_DO:
-+ case EXEC_OMP_PARALLEL_DO_SIMD:
- case EXEC_OMP_PARALLEL_SECTIONS:
- case EXEC_OMP_PARALLEL_WORKSHARE:
- case EXEC_OMP_SECTIONS:
-+ case EXEC_OMP_SIMD:
- case EXEC_OMP_SINGLE:
-+ case EXEC_OMP_TARGET:
-+ case EXEC_OMP_TARGET_DATA:
-+ case EXEC_OMP_TARGET_TEAMS:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
-+ case EXEC_OMP_TARGET_UPDATE:
- case EXEC_OMP_TASK:
-+ case EXEC_OMP_TASKGROUP:
- case EXEC_OMP_TASKWAIT:
- case EXEC_OMP_TASKYIELD:
-+ case EXEC_OMP_TEAMS:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
- case EXEC_OMP_WORKSHARE:
- break;
-
-@@ -8998,7 +9018,7 @@
- gfc_internal_error ("gfc_resolve_blocks(): Bad block type");
- }
-
-- resolve_code (b->next, ns);
-+ gfc_resolve_code (b->next, ns);
- }
- }
-
-@@ -9411,7 +9431,7 @@
- The pointer assignments are taken care of by the intrinsic
- assignment of the structure itself. This function recursively adds
- defined assignments where required. The recursion is accomplished
-- by calling resolve_code.
-+ by calling gfc_resolve_code.
-
- When the lhs in a defined assignment has intent INOUT, we need a
- temporary for the lhs. In pseudo-code:
-@@ -9529,9 +9549,9 @@
- comp1, comp2, (*code)->loc);
-
- /* Convert the assignment if there is a defined assignment for
-- this type. Otherwise, using the call from resolve_code,
-+ this type. Otherwise, using the call from gfc_resolve_code,
- recurse into its components. */
-- resolve_code (this_code, ns);
-+ gfc_resolve_code (this_code, ns);
-
- if (this_code->op == EXEC_ASSIGN_CALL)
- {
-@@ -9695,8 +9715,8 @@
- /* Given a block of code, recursively resolve everything pointed to by this
- code block. */
-
--static void
--resolve_code (gfc_code *code, gfc_namespace *ns)
-+void
-+gfc_resolve_code (gfc_code *code, gfc_namespace *ns)
- {
- int omp_workshare_save;
- int forall_save, do_concurrent_save;
-@@ -9733,13 +9753,28 @@
- break;
- case EXEC_OMP_PARALLEL:
- case EXEC_OMP_PARALLEL_DO:
-+ case EXEC_OMP_PARALLEL_DO_SIMD:
- case EXEC_OMP_PARALLEL_SECTIONS:
-+ case EXEC_OMP_TARGET_TEAMS:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
- case EXEC_OMP_TASK:
-+ case EXEC_OMP_TEAMS:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
- omp_workshare_save = omp_workshare_flag;
- omp_workshare_flag = 0;
- gfc_resolve_omp_parallel_blocks (code, ns);
- break;
-+ case EXEC_OMP_DISTRIBUTE:
-+ case EXEC_OMP_DISTRIBUTE_SIMD:
- case EXEC_OMP_DO:
-+ case EXEC_OMP_DO_SIMD:
-+ case EXEC_OMP_SIMD:
- gfc_resolve_omp_do_blocks (code, ns);
- break;
- case EXEC_SELECT_TYPE:
-@@ -9960,7 +9995,8 @@
-
- case EXEC_DO_WHILE:
- if (code->expr1 == NULL)
-- gfc_internal_error ("resolve_code(): No expression on DO WHILE");
-+ gfc_internal_error ("gfc_resolve_code(): No expression on "
-+ "DO WHILE");
- if (t
- && (code->expr1->rank != 0
- || code->expr1->ts.type != BT_LOGICAL))
-@@ -10054,15 +10090,38 @@
-
- case EXEC_OMP_ATOMIC:
- case EXEC_OMP_BARRIER:
-+ case EXEC_OMP_CANCEL:
-+ case EXEC_OMP_CANCELLATION_POINT:
- case EXEC_OMP_CRITICAL:
- case EXEC_OMP_FLUSH:
-+ case EXEC_OMP_DISTRIBUTE:
-+ case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_DISTRIBUTE_SIMD:
- case EXEC_OMP_DO:
-+ case EXEC_OMP_DO_SIMD:
- case EXEC_OMP_MASTER:
- case EXEC_OMP_ORDERED:
- case EXEC_OMP_SECTIONS:
-+ case EXEC_OMP_SIMD:
- case EXEC_OMP_SINGLE:
-+ case EXEC_OMP_TARGET:
-+ case EXEC_OMP_TARGET_DATA:
-+ case EXEC_OMP_TARGET_TEAMS:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
-+ case EXEC_OMP_TARGET_UPDATE:
-+ case EXEC_OMP_TASK:
-+ case EXEC_OMP_TASKGROUP:
- case EXEC_OMP_TASKWAIT:
- case EXEC_OMP_TASKYIELD:
-+ case EXEC_OMP_TEAMS:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
- case EXEC_OMP_WORKSHARE:
- gfc_resolve_omp_directive (code, ns);
- break;
-@@ -10069,9 +10128,9 @@
-
- case EXEC_OMP_PARALLEL:
- case EXEC_OMP_PARALLEL_DO:
-+ case EXEC_OMP_PARALLEL_DO_SIMD:
- case EXEC_OMP_PARALLEL_SECTIONS:
- case EXEC_OMP_PARALLEL_WORKSHARE:
-- case EXEC_OMP_TASK:
- omp_workshare_save = omp_workshare_flag;
- omp_workshare_flag = 0;
- gfc_resolve_omp_directive (code, ns);
-@@ -10079,7 +10138,7 @@
- break;
-
- default:
-- gfc_internal_error ("resolve_code(): Bad statement code");
-+ gfc_internal_error ("gfc_resolve_code(): Bad statement code");
- }
- }
-
-@@ -10779,7 +10838,10 @@
- }
-
- /* Constraints on deferred type parameter. */
-- if (sym->ts.deferred && !(sym->attr.pointer || sym->attr.allocatable))
-+ if (sym->ts.deferred
-+ && !(sym->attr.pointer
-+ || sym->attr.allocatable
-+ || sym->attr.omp_udr_artificial_var))
- {
- gfc_error ("Entity '%s' at %L has a deferred type parameter and "
- "requires either the pointer or allocatable attribute",
-@@ -10794,7 +10856,8 @@
- dummy arguments. */
- e = sym->ts.u.cl->length;
- if (e == NULL && !sym->attr.dummy && !sym->attr.result
-- && !sym->ts.deferred && !sym->attr.select_type_temporary)
-+ && !sym->ts.deferred && !sym->attr.select_type_temporary
-+ && !sym->attr.omp_udr_artificial_var)
- {
- gfc_error ("Entity with assumed character length at %L must be a "
- "dummy argument or a PARAMETER", &sym->declared_at);
-@@ -11200,15 +11263,36 @@
- the requirements of the standard for procedures used as finalizers. */
-
- static bool
--gfc_resolve_finalizers (gfc_symbol* derived)
-+gfc_resolve_finalizers (gfc_symbol* derived, bool *finalizable)
- {
- gfc_finalizer* list;
- gfc_finalizer** prev_link; /* For removing wrong entries from the list. */
- bool result = true;
- bool seen_scalar = false;
-+ gfc_symbol *vtab;
-+ gfc_component *c;
-
-+ /* Return early when not finalizable. Additionally, ensure that derived-type
-+ components have a their finalizables resolved. */
- if (!derived->f2k_derived || !derived->f2k_derived->finalizers)
-- return true;
-+ {
-+ bool has_final = false;
-+ for (c = derived->components; c; c = c->next)
-+ if (c->ts.type == BT_DERIVED
-+ && !c->attr.pointer && !c->attr.proc_pointer && !c->attr.allocatable)
-+ {
-+ bool has_final2 = false;
-+ if (!gfc_resolve_finalizers (c->ts.u.derived, &has_final))
-+ return false; /* Error. */
-+ has_final = has_final || has_final2;
-+ }
-+ if (!has_final)
-+ {
-+ if (finalizable)
-+ *finalizable = false;
-+ return true;
-+ }
-+ }
-
- /* Walk over the list of finalizer-procedures, check them, and if any one
- does not fit in with the standard's definition, print an error and remove
-@@ -11330,12 +11414,15 @@
- /* Remove wrong nodes immediately from the list so we don't risk any
- troubles in the future when they might fail later expectations. */
- error:
-- result = false;
- i = list;
- *prev_link = list->next;
- gfc_free_finalizer (i);
-+ result = false;
- }
-
-+ if (result == false)
-+ return false;
-+
- /* Warn if we haven't seen a scalar finalizer procedure (but we know there
- were nodes in the list, must have been for arrays. It is surely a good
- idea to have a scalar version there if there's something to finalize. */
-@@ -11344,8 +11431,14 @@
- " defined at %L, suggest also scalar one",
- derived->name, &derived->declared_at);
-
-- gfc_find_derived_vtab (derived);
-- return result;
-+ vtab = gfc_find_derived_vtab (derived);
-+ c = vtab->ts.u.derived->components->next->next->next->next->next;
-+ gfc_set_sym_referenced (c->initializer->symtree->n.sym);
-+
-+ if (finalizable)
-+ *finalizable = true;
-+
-+ return true;
- }
-
-
-@@ -12513,7 +12606,7 @@
- return false;
-
- /* Resolve the finalizer procedures. */
-- if (!gfc_resolve_finalizers (sym))
-+ if (!gfc_resolve_finalizers (sym, NULL))
- return false;
-
- if (sym->attr.is_class && sym->ts.u.derived == NULL)
-@@ -13399,6 +13492,18 @@
- || sym->ns->proc_name->attr.flavor != FL_MODULE)))
- gfc_error ("Threadprivate at %L isn't SAVEd", &sym->declared_at);
-
-+ /* Check omp declare target restrictions. */
-+ if (sym->attr.omp_declare_target
-+ && sym->attr.flavor == FL_VARIABLE
-+ && !sym->attr.save
-+ && !sym->ns->save_all
-+ && (!sym->attr.in_common
-+ && sym->module == NULL
-+ && (sym->ns->proc_name == NULL
-+ || sym->ns->proc_name->attr.flavor != FL_MODULE)))
-+ gfc_error ("!$OMP DECLARE TARGET variable '%s' at %L isn't SAVEd",
-+ sym->name, &sym->declared_at);
-+
- /* If we have come this far we can apply default-initializers, as
- described in 14.7.5, to those variables that have not already
- been assigned one. */
-@@ -14496,7 +14601,7 @@
- assign types to all intermediate expressions, make sure that all
- assignments are to compatible types and figure out which names
- refer to which functions or subroutines. It doesn't check code
-- block, which is handled by resolve_code. */
-+ block, which is handled by gfc_resolve_code. */
-
- static void
- resolve_types (gfc_namespace *ns)
-@@ -14577,11 +14682,15 @@
-
- gfc_resolve_uops (ns->uop_root);
-
-+ gfc_resolve_omp_declare_simd (ns);
-+
-+ gfc_resolve_omp_udrs (ns->omp_udr_root);
-+
- gfc_current_ns = old_ns;
- }
-
-
--/* Call resolve_code recursively. */
-+/* Call gfc_resolve_code recursively. */
-
- static void
- resolve_codes (gfc_namespace *ns)
-@@ -14607,7 +14716,7 @@
- old_obstack = labels_obstack;
- bitmap_obstack_initialize (&labels_obstack);
-
-- resolve_code (ns->code, ns);
-+ gfc_resolve_code (ns->code, ns);
-
- bitmap_obstack_release (&labels_obstack);
- labels_obstack = old_obstack;
-Index: gcc/fortran/f95-lang.c
-===================================================================
---- a/src/gcc/fortran/f95-lang.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/f95-lang.c (.../branches/gcc-4_9-branch)
-@@ -87,6 +87,24 @@
- static void gfc_init_ts (void);
- static tree gfc_builtin_function (tree);
-
-+/* Handle an "omp declare target" attribute; arguments as in
-+ struct attribute_spec.handler. */
-+static tree
-+gfc_handle_omp_declare_target_attribute (tree *, tree, tree, int, bool *)
-+{
-+ return NULL_TREE;
-+}
-+
-+/* Table of valid Fortran attributes. */
-+static const struct attribute_spec gfc_attribute_table[] =
-+{
-+ /* { name, min_len, max_len, decl_req, type_req, fn_type_req, handler,
-+ affects_type_identity } */
-+ { "omp declare target", 0, 0, true, false, false,
-+ gfc_handle_omp_declare_target_attribute, false },
-+ { NULL, 0, 0, false, false, false, NULL, false }
-+};
-+
- #undef LANG_HOOKS_NAME
- #undef LANG_HOOKS_INIT
- #undef LANG_HOOKS_FINISH
-@@ -108,7 +126,9 @@
- #undef LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR
- #undef LANG_HOOKS_OMP_CLAUSE_COPY_CTOR
- #undef LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP
-+#undef LANG_HOOKS_OMP_CLAUSE_LINEAR_CTOR
- #undef LANG_HOOKS_OMP_CLAUSE_DTOR
-+#undef LANG_HOOKS_OMP_FINISH_CLAUSE
- #undef LANG_HOOKS_OMP_DISREGARD_VALUE_EXPR
- #undef LANG_HOOKS_OMP_PRIVATE_DEBUG_CLAUSE
- #undef LANG_HOOKS_OMP_PRIVATE_OUTER_REF
-@@ -116,6 +136,7 @@
- #undef LANG_HOOKS_BUILTIN_FUNCTION
- #undef LANG_HOOKS_BUILTIN_FUNCTION
- #undef LANG_HOOKS_GET_ARRAY_DESCR_INFO
-+#undef LANG_HOOKS_ATTRIBUTE_TABLE
-
- /* Define lang hooks. */
- #define LANG_HOOKS_NAME "GNU Fortran"
-@@ -138,14 +159,17 @@
- #define LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR gfc_omp_clause_default_ctor
- #define LANG_HOOKS_OMP_CLAUSE_COPY_CTOR gfc_omp_clause_copy_ctor
- #define LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP gfc_omp_clause_assign_op
-+#define LANG_HOOKS_OMP_CLAUSE_LINEAR_CTOR gfc_omp_clause_linear_ctor
- #define LANG_HOOKS_OMP_CLAUSE_DTOR gfc_omp_clause_dtor
-+#define LANG_HOOKS_OMP_FINISH_CLAUSE gfc_omp_finish_clause
- #define LANG_HOOKS_OMP_DISREGARD_VALUE_EXPR gfc_omp_disregard_value_expr
- #define LANG_HOOKS_OMP_PRIVATE_DEBUG_CLAUSE gfc_omp_private_debug_clause
- #define LANG_HOOKS_OMP_PRIVATE_OUTER_REF gfc_omp_private_outer_ref
- #define LANG_HOOKS_OMP_FIRSTPRIVATIZE_TYPE_SIZES \
- gfc_omp_firstprivatize_type_sizes
--#define LANG_HOOKS_BUILTIN_FUNCTION gfc_builtin_function
--#define LANG_HOOKS_GET_ARRAY_DESCR_INFO gfc_get_array_descr_info
-+#define LANG_HOOKS_BUILTIN_FUNCTION gfc_builtin_function
-+#define LANG_HOOKS_GET_ARRAY_DESCR_INFO gfc_get_array_descr_info
-+#define LANG_HOOKS_ATTRIBUTE_TABLE gfc_attribute_table
-
- struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
-
-@@ -1038,7 +1062,9 @@
- #include "../sync-builtins.def"
- #undef DEF_SYNC_BUILTIN
-
-- if (gfc_option.gfc_flag_openmp || flag_tree_parallelize_loops)
-+ if (gfc_option.gfc_flag_openmp
-+ || gfc_option.gfc_flag_openmp_simd
-+ || flag_tree_parallelize_loops)
- {
- #undef DEF_GOMP_BUILTIN
- #define DEF_GOMP_BUILTIN(code, name, type, attr) \
-@@ -1052,6 +1078,13 @@
- BUILT_IN_TRAP, NULL, ATTR_NOTHROW_LEAF_LIST);
- TREE_THIS_VOLATILE (builtin_decl_explicit (BUILT_IN_TRAP)) = 1;
-
-+ ftype = build_varargs_function_type_list (ptr_type_node, const_ptr_type_node,
-+ size_type_node, NULL_TREE);
-+ gfc_define_builtin ("__builtin_assume_aligned", ftype,
-+ BUILT_IN_ASSUME_ALIGNED,
-+ "__builtin_assume_aligned",
-+ ATTR_CONST_NOTHROW_LEAF_LIST);
-+
- gfc_define_builtin ("__emutls_get_address",
- builtin_types[BT_FN_PTR_PTR],
- BUILT_IN_EMUTLS_GET_ADDRESS,
-Index: gcc/fortran/st.c
-===================================================================
---- a/src/gcc/fortran/st.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/st.c (.../branches/gcc-4_9-branch)
-@@ -185,14 +185,36 @@
- gfc_free_forall_iterator (p->ext.forall_iterator);
- break;
-
-+ case EXEC_OMP_CANCEL:
-+ case EXEC_OMP_CANCELLATION_POINT:
-+ case EXEC_OMP_DISTRIBUTE:
-+ case EXEC_OMP_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_DISTRIBUTE_SIMD:
- case EXEC_OMP_DO:
-+ case EXEC_OMP_DO_SIMD:
- case EXEC_OMP_END_SINGLE:
- case EXEC_OMP_PARALLEL:
- case EXEC_OMP_PARALLEL_DO:
-+ case EXEC_OMP_PARALLEL_DO_SIMD:
- case EXEC_OMP_PARALLEL_SECTIONS:
- case EXEC_OMP_SECTIONS:
-+ case EXEC_OMP_SIMD:
- case EXEC_OMP_SINGLE:
-+ case EXEC_OMP_TARGET:
-+ case EXEC_OMP_TARGET_DATA:
-+ case EXEC_OMP_TARGET_TEAMS:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
-+ case EXEC_OMP_TARGET_UPDATE:
- case EXEC_OMP_TASK:
-+ case EXEC_OMP_TEAMS:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case EXEC_OMP_TEAMS_DISTRIBUTE_SIMD:
- case EXEC_OMP_WORKSHARE:
- case EXEC_OMP_PARALLEL_WORKSHARE:
- gfc_free_omp_clauses (p->ext.omp_clauses);
-@@ -203,7 +225,7 @@
- break;
-
- case EXEC_OMP_FLUSH:
-- gfc_free_namelist (p->ext.omp_namelist);
-+ gfc_free_omp_namelist (p->ext.omp_namelist);
- break;
-
- case EXEC_OMP_ATOMIC:
-@@ -211,6 +233,7 @@
- case EXEC_OMP_MASTER:
- case EXEC_OMP_ORDERED:
- case EXEC_OMP_END_NOWAIT:
-+ case EXEC_OMP_TASKGROUP:
- case EXEC_OMP_TASKWAIT:
- case EXEC_OMP_TASKYIELD:
- break;
-Index: gcc/fortran/trans-decl.c
-===================================================================
---- a/src/gcc/fortran/trans-decl.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/trans-decl.c (.../branches/gcc-4_9-branch)
-@@ -496,6 +496,29 @@
- }
-
-
-+/* Handle setting of GFC_DECL_SCALAR* on DECL. */
-+
-+void
-+gfc_finish_decl_attrs (tree decl, symbol_attribute *attr)
-+{
-+ if (!attr->dimension && !attr->codimension)
-+ {
-+ /* Handle scalar allocatable variables. */
-+ if (attr->allocatable)
-+ {
-+ gfc_allocate_lang_decl (decl);
-+ GFC_DECL_SCALAR_ALLOCATABLE (decl) = 1;
-+ }
-+ /* Handle scalar pointer variables. */
-+ if (attr->pointer)
-+ {
-+ gfc_allocate_lang_decl (decl);
-+ GFC_DECL_SCALAR_POINTER (decl) = 1;
-+ }
-+ }
-+}
-+
-+
- /* Apply symbol attributes to a variable, and add it to the function scope. */
-
- static void
-@@ -607,6 +630,8 @@
- if (sym->attr.threadprivate
- && (TREE_STATIC (decl) || DECL_EXTERNAL (decl)))
- DECL_TLS_MODEL (decl) = decl_default_tls_model (decl);
-+
-+ gfc_finish_decl_attrs (decl, &sym->attr);
- }
-
-
-@@ -615,8 +640,9 @@
- void
- gfc_allocate_lang_decl (tree decl)
- {
-- DECL_LANG_SPECIFIC (decl) = ggc_alloc_cleared_lang_decl(sizeof
-- (struct lang_decl));
-+ if (DECL_LANG_SPECIFIC (decl) == NULL)
-+ DECL_LANG_SPECIFIC (decl)
-+ = ggc_alloc_cleared_lang_decl (sizeof (struct lang_decl));
- }
-
- /* Remember a symbol to generate initialization/cleanup code at function
-@@ -1192,6 +1218,10 @@
- list = chainon (list, attr);
- }
-
-+ if (sym_attr.omp_declare_target)
-+ list = tree_cons (get_identifier ("omp declare target"),
-+ NULL_TREE, list);
-+
- return list;
- }
-
-@@ -1518,6 +1548,9 @@
- && !sym->attr.select_type_temporary)
- DECL_BY_REFERENCE (decl) = 1;
-
-+ if (sym->attr.associate_var)
-+ GFC_DECL_ASSOCIATE_VAR_P (decl) = 1;
-+
- if (sym->attr.vtab
- || (sym->name[0] == '_' && strncmp ("__def_init", sym->name, 10) == 0))
- TREE_READONLY (decl) = 1;
-@@ -1850,6 +1883,11 @@
- if (DECL_CONTEXT (fndecl) == NULL_TREE)
- pushdecl_top_level (fndecl);
-
-+ if (sym->formal_ns
-+ && sym->formal_ns->proc_name == sym
-+ && sym->formal_ns->omp_declare_simd)
-+ gfc_trans_omp_declare_simd (sym->formal_ns);
-+
- return fndecl;
- }
-
-@@ -2232,6 +2270,7 @@
- DECL_BY_REFERENCE (parm) = 1;
-
- gfc_finish_decl (parm);
-+ gfc_finish_decl_attrs (parm, &f->sym->attr);
-
- f->sym->backend_decl = parm;
-
-@@ -2544,6 +2583,9 @@
-
- /* Now create the read argument list. */
- create_function_arglist (ns->proc_name);
-+
-+ if (ns->omp_declare_simd)
-+ gfc_trans_omp_declare_simd (ns);
- }
-
- /* Return the decl used to hold the function return value. If
-@@ -2672,6 +2714,7 @@
- TREE_ADDRESSABLE (decl) = 1;
-
- layout_decl (decl, 0);
-+ gfc_finish_decl_attrs (decl, &sym->attr);
-
- if (parent_flag)
- gfc_add_decl_to_parent_function (decl);
-@@ -4237,8 +4280,8 @@
- }
-
- /* Don't generate variables from other modules. Variables from
-- COMMONs will already have been generated. */
-- if (sym->attr.use_assoc || sym->attr.in_common)
-+ COMMONs and Cray pointees will already have been generated. */
-+ if (sym->attr.use_assoc || sym->attr.in_common || sym->attr.cray_pointee)
- return;
-
- /* Equivalenced variables arrive here after creation. */
-Index: gcc/fortran/match.c
-===================================================================
---- a/src/gcc/fortran/match.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/match.c (.../branches/gcc-4_9-branch)
-@@ -2595,7 +2595,10 @@
- && o != NULL
- && o->state == COMP_OMP_STRUCTURED_BLOCK
- && (o->head->op == EXEC_OMP_DO
-- || o->head->op == EXEC_OMP_PARALLEL_DO))
-+ || o->head->op == EXEC_OMP_PARALLEL_DO
-+ || o->head->op == EXEC_OMP_SIMD
-+ || o->head->op == EXEC_OMP_DO_SIMD
-+ || o->head->op == EXEC_OMP_PARALLEL_DO_SIMD))
- {
- int collapse = 1;
- gcc_assert (o->head->next != NULL
-@@ -4564,6 +4567,30 @@
- }
-
-
-+/* Free an OpenMP namelist structure. */
-+
-+void
-+gfc_free_omp_namelist (gfc_omp_namelist *name)
-+{
-+ gfc_omp_namelist *n;
-+
-+ for (; name; name = n)
-+ {
-+ gfc_free_expr (name->expr);
-+ if (name->udr)
-+ {
-+ if (name->udr->combiner)
-+ gfc_free_statement (name->udr->combiner);
-+ if (name->udr->initializer)
-+ gfc_free_statement (name->udr->initializer);
-+ free (name->udr);
-+ }
-+ n = name->next;
-+ free (name);
-+ }
-+}
-+
-+
- /* Match a NAMELIST statement. */
-
- match
-Index: gcc/fortran/match.h
-===================================================================
---- a/src/gcc/fortran/match.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/match.h (.../branches/gcc-4_9-branch)
-@@ -126,20 +126,46 @@
- match gfc_match_omp_eos (void);
- match gfc_match_omp_atomic (void);
- match gfc_match_omp_barrier (void);
-+match gfc_match_omp_cancel (void);
-+match gfc_match_omp_cancellation_point (void);
- match gfc_match_omp_critical (void);
-+match gfc_match_omp_declare_reduction (void);
-+match gfc_match_omp_declare_simd (void);
-+match gfc_match_omp_declare_target (void);
-+match gfc_match_omp_distribute (void);
-+match gfc_match_omp_distribute_parallel_do (void);
-+match gfc_match_omp_distribute_parallel_do_simd (void);
-+match gfc_match_omp_distribute_simd (void);
- match gfc_match_omp_do (void);
-+match gfc_match_omp_do_simd (void);
- match gfc_match_omp_flush (void);
- match gfc_match_omp_master (void);
- match gfc_match_omp_ordered (void);
- match gfc_match_omp_parallel (void);
- match gfc_match_omp_parallel_do (void);
-+match gfc_match_omp_parallel_do_simd (void);
- match gfc_match_omp_parallel_sections (void);
- match gfc_match_omp_parallel_workshare (void);
- match gfc_match_omp_sections (void);
-+match gfc_match_omp_simd (void);
- match gfc_match_omp_single (void);
-+match gfc_match_omp_target (void);
-+match gfc_match_omp_target_data (void);
-+match gfc_match_omp_target_teams (void);
-+match gfc_match_omp_target_teams_distribute (void);
-+match gfc_match_omp_target_teams_distribute_parallel_do (void);
-+match gfc_match_omp_target_teams_distribute_parallel_do_simd (void);
-+match gfc_match_omp_target_teams_distribute_simd (void);
-+match gfc_match_omp_target_update (void);
- match gfc_match_omp_task (void);
-+match gfc_match_omp_taskgroup (void);
- match gfc_match_omp_taskwait (void);
- match gfc_match_omp_taskyield (void);
-+match gfc_match_omp_teams (void);
-+match gfc_match_omp_teams_distribute (void);
-+match gfc_match_omp_teams_distribute_parallel_do (void);
-+match gfc_match_omp_teams_distribute_parallel_do_simd (void);
-+match gfc_match_omp_teams_distribute_simd (void);
- match gfc_match_omp_threadprivate (void);
- match gfc_match_omp_workshare (void);
- match gfc_match_omp_end_nowait (void);
-Index: gcc/fortran/parse.c
-===================================================================
---- a/src/gcc/fortran/parse.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/fortran/parse.c (.../branches/gcc-4_9-branch)
-@@ -74,6 +74,34 @@
- }
-
-
-+/* Like match_word, but if str is matched, set a flag that it
-+ was matched. */
-+static match
-+match_word_omp_simd (const char *str, match (*subr) (void), locus *old_locus,
-+ bool *simd_matched)
-+{
-+ match m;
-+
-+ if (str != NULL)
-+ {
-+ m = gfc_match (str);
-+ if (m != MATCH_YES)
-+ return m;
-+ *simd_matched = true;
-+ }
-+
-+ m = (*subr) ();
-+
-+ if (m != MATCH_YES)
-+ {
-+ gfc_current_locus = *old_locus;
-+ reject_statement ();
-+ }
-+
-+ return m;
-+}
-+
-+
- /* Load symbols from all USE statements encountered in this scoping unit. */
-
- static void
-@@ -103,7 +131,7 @@
- if (match_word (keyword, subr, &old_locus) == MATCH_YES) \
- return st; \
- else \
-- undo_new_statement (); \
-+ undo_new_statement (); \
- } while (0);
-
-
-@@ -531,11 +559,34 @@
- return ST_NONE;
- }
-
-+/* Like match, but set a flag simd_matched if keyword matched. */
-+#define matchs(keyword, subr, st) \
-+ do { \
-+ if (match_word_omp_simd (keyword, subr, &old_locus, \
-+ &simd_matched) == MATCH_YES) \
-+ return st; \
-+ else \
-+ undo_new_statement (); \
-+ } while (0);
-+
-+/* Like match, but don't match anything if not -fopenmp. */
-+#define matcho(keyword, subr, st) \
-+ do { \
-+ if (!gfc_option.gfc_flag_openmp) \
-+ ; \
-+ else if (match_word (keyword, subr, &old_locus) \
-+ == MATCH_YES) \
-+ return st; \
-+ else \
-+ undo_new_statement (); \
-+ } while (0);
-+
- static gfc_statement
- decode_omp_directive (void)
- {
- locus old_locus;
- char c;
-+ bool simd_matched = false;
-
- gfc_enforce_clean_symbol_state ();
-
-@@ -560,77 +611,167 @@
-
- c = gfc_peek_ascii_char ();
-
-+ /* match is for directives that should be recognized only if
-+ -fopenmp, matchs for directives that should be recognized
-+ if either -fopenmp or -fopenmp-simd. */
- switch (c)
- {
- case 'a':
-- match ("atomic", gfc_match_omp_atomic, ST_OMP_ATOMIC);
-+ matcho ("atomic", gfc_match_omp_atomic, ST_OMP_ATOMIC);
- break;
- case 'b':
-- match ("barrier", gfc_match_omp_barrier, ST_OMP_BARRIER);
-+ matcho ("barrier", gfc_match_omp_barrier, ST_OMP_BARRIER);
- break;
- case 'c':
-- match ("critical", gfc_match_omp_critical, ST_OMP_CRITICAL);
-+ matcho ("cancellation% point", gfc_match_omp_cancellation_point,
-+ ST_OMP_CANCELLATION_POINT);
-+ matcho ("cancel", gfc_match_omp_cancel, ST_OMP_CANCEL);
-+ matcho ("critical", gfc_match_omp_critical, ST_OMP_CRITICAL);
- break;
- case 'd':
-- match ("do", gfc_match_omp_do, ST_OMP_DO);
-+ matchs ("declare reduction", gfc_match_omp_declare_reduction,
-+ ST_OMP_DECLARE_REDUCTION);
-+ matchs ("declare simd", gfc_match_omp_declare_simd,
-+ ST_OMP_DECLARE_SIMD);
-+ matcho ("declare target", gfc_match_omp_declare_target,
-+ ST_OMP_DECLARE_TARGET);
-+ matchs ("distribute parallel do simd",
-+ gfc_match_omp_distribute_parallel_do_simd,
-+ ST_OMP_DISTRIBUTE_PARALLEL_DO_SIMD);
-+ matcho ("distribute parallel do", gfc_match_omp_distribute_parallel_do,
-+ ST_OMP_DISTRIBUTE_PARALLEL_DO);
-+ matchs ("distribute simd", gfc_match_omp_distribute_simd,
-+ ST_OMP_DISTRIBUTE_SIMD);
-+ matcho ("distribute", gfc_match_omp_distribute, ST_OMP_DISTRIBUTE);
-+ matchs ("do simd", gfc_match_omp_do_simd, ST_OMP_DO_SIMD);
-+ matcho ("do", gfc_match_omp_do, ST_OMP_DO);
- break;
- case 'e':
-- match ("end atomic", gfc_match_omp_eos, ST_OMP_END_ATOMIC);
-- match ("end critical", gfc_match_omp_critical, ST_OMP_END_CRITICAL);
-- match ("end do", gfc_match_omp_end_nowait, ST_OMP_END_DO);
-- match ("end master", gfc_match_omp_eos, ST_OMP_END_MASTER);
-- match ("end ordered", gfc_match_omp_eos, ST_OMP_END_ORDERED);
-- match ("end parallel do", gfc_match_omp_eos, ST_OMP_END_PARALLEL_DO);
-- match ("end parallel sections", gfc_match_omp_eos,
-- ST_OMP_END_PARALLEL_SECTIONS);
-- match ("end parallel workshare", gfc_match_omp_eos,
-- ST_OMP_END_PARALLEL_WORKSHARE);
-- match ("end parallel", gfc_match_omp_eos, ST_OMP_END_PARALLEL);
-- match ("end sections", gfc_match_omp_end_nowait, ST_OMP_END_SECTIONS);
-- match ("end single", gfc_match_omp_end_single, ST_OMP_END_SINGLE);
-- match ("end task", gfc_match_omp_eos, ST_OMP_END_TASK);
-- match ("end workshare", gfc_match_omp_end_nowait,
-- ST_OMP_END_WORKSHARE);
-+ matcho ("end atomic", gfc_match_omp_eos, ST_OMP_END_ATOMIC);
-+ matcho ("end critical", gfc_match_omp_critical, ST_OMP_END_CRITICAL);
-+ matchs ("end distribute parallel do simd", gfc_match_omp_eos,
-+ ST_OMP_END_DISTRIBUTE_PARALLEL_DO_SIMD);
-+ matcho ("end distribute parallel do", gfc_match_omp_eos,
-+ ST_OMP_END_DISTRIBUTE_PARALLEL_DO);
-+ matchs ("end distribute simd", gfc_match_omp_eos,
-+ ST_OMP_END_DISTRIBUTE_SIMD);
-+ matcho ("end distribute", gfc_match_omp_eos, ST_OMP_END_DISTRIBUTE);
-+ matchs ("end do simd", gfc_match_omp_end_nowait, ST_OMP_END_DO_SIMD);
-+ matcho ("end do", gfc_match_omp_end_nowait, ST_OMP_END_DO);
-+ matchs ("end simd", gfc_match_omp_eos, ST_OMP_END_SIMD);
-+ matcho ("end master", gfc_match_omp_eos, ST_OMP_END_MASTER);
-+ matcho ("end ordered", gfc_match_omp_eos, ST_OMP_END_ORDERED);
-+ matchs ("end parallel do simd", gfc_match_omp_eos,
-+ ST_OMP_END_PARALLEL_DO_SIMD);
-+ matcho ("end parallel do", gfc_match_omp_eos, ST_OMP_END_PARALLEL_DO);
-+ matcho ("end parallel sections", gfc_match_omp_eos,
-+ ST_OMP_END_PARALLEL_SECTIONS);
-+ matcho ("end parallel workshare", gfc_match_omp_eos,
-+ ST_OMP_END_PARALLEL_WORKSHARE);
-+ matcho ("end parallel", gfc_match_omp_eos, ST_OMP_END_PARALLEL);
-+ matcho ("end sections", gfc_match_omp_end_nowait, ST_OMP_END_SECTIONS);
-+ matcho ("end single", gfc_match_omp_end_single, ST_OMP_END_SINGLE);
-+ matcho ("end target data", gfc_match_omp_eos, ST_OMP_END_TARGET_DATA);
-+ matchs ("end target teams distribute parallel do simd",
-+ gfc_match_omp_eos,
-+ ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD);
-+ matcho ("end target teams distribute parallel do", gfc_match_omp_eos,
-+ ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO);
-+ matchs ("end target teams distribute simd", gfc_match_omp_eos,
-+ ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_SIMD);
-+ matcho ("end target teams distribute", gfc_match_omp_eos,
-+ ST_OMP_END_TARGET_TEAMS_DISTRIBUTE);
-+ matcho ("end target teams", gfc_match_omp_eos, ST_OMP_END_TARGET_TEAMS);
-+ matcho ("end target", gfc_match_omp_eos, ST_OMP_END_TARGET);
-+ matcho ("end taskgroup", gfc_match_omp_eos, ST_OMP_END_TASKGROUP);
-+ matcho ("end task", gfc_match_omp_eos, ST_OMP_END_TASK);
-+ matchs ("end teams distribute parallel do simd", gfc_match_omp_eos,
-+ ST_OMP_END_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD);
-+ matcho ("end teams distribute parallel do", gfc_match_omp_eos,
-+ ST_OMP_END_TEAMS_DISTRIBUTE_PARALLEL_DO);
-+ matchs ("end teams distribute simd", gfc_match_omp_eos,
-+ ST_OMP_END_TEAMS_DISTRIBUTE_SIMD);
-+ matcho ("end teams distribute", gfc_match_omp_eos,
-+ ST_OMP_END_TEAMS_DISTRIBUTE);
-+ matcho ("end teams", gfc_match_omp_eos, ST_OMP_END_TEAMS);
-+ matcho ("end workshare", gfc_match_omp_end_nowait,
-+ ST_OMP_END_WORKSHARE);
- break;
- case 'f':
-- match ("flush", gfc_match_omp_flush, ST_OMP_FLUSH);
-+ matcho ("flush", gfc_match_omp_flush, ST_OMP_FLUSH);
- break;
- case 'm':
-- match ("master", gfc_match_omp_master, ST_OMP_MASTER);
-+ matcho ("master", gfc_match_omp_master, ST_OMP_MASTER);
- break;
- case 'o':
-- match ("ordered", gfc_match_omp_ordered, ST_OMP_ORDERED);
-+ matcho ("ordered", gfc_match_omp_ordered, ST_OMP_ORDERED);
- break;
- case 'p':
-- match ("parallel do", gfc_match_omp_parallel_do, ST_OMP_PARALLEL_DO);
-- match ("parallel sections", gfc_match_omp_parallel_sections,
-- ST_OMP_PARALLEL_SECTIONS);
-- match ("parallel workshare", gfc_match_omp_parallel_workshare,
-- ST_OMP_PARALLEL_WORKSHARE);
-- match ("parallel", gfc_match_omp_parallel, ST_OMP_PARALLEL);
-+ matchs ("parallel do simd", gfc_match_omp_parallel_do_simd,
-+ ST_OMP_PARALLEL_DO_SIMD);
-+ matcho ("parallel do", gfc_match_omp_parallel_do, ST_OMP_PARALLEL_DO);
-+ matcho ("parallel sections", gfc_match_omp_parallel_sections,
-+ ST_OMP_PARALLEL_SECTIONS);
-+ matcho ("parallel workshare", gfc_match_omp_parallel_workshare,
-+ ST_OMP_PARALLEL_WORKSHARE);
-+ matcho ("parallel", gfc_match_omp_parallel, ST_OMP_PARALLEL);
- break;
- case 's':
-- match ("sections", gfc_match_omp_sections, ST_OMP_SECTIONS);
-- match ("section", gfc_match_omp_eos, ST_OMP_SECTION);
-- match ("single", gfc_match_omp_single, ST_OMP_SINGLE);
-+ matcho ("sections", gfc_match_omp_sections, ST_OMP_SECTIONS);
-+ matcho ("section", gfc_match_omp_eos, ST_OMP_SECTION);
-+ matchs ("simd", gfc_match_omp_simd, ST_OMP_SIMD);
-+ matcho ("single", gfc_match_omp_single, ST_OMP_SINGLE);
- break;
- case 't':
-- match ("task", gfc_match_omp_task, ST_OMP_TASK);
-- match ("taskwait", gfc_match_omp_taskwait, ST_OMP_TASKWAIT);
-- match ("taskyield", gfc_match_omp_taskyield, ST_OMP_TASKYIELD);
-- match ("threadprivate", gfc_match_omp_threadprivate,
-- ST_OMP_THREADPRIVATE);
-+ matcho ("target data", gfc_match_omp_target_data, ST_OMP_TARGET_DATA);
-+ matchs ("target teams distribute parallel do simd",
-+ gfc_match_omp_target_teams_distribute_parallel_do_simd,
-+ ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD);
-+ matcho ("target teams distribute parallel do",
-+ gfc_match_omp_target_teams_distribute_parallel_do,
-+ ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO);
-+ matchs ("target teams distribute simd",
-+ gfc_match_omp_target_teams_distribute_simd,
-+ ST_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD);
-+ matcho ("target teams distribute", gfc_match_omp_target_teams_distribute,
-+ ST_OMP_TARGET_TEAMS_DISTRIBUTE);
-+ matcho ("target teams", gfc_match_omp_target_teams, ST_OMP_TARGET_TEAMS);
-+ matcho ("target update", gfc_match_omp_target_update,
-+ ST_OMP_TARGET_UPDATE);
-+ matcho ("target", gfc_match_omp_target, ST_OMP_TARGET);
-+ matcho ("taskgroup", gfc_match_omp_taskgroup, ST_OMP_TASKGROUP);
-+ matcho ("taskwait", gfc_match_omp_taskwait, ST_OMP_TASKWAIT);
-+ matcho ("taskyield", gfc_match_omp_taskyield, ST_OMP_TASKYIELD);
-+ matcho ("task", gfc_match_omp_task, ST_OMP_TASK);
-+ matchs ("teams distribute parallel do simd",
-+ gfc_match_omp_teams_distribute_parallel_do_simd,
-+ ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD);
-+ matcho ("teams distribute parallel do",
-+ gfc_match_omp_teams_distribute_parallel_do,
-+ ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO);
-+ matchs ("teams distribute simd", gfc_match_omp_teams_distribute_simd,
-+ ST_OMP_TEAMS_DISTRIBUTE_SIMD);
-+ matcho ("teams distribute", gfc_match_omp_teams_distribute,
-+ ST_OMP_TEAMS_DISTRIBUTE);
-+ matcho ("teams", gfc_match_omp_teams, ST_OMP_TEAMS);
-+ matcho ("threadprivate", gfc_match_omp_threadprivate,
-+ ST_OMP_THREADPRIVATE);
- break;
- case 'w':
-- match ("workshare", gfc_match_omp_workshare, ST_OMP_WORKSHARE);
-+ matcho ("workshare", gfc_match_omp_workshare, ST_OMP_WORKSHARE);
- break;
- }
-
- /* All else has failed, so give up. See if any of the matchers has
-- stored an error message of some sort. */
-+ stored an error message of some sort. Don't error out if
-+ not -fopenmp and simd_matched is false, i.e. if a directive other
-+ than one marked with match has been seen. */
-
-- if (gfc_error_check () == 0)
-- gfc_error_now ("Unclassifiable OpenMP directive at %C");
-+ if (gfc_option.gfc_flag_openmp || simd_matched)
-+ {
-+ if (gfc_error_check () == 0)
-+ gfc_error_now ("Unclassifiable OpenMP directive at %C");
-+ }
-
- reject_statement ();
-
-@@ -753,7 +894,9 @@
- return decode_gcc_attribute ();
-
- }
-- else if (c == '$' && gfc_option.gfc_flag_openmp)
-+ else if (c == '$'
-+ && (gfc_option.gfc_flag_openmp
-+ || gfc_option.gfc_flag_openmp_simd))
- {
- int i;
-
-@@ -842,7 +985,9 @@
-
- return decode_gcc_attribute ();
- }
-- else if (c == '$' && gfc_option.gfc_flag_openmp)
-+ else if (c == '$'
-+ && (gfc_option.gfc_flag_openmp
-+ || gfc_option.gfc_flag_openmp_simd))
- {
- for (i = 0; i < 4; i++, c = gfc_next_char_literal (NONSTRING))
- gcc_assert ((char) gfc_wide_tolower (c) == "$omp"[i]);
-@@ -1013,8 +1158,9 @@
- case ST_ASSIGNMENT: case ST_ARITHMETIC_IF: case ST_WHERE: case ST_FORALL: \
- case ST_LABEL_ASSIGNMENT: case ST_FLUSH: case ST_OMP_FLUSH: \
- case ST_OMP_BARRIER: case ST_OMP_TASKWAIT: case ST_OMP_TASKYIELD: \
-- case ST_ERROR_STOP: case ST_SYNC_ALL: case ST_SYNC_IMAGES: \
-- case ST_SYNC_MEMORY: case ST_LOCK: case ST_UNLOCK
-+ case ST_OMP_CANCEL: case ST_OMP_CANCELLATION_POINT: \
-+ case ST_OMP_TARGET_UPDATE: case ST_ERROR_STOP: case ST_SYNC_ALL: \
-+ case ST_SYNC_IMAGES: case ST_SYNC_MEMORY: case ST_LOCK: case ST_UNLOCK
-
- /* Statements that mark other executable statements. */
-
-@@ -1026,7 +1172,20 @@
- case ST_OMP_CRITICAL: case ST_OMP_MASTER: case ST_OMP_SINGLE: \
- case ST_OMP_DO: case ST_OMP_PARALLEL_DO: case ST_OMP_ATOMIC: \
- case ST_OMP_WORKSHARE: case ST_OMP_PARALLEL_WORKSHARE: \
-- case ST_OMP_TASK: case ST_CRITICAL
-+ case ST_OMP_TASK: case ST_OMP_TASKGROUP: case ST_OMP_SIMD: \
-+ case ST_OMP_DO_SIMD: case ST_OMP_PARALLEL_DO_SIMD: case ST_OMP_TARGET: \
-+ case ST_OMP_TARGET_DATA: case ST_OMP_TARGET_TEAMS: \
-+ case ST_OMP_TARGET_TEAMS_DISTRIBUTE: \
-+ case ST_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD: \
-+ case ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO: \
-+ case ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD: \
-+ case ST_OMP_TEAMS: case ST_OMP_TEAMS_DISTRIBUTE: \
-+ case ST_OMP_TEAMS_DISTRIBUTE_SIMD: \
-+ case ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO: \
-+ case ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD: case ST_OMP_DISTRIBUTE: \
-+ case ST_OMP_DISTRIBUTE_SIMD: case ST_OMP_DISTRIBUTE_PARALLEL_DO: \
-+ case ST_OMP_DISTRIBUTE_PARALLEL_DO_SIMD: \
-+ case ST_CRITICAL
-
- /* Declaration statements */
-
-@@ -1033,7 +1192,8 @@
- #define case_decl case ST_ATTR_DECL: case ST_COMMON: case ST_DATA_DECL: \
- case ST_EQUIVALENCE: case ST_NAMELIST: case ST_STATEMENT_FUNCTION: \
- case ST_TYPE: case ST_INTERFACE: case ST_OMP_THREADPRIVATE: \
-- case ST_PROCEDURE
-+ case ST_PROCEDURE: case ST_OMP_DECLARE_SIMD: case ST_OMP_DECLARE_REDUCTION: \
-+ case ST_OMP_DECLARE_TARGET
-
- /* Block end statements. Errors associated with interchanging these
- are detected in gfc_match_end(). */
-@@ -1524,12 +1684,42 @@
- case ST_OMP_BARRIER:
- p = "!$OMP BARRIER";
- break;
-+ case ST_OMP_CANCEL:
-+ p = "!$OMP CANCEL";
-+ break;
-+ case ST_OMP_CANCELLATION_POINT:
-+ p = "!$OMP CANCELLATION POINT";
-+ break;
- case ST_OMP_CRITICAL:
- p = "!$OMP CRITICAL";
- break;
-+ case ST_OMP_DECLARE_REDUCTION:
-+ p = "!$OMP DECLARE REDUCTION";
-+ break;
-+ case ST_OMP_DECLARE_SIMD:
-+ p = "!$OMP DECLARE SIMD";
-+ break;
-+ case ST_OMP_DECLARE_TARGET:
-+ p = "!$OMP DECLARE TARGET";
-+ break;
-+ case ST_OMP_DISTRIBUTE:
-+ p = "!$OMP DISTRIBUTE";
-+ break;
-+ case ST_OMP_DISTRIBUTE_PARALLEL_DO:
-+ p = "!$OMP DISTRIBUTE PARALLEL DO";
-+ break;
-+ case ST_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ p = "!$OMP DISTRIBUTE PARALLEL DO SIMD";
-+ break;
-+ case ST_OMP_DISTRIBUTE_SIMD:
-+ p = "!$OMP DISTRIBUTE SIMD";
-+ break;
- case ST_OMP_DO:
- p = "!$OMP DO";
- break;
-+ case ST_OMP_DO_SIMD:
-+ p = "!$OMP DO SIMD";
-+ break;
- case ST_OMP_END_ATOMIC:
- p = "!$OMP END ATOMIC";
- break;
-@@ -1536,9 +1726,27 @@
- case ST_OMP_END_CRITICAL:
- p = "!$OMP END CRITICAL";
- break;
-+ case ST_OMP_END_DISTRIBUTE:
-+ p = "!$OMP END DISTRIBUTE";
-+ break;
-+ case ST_OMP_END_DISTRIBUTE_PARALLEL_DO:
-+ p = "!$OMP END DISTRIBUTE PARALLEL DO";
-+ break;
-+ case ST_OMP_END_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ p = "!$OMP END DISTRIBUTE PARALLEL DO SIMD";
-+ break;
-+ case ST_OMP_END_DISTRIBUTE_SIMD:
-+ p = "!$OMP END DISTRIBUTE SIMD";
-+ break;
- case ST_OMP_END_DO:
- p = "!$OMP END DO";
- break;
-+ case ST_OMP_END_DO_SIMD:
-+ p = "!$OMP END DO SIMD";
-+ break;
-+ case ST_OMP_END_SIMD:
-+ p = "!$OMP END SIMD";
-+ break;
- case ST_OMP_END_MASTER:
- p = "!$OMP END MASTER";
- break;
-@@ -1551,6 +1759,9 @@
- case ST_OMP_END_PARALLEL_DO:
- p = "!$OMP END PARALLEL DO";
- break;
-+ case ST_OMP_END_PARALLEL_DO_SIMD:
-+ p = "!$OMP END PARALLEL DO SIMD";
-+ break;
- case ST_OMP_END_PARALLEL_SECTIONS:
- p = "!$OMP END PARALLEL SECTIONS";
- break;
-@@ -1566,6 +1777,45 @@
- case ST_OMP_END_TASK:
- p = "!$OMP END TASK";
- break;
-+ case ST_OMP_END_TARGET:
-+ p = "!$OMP END TARGET";
-+ break;
-+ case ST_OMP_END_TARGET_DATA:
-+ p = "!$OMP END TARGET DATA";
-+ break;
-+ case ST_OMP_END_TARGET_TEAMS:
-+ p = "!$OMP END TARGET TEAMS";
-+ break;
-+ case ST_OMP_END_TARGET_TEAMS_DISTRIBUTE:
-+ p = "!$OMP END TARGET TEAMS DISTRIBUTE";
-+ break;
-+ case ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ p = "!$OMP END TARGET TEAMS DISTRIBUTE PARALLEL DO";
-+ break;
-+ case ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ p = "!$OMP END TARGET TEAMS DISTRIBUTE PARALLEL DO SIMD";
-+ break;
-+ case ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_SIMD:
-+ p = "!$OMP END TARGET TEAMS DISTRIBUTE SIMD";
-+ break;
-+ case ST_OMP_END_TASKGROUP:
-+ p = "!$OMP END TASKGROUP";
-+ break;
-+ case ST_OMP_END_TEAMS:
-+ p = "!$OMP END TEAMS";
-+ break;
-+ case ST_OMP_END_TEAMS_DISTRIBUTE:
-+ p = "!$OMP END TEAMS DISTRIBUTE";
-+ break;
-+ case ST_OMP_END_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ p = "!$OMP END TEAMS DISTRIBUTE PARALLEL DO";
-+ break;
-+ case ST_OMP_END_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ p = "!$OMP END TEAMS DISTRIBUTE PARALLEL DO SIMD";
-+ break;
-+ case ST_OMP_END_TEAMS_DISTRIBUTE_SIMD:
-+ p = "!$OMP END TEAMS DISTRIBUTE SIMD";
-+ break;
- case ST_OMP_END_WORKSHARE:
- p = "!$OMP END WORKSHARE";
- break;
-@@ -1584,6 +1834,9 @@
- case ST_OMP_PARALLEL_DO:
- p = "!$OMP PARALLEL DO";
- break;
-+ case ST_OMP_PARALLEL_DO_SIMD:
-+ p = "!$OMP PARALLEL DO SIMD";
-+ break;
- case ST_OMP_PARALLEL_SECTIONS:
- p = "!$OMP PARALLEL SECTIONS";
- break;
-@@ -1596,12 +1849,42 @@
- case ST_OMP_SECTION:
- p = "!$OMP SECTION";
- break;
-+ case ST_OMP_SIMD:
-+ p = "!$OMP SIMD";
-+ break;
- case ST_OMP_SINGLE:
- p = "!$OMP SINGLE";
- break;
-+ case ST_OMP_TARGET:
-+ p = "!$OMP TARGET";
-+ break;
-+ case ST_OMP_TARGET_DATA:
-+ p = "!$OMP TARGET DATA";
-+ break;
-+ case ST_OMP_TARGET_TEAMS:
-+ p = "!$OMP TARGET TEAMS";
-+ break;
-+ case ST_OMP_TARGET_TEAMS_DISTRIBUTE:
-+ p = "!$OMP TARGET TEAMS DISTRIBUTE";
-+ break;
-+ case ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ p = "!$OMP TARGET TEAMS DISTRIBUTE PARALLEL DO";
-+ break;
-+ case ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ p = "!$OMP TARGET TEAMS DISTRIBUTE PARALLEL DO SIMD";
-+ break;
-+ case ST_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
-+ p = "!$OMP TARGET TEAMS DISTRIBUTE SIMD";
-+ break;
-+ case ST_OMP_TARGET_UPDATE:
-+ p = "!$OMP TARGET UPDATE";
-+ break;
- case ST_OMP_TASK:
- p = "!$OMP TASK";
- break;
-+ case ST_OMP_TASKGROUP:
-+ p = "!$OMP TASKGROUP";
-+ break;
- case ST_OMP_TASKWAIT:
- p = "!$OMP TASKWAIT";
- break;
-@@ -1608,6 +1891,21 @@
- case ST_OMP_TASKYIELD:
- p = "!$OMP TASKYIELD";
- break;
-+ case ST_OMP_TEAMS:
-+ p = "!$OMP TEAMS";
-+ break;
-+ case ST_OMP_TEAMS_DISTRIBUTE:
-+ p = "!$OMP TEAMS DISTRIBUTE";
-+ break;
-+ case ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ p = "!$OMP TEAMS DISTRIBUTE PARALLEL DO";
-+ break;
-+ case ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ p = "!$OMP TEAMS DISTRIBUTE PARALLEL DO SIMD";
-+ break;
-+ case ST_OMP_TEAMS_DISTRIBUTE_SIMD:
-+ p = "!$OMP TEAMS DISTRIBUTE SIMD";
-+ break;
- case ST_OMP_THREADPRIVATE:
- p = "!$OMP THREADPRIVATE";
- break;
-@@ -3578,8 +3876,54 @@
- pop_state ();
-
- st = next_statement ();
-- if (st == (omp_st == ST_OMP_DO ? ST_OMP_END_DO : ST_OMP_END_PARALLEL_DO))
-+ gfc_statement omp_end_st = ST_OMP_END_DO;
-+ switch (omp_st)
- {
-+ case ST_OMP_DISTRIBUTE: omp_end_st = ST_OMP_END_DISTRIBUTE; break;
-+ case ST_OMP_DISTRIBUTE_PARALLEL_DO:
-+ omp_end_st = ST_OMP_END_DISTRIBUTE_PARALLEL_DO;
-+ break;
-+ case ST_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ omp_end_st = ST_OMP_END_DISTRIBUTE_PARALLEL_DO_SIMD;
-+ break;
-+ case ST_OMP_DISTRIBUTE_SIMD:
-+ omp_end_st = ST_OMP_END_DISTRIBUTE_SIMD;
-+ break;
-+ case ST_OMP_DO: omp_end_st = ST_OMP_END_DO; break;
-+ case ST_OMP_DO_SIMD: omp_end_st = ST_OMP_END_DO_SIMD; break;
-+ case ST_OMP_PARALLEL_DO: omp_end_st = ST_OMP_END_PARALLEL_DO; break;
-+ case ST_OMP_PARALLEL_DO_SIMD:
-+ omp_end_st = ST_OMP_END_PARALLEL_DO_SIMD;
-+ break;
-+ case ST_OMP_SIMD: omp_end_st = ST_OMP_END_SIMD; break;
-+ case ST_OMP_TARGET_TEAMS_DISTRIBUTE:
-+ omp_end_st = ST_OMP_END_TARGET_TEAMS_DISTRIBUTE;
-+ break;
-+ case ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ omp_end_st = ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO;
-+ break;
-+ case ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ omp_end_st = ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD;
-+ break;
-+ case ST_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
-+ omp_end_st = ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_SIMD;
-+ break;
-+ case ST_OMP_TEAMS_DISTRIBUTE:
-+ omp_end_st = ST_OMP_END_TEAMS_DISTRIBUTE;
-+ break;
-+ case ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ omp_end_st = ST_OMP_END_TEAMS_DISTRIBUTE_PARALLEL_DO;
-+ break;
-+ case ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ omp_end_st = ST_OMP_END_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD;
-+ break;
-+ case ST_OMP_TEAMS_DISTRIBUTE_SIMD:
-+ omp_end_st = ST_OMP_END_TEAMS_DISTRIBUTE_SIMD;
-+ break;
-+ default: gcc_unreachable ();
-+ }
-+ if (st == omp_end_st)
-+ {
- if (new_st.op == EXEC_OMP_END_NOWAIT)
- cp->ext.omp_clauses->nowait |= new_st.ext.omp_bool;
- else
-@@ -3610,7 +3954,8 @@
- np = new_level (cp);
- np->op = cp->op;
- np->block = NULL;
-- count = 1 + (cp->ext.omp_atomic == GFC_OMP_ATOMIC_CAPTURE);
-+ count = 1 + ((cp->ext.omp_atomic & GFC_OMP_ATOMIC_MASK)
-+ == GFC_OMP_ATOMIC_CAPTURE);
-
- while (count)
- {
-@@ -3636,7 +3981,8 @@
- gfc_warning_check ();
- st = next_statement ();
- }
-- else if (cp->ext.omp_atomic == GFC_OMP_ATOMIC_CAPTURE)
-+ else if ((cp->ext.omp_atomic & GFC_OMP_ATOMIC_MASK)
-+ == GFC_OMP_ATOMIC_CAPTURE)
- gfc_error ("Missing !$OMP END ATOMIC after !$OMP ATOMIC CAPTURE at %C");
- return st;
- }
-@@ -3682,9 +4028,60 @@
- case ST_OMP_SINGLE:
- omp_end_st = ST_OMP_END_SINGLE;
- break;
-+ case ST_OMP_TARGET:
-+ omp_end_st = ST_OMP_END_TARGET;
-+ break;
-+ case ST_OMP_TARGET_DATA:
-+ omp_end_st = ST_OMP_END_TARGET_DATA;
-+ break;
-+ case ST_OMP_TARGET_TEAMS:
-+ omp_end_st = ST_OMP_END_TARGET_TEAMS;
-+ break;
-+ case ST_OMP_TARGET_TEAMS_DISTRIBUTE:
-+ omp_end_st = ST_OMP_END_TARGET_TEAMS_DISTRIBUTE;
-+ break;
-+ case ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ omp_end_st = ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO;
-+ break;
-+ case ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ omp_end_st = ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD;
-+ break;
-+ case ST_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
-+ omp_end_st = ST_OMP_END_TARGET_TEAMS_DISTRIBUTE_SIMD;
-+ break;
- case ST_OMP_TASK:
- omp_end_st = ST_OMP_END_TASK;
- break;
-+ case ST_OMP_TASKGROUP:
-+ omp_end_st = ST_OMP_END_TASKGROUP;
-+ break;
-+ case ST_OMP_TEAMS:
-+ omp_end_st = ST_OMP_END_TEAMS;
-+ break;
-+ case ST_OMP_TEAMS_DISTRIBUTE:
-+ omp_end_st = ST_OMP_END_TEAMS_DISTRIBUTE;
-+ break;
-+ case ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ omp_end_st = ST_OMP_END_TEAMS_DISTRIBUTE_PARALLEL_DO;
-+ break;
-+ case ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ omp_end_st = ST_OMP_END_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD;
-+ break;
-+ case ST_OMP_TEAMS_DISTRIBUTE_SIMD:
-+ omp_end_st = ST_OMP_END_TEAMS_DISTRIBUTE_SIMD;
-+ break;
-+ case ST_OMP_DISTRIBUTE:
-+ omp_end_st = ST_OMP_END_DISTRIBUTE;
-+ break;
-+ case ST_OMP_DISTRIBUTE_PARALLEL_DO:
-+ omp_end_st = ST_OMP_END_DISTRIBUTE_PARALLEL_DO;
-+ break;
-+ case ST_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ omp_end_st = ST_OMP_END_DISTRIBUTE_PARALLEL_DO_SIMD;
-+ break;
-+ case ST_OMP_DISTRIBUTE_SIMD:
-+ omp_end_st = ST_OMP_END_DISTRIBUTE_SIMD;
-+ break;
- case ST_OMP_WORKSHARE:
- omp_end_st = ST_OMP_END_WORKSHARE;
- break;
-@@ -3744,6 +4141,7 @@
- break;
-
- case ST_OMP_PARALLEL_DO:
-+ case ST_OMP_PARALLEL_DO_SIMD:
- st = parse_omp_do (st);
- continue;
-
-@@ -3916,7 +4314,12 @@
- case ST_OMP_CRITICAL:
- case ST_OMP_MASTER:
- case ST_OMP_SINGLE:
-+ case ST_OMP_TARGET:
-+ case ST_OMP_TARGET_DATA:
-+ case ST_OMP_TARGET_TEAMS:
-+ case ST_OMP_TEAMS:
- case ST_OMP_TASK:
-+ case ST_OMP_TASKGROUP:
- parse_omp_structured_block (st, false);
- break;
-
-@@ -3925,8 +4328,23 @@
- parse_omp_structured_block (st, true);
- break;
-
-+ case ST_OMP_DISTRIBUTE:
-+ case ST_OMP_DISTRIBUTE_PARALLEL_DO:
-+ case ST_OMP_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case ST_OMP_DISTRIBUTE_SIMD:
- case ST_OMP_DO:
-+ case ST_OMP_DO_SIMD:
- case ST_OMP_PARALLEL_DO:
-+ case ST_OMP_PARALLEL_DO_SIMD:
-+ case ST_OMP_SIMD:
-+ case ST_OMP_TARGET_TEAMS_DISTRIBUTE:
-+ case ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ case ST_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case ST_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
-+ case ST_OMP_TEAMS_DISTRIBUTE:
-+ case ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO:
-+ case ST_OMP_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
-+ case ST_OMP_TEAMS_DISTRIBUTE_SIMD:
- st = parse_omp_do (st);
- if (st == ST_IMPLIED_ENDDO)
- return st;
-Index: gcc/ipa-devirt.c
-===================================================================
---- a/src/gcc/ipa-devirt.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ipa-devirt.c (.../branches/gcc-4_9-branch)
-@@ -987,6 +987,17 @@
- context->outer_type = expected_type;
- context->offset = 0;
- context->maybe_derived_type = true;
-+ context->maybe_in_construction = true;
-+ /* POD can be changed to an instance of a polymorphic type by
-+ placement new. Here we play safe and assume that any
-+ non-polymorphic type is POD. */
-+ if ((TREE_CODE (type) != RECORD_TYPE
-+ || !TYPE_BINFO (type)
-+ || !polymorphic_type_binfo_p (TYPE_BINFO (type)))
-+ && (TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST
-+ || (offset + tree_to_uhwi (TYPE_SIZE (expected_type)) <=
-+ tree_to_uhwi (TYPE_SIZE (type)))))
-+ return true;
- return false;
- }
-
-@@ -1438,6 +1449,8 @@
- {
- if (completep)
- *completep = false;
-+ if (cache_token)
-+ *cache_token = NULL;
- if (nonconstruction_targetsp)
- *nonconstruction_targetsp = 0;
- return nodes;
-@@ -1448,6 +1461,8 @@
- {
- if (completep)
- *completep = true;
-+ if (cache_token)
-+ *cache_token = NULL;
- if (nonconstruction_targetsp)
- *nonconstruction_targetsp = 0;
- return nodes;
-@@ -1461,6 +1476,8 @@
- {
- if (completep)
- *completep = false;
-+ if (cache_token)
-+ *cache_token = NULL;
- if (nonconstruction_targetsp)
- *nonconstruction_targetsp = 0;
- return nodes;
-Index: gcc/configure.ac
-===================================================================
---- a/src/gcc/configure.ac (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/configure.ac (.../branches/gcc-4_9-branch)
-@@ -3725,7 +3725,7 @@
- .align 4
- smac %g2, %g3, %g1
- umac %g2, %g3, %g1
-- cas [[%g2]], %g3, %g1],,
-+ casa [[%g2]] 0xb, %g3, %g1],,
- [AC_DEFINE(HAVE_AS_LEON, 1,
- [Define if your assembler supports LEON instructions.])])
- ;;
-@@ -4806,6 +4806,21 @@
- [Define to the linker option to keep unused dependencies.])
- fi
-
-+AC_MSG_CHECKING(linker mapfile support for clearing hardware capabilities)
-+saved_LDFLAGS="$LDFLAGS"
-+for clearcap_map in sol2-clearcapv2.map sol2-clearcap.map; do
-+ LDFLAGS="$saved_LDFLAGS -Wl,-M,${srcdir}/config/$clearcap_map"
-+ AC_LINK_IFELSE([int main(void) {return 0;}],
-+ [gcc_cv_ld_clearcap=yes; break], [gcc_cv_ld_clearcap=no])
-+done
-+LDFLAGS="$saved_LDFLAGS"
-+if test "x$gcc_cv_ld_clearcap" = xyes; then
-+ AC_DEFINE([HAVE_LD_CLEARCAP], 1,
-+[Define if the linker supports clearing hardware capabilities via mapfile.])
-+ AC_CONFIG_LINKS([clearcap.map:${srcdir}/config/$clearcap_map])
-+fi
-+AC_MSG_RESULT($gcc_cv_ld_clearcap)
-+
- case "$target:$tm_file" in
- powerpc64-*-freebsd* | powerpc64*-*-linux* | powerpc*-*-linux*rs6000/biarch64.h*)
- case "$target" in
-Index: gcc/function.c
-===================================================================
---- a/src/gcc/function.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/function.c (.../branches/gcc-4_9-branch)
-@@ -1347,9 +1347,13 @@
- #define STACK_POINTER_OFFSET 0
- #endif
-
-+#if defined (REG_PARM_STACK_SPACE) && !defined (INCOMING_REG_PARM_STACK_SPACE)
-+#define INCOMING_REG_PARM_STACK_SPACE REG_PARM_STACK_SPACE
-+#endif
-+
- /* If not defined, pick an appropriate default for the offset of dynamically
- allocated memory depending on the value of ACCUMULATE_OUTGOING_ARGS,
-- REG_PARM_STACK_SPACE, and OUTGOING_REG_PARM_STACK_SPACE. */
-+ INCOMING_REG_PARM_STACK_SPACE, and OUTGOING_REG_PARM_STACK_SPACE. */
-
- #ifndef STACK_DYNAMIC_OFFSET
-
-@@ -1361,12 +1365,12 @@
- `crtl->outgoing_args_size'. Nevertheless, we must allow
- for it when allocating stack dynamic objects. */
-
--#if defined(REG_PARM_STACK_SPACE)
-+#ifdef INCOMING_REG_PARM_STACK_SPACE
- #define STACK_DYNAMIC_OFFSET(FNDECL) \
- ((ACCUMULATE_OUTGOING_ARGS \
- ? (crtl->outgoing_args_size \
- + (OUTGOING_REG_PARM_STACK_SPACE ((!(FNDECL) ? NULL_TREE : TREE_TYPE (FNDECL))) ? 0 \
-- : REG_PARM_STACK_SPACE (FNDECL))) \
-+ : INCOMING_REG_PARM_STACK_SPACE (FNDECL))) \
- : 0) + (STACK_POINTER_OFFSET))
- #else
- #define STACK_DYNAMIC_OFFSET(FNDECL) \
-@@ -2221,8 +2225,9 @@
- #endif
- all->args_so_far = pack_cumulative_args (&all->args_so_far_v);
-
--#ifdef REG_PARM_STACK_SPACE
-- all->reg_parm_stack_space = REG_PARM_STACK_SPACE (current_function_decl);
-+#ifdef INCOMING_REG_PARM_STACK_SPACE
-+ all->reg_parm_stack_space
-+ = INCOMING_REG_PARM_STACK_SPACE (current_function_decl);
- #endif
- }
-
-@@ -4536,6 +4541,7 @@
- /* ??? This could be set on a per-function basis by the front-end
- but is this worth the hassle? */
- cfun->can_throw_non_call_exceptions = flag_non_call_exceptions;
-+ cfun->can_delete_dead_exceptions = flag_delete_dead_exceptions;
- }
- }
-
-Index: gcc/langhooks.c
-===================================================================
---- a/src/gcc/langhooks.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/langhooks.c (.../branches/gcc-4_9-branch)
-@@ -515,6 +515,13 @@
- return build2 (MODIFY_EXPR, TREE_TYPE (dst), dst, src);
- }
-
-+/* Finalize clause C. */
-+
-+void
-+lhd_omp_finish_clause (tree, gimple_seq *)
-+{
-+}
-+
- /* Register language specific type size variables as potentially OpenMP
- firstprivate variables. */
-
-Index: gcc/langhooks.h
-===================================================================
---- a/src/gcc/langhooks.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/langhooks.h (.../branches/gcc-4_9-branch)
-@@ -219,12 +219,16 @@
- /* Similarly, except use an assignment operator instead. */
- tree (*omp_clause_assign_op) (tree clause, tree dst, tree src);
-
-+ /* Build and return code for a constructor of DST that sets it to
-+ SRC + ADD. */
-+ tree (*omp_clause_linear_ctor) (tree clause, tree dst, tree src, tree add);
-+
- /* Build and return code destructing DECL. Return NULL if nothing
- to be done. */
- tree (*omp_clause_dtor) (tree clause, tree decl);
-
- /* Do language specific checking on an implicitly determined clause. */
-- void (*omp_finish_clause) (tree clause);
-+ void (*omp_finish_clause) (tree clause, gimple_seq *pre_p);
- };
-
- /* Language hooks related to LTO serialization. */
-Index: gcc/tree-vectorizer.h
-===================================================================
---- a/src/gcc/tree-vectorizer.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/tree-vectorizer.h (.../branches/gcc-4_9-branch)
-@@ -1057,7 +1057,8 @@
- extern bool vect_prune_runtime_alias_test_list (loop_vec_info);
- extern tree vect_check_gather (gimple, loop_vec_info, tree *, tree *,
- int *);
--extern bool vect_analyze_data_refs (loop_vec_info, bb_vec_info, int *);
-+extern bool vect_analyze_data_refs (loop_vec_info, bb_vec_info, int *,
-+ unsigned *);
- extern tree vect_create_data_ref_ptr (gimple, tree, struct loop *, tree,
- tree *, gimple_stmt_iterator *,
- gimple *, bool, bool *);
-@@ -1107,7 +1108,7 @@
- slp_instance, bool);
- extern bool vect_schedule_slp (loop_vec_info, bb_vec_info);
- extern void vect_update_slp_costs_according_to_vf (loop_vec_info);
--extern bool vect_analyze_slp (loop_vec_info, bb_vec_info);
-+extern bool vect_analyze_slp (loop_vec_info, bb_vec_info, unsigned);
- extern bool vect_make_slp_decision (loop_vec_info);
- extern void vect_detect_hybrid_slp (loop_vec_info);
- extern void vect_get_slp_defs (vec<tree> , slp_tree,
-Index: gcc/tree-vect-loop.c
-===================================================================
---- a/src/gcc/tree-vect-loop.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/tree-vect-loop.c (.../branches/gcc-4_9-branch)
-@@ -1629,6 +1629,7 @@
- int max_vf = MAX_VECTORIZATION_FACTOR;
- int min_vf = 2;
- unsigned int th;
-+ unsigned int n_stmts = 0;
-
- /* Find all data references in the loop (which correspond to vdefs/vuses)
- and analyze their evolution in the loop. Also adjust the minimal
-@@ -1637,7 +1638,7 @@
- FORNOW: Handle only simple, array references, which
- alignment can be forced, and aligned pointer-references. */
-
-- ok = vect_analyze_data_refs (loop_vinfo, NULL, &min_vf);
-+ ok = vect_analyze_data_refs (loop_vinfo, NULL, &min_vf, &n_stmts);
- if (!ok)
- {
- if (dump_enabled_p ())
-@@ -1747,7 +1748,7 @@
- }
-
- /* Check the SLP opportunities in the loop, analyze and build SLP trees. */
-- ok = vect_analyze_slp (loop_vinfo, NULL);
-+ ok = vect_analyze_slp (loop_vinfo, NULL, n_stmts);
- if (ok)
- {
- /* Decide which possible SLP instances to SLP. */
-@@ -3951,8 +3952,12 @@
- /* Set phi nodes arguments. */
- FOR_EACH_VEC_ELT (reduction_phis, i, phi)
- {
-- tree vec_init_def = vec_initial_defs[i];
-- tree def = vect_defs[i];
-+ tree vec_init_def, def;
-+ gimple_seq stmts;
-+ vec_init_def = force_gimple_operand (vec_initial_defs[i], &stmts,
-+ true, NULL_TREE);
-+ gsi_insert_seq_on_edge_immediate (loop_preheader_edge (loop), stmts);
-+ def = vect_defs[i];
- for (j = 0; j < ncopies; j++)
- {
- /* Set the loop-entry arg of the reduction-phi. */
-Index: gcc/ipa.c
-===================================================================
---- a/src/gcc/ipa.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ipa.c (.../branches/gcc-4_9-branch)
-@@ -415,7 +415,18 @@
- || !DECL_EXTERNAL (e->callee->decl)
- || e->callee->alias
- || before_inlining_p))
-- pointer_set_insert (reachable, e->callee);
-+ {
-+ /* Be sure that we will not optimize out alias target
-+ body. */
-+ if (DECL_EXTERNAL (e->callee->decl)
-+ && e->callee->alias
-+ && before_inlining_p)
-+ {
-+ pointer_set_insert (reachable,
-+ cgraph_function_node (e->callee));
-+ }
-+ pointer_set_insert (reachable, e->callee);
-+ }
- enqueue_node (e->callee, &first, reachable);
- }
-
-@@ -506,6 +517,7 @@
- if (!node->in_other_partition)
- node->local.local = false;
- cgraph_node_remove_callees (node);
-+ symtab_remove_from_same_comdat_group (node);
- ipa_remove_all_references (&node->ref_list);
- changed = true;
- }
-@@ -561,6 +573,8 @@
- vnode->analyzed = false;
- vnode->aux = NULL;
-
-+ symtab_remove_from_same_comdat_group (vnode);
-+
- /* Keep body if it may be useful for constant folding. */
- if ((init = ctor_for_folding (vnode->decl)) == error_mark_node)
- varpool_remove_initializer (vnode);
-@@ -697,6 +711,8 @@
- static bool
- comdat_can_be_unshared_p_1 (symtab_node *node)
- {
-+ if (!node->externally_visible)
-+ return true;
- /* When address is taken, we don't know if equality comparison won't
- break eventually. Exception are virutal functions, C++
- constructors/destructors and vtables, where this is not possible by
-Index: gcc/tree-vect-data-refs.c
-===================================================================
---- a/src/gcc/tree-vect-data-refs.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/tree-vect-data-refs.c (.../branches/gcc-4_9-branch)
-@@ -373,11 +373,14 @@
- .. = a[i+1];
- where we will end up loading { a[i], a[i+1] } once, make
- sure that inserting group loads before the first load and
-- stores after the last store will do the right thing. */
-- if ((STMT_VINFO_GROUPED_ACCESS (stmtinfo_a)
-- && GROUP_SAME_DR_STMT (stmtinfo_a))
-- || (STMT_VINFO_GROUPED_ACCESS (stmtinfo_b)
-- && GROUP_SAME_DR_STMT (stmtinfo_b)))
-+ stores after the last store will do the right thing.
-+ Similar for groups like
-+ a[i] = ...;
-+ ... = a[i];
-+ a[i+1] = ...;
-+ where loads from the group interleave with the store. */
-+ if (STMT_VINFO_GROUPED_ACCESS (stmtinfo_a)
-+ || STMT_VINFO_GROUPED_ACCESS (stmtinfo_b))
- {
- gimple earlier_stmt;
- earlier_stmt = get_earlier_stmt (DR_STMT (dra), DR_STMT (drb));
-@@ -3172,7 +3175,7 @@
- bool
- vect_analyze_data_refs (loop_vec_info loop_vinfo,
- bb_vec_info bb_vinfo,
-- int *min_vf)
-+ int *min_vf, unsigned *n_stmts)
- {
- struct loop *loop = NULL;
- basic_block bb = NULL;
-@@ -3207,6 +3210,9 @@
- for (gsi = gsi_start_bb (bbs[i]); !gsi_end_p (gsi); gsi_next (&gsi))
- {
- gimple stmt = gsi_stmt (gsi);
-+ if (is_gimple_debug (stmt))
-+ continue;
-+ ++*n_stmts;
- if (!find_data_references_in_stmt (loop, stmt, &datarefs))
- {
- if (is_gimple_call (stmt) && loop->safelen)
-@@ -3260,6 +3266,9 @@
- for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
- {
- gimple stmt = gsi_stmt (gsi);
-+ if (is_gimple_debug (stmt))
-+ continue;
-+ ++*n_stmts;
- if (!find_data_references_in_stmt (NULL, stmt,
- &BB_VINFO_DATAREFS (bb_vinfo)))
- {
-Index: gcc/gimplify.c
-===================================================================
---- a/src/gcc/gimplify.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/gimplify.c (.../branches/gcc-4_9-branch)
-@@ -138,6 +138,7 @@
- enum omp_clause_default_kind default_kind;
- enum omp_region_type region_type;
- bool combined_loop;
-+ bool distribute;
- };
-
- static struct gimplify_ctx *gimplify_ctxp;
-@@ -2169,7 +2170,7 @@
- Store any side-effects in PRE_P. CALL_LOCATION is the location of
- the CALL_EXPR. */
-
--static enum gimplify_status
-+enum gimplify_status
- gimplify_arg (tree *arg_p, gimple_seq *pre_p, location_t call_location)
- {
- bool (*test) (tree);
-@@ -5642,6 +5643,7 @@
- n = splay_tree_lookup (ctx->variables, (splay_tree_key)decl);
- if (ctx->region_type == ORT_TARGET)
- {
-+ ret = lang_hooks.decls.omp_disregard_value_expr (decl, true);
- if (n == NULL)
- {
- if (!lang_hooks.types.omp_mappable_type (TREE_TYPE (decl)))
-@@ -5654,8 +5656,12 @@
- omp_add_variable (ctx, decl, GOVD_MAP | flags);
- }
- else
-- n->value |= flags;
-- ret = lang_hooks.decls.omp_disregard_value_expr (decl, true);
-+ {
-+ /* If nothing changed, there's nothing left to do. */
-+ if ((n->value & flags) == flags)
-+ return ret;
-+ n->value |= flags;
-+ }
- goto do_outer;
- }
-
-@@ -5793,7 +5799,7 @@
- to the contrary in the innermost scope, generate an error. */
-
- static bool
--omp_is_private (struct gimplify_omp_ctx *ctx, tree decl, bool simd)
-+omp_is_private (struct gimplify_omp_ctx *ctx, tree decl, int simd)
- {
- splay_tree_node n;
-
-@@ -5827,13 +5833,13 @@
- else if ((n->value & GOVD_REDUCTION) != 0)
- error ("iteration variable %qE should not be reduction",
- DECL_NAME (decl));
-- else if (simd && (n->value & GOVD_LASTPRIVATE) != 0)
-+ else if (simd == 1 && (n->value & GOVD_LASTPRIVATE) != 0)
- error ("iteration variable %qE should not be lastprivate",
- DECL_NAME (decl));
- else if (simd && (n->value & GOVD_PRIVATE) != 0)
- error ("iteration variable %qE should not be private",
- DECL_NAME (decl));
-- else if (simd && (n->value & GOVD_LINEAR) != 0)
-+ else if (simd == 2 && (n->value & GOVD_LINEAR) != 0)
- error ("iteration variable %qE is predetermined linear",
- DECL_NAME (decl));
- }
-@@ -5941,14 +5947,21 @@
- goto do_add;
-
- case OMP_CLAUSE_MAP:
-- if (OMP_CLAUSE_SIZE (c)
-- && gimplify_expr (&OMP_CLAUSE_SIZE (c), pre_p,
-- NULL, is_gimple_val, fb_rvalue) == GS_ERROR)
-+ decl = OMP_CLAUSE_DECL (c);
-+ if (error_operand_p (decl))
- {
- remove = true;
- break;
- }
-- decl = OMP_CLAUSE_DECL (c);
-+ if (OMP_CLAUSE_SIZE (c) == NULL_TREE)
-+ OMP_CLAUSE_SIZE (c) = DECL_P (decl) ? DECL_SIZE_UNIT (decl)
-+ : TYPE_SIZE_UNIT (TREE_TYPE (decl));
-+ if (gimplify_expr (&OMP_CLAUSE_SIZE (c), pre_p,
-+ NULL, is_gimple_val, fb_rvalue) == GS_ERROR)
-+ {
-+ remove = true;
-+ break;
-+ }
- if (!DECL_P (decl))
- {
- if (gimplify_expr (&OMP_CLAUSE_DECL (c), pre_p,
-@@ -5986,15 +5999,17 @@
-
- case OMP_CLAUSE_TO:
- case OMP_CLAUSE_FROM:
-- if (OMP_CLAUSE_SIZE (c)
-- && gimplify_expr (&OMP_CLAUSE_SIZE (c), pre_p,
-- NULL, is_gimple_val, fb_rvalue) == GS_ERROR)
-+ decl = OMP_CLAUSE_DECL (c);
-+ if (error_operand_p (decl))
- {
- remove = true;
- break;
- }
-- decl = OMP_CLAUSE_DECL (c);
-- if (error_operand_p (decl))
-+ if (OMP_CLAUSE_SIZE (c) == NULL_TREE)
-+ OMP_CLAUSE_SIZE (c) = DECL_P (decl) ? DECL_SIZE_UNIT (decl)
-+ : TYPE_SIZE_UNIT (TREE_TYPE (decl));
-+ if (gimplify_expr (&OMP_CLAUSE_SIZE (c), pre_p,
-+ NULL, is_gimple_val, fb_rvalue) == GS_ERROR)
- {
- remove = true;
- break;
-@@ -6066,6 +6081,27 @@
-
- gimplify_omp_ctxp = outer_ctx;
- }
-+ else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LINEAR
-+ && OMP_CLAUSE_LINEAR_STMT (c))
-+ {
-+ gimplify_omp_ctxp = ctx;
-+ push_gimplify_context ();
-+ if (TREE_CODE (OMP_CLAUSE_LINEAR_STMT (c)) != BIND_EXPR)
-+ {
-+ tree bind = build3 (BIND_EXPR, void_type_node, NULL,
-+ NULL, NULL);
-+ TREE_SIDE_EFFECTS (bind) = 1;
-+ BIND_EXPR_BODY (bind) = OMP_CLAUSE_LINEAR_STMT (c);
-+ OMP_CLAUSE_LINEAR_STMT (c) = bind;
-+ }
-+ gimplify_and_add (OMP_CLAUSE_LINEAR_STMT (c),
-+ &OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c));
-+ pop_gimplify_context
-+ (gimple_seq_first_stmt (OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c)));
-+ OMP_CLAUSE_LINEAR_STMT (c) = NULL_TREE;
-+
-+ gimplify_omp_ctxp = outer_ctx;
-+ }
- if (notice_outer)
- goto do_notice;
- break;
-@@ -6148,6 +6184,12 @@
- remove = true;
- break;
- }
-+ if (gimplify_expr (&OMP_CLAUSE_ALIGNED_ALIGNMENT (c), pre_p, NULL,
-+ is_gimple_val, fb_rvalue) == GS_ERROR)
-+ {
-+ remove = true;
-+ break;
-+ }
- if (!is_global_var (decl)
- && TREE_CODE (TREE_TYPE (decl)) == POINTER_TYPE)
- omp_add_variable (ctx, decl, GOVD_ALIGNED);
-@@ -6170,6 +6212,12 @@
- gimplify_omp_ctxp = ctx;
- }
-
-+struct gimplify_adjust_omp_clauses_data
-+{
-+ tree *list_p;
-+ gimple_seq *pre_p;
-+};
-+
- /* For all variables that were not actually used within the context,
- remove PRIVATE, SHARED, and FIRSTPRIVATE clauses. */
-
-@@ -6176,7 +6224,9 @@
- static int
- gimplify_adjust_omp_clauses_1 (splay_tree_node n, void *data)
- {
-- tree *list_p = (tree *) data;
-+ tree *list_p = ((struct gimplify_adjust_omp_clauses_data *) data)->list_p;
-+ gimple_seq *pre_p
-+ = ((struct gimplify_adjust_omp_clauses_data *) data)->pre_p;
- tree decl = (tree) n->key;
- unsigned flags = n->value;
- enum omp_clause_code code;
-@@ -6269,15 +6319,31 @@
- OMP_CLAUSE_CHAIN (nc) = OMP_CLAUSE_CHAIN (clause);
- OMP_CLAUSE_CHAIN (clause) = nc;
- }
-+ else
-+ OMP_CLAUSE_SIZE (clause) = DECL_SIZE_UNIT (decl);
- }
-+ if (code == OMP_CLAUSE_FIRSTPRIVATE && (flags & GOVD_LASTPRIVATE) != 0)
-+ {
-+ tree nc = build_omp_clause (input_location, OMP_CLAUSE_LASTPRIVATE);
-+ OMP_CLAUSE_DECL (nc) = decl;
-+ OMP_CLAUSE_LASTPRIVATE_FIRSTPRIVATE (nc) = 1;
-+ OMP_CLAUSE_CHAIN (nc) = *list_p;
-+ OMP_CLAUSE_CHAIN (clause) = nc;
-+ struct gimplify_omp_ctx *ctx = gimplify_omp_ctxp;
-+ gimplify_omp_ctxp = ctx->outer_context;
-+ lang_hooks.decls.omp_finish_clause (nc, pre_p);
-+ gimplify_omp_ctxp = ctx;
-+ }
- *list_p = clause;
-- lang_hooks.decls.omp_finish_clause (clause);
--
-+ struct gimplify_omp_ctx *ctx = gimplify_omp_ctxp;
-+ gimplify_omp_ctxp = ctx->outer_context;
-+ lang_hooks.decls.omp_finish_clause (clause, pre_p);
-+ gimplify_omp_ctxp = ctx;
- return 0;
- }
-
- static void
--gimplify_adjust_omp_clauses (tree *list_p)
-+gimplify_adjust_omp_clauses (gimple_seq *pre_p, tree *list_p)
- {
- struct gimplify_omp_ctx *ctx = gimplify_omp_ctxp;
- tree c, decl;
-@@ -6311,10 +6377,10 @@
- if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LINEAR
- && ctx->outer_context
- && !(OMP_CLAUSE_LINEAR_NO_COPYIN (c)
-- && OMP_CLAUSE_LINEAR_NO_COPYOUT (c))
-- && !is_global_var (decl))
-+ && OMP_CLAUSE_LINEAR_NO_COPYOUT (c)))
- {
-- if (ctx->outer_context->region_type == ORT_COMBINED_PARALLEL)
-+ if (ctx->outer_context->combined_loop
-+ && !OMP_CLAUSE_LINEAR_NO_COPYIN (c))
- {
- n = splay_tree_lookup (ctx->outer_context->variables,
- (splay_tree_key) decl);
-@@ -6321,8 +6387,11 @@
- if (n == NULL
- || (n->value & GOVD_DATA_SHARE_CLASS) == 0)
- {
-- int flags = OMP_CLAUSE_LINEAR_NO_COPYIN (c)
-- ? GOVD_LASTPRIVATE : GOVD_SHARED;
-+ int flags = GOVD_FIRSTPRIVATE;
-+ /* #pragma omp distribute does not allow
-+ lastprivate clause. */
-+ if (!ctx->outer_context->distribute)
-+ flags |= GOVD_LASTPRIVATE;
- if (n == NULL)
- omp_add_variable (ctx->outer_context, decl,
- flags | GOVD_SEEN);
-@@ -6330,7 +6399,7 @@
- n->value |= flags | GOVD_SEEN;
- }
- }
-- else
-+ else if (!is_global_var (decl))
- omp_notice_variable (ctx->outer_context, decl, true);
- }
- }
-@@ -6420,6 +6489,8 @@
- OMP_CLAUSE_CHAIN (c) = nc;
- c = nc;
- }
-+ else if (OMP_CLAUSE_SIZE (c) == NULL_TREE)
-+ OMP_CLAUSE_SIZE (c) = DECL_SIZE_UNIT (decl);
- break;
-
- case OMP_CLAUSE_TO:
-@@ -6444,6 +6515,8 @@
- OMP_CLAUSE_SIZE (c), true);
- }
- }
-+ else if (OMP_CLAUSE_SIZE (c) == NULL_TREE)
-+ OMP_CLAUSE_SIZE (c) = DECL_SIZE_UNIT (decl);
- break;
-
- case OMP_CLAUSE_REDUCTION:
-@@ -6479,7 +6552,10 @@
- }
-
- /* Add in any implicit data sharing. */
-- splay_tree_foreach (ctx->variables, gimplify_adjust_omp_clauses_1, list_p);
-+ struct gimplify_adjust_omp_clauses_data data;
-+ data.list_p = list_p;
-+ data.pre_p = pre_p;
-+ splay_tree_foreach (ctx->variables, gimplify_adjust_omp_clauses_1, &data);
-
- gimplify_omp_ctxp = ctx->outer_context;
- delete_omp_context (ctx);
-@@ -6510,7 +6586,7 @@
- else
- pop_gimplify_context (NULL);
-
-- gimplify_adjust_omp_clauses (&OMP_PARALLEL_CLAUSES (expr));
-+ gimplify_adjust_omp_clauses (pre_p, &OMP_PARALLEL_CLAUSES (expr));
-
- g = gimple_build_omp_parallel (body,
- OMP_PARALLEL_CLAUSES (expr),
-@@ -6546,7 +6622,7 @@
- else
- pop_gimplify_context (NULL);
-
-- gimplify_adjust_omp_clauses (&OMP_TASK_CLAUSES (expr));
-+ gimplify_adjust_omp_clauses (pre_p, &OMP_TASK_CLAUSES (expr));
-
- g = gimple_build_omp_task (body,
- OMP_TASK_CLAUSES (expr),
-@@ -6599,10 +6675,12 @@
-
- orig_for_stmt = for_stmt = *expr_p;
-
-- simd = TREE_CODE (for_stmt) == OMP_SIMD
-- || TREE_CODE (for_stmt) == CILK_SIMD;
-+ simd = (TREE_CODE (for_stmt) == OMP_SIMD
-+ || TREE_CODE (for_stmt) == CILK_SIMD);
- gimplify_scan_omp_clauses (&OMP_FOR_CLAUSES (for_stmt), pre_p,
- simd ? ORT_SIMD : ORT_WORKSHARE);
-+ if (TREE_CODE (for_stmt) == OMP_DISTRIBUTE)
-+ gimplify_omp_ctxp->distribute = true;
-
- /* Handle OMP_FOR_INIT. */
- for_pre_body = NULL;
-@@ -6656,6 +6734,7 @@
-
- /* Make sure the iteration variable is private. */
- tree c = NULL_TREE;
-+ tree c2 = NULL_TREE;
- if (orig_for_stmt != for_stmt)
- /* Do this only on innermost construct for combined ones. */;
- else if (simd)
-@@ -6662,7 +6741,9 @@
- {
- splay_tree_node n = splay_tree_lookup (gimplify_omp_ctxp->variables,
- (splay_tree_key)decl);
-- omp_is_private (gimplify_omp_ctxp, decl, simd);
-+ omp_is_private (gimplify_omp_ctxp, decl,
-+ 1 + (TREE_VEC_LENGTH (OMP_FOR_INIT (for_stmt))
-+ != 1));
- if (n != NULL && (n->value & GOVD_DATA_SHARE_CLASS) != 0)
- omp_notice_variable (gimplify_omp_ctxp, decl, true);
- else if (TREE_VEC_LENGTH (OMP_FOR_INIT (for_stmt)) == 1)
-@@ -6683,18 +6764,44 @@
- bool lastprivate
- = (!has_decl_expr
- || !bitmap_bit_p (has_decl_expr, DECL_UID (decl)));
-+ if (lastprivate
-+ && gimplify_omp_ctxp->outer_context
-+ && gimplify_omp_ctxp->outer_context->region_type
-+ == ORT_WORKSHARE
-+ && gimplify_omp_ctxp->outer_context->combined_loop
-+ && !gimplify_omp_ctxp->outer_context->distribute)
-+ {
-+ struct gimplify_omp_ctx *outer
-+ = gimplify_omp_ctxp->outer_context;
-+ n = splay_tree_lookup (outer->variables,
-+ (splay_tree_key) decl);
-+ if (n != NULL
-+ && (n->value & GOVD_DATA_SHARE_CLASS) == GOVD_LOCAL)
-+ lastprivate = false;
-+ else if (omp_check_private (outer, decl, false))
-+ error ("lastprivate variable %qE is private in outer "
-+ "context", DECL_NAME (decl));
-+ else
-+ {
-+ omp_add_variable (outer, decl,
-+ GOVD_LASTPRIVATE | GOVD_SEEN);
-+ if (outer->outer_context)
-+ omp_notice_variable (outer->outer_context, decl, true);
-+ }
-+ }
- c = build_omp_clause (input_location,
- lastprivate ? OMP_CLAUSE_LASTPRIVATE
- : OMP_CLAUSE_PRIVATE);
- OMP_CLAUSE_DECL (c) = decl;
- OMP_CLAUSE_CHAIN (c) = OMP_FOR_CLAUSES (for_stmt);
-+ OMP_FOR_CLAUSES (for_stmt) = c;
- omp_add_variable (gimplify_omp_ctxp, decl,
- (lastprivate ? GOVD_LASTPRIVATE : GOVD_PRIVATE)
-- | GOVD_SEEN);
-+ | GOVD_EXPLICIT | GOVD_SEEN);
- c = NULL_TREE;
- }
- }
-- else if (omp_is_private (gimplify_omp_ctxp, decl, simd))
-+ else if (omp_is_private (gimplify_omp_ctxp, decl, 0))
- omp_notice_variable (gimplify_omp_ctxp, decl, true);
- else
- omp_add_variable (gimplify_omp_ctxp, decl, GOVD_PRIVATE | GOVD_SEEN);
-@@ -6701,10 +6808,13 @@
-
- /* If DECL is not a gimple register, create a temporary variable to act
- as an iteration counter. This is valid, since DECL cannot be
-- modified in the body of the loop. */
-+ modified in the body of the loop. Similarly for any iteration vars
-+ in simd with collapse > 1 where the iterator vars must be
-+ lastprivate. */
- if (orig_for_stmt != for_stmt)
- var = decl;
-- else if (!is_gimple_reg (decl))
-+ else if (!is_gimple_reg (decl)
-+ || (simd && TREE_VEC_LENGTH (OMP_FOR_INIT (for_stmt)) > 1))
- {
- var = create_tmp_var (TREE_TYPE (decl), get_name (decl));
- TREE_OPERAND (t, 0) = var;
-@@ -6711,7 +6821,25 @@
-
- gimplify_seq_add_stmt (&for_body, gimple_build_assign (decl, var));
-
-- omp_add_variable (gimplify_omp_ctxp, var, GOVD_PRIVATE | GOVD_SEEN);
-+ if (simd && TREE_VEC_LENGTH (OMP_FOR_INIT (for_stmt)) == 1)
-+ {
-+ c2 = build_omp_clause (input_location, OMP_CLAUSE_LINEAR);
-+ OMP_CLAUSE_LINEAR_NO_COPYIN (c2) = 1;
-+ OMP_CLAUSE_LINEAR_NO_COPYOUT (c2) = 1;
-+ OMP_CLAUSE_DECL (c2) = var;
-+ OMP_CLAUSE_CHAIN (c2) = OMP_FOR_CLAUSES (for_stmt);
-+ OMP_FOR_CLAUSES (for_stmt) = c2;
-+ omp_add_variable (gimplify_omp_ctxp, var,
-+ GOVD_LINEAR | GOVD_EXPLICIT | GOVD_SEEN);
-+ if (c == NULL_TREE)
-+ {
-+ c = c2;
-+ c2 = NULL_TREE;
-+ }
-+ }
-+ else
-+ omp_add_variable (gimplify_omp_ctxp, var,
-+ GOVD_PRIVATE | GOVD_SEEN);
- }
- else
- var = decl;
-@@ -6739,8 +6867,8 @@
- case POSTINCREMENT_EXPR:
- {
- tree decl = TREE_OPERAND (t, 0);
-- // c_omp_for_incr_canonicalize_ptr() should have been
-- // called to massage things appropriately.
-+ /* c_omp_for_incr_canonicalize_ptr() should have been
-+ called to massage things appropriately. */
- gcc_assert (!POINTER_TYPE_P (TREE_TYPE (decl)));
-
- if (orig_for_stmt != for_stmt)
-@@ -6756,6 +6884,9 @@
-
- case PREDECREMENT_EXPR:
- case POSTDECREMENT_EXPR:
-+ /* c_omp_for_incr_canonicalize_ptr() should have been
-+ called to massage things appropriately. */
-+ gcc_assert (!POINTER_TYPE_P (TREE_TYPE (decl)));
- if (orig_for_stmt != for_stmt)
- break;
- t = build_int_cst (TREE_TYPE (decl), -1);
-@@ -6796,12 +6927,16 @@
- ret = MIN (ret, tret);
- if (c)
- {
-- OMP_CLAUSE_LINEAR_STEP (c) = TREE_OPERAND (t, 1);
-+ tree step = TREE_OPERAND (t, 1);
-+ tree stept = TREE_TYPE (decl);
-+ if (POINTER_TYPE_P (stept))
-+ stept = sizetype;
-+ step = fold_convert (stept, step);
- if (TREE_CODE (t) == MINUS_EXPR)
-+ step = fold_build1 (NEGATE_EXPR, stept, step);
-+ OMP_CLAUSE_LINEAR_STEP (c) = step;
-+ if (step != TREE_OPERAND (t, 1))
- {
-- t = TREE_OPERAND (t, 1);
-- OMP_CLAUSE_LINEAR_STEP (c)
-- = fold_build1 (NEGATE_EXPR, TREE_TYPE (t), t);
- tret = gimplify_expr (&OMP_CLAUSE_LINEAR_STEP (c),
- &for_pre_body, NULL,
- is_gimple_val, fb_rvalue);
-@@ -6814,13 +6949,22 @@
- gcc_unreachable ();
- }
-
-+ if (c2)
-+ {
-+ gcc_assert (c);
-+ OMP_CLAUSE_LINEAR_STEP (c2) = OMP_CLAUSE_LINEAR_STEP (c);
-+ }
-+
- if ((var != decl || TREE_VEC_LENGTH (OMP_FOR_INIT (for_stmt)) > 1)
- && orig_for_stmt == for_stmt)
- {
- for (c = OMP_FOR_CLAUSES (for_stmt); c ; c = OMP_CLAUSE_CHAIN (c))
-- if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
-- && OMP_CLAUSE_DECL (c) == decl
-- && OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (c) == NULL)
-+ if (((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
-+ && OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (c) == NULL)
-+ || (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LINEAR
-+ && !OMP_CLAUSE_LINEAR_NO_COPYOUT (c)
-+ && OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c) == NULL))
-+ && OMP_CLAUSE_DECL (c) == decl)
- {
- t = TREE_VEC_ELT (OMP_FOR_INCR (for_stmt), i);
- gcc_assert (TREE_CODE (t) == MODIFY_EXPR);
-@@ -6832,8 +6976,12 @@
- gcc_assert (TREE_OPERAND (t, 0) == var);
- t = build2 (TREE_CODE (t), TREE_TYPE (decl), decl,
- TREE_OPERAND (t, 1));
-- gimplify_assign (decl, t,
-- &OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (c));
-+ gimple_seq *seq;
-+ if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
-+ seq = &OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (c);
-+ else
-+ seq = &OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c);
-+ gimplify_assign (decl, t, seq);
- }
- }
- }
-@@ -6855,7 +7003,7 @@
- TREE_OPERAND (TREE_OPERAND (t, 1), 0) = var;
- }
-
-- gimplify_adjust_omp_clauses (&OMP_FOR_CLAUSES (orig_for_stmt));
-+ gimplify_adjust_omp_clauses (pre_p, &OMP_FOR_CLAUSES (orig_for_stmt));
-
- int kind;
- switch (TREE_CODE (orig_for_stmt))
-@@ -6955,7 +7103,7 @@
- }
- else
- gimplify_and_add (OMP_BODY (expr), &body);
-- gimplify_adjust_omp_clauses (&OMP_CLAUSES (expr));
-+ gimplify_adjust_omp_clauses (pre_p, &OMP_CLAUSES (expr));
-
- switch (TREE_CODE (expr))
- {
-@@ -6994,7 +7142,7 @@
-
- gimplify_scan_omp_clauses (&OMP_TARGET_UPDATE_CLAUSES (expr), pre_p,
- ORT_WORKSHARE);
-- gimplify_adjust_omp_clauses (&OMP_TARGET_UPDATE_CLAUSES (expr));
-+ gimplify_adjust_omp_clauses (pre_p, &OMP_TARGET_UPDATE_CLAUSES (expr));
- stmt = gimple_build_omp_target (NULL, GF_OMP_TARGET_KIND_UPDATE,
- OMP_TARGET_UPDATE_CLAUSES (expr));
-
-Index: gcc/graphite-scop-detection.c
-===================================================================
---- a/src/gcc/graphite-scop-detection.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/graphite-scop-detection.c (.../branches/gcc-4_9-branch)
-@@ -219,7 +219,14 @@
-
- switch (TREE_CODE (scev))
- {
-+ case NEGATE_EXPR:
-+ case BIT_NOT_EXPR:
-+ CASE_CONVERT:
-+ case NON_LVALUE_EXPR:
-+ return graphite_can_represent_scev (TREE_OPERAND (scev, 0));
-+
- case PLUS_EXPR:
-+ case POINTER_PLUS_EXPR:
- case MINUS_EXPR:
- return graphite_can_represent_scev (TREE_OPERAND (scev, 0))
- && graphite_can_represent_scev (TREE_OPERAND (scev, 1));
-@@ -241,6 +248,7 @@
- if (!evolution_function_right_is_integer_cst (scev)
- || !graphite_can_represent_init (scev))
- return false;
-+ return graphite_can_represent_scev (CHREC_LEFT (scev));
-
- default:
- break;
-@@ -247,7 +255,8 @@
- }
-
- /* Only affine functions can be represented. */
-- if (!scev_is_linear_expression (scev))
-+ if (tree_contains_chrecs (scev, NULL)
-+ || !scev_is_linear_expression (scev))
- return false;
-
- return true;
-@@ -465,8 +474,10 @@
- result.exits = false;
-
- /* Mark bbs terminating a SESE region difficult, if they start
-- a condition. */
-- if (!single_succ_p (bb))
-+ a condition or if the block it exits to cannot be split
-+ with make_forwarder_block. */
-+ if (!single_succ_p (bb)
-+ || bb_has_abnormal_pred (single_succ (bb)))
- result.difficult = true;
- else
- result.exit = single_succ (bb);
-Index: gcc/lra-constraints.c
-===================================================================
---- a/src/gcc/lra-constraints.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/lra-constraints.c (.../branches/gcc-4_9-branch)
-@@ -1231,6 +1231,8 @@
- }
- }
-
-+static int valid_address_p (enum machine_mode mode, rtx addr, addr_space_t as);
-+
- /* Make reloads for subreg in operand NOP with internal subreg mode
- REG_MODE, add new reloads for further processing. Return true if
- any reload was generated. */
-@@ -1261,12 +1263,28 @@
- equivalences in function lra_constraints) and because for spilled
- pseudos we allocate stack memory enough for the biggest
- corresponding paradoxical subreg. */
-- if ((MEM_P (reg)
-- && (! SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (reg))
-- || MEM_ALIGN (reg) >= GET_MODE_ALIGNMENT (mode)))
-- || (REG_P (reg) && REGNO (reg) < FIRST_PSEUDO_REGISTER))
-+ if (MEM_P (reg)
-+ && (! SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (reg))
-+ || MEM_ALIGN (reg) >= GET_MODE_ALIGNMENT (mode)))
- {
-+ rtx subst, old = *curr_id->operand_loc[nop];
-+
- alter_subreg (curr_id->operand_loc[nop], false);
-+ subst = *curr_id->operand_loc[nop];
-+ lra_assert (MEM_P (subst));
-+ if (! valid_address_p (GET_MODE (reg), XEXP (reg, 0),
-+ MEM_ADDR_SPACE (reg))
-+ || valid_address_p (GET_MODE (subst), XEXP (subst, 0),
-+ MEM_ADDR_SPACE (subst)))
-+ return true;
-+ /* If the address was valid and became invalid, prefer to reload
-+ the memory. Typical case is when the index scale should
-+ correspond the memory. */
-+ *curr_id->operand_loc[nop] = old;
-+ }
-+ else if (REG_P (reg) && REGNO (reg) < FIRST_PSEUDO_REGISTER)
-+ {
-+ alter_subreg (curr_id->operand_loc[nop], false);
- return true;
- }
- /* Put constant into memory when we have mixed modes. It generates
-@@ -2787,9 +2805,14 @@
-
- Add reloads to the lists *BEFORE and *AFTER. We might need to add
- reloads to *AFTER because of inc/dec, {pre, post} modify in the
-- address. Return true for any RTL change. */
-+ address. Return true for any RTL change.
-+
-+ The function is a helper function which does not produce all
-+ transformations which can be necessary. It does just basic steps.
-+ To do all necessary transformations use function
-+ process_address. */
- static bool
--process_address (int nop, rtx *before, rtx *after)
-+process_address_1 (int nop, rtx *before, rtx *after)
- {
- struct address_info ad;
- rtx new_reg;
-@@ -2972,6 +2995,13 @@
- *ad.inner = simplify_gen_binary (PLUS, GET_MODE (new_reg),
- new_reg, *ad.index);
- }
-+ else if (get_index_scale (&ad) == 1)
-+ {
-+ /* The last transformation to one reg will be made in
-+ curr_insn_transform function. */
-+ end_sequence ();
-+ return false;
-+ }
- else
- {
- /* base + scale * index => base + new_reg,
-@@ -2989,6 +3019,18 @@
- return true;
- }
-
-+/* Do address reloads until it is necessary. Use process_address_1 as
-+ a helper function. Return true for any RTL changes. */
-+static bool
-+process_address (int nop, rtx *before, rtx *after)
-+{
-+ bool res = false;
-+
-+ while (process_address_1 (nop, before, after))
-+ res = true;
-+ return res;
-+}
-+
- /* Emit insns to reload VALUE into a new register. VALUE is an
- auto-increment or auto-decrement RTX whose operand is a register or
- memory location; so reloading involves incrementing that location.
-@@ -3273,7 +3315,7 @@
- change_p = true;
- lra_update_dup (curr_id, i);
- }
--
-+
- if (change_p)
- /* If we've changed the instruction then any alternative that
- we chose previously may no longer be valid. */
-Index: gcc/gimplify.h
-===================================================================
---- a/src/gcc/gimplify.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/gimplify.h (.../branches/gcc-4_9-branch)
-@@ -77,6 +77,7 @@
- extern void gimplify_type_sizes (tree, gimple_seq *);
- extern void gimplify_one_sizepos (tree *, gimple_seq *);
- extern gimple gimplify_body (tree, bool);
-+extern enum gimplify_status gimplify_arg (tree *, gimple_seq *, location_t);
- extern void gimplify_function_tree (tree);
- extern enum gimplify_status gimplify_va_arg_expr (tree *, gimple_seq *,
- gimple_seq *);
-Index: gcc/expmed.c
-===================================================================
---- a/src/gcc/expmed.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/expmed.c (.../branches/gcc-4_9-branch)
-@@ -2141,9 +2141,12 @@
- optab lrotate_optab = rotl_optab;
- optab rrotate_optab = rotr_optab;
- enum machine_mode op1_mode;
-+ enum machine_mode scalar_mode = mode;
- int attempt;
- bool speed = optimize_insn_for_speed_p ();
-
-+ if (VECTOR_MODE_P (mode))
-+ scalar_mode = GET_MODE_INNER (mode);
- op1 = amount;
- op1_mode = GET_MODE (op1);
-
-@@ -2166,9 +2169,9 @@
- {
- if (CONST_INT_P (op1)
- && ((unsigned HOST_WIDE_INT) INTVAL (op1) >=
-- (unsigned HOST_WIDE_INT) GET_MODE_BITSIZE (mode)))
-+ (unsigned HOST_WIDE_INT) GET_MODE_BITSIZE (scalar_mode)))
- op1 = GEN_INT ((unsigned HOST_WIDE_INT) INTVAL (op1)
-- % GET_MODE_BITSIZE (mode));
-+ % GET_MODE_BITSIZE (scalar_mode));
- else if (GET_CODE (op1) == SUBREG
- && subreg_lowpart_p (op1)
- && SCALAR_INT_MODE_P (GET_MODE (SUBREG_REG (op1)))
-@@ -2182,10 +2185,10 @@
- amount instead. */
- if (rotate
- && CONST_INT_P (op1)
-- && IN_RANGE (INTVAL (op1), GET_MODE_BITSIZE (mode) / 2 + left,
-- GET_MODE_BITSIZE (mode) - 1))
-+ && IN_RANGE (INTVAL (op1), GET_MODE_BITSIZE (scalar_mode) / 2 + left,
-+ GET_MODE_BITSIZE (scalar_mode) - 1))
- {
-- op1 = GEN_INT (GET_MODE_BITSIZE (mode) - INTVAL (op1));
-+ op1 = GEN_INT (GET_MODE_BITSIZE (scalar_mode) - INTVAL (op1));
- left = !left;
- code = left ? LROTATE_EXPR : RROTATE_EXPR;
- }
-@@ -2198,7 +2201,7 @@
- if (code == LSHIFT_EXPR
- && CONST_INT_P (op1)
- && INTVAL (op1) > 0
-- && INTVAL (op1) < GET_MODE_PRECISION (mode)
-+ && INTVAL (op1) < GET_MODE_PRECISION (scalar_mode)
- && INTVAL (op1) < MAX_BITS_PER_WORD
- && (shift_cost (speed, mode, INTVAL (op1))
- > INTVAL (op1) * add_cost (speed, mode))
-@@ -2253,7 +2256,7 @@
- if (op1 == const0_rtx)
- return shifted;
- else if (CONST_INT_P (op1))
-- other_amount = GEN_INT (GET_MODE_BITSIZE (mode)
-+ other_amount = GEN_INT (GET_MODE_BITSIZE (scalar_mode)
- - INTVAL (op1));
- else
- {
-@@ -2260,7 +2263,7 @@
- other_amount
- = simplify_gen_unary (NEG, GET_MODE (op1),
- op1, GET_MODE (op1));
-- HOST_WIDE_INT mask = GET_MODE_PRECISION (mode) - 1;
-+ HOST_WIDE_INT mask = GET_MODE_PRECISION (scalar_mode) - 1;
- other_amount
- = simplify_gen_binary (AND, GET_MODE (op1), other_amount,
- gen_int_mode (mask, GET_MODE (op1)));
-Index: gcc/tree-dfa.c
-===================================================================
---- a/src/gcc/tree-dfa.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/tree-dfa.c (.../branches/gcc-4_9-branch)
-@@ -343,7 +343,7 @@
- {
- loc = htab_find_slot_with_hash (DEFAULT_DEFS (fn), &in,
- DECL_UID (var), NO_INSERT);
-- if (*loc)
-+ if (loc)
- {
- SSA_NAME_IS_DEFAULT_DEF (*(tree *)loc) = false;
- htab_clear_slot (DEFAULT_DEFS (fn), loc);
-Index: gcc/cfgexpand.c
-===================================================================
---- a/src/gcc/cfgexpand.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/cfgexpand.c (.../branches/gcc-4_9-branch)
-@@ -1013,10 +1013,19 @@
- if (data->asan_base == NULL)
- data->asan_base = gen_reg_rtx (Pmode);
- base = data->asan_base;
-+
-+ if (!STRICT_ALIGNMENT)
-+ base_align = crtl->max_used_stack_slot_alignment;
-+ else
-+ base_align = MAX (crtl->max_used_stack_slot_alignment,
-+ GET_MODE_ALIGNMENT (SImode)
-+ << ASAN_SHADOW_SHIFT);
- }
- else
-- offset = alloc_stack_frame_space (stack_vars[i].size, alignb);
-- base_align = crtl->max_used_stack_slot_alignment;
-+ {
-+ offset = alloc_stack_frame_space (stack_vars[i].size, alignb);
-+ base_align = crtl->max_used_stack_slot_alignment;
-+ }
- }
- else
- {
-@@ -1845,6 +1854,11 @@
- = alloc_stack_frame_space (redzonesz, ASAN_RED_ZONE_SIZE);
- data.asan_vec.safe_push (prev_offset);
- data.asan_vec.safe_push (offset);
-+ /* Leave space for alignment if STRICT_ALIGNMENT. */
-+ if (STRICT_ALIGNMENT)
-+ alloc_stack_frame_space ((GET_MODE_ALIGNMENT (SImode)
-+ << ASAN_SHADOW_SHIFT)
-+ / BITS_PER_UNIT, 1);
-
- var_end_seq
- = asan_emit_stack_protection (virtual_stack_vars_rtx,
-Index: gcc/lto/ChangeLog
-===================================================================
---- a/src/gcc/lto/ChangeLog (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/lto/ChangeLog (.../branches/gcc-4_9-branch)
-@@ -1,3 +1,8 @@
-+2014-04-22 Jan Hubicka <hubicka@ucw.cz>
-+
-+ PR lto/61012
-+ * lto-symtab.c (lto_symtab_merge_decls_1):
-+
- 2014-04-22 Release Manager
-
- * GCC 4.9.0 released.
-Index: gcc/lto/lto-symtab.c
-===================================================================
---- a/src/gcc/lto/lto-symtab.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/lto/lto-symtab.c (.../branches/gcc-4_9-branch)
-@@ -453,7 +453,12 @@
- cgraph or a varpool node. */
- if (!prevailing)
- {
-- prevailing = first;
-+ for (prevailing = first;
-+ prevailing; prevailing = prevailing->next_sharing_asm_name)
-+ if (lto_symtab_symbol_p (prevailing))
-+ break;
-+ if (!prevailing)
-+ return;
- /* For variables chose with a priority variant with vnode
- attached (i.e. from unit where external declaration of
- variable is actually used).
-Index: gcc/ipa-prop.c
-===================================================================
---- a/src/gcc/ipa-prop.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ipa-prop.c (.../branches/gcc-4_9-branch)
-@@ -2701,6 +2701,29 @@
- return cs;
- }
-
-+/* Return the target to be used in cases of impossible devirtualization. IE
-+ and target (the latter can be NULL) are dumped when dumping is enabled. */
-+
-+tree
-+ipa_impossible_devirt_target (struct cgraph_edge *ie, tree target)
-+{
-+ if (dump_file)
-+ {
-+ if (target)
-+ fprintf (dump_file,
-+ "Type inconsistent devirtualization: %s/%i->%s\n",
-+ ie->caller->name (), ie->caller->order,
-+ IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (target)));
-+ else
-+ fprintf (dump_file,
-+ "No devirtualization target in %s/%i\n",
-+ ie->caller->name (), ie->caller->order);
-+ }
-+ tree new_target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
-+ cgraph_get_create_node (new_target);
-+ return new_target;
-+}
-+
- /* Try to find a destination for indirect edge IE that corresponds to a virtual
- call based on a formal parameter which is described by jump function JFUNC
- and if it can be determined, make it direct and return the direct edge.
-@@ -2735,15 +2758,7 @@
- && DECL_FUNCTION_CODE (target) == BUILT_IN_UNREACHABLE)
- || !possible_polymorphic_call_target_p
- (ie, cgraph_get_node (target)))
-- {
-- if (dump_file)
-- fprintf (dump_file,
-- "Type inconsident devirtualization: %s/%i->%s\n",
-- ie->caller->name (), ie->caller->order,
-- IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (target)));
-- target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
-- cgraph_get_create_node (target);
-- }
-+ target = ipa_impossible_devirt_target (ie, target);
- return ipa_make_edge_direct_to_target (ie, target);
- }
- }
-@@ -2773,10 +2788,7 @@
- if (targets.length () == 1)
- target = targets[0]->decl;
- else
-- {
-- target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
-- cgraph_get_create_node (target);
-- }
-+ target = ipa_impossible_devirt_target (ie, NULL_TREE);
- }
- else
- {
-@@ -2791,10 +2803,8 @@
-
- if (target)
- {
--#ifdef ENABLE_CHECKING
-- gcc_assert (possible_polymorphic_call_target_p
-- (ie, cgraph_get_node (target)));
--#endif
-+ if (!possible_polymorphic_call_target_p (ie, cgraph_get_node (target)))
-+ target = ipa_impossible_devirt_target (ie, target);
- return ipa_make_edge_direct_to_target (ie, target);
- }
- else
-@@ -2877,8 +2887,10 @@
- else if (jfunc->type == IPA_JF_PASS_THROUGH
- && ipa_get_jf_pass_through_operation (jfunc) == NOP_EXPR)
- {
-- if (ici->agg_contents
-- && !ipa_get_jf_pass_through_agg_preserved (jfunc))
-+ if ((ici->agg_contents
-+ && !ipa_get_jf_pass_through_agg_preserved (jfunc))
-+ || (ici->polymorphic
-+ && !ipa_get_jf_pass_through_type_preserved (jfunc)))
- ici->param_index = -1;
- else
- ici->param_index = ipa_get_jf_pass_through_formal_id (jfunc);
-@@ -2885,8 +2897,10 @@
- }
- else if (jfunc->type == IPA_JF_ANCESTOR)
- {
-- if (ici->agg_contents
-- && !ipa_get_jf_ancestor_agg_preserved (jfunc))
-+ if ((ici->agg_contents
-+ && !ipa_get_jf_ancestor_agg_preserved (jfunc))
-+ || (ici->polymorphic
-+ && !ipa_get_jf_ancestor_type_preserved (jfunc)))
- ici->param_index = -1;
- else
- {
-@@ -3650,6 +3664,7 @@
-
- TREE_TYPE (fndecl) = new_type;
- DECL_VIRTUAL_P (fndecl) = 0;
-+ DECL_LANG_SPECIFIC (fndecl) = NULL;
- otypes.release ();
- oparms.release ();
- }
-Index: gcc/ipa-prop.h
-===================================================================
---- a/src/gcc/ipa-prop.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ipa-prop.h (.../branches/gcc-4_9-branch)
-@@ -585,6 +585,7 @@
- struct cgraph_edge *ipa_make_edge_direct_to_target (struct cgraph_edge *, tree);
- tree ipa_binfo_from_known_type_jfunc (struct ipa_jump_func *);
- tree ipa_intraprocedural_devirtualization (gimple);
-+tree ipa_impossible_devirt_target (struct cgraph_edge *, tree);
-
- /* Functions related to both. */
- void ipa_analyze_node (struct cgraph_node *);
-Index: gcc/po/ChangeLog
-===================================================================
---- a/src/gcc/po/ChangeLog (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/po/ChangeLog (.../branches/gcc-4_9-branch)
-@@ -1,3 +1,11 @@
-+2014-05-14 Joseph Myers <joseph@codesourcery.com>
-+
-+ * zh_CN.po: Update.
-+
-+2014-05-01 Joseph Myers <joseph@codesourcery.com>
-+
-+ * sv.po: Update.
-+
- 2014-04-22 Release Manager
-
- * GCC 4.9.0 released.
-Index: gcc/po/sv.po
-===================================================================
---- a/src/gcc/po/sv.po (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/po/sv.po (.../branches/gcc-4_9-branch)
-@@ -16,7 +16,7 @@
- "Project-Id-Version: gcc 4.9-b20140202\n"
- "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
- "POT-Creation-Date: 2014-02-02 17:35+0000\n"
--"PO-Revision-Date: 2014-03-30 20:23+0200\n"
-+"PO-Revision-Date: 2014-04-11 20:56+0200\n"
- "Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n"
- "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
- "Language: sv\n"
-@@ -1493,7 +1493,7 @@
-
- #: cif-code.def:125
- msgid "callee refers to comdat-local symbols"
--msgstr "den anropade referarar till comdat-lokala symboler"
-+msgstr "den anropade refererar till comdat-lokala symboler"
-
- #. The remainder are real diagnostic types.
- #: diagnostic.def:33
-@@ -6065,7 +6065,7 @@
-
- #: c-family/c.opt:653
- msgid "Warn about __TIME__, __DATE__ and __TIMESTAMP__ usage"
--msgstr "Warn för använding av __TIME__, __DATE__ och __TIMESTAMP__"
-+msgstr "Varna för användning av __TIME__, __DATE__ och __TIMESTAMP__"
-
- #: c-family/c.opt:657
- msgid "Warn if a property for an Objective-C object has no assign semantics specified"
-@@ -12220,7 +12220,7 @@
-
- #: common.opt:811
- msgid "Aggressively optimize loops using language constraints"
--msgstr "Optimera aggresivt slingor med användning av språkbegränsningar"
-+msgstr "Optimera aggressivt slingor med användning av språkbegränsningar"
-
- #: common.opt:815
- msgid "Align the start of functions"
-@@ -13449,7 +13449,7 @@
-
- #: common.opt:2332
- msgid "Enables the dynamic vectorizer cost model. Preserved for backward compatibility."
--msgstr "Aktivera den dynamiska kostnadsmodellen för vekoriseraren. Bevarad för bakåtkompatibilitet."
-+msgstr "Aktivera den dynamiska kostnadsmodellen för vektoriseraren. Bevarad för bakåtkompatibilitet."
-
- #: common.opt:2336
- msgid "Enables the unlimited vectorizer cost model. Preserved for backward compatibility."
-@@ -19151,7 +19151,7 @@
- #: c/c-array-notation.c:721 cp/cp-array-notation.c:610
- #, gcc-internal-format
- msgid "rank mismatch between %qE and %qE"
--msgstr "ordingen stämmer inte mellan %qE och %qE"
-+msgstr "ordningen stämmer inte mellan %qE och %qE"
-
- #. Here the original expression is printed as a "heads-up"
- #. to the programmer. This is because since there is no
-@@ -25782,7 +25782,7 @@
- msgid "too much stack space to dispose of: %d"
- msgstr "för mycket stackutrymme att göra av med: %d"
-
--# Förmodligen en felstavning i orginalet, men tills jag vet säkert
-+# Förmodligen en felstavning i originalet, men tills jag vet säkert
- # behåller jag den
- #: config/v850/v850.c:2788
- #, gcc-internal-format, gfc-internal-format
-@@ -28130,7 +28130,7 @@
- #: c/c-parser.c:6884
- #, gcc-internal-format
- msgid "%<_Generic%> selector of type %qT is not compatible with any association"
--msgstr "%<_Generic%>-väljare av typ %qT är inte kompatiblem med någon association"
-+msgstr "%<_Generic%>-väljare av typ %qT är inte kompatibel med någon association"
-
- #: c/c-parser.c:7039 c/c-parser.c:7519 c/c-parser.c:7538
- #, gcc-internal-format
-@@ -28185,7 +28185,7 @@
- #: c/c-parser.c:7505 cp/parser.c:5807
- #, gcc-internal-format
- msgid "consecutive %<_Cilk_spawn%> keywords are not permitted"
--msgstr "konsektiva %<_Cilk_spawn%>-nyckelord är inte tillåtet"
-+msgstr "konsekutiva %<_Cilk_spawn%>-nyckelord är inte tillåtet"
-
- #: c/c-parser.c:7573
- #, gcc-internal-format
-@@ -31055,7 +31055,7 @@
- #: cp/cp-array-notation.c:849 cp/cp-array-notation.c:855
- #, gcc-internal-format
- msgid "rank mismatch with controlling expression of parent if-statement"
--msgstr "ordingen stämmer inte med det styrande uttrycket i förälder-if-satsen"
-+msgstr "ordningen stämmer inte med det styrande uttrycket i förälder-if-satsen"
-
- #: cp/cp-array-notation.c:1250
- #, gcc-internal-format
-@@ -31090,7 +31090,7 @@
- #: cp/cp-array-notation.c:1422
- #, gcc-internal-format
- msgid "array notation cannot be used with function type"
--msgstr "vektornotation kan inte användas användas med en funktionstyp"
-+msgstr "vektornotation kan inte användas med en funktionstyp"
-
- #: cp/cp-array-notation.c:1432
- #, gcc-internal-format
-@@ -31100,7 +31100,7 @@
- #: cp/cp-array-notation.c:1438
- #, gcc-internal-format
- msgid "rank of an array notation triplet%'s length is not zero"
--msgstr "ordingen på en vektornotations trippels längd är inte noll"
-+msgstr "ordningen på en vektornotations trippels längd är inte noll"
-
- #: cp/cp-array-notation.c:1443
- #, gcc-internal-format
-@@ -31450,7 +31450,7 @@
- #: cp/cvt.c:1659
- #, gcc-internal-format
- msgid "ambiguous default type conversion from %qT"
--msgstr "tvetydig standartypkonvertering från %qT"
-+msgstr "tvetydig standardtypkonvertering från %qT"
-
- #: cp/cvt.c:1661
- #, gcc-internal-format
-@@ -33747,7 +33747,7 @@
- #: cp/decl.c:14531 cp/decl2.c:4673
- #, gcc-internal-format
- msgid "use of %qD before deduction of %<auto%>"
--msgstr "använding av %qD före härledning av %<auto%>"
-+msgstr "användning av %qD före härledning av %<auto%>"
-
- #: cp/decl2.c:322
- #, gcc-internal-format
-@@ -36027,7 +36027,7 @@
- #: cp/parser.c:14516
- #, gcc-internal-format
- msgid "use of %<auto%> in parameter declaration only available with -std=c++1y or -std=gnu++1y"
--msgstr "använding av %<auto%> i parameterdeklarationer är endast tillgängligt med -std=c++1y eller -std=gnu++1y"
-+msgstr "användning av %<auto%> i parameterdeklarationer är endast tillgängligt med -std=c++1y eller -std=gnu++1y"
-
- #: cp/parser.c:14521
- #, gcc-internal-format
-@@ -37288,7 +37288,7 @@
- #: cp/pt.c:4861
- #, gcc-internal-format
- msgid "template arguments to %qD do not match original template %qD"
--msgstr "mallargument till %qD stämmer inte med orginalmallen %qD"
-+msgstr "mallargument till %qD stämmer inte med originalmallen %qD"
-
- #: cp/pt.c:4865
- #, gcc-internal-format
-@@ -38326,7 +38326,7 @@
- #: cp/semantics.c:3800
- #, gcc-internal-format
- msgid "second operand of %<offsetof%> is neither a single identifier nor a sequence of member accesses and array references"
--msgstr "andra operanden till %<offsetof%> är varken en ensam idientifierare eller en sekvens av medlemsåtkomster och vektorreferenser"
-+msgstr "andra operanden till %<offsetof%> är varken en ensam identifierare eller en sekvens av medlemsåtkomster och vektorreferenser"
-
- #: cp/semantics.c:3808
- #, gcc-internal-format
-@@ -48120,7 +48120,7 @@
- #: fortran/resolve.c:13229
- #, gcc-internal-format, gfc-internal-format
- msgid "Variable '%s' at %L with coarray component shall be a nonpointer, nonallocatable scalar, which is not a coarray"
--msgstr "Variabeln â€%s†vid %L med co-vektorkomponent skall vara en skalär som inte är en pekare eller allokerbar och inte en co-vaktor"
-+msgstr "Variabeln â€%s†vid %L med co-vektorkomponent skall vara en skalär som inte är en pekare eller allokerbar och inte en co-vektor"
-
- #: fortran/resolve.c:13244
- #, gcc-internal-format, gfc-internal-format
-@@ -49576,12 +49576,12 @@
- #: lto/lto-symtab.c:404
- #, gcc-internal-format
- msgid "type of %qD does not match original declaration"
--msgstr "typen på %qD stämmer inte med orginaldeklarationen"
-+msgstr "typen på %qD stämmer inte med originaldeklarationen"
-
- #: lto/lto-symtab.c:412
- #, gcc-internal-format
- msgid "alignment of %qD is bigger than original declaration"
--msgstr "justering av %qD är större än orginaldeklarationen"
-+msgstr "justering av %qD är större än originaldeklarationen"
-
- #: lto/lto-symtab.c:418 lto/lto-symtab.c:517
- #, gcc-internal-format
-Index: gcc/po/zh_CN.po
-===================================================================
---- a/src/gcc/po/zh_CN.po (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/po/zh_CN.po (.../branches/gcc-4_9-branch)
-@@ -1,14 +1,14 @@
- # Simplified Chinese translation for gcc.
- # Copyright (C) 2005 Free Software Foundation, Inc.
- # This file is distributed under the same license as the gcc package.
--# Meng Jie <zuxy.meng@gmail.com>, 2005-2011.
-+# Meng Jie <zuxy.meng@gmail.com>, 2005-2014.
- #
- msgid ""
- msgstr ""
--"Project-Id-Version: gcc 4.6.0\n"
-+"Project-Id-Version: gcc 4.9-b20140202\n"
- "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
- "POT-Creation-Date: 2014-02-02 17:35+0000\n"
--"PO-Revision-Date: 2011-05-19 15:04+0800\n"
-+"PO-Revision-Date: 2014-05-14 14:25-0800\n"
- "Last-Translator: Meng Jie <zuxy.meng@gmail.com>\n"
- "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
- "Language: zh_CN\n"
-@@ -38,7 +38,6 @@
-
- #: collect2.c:1578
- #, fuzzy, c-format
--#| msgid "collect2 version %s"
- msgid "collect2 version %s\n"
- msgstr "collect2 版本 %s"
-
-@@ -94,13 +93,11 @@
-
- #: diagnostic.c:170
- #, fuzzy, c-format
--#| msgid "%s: all warnings being treated as errors\n"
- msgid "%s: all warnings being treated as errors"
- msgstr "%s:所有的警告都被当作是错误\n"
-
- #: diagnostic.c:175
- #, fuzzy, c-format
--#| msgid "%s: some warnings being treated as errors\n"
- msgid "%s: some warnings being treated as errors"
- msgstr "%s:有些警告被当作是错误\n"
-
-@@ -120,10 +117,6 @@
-
- #: diagnostic.c:479
- #, fuzzy, c-format
--#| msgid ""
--#| "Please submit a full bug report,\n"
--#| "with preprocessed source if appropriate.\n"
--#| "See %s for instructions.\n"
- msgid ""
- "Please submit a full bug report,\n"
- "with preprocessed source if appropriate.\n"
-@@ -134,7 +127,6 @@
-
- #: diagnostic.c:485
- #, fuzzy, c-format
--#| msgid "Use fp double instructions"
- msgid "See %s for instructions.\n"
- msgstr "使用浮点åŒç²¾åº¦æŒ‡ä»¤"
-
-@@ -293,7 +285,6 @@
-
- #: gcc.c:3073
- #, fuzzy
--#| msgid " --help={target|optimizers|warnings|params|[^]{joined|separate|undocumented}}[,...]\n"
- msgid " --help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,...]\n"
- msgstr " --help={target|optimizers|warnings|params|[^]{joined|separate|undocumented}}[,...]\n"
-
-@@ -339,9 +330,6 @@
-
- #: gcc.c:3085
- #, fuzzy
--#| msgid ""
--#| " -print-multi-lib Display the mapping between command line options and\n"
--#| " multiple library search directories\n"
- msgid ""
- " -print-multiarch Display the target's normalized GNU triplet, used as\n"
- " a component in the library path\n"
-@@ -461,13 +449,11 @@
-
- #: gcc.c:3120
- #, fuzzy
--#| msgid "Create a position independent executable"
- msgid " -pie Create a position independent executable\n"
- msgstr "生æˆä½ç½®æ— å…³å¯æ‰§è¡Œæ–‡ä»¶"
-
- #: gcc.c:3121
- #, fuzzy
--#| msgid "Create a shared library"
- msgid " -shared Create a shared library\n"
- msgstr "生æˆä¸€ä¸ªå…±äº«åº“"
-
-@@ -497,7 +483,6 @@
-
- #: gcc.c:5402
- #, fuzzy, c-format
--#| msgid "Processing spec %c%s%c, which is '%s'\n"
- msgid "Processing spec (%s), which is '%s'\n"
- msgstr "å¤„ç† spec %c%s%c,å³â€˜%s’\n"
-
-@@ -613,9 +598,6 @@
-
- #: gcov.c:472
- #, fuzzy, c-format
--#| msgid ""
--#| "Usage: gcov [OPTION]... SOURCEFILE...\n"
--#| "\n"
- msgid ""
- "Usage: gcov [OPTION]... SOURCE|OBJ...\n"
- "\n"
-@@ -649,9 +631,6 @@
-
- #: gcov.c:477
- #, fuzzy, c-format
--#| msgid ""
--#| " -c, --branch-counts Given counts of branches taken\n"
--#| " rather than percentages\n"
- msgid ""
- " -c, --branch-counts Output counts of branches taken\n"
- " rather than percentages\n"
-@@ -701,7 +680,6 @@
-
- #: gcov.c:488
- #, fuzzy, c-format
--#| msgid " -a, --all-blocks Show information for every basic block\n"
- msgid " -r, --relative-only Only show data for relative sources\n"
- msgstr " -a, --all-blocks 显示æ¯ä¸ªåŸºæœ¬å—çš„ä¿¡æ¯\n"
-
-@@ -749,25 +727,21 @@
-
- #: gcov.c:794
- #, fuzzy, c-format
--#| msgid "%s:creating '%s'\n"
- msgid "Creating '%s'\n"
- msgstr "%s:正在创建‘%s’\n"
-
- #: gcov.c:797
- #, fuzzy, c-format
--#| msgid "%s:error writing output file '%s'\n"
- msgid "Error writing output file '%s'\n"
- msgstr "%s:写入输出文件‘%s’时出错\n"
-
- #: gcov.c:801
- #, fuzzy, c-format
--#| msgid "%s:could not open output file '%s'\n"
- msgid "Could not open output file '%s'\n"
- msgstr "%s:ä¸èƒ½æ‰“开输出文件‘%s’\n"
-
- #: gcov.c:806
- #, fuzzy, c-format
--#| msgid "[Leaving %s]\n"
- msgid "Removing '%s'\n"
- msgstr "[离开 %s]\n"
-
-@@ -778,13 +752,11 @@
-
- #: gcov.c:856
- #, fuzzy, c-format
--#| msgid "%s: Cannot open output file: %s\n"
- msgid "Cannot open intermediate output file %s\n"
- msgstr "%s:无法打开输出文件:%s\n"
-
- #: gcov.c:1139
- #, fuzzy, c-format
--#| msgid "%s:source file is newer than graph file '%s'\n"
- msgid "%s:source file is newer than notes file '%s'\n"
- msgstr "%s:æºæ–‡ä»¶è¾ƒå›¾æ–‡ä»¶â€˜%s’新\n"
-
-@@ -795,13 +767,11 @@
-
- #: gcov.c:1169
- #, fuzzy, c-format
--#| msgid "%s:cannot open source file\n"
- msgid "%s:cannot open notes file\n"
- msgstr "%s:无法打开æºæ–‡ä»¶\n"
-
- #: gcov.c:1175
- #, fuzzy, c-format
--#| msgid "%s:not a gcov data file\n"
- msgid "%s:not a gcov notes file\n"
- msgstr "%s:ä¸æ˜¯ä¸€ä¸ª gcov æ•°æ®æ–‡ä»¶\n"
-
-@@ -842,7 +812,6 @@
-
- #: gcov.c:1417
- #, fuzzy, c-format
--#| msgid "%s:stamp mismatch with graph file\n"
- msgid "%s:stamp mismatch with notes file\n"
- msgstr "%s:时间戳与图文件ä¸åŒ¹é…\n"
-
-@@ -958,7 +927,6 @@
-
- #: gcov.c:2424
- #, fuzzy, c-format
--#| msgid "%s:cannot open source file\n"
- msgid "Cannot open source file %s\n"
- msgstr "%s:无法打开æºæ–‡ä»¶\n"
-
-@@ -1109,13 +1077,11 @@
-
- #: langhooks.c:456 cp/error.c:3131
- #, fuzzy
--#| msgid " inlined from %qs at %s:%d:%d"
- msgid " inlined from %qs at %r%s:%d:%d%R"
- msgstr " 内è”自%qs于 %s:%d:%d"
-
- #: langhooks.c:461 cp/error.c:3136
- #, fuzzy
--#| msgid " inlined from %qs at %s:%d"
- msgid " inlined from %qs at %r%s:%d%R"
- msgstr " 内è”自%qs于 %s:%d"
-
-@@ -1419,7 +1385,6 @@
-
- #: cif-code.def:43
- #, fuzzy
--#| msgid "%qE is not initialized"
- msgid "caller is not optimized"
- msgstr "%qE未ç»åˆå§‹åŒ–"
-
-@@ -1437,7 +1402,6 @@
-
- #: cif-code.def:60
- #, fuzzy
--#| msgid "function body can be overwriten at linktime"
- msgid "function body can be overwritten at link time"
- msgstr "函数体å¯èƒ½åœ¨é“¾æŽ¥æ—¶è¢«æ”¹å†™"
-
-@@ -1499,7 +1463,6 @@
-
- #: cif-code.def:113
- #, fuzzy
--#| msgid "Enable exception handling"
- msgid "non-call exception handling mismatch"
- msgstr "å¯ç”¨å¼‚常处ç†"
-
-@@ -1602,7 +1565,6 @@
-
- #: params.def:117
- #, fuzzy
--#| msgid "Probability that COMDAT function will be shared with different compilatoin unit"
- msgid "Probability that COMDAT function will be shared with different compilation unit"
- msgstr "与其他编译å•å…ƒå…±äº« COMDAT 函数的概率"
-
-@@ -1632,7 +1594,6 @@
-
- #: params.def:175
- #, fuzzy
--#| msgid "The maximum number of instructions to consider to unroll in a loop"
- msgid "The maximum number of backtrack attempts the scheduler should make when modulo scheduling a loop"
- msgstr "å•ä¸ªå¾ªçŽ¯ä¸­è€ƒè™‘展开的最大指令数"
-
-@@ -1719,7 +1680,6 @@
-
- #: params.def:300
- #, fuzzy
--#| msgid "The maximum number of iterations through CFG to extend regions"
- msgid "The maximum number of branches on the path through the peeled sequence"
- msgstr "通过 CFG 以扩展区域的最大循环次数"
-
-@@ -2152,7 +2112,6 @@
-
- #: params.def:980
- #, fuzzy
--#| msgid "Maximum number of times that an insn could be scheduled"
- msgid "Maximum number of conditional store pairs that can be sunk"
- msgstr "指定一æ¡æŒ‡ä»¤æœ€å¤šèƒ½è¢«è°ƒåº¦å‡ æ¬¡"
-
-@@ -2170,13 +2129,11 @@
-
- #: params.def:1006
- #, fuzzy
--#| msgid "Allow branches to be packed with other instructions"
- msgid "Allow new data races on packed data loads to be introduced"
- msgstr "å…许跳转与其他指令打包在一起"
-
- #: params.def:1011
- #, fuzzy
--#| msgid "Allow branches to be packed with other instructions"
- msgid "Allow new data races on packed data stores to be introduced"
- msgstr "å…许跳转与其他指令打包在一起"
-
-@@ -2206,31 +2163,26 @@
-
- #: params.def:1054
- #, fuzzy
--#| msgid "Enable stack probing"
- msgid "Enable asan stack protection"
- msgstr "å¯ç”¨å †æ ˆæŽ¢æµ‹"
-
- #: params.def:1059
- #, fuzzy
--#| msgid "Enable all optional instructions"
- msgid "Enable asan globals protection"
- msgstr "å¯ç”¨æ‰€æœ‰å¯é€‰æŒ‡ä»¤"
-
- #: params.def:1064
- #, fuzzy
--#| msgid "Enable saturation instructions"
- msgid "Enable asan store operations protection"
- msgstr "å¯ç”¨é¥±å’ŒæŒ‡ä»¤"
-
- #: params.def:1069
- #, fuzzy
--#| msgid "Enable all optional instructions"
- msgid "Enable asan load operations protection"
- msgstr "å¯ç”¨æ‰€æœ‰å¯é€‰æŒ‡ä»¤"
-
- #: params.def:1074 params.def:1079
- #, fuzzy
--#| msgid "Enable saturation instructions"
- msgid "Enable asan builtin functions protection"
- msgstr "å¯ç”¨é¥±å’ŒæŒ‡ä»¤"
-
-@@ -2510,7 +2462,6 @@
- #: config/aarch64/aarch64.c:3487 config/arm/arm.c:21114 config/arm/arm.c:21127
- #: config/nios2/nios2.c:1885
- #, fuzzy, c-format
--#| msgid "invalid operand for code '%c'"
- msgid "Unsupported operand for code '%c'"
- msgstr "代ç â€˜%c’的æ“作数无效"
-
-@@ -2519,7 +2470,6 @@
- #: config/aarch64/aarch64.c:3551 config/aarch64/aarch64.c:3567
- #: config/aarch64/aarch64.c:3586 config/aarch64/aarch64.c:3625
- #, fuzzy, c-format
--#| msgid "invalid operand for code '%c'"
- msgid "invalid operand for '%%%c'"
- msgstr "代ç â€˜%c’的æ“作数无效"
-
-@@ -2535,19 +2485,16 @@
-
- #: config/aarch64/aarch64.c:3724
- #, fuzzy, c-format
--#| msgid "invalid insn:"
- msgid "invalid constant"
- msgstr "无效指令:"
-
- #: config/aarch64/aarch64.c:3727
- #, fuzzy, c-format
--#| msgid "invalid %%d operand"
- msgid "invalid operand"
- msgstr "无效的 %%d æ“作数"
-
- #: config/aarch64/aarch64.c:3815
- #, fuzzy, c-format
--#| msgid "invalid operand code '%c'"
- msgid "invalid operand prefix '%%%c'"
- msgstr "无效的æ“作数代ç â€˜%c’"
-
-@@ -2637,19 +2584,16 @@
-
- #: config/arc/arc.c:2782
- #, fuzzy, c-format
--#| msgid "invalid operand to %%R code"
- msgid "invalid operand to %%Z code"
- msgstr "%%R 代ç çš„æ“作数无效"
-
- #: config/arc/arc.c:2790
- #, fuzzy, c-format
--#| msgid "invalid operand to %%R code"
- msgid "invalid operand to %%z code"
- msgstr "%%R 代ç çš„æ“作数无效"
-
- #: config/arc/arc.c:2798
- #, fuzzy, c-format
--#| msgid "invalid operand to %%R code"
- msgid "invalid operand to %%M code"
- msgstr "%%R 代ç çš„æ“作数无效"
-
-@@ -2675,7 +2619,6 @@
-
- #: config/arc/arc.c:3099
- #, fuzzy, c-format
--#| msgid "invalid operand to %%R code"
- msgid "invalid operand to %%O code"
- msgstr "%%R 代ç çš„æ“作数无效"
-
-@@ -2689,7 +2632,6 @@
-
- #: config/arc/arc.c:4676
- #, fuzzy, c-format
--#| msgid "invalid UNSPEC as operand"
- msgid "invalid UNSPEC as operand: %d"
- msgstr "无效的 UNSPEC 用作æ“作数"
-
-@@ -2749,19 +2691,16 @@
-
- #: config/avr/avr.c:2140
- #, fuzzy
--#| msgid "output operand %d must use %<&%> constraint"
- msgid "operands to %T/%t must be reg + const_int:"
- msgstr "输出æ“作数 %d 必须使用%<&%>约æŸ"
-
- #: config/avr/avr.c:2180 config/avr/avr.c:2235
- #, fuzzy
--#| msgid "bad address, not (reg+disp):"
- msgid "bad address, not an I/O address:"
- msgstr "地å€é”™è¯¯ï¼Œä¸æ˜¯(reg+disp):"
-
- #: config/avr/avr.c:2189
- #, fuzzy
--#| msgid "bad address, not a constant):"
- msgid "bad address, not a constant:"
- msgstr "错误的地å€ï¼Œä¸æ˜¯ä¸€ä¸ªå¸¸é‡):"
-
-@@ -2813,7 +2752,6 @@
-
- #: config/avr/avr.c:7100
- #, fuzzy
--#| msgid "invalid types in fixed-point conversion"
- msgid "unsupported fixed-point conversion"
- msgstr "整点转æ¢ä¸­ç±»åž‹æ— æ•ˆ"
-
-@@ -3058,25 +2996,21 @@
-
- #: config/i386/i386.c:14839
- #, fuzzy, c-format
--#| msgid "invalid operand size for operand code '%c'"
- msgid "invalid operand size for operand code 'O'"
- msgstr "æ“作数代ç â€˜%c’的æ“作数大å°æ— æ•ˆ"
-
- #: config/i386/i386.c:14874
- #, fuzzy, c-format
--#| msgid "invalid operand size for operand code '%c'"
- msgid "invalid operand size for operand code 'z'"
- msgstr "æ“作数代ç â€˜%c’的æ“作数大å°æ— æ•ˆ"
-
- #: config/i386/i386.c:14944
- #, fuzzy, c-format
--#| msgid "invalid operand type used with operand code '%c'"
- msgid "invalid operand type used with operand code 'Z'"
- msgstr "æ“作数代ç â€˜%c’的æ“作数类型无效"
-
- #: config/i386/i386.c:14949
- #, fuzzy, c-format
--#| msgid "invalid operand size for operand code '%c'"
- msgid "invalid operand size for operand code 'Z'"
- msgstr "æ“作数代ç â€˜%c’的æ“作数大å°æ— æ•ˆ"
-
-@@ -3092,13 +3026,11 @@
-
- #: config/i386/i386.c:15115
- #, fuzzy, c-format
--#| msgid "operand is not a condition code, invalid operand code 'D'"
- msgid "operand is not a condition code, invalid operand code '%c'"
- msgstr "æ“作数ä¸æ˜¯ä¸€ä¸ªæ¡ä»¶ç ï¼Œæ— æ•ˆçš„æ“作数代ç â€˜D’"
-
- #: config/i386/i386.c:15128
- #, fuzzy, c-format
--#| msgid "operand is not a condition code, invalid operand code 'D'"
- msgid "operand is not an offsettable memory reference, invalid operand code 'H'"
- msgstr "æ“作数ä¸æ˜¯ä¸€ä¸ªæ¡ä»¶ç ï¼Œæ— æ•ˆçš„æ“作数代ç â€˜D’"
-
-@@ -3127,7 +3059,6 @@
-
- #: config/i386/i386-interix.h:78
- #, fuzzy
--#| msgid "Use native (MS) bitfield layout"
- msgid "Use gcc default bitfield layout"
- msgstr "使用本地 (MS) ä½æ®µå­˜å‚¨æ–¹å¼"
-
-@@ -3343,7 +3274,6 @@
-
- #: config/msp430/msp430.c:2130
- #, fuzzy, c-format
--#| msgid "invalid reference prefix"
- msgid "invalid operand prefix"
- msgstr "无效的引用å‰ç¼€"
-
-@@ -3404,7 +3334,6 @@
-
- #: config/rs6000/rs6000.c:3363
- #, fuzzy
--#| msgid "--resource requires -o"
- msgid "-mquad-memory requires 64-bit mode"
- msgstr "--resource éœ€è¦ -o"
-
-@@ -3414,7 +3343,6 @@
-
- #: config/rs6000/rs6000.c:3378
- #, fuzzy
--#| msgid "Generate code in little endian mode"
- msgid "-mquad-memory is not available in little endian mode"
- msgstr "生æˆå°ç«¯åœ¨å‰çš„代ç "
-
-@@ -3503,13 +3431,11 @@
-
- #: config/rs6000/rs6000.c:32382
- #, fuzzy
--#| msgid "Do not generate a single exit point for each function"
- msgid "Could not generate addis value for fusion"
- msgstr "ä¸ä¸ºæ¯ä¸ªå‡½æ•°ç”Ÿæˆå•ä¸€çš„退出点"
-
- #: config/rs6000/rs6000.c:32441
- #, fuzzy
--#| msgid "unable to generate reloads for:"
- msgid "Unable to generate load offset for fusion"
- msgstr "无法生æˆé‡æ–°è½½å…¥ï¼Œä¸ºï¼š"
-
-@@ -3638,13 +3564,11 @@
- #: config/sparc/sparc.c:8830 config/tilegx/tilegx.c:5061
- #: config/tilepro/tilepro.c:4516
- #, fuzzy, c-format
--#| msgid "invalid %%P operand"
- msgid "invalid %%C operand"
- msgstr "无效的 %%P æ“作数"
-
- #: config/sparc/sparc.c:8847 config/tilegx/tilegx.c:5094
- #, fuzzy, c-format
--#| msgid "invalid %%P operand"
- msgid "invalid %%D operand"
- msgstr "无效的 %%P æ“作数"
-
-@@ -3700,49 +3624,41 @@
-
- #: config/tilegx/tilegx.c:5174
- #, fuzzy, c-format
--#| msgid "invalid %%L code"
- msgid "invalid %%H specifier"
- msgstr "无效 %%L 代ç "
-
- #: config/tilegx/tilegx.c:5216 config/tilepro/tilepro.c:4530
- #, fuzzy, c-format
--#| msgid "invalid %%P operand"
- msgid "invalid %%h operand"
- msgstr "无效的 %%P æ“作数"
-
- #: config/tilegx/tilegx.c:5228 config/tilepro/tilepro.c:4594
- #, fuzzy, c-format
--#| msgid "invalid %%P operand"
- msgid "invalid %%I operand"
- msgstr "无效的 %%P æ“作数"
-
- #: config/tilegx/tilegx.c:5242 config/tilepro/tilepro.c:4608
- #, fuzzy, c-format
--#| msgid "invalid %%P operand"
- msgid "invalid %%i operand"
- msgstr "无效的 %%P æ“作数"
-
- #: config/tilegx/tilegx.c:5265 config/tilepro/tilepro.c:4631
- #, fuzzy, c-format
--#| msgid "invalid %%P operand"
- msgid "invalid %%j operand"
- msgstr "无效的 %%P æ“作数"
-
- #: config/tilegx/tilegx.c:5296
- #, fuzzy, c-format
--#| msgid "invalid %%c operand"
- msgid "invalid %%%c operand"
- msgstr "无效的 %%c æ“作数"
-
- #: config/tilegx/tilegx.c:5311 config/tilepro/tilepro.c:4745
- #, fuzzy, c-format
--#| msgid "invalid %%P operand"
- msgid "invalid %%N operand"
- msgstr "无效的 %%P æ“作数"
-
- #: config/tilegx/tilegx.c:5355
- #, fuzzy, c-format
--#| msgid "invalid operand for 'b' modifier"
- msgid "invalid operand for 'r' specifier"
- msgstr "‘b’修饰符的æ“作数无效"
-
-@@ -3753,37 +3669,31 @@
-
- #: config/tilepro/tilepro.c:4566
- #, fuzzy, c-format
--#| msgid "invalid %%P operand"
- msgid "invalid %%H operand"
- msgstr "无效的 %%P æ“作数"
-
- #: config/tilepro/tilepro.c:4670
- #, fuzzy, c-format
--#| msgid "invalid %%P operand"
- msgid "invalid %%L operand"
- msgstr "无效的 %%P æ“作数"
-
- #: config/tilepro/tilepro.c:4730
- #, fuzzy, c-format
--#| msgid "invalid %%P operand"
- msgid "invalid %%M operand"
- msgstr "无效的 %%P æ“作数"
-
- #: config/tilepro/tilepro.c:4773
- #, fuzzy, c-format
--#| msgid "invalid %%P operand"
- msgid "invalid %%t operand"
- msgstr "无效的 %%P æ“作数"
-
- #: config/tilepro/tilepro.c:4780
- #, fuzzy, c-format
--#| msgid "invalid %%P operand"
- msgid "invalid %%t operand '"
- msgstr "无效的 %%P æ“作数"
-
- #: config/tilepro/tilepro.c:4801
- #, fuzzy, c-format
--#| msgid "invalid %%P operand"
- msgid "invalid %%r operand"
- msgstr "无效的 %%P æ“作数"
-
-@@ -4057,13 +3967,11 @@
-
- #: cp/error.c:1060
- #, fuzzy
--#| msgid "(anonymous)"
- msgid "(anonymous namespace)"
- msgstr "(匿å)"
-
- #: cp/error.c:1169
- #, fuzzy
--#| msgid "<template parameter error>"
- msgid "<template arguments error>"
- msgstr "<模æ¿å‚数数错误>"
-
-@@ -4104,7 +4012,6 @@
-
- #: cp/error.c:2616
- #, fuzzy
--#| msgid "<lambda"
- msgid "<lambda>"
- msgstr "<lambda"
-
-@@ -4150,13 +4057,11 @@
-
- #: cp/error.c:3196
- #, fuzzy, c-format
--#| msgid "%s: In instantiation of %qs:\n"
- msgid "%s: In substitution of %qS:\n"
- msgstr "%s:在%qs的实例化中:\n"
-
- #: cp/error.c:3197
- #, fuzzy
--#| msgid "%s: In instantiation of %qs:\n"
- msgid "%s: In instantiation of %q#D:\n"
- msgstr "%s:在%qs的实例化中:\n"
-
-@@ -4185,7 +4090,6 @@
-
- #: cp/error.c:3240
- #, fuzzy
--#| msgid "provided for %q+D"
- msgid "required from %q#D\n"
- msgstr "æ供给%q+D"
-
-@@ -4196,31 +4100,26 @@
-
- #: cp/error.c:3248
- #, fuzzy
--#| msgid "called from here"
- msgid "required from here"
- msgstr "从此处调用"
-
- #: cp/error.c:3300
- #, fuzzy
--#| msgid "%s:%d:%d: [ skipping %d instantiation contexts ]\n"
- msgid "%r%s:%d:%d:%R [ skipping %d instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]\n"
- msgstr "%s:%d:%d:[ 跳过 %d 个实例化上下文 ]\n"
-
- #: cp/error.c:3306
- #, fuzzy
--#| msgid "%s:%d:%d: [ skipping %d instantiation contexts ]\n"
- msgid "%r%s:%d:%R [ skipping %d instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]\n"
- msgstr "%s:%d:%d:[ 跳过 %d 个实例化上下文 ]\n"
-
- #: cp/error.c:3371
- #, fuzzy
--#| msgid "%s:%d:%d: in constexpr expansion of %qs"
- msgid "%r%s:%d:%d:%R in constexpr expansion of %qs"
- msgstr "%s:%d:%d:在%qs的广义常表达å¼æ‰©å±•ä¸­"
-
- #: cp/error.c:3375
- #, fuzzy
--#| msgid "%s:%d: in constexpr expansion of %qs"
- msgid "%r%s:%d:%R in constexpr expansion of %qs"
- msgstr "%s:%d:在%qs的广义常表达å¼æ‰©å±•ä¸­"
-
-@@ -4390,13 +4289,11 @@
-
- #: fortran/error.c:899
- #, fuzzy
--#| msgid "Obsolescent feature: Computed GOTO at %C"
- msgid "Obsolescent feature:"
- msgstr "已过时的特性:%C处的计算转移 GOTO 语å¥"
-
- #: fortran/error.c:902
- #, fuzzy
--#| msgid "expected operator"
- msgid "Deleted feature:"
- msgstr "需è¦æ“作符"
-
-@@ -4647,61 +4544,51 @@
-
- #: fortran/resolve.c:2225
- #, fuzzy
--#| msgid "no arguments"
- msgid "allocatable argument"
- msgstr "没有å‚æ•°"
-
- #: fortran/resolve.c:2230
- #, fuzzy
--#| msgid "not enough arguments"
- msgid "asynchronous argument"
- msgstr "实å‚太少"
-
- #: fortran/resolve.c:2235
- #, fuzzy
--#| msgid "invalid PHI argument"
- msgid "optional argument"
- msgstr "无效的 PHI 实å‚"
-
- #: fortran/resolve.c:2240
- #, fuzzy
--#| msgid "pointer assignment"
- msgid "pointer argument"
- msgstr "指针赋值"
-
- #: fortran/resolve.c:2245
- #, fuzzy
--#| msgid "no arguments"
- msgid "target argument"
- msgstr "没有å‚æ•°"
-
- #: fortran/resolve.c:2250
- #, fuzzy
--#| msgid "invalid PHI argument"
- msgid "value argument"
- msgstr "无效的 PHI 实å‚"
-
- #: fortran/resolve.c:2255
- #, fuzzy
--#| msgid "no arguments"
- msgid "volatile argument"
- msgstr "没有å‚æ•°"
-
- #: fortran/resolve.c:2260
- #, fuzzy
--#| msgid "mismatched arguments"
- msgid "assumed-shape argument"
- msgstr "å‚æ•°ä¸åŒ¹é…"
-
- #: fortran/resolve.c:2265
- #, fuzzy
--#| msgid "mismatched arguments"
- msgid "assumed-rank argument"
- msgstr "å‚æ•°ä¸åŒ¹é…"
-
- #: fortran/resolve.c:2270
- #, fuzzy
--#| msgid "array assignment"
- msgid "coarray argument"
- msgstr "数组赋值"
-
-@@ -4711,7 +4598,6 @@
-
- #: fortran/resolve.c:2280
- #, fuzzy
--#| msgid "no arguments"
- msgid "polymorphic argument"
- msgstr "没有å‚æ•°"
-
-@@ -4723,7 +4609,6 @@
- #. See also TS 29113, Note 6.1.
- #: fortran/resolve.c:2292
- #, fuzzy
--#| msgid "mismatched arguments"
- msgid "assumed-type argument"
- msgstr "å‚æ•°ä¸åŒ¹é…"
-
-@@ -4738,13 +4623,11 @@
-
- #: fortran/resolve.c:2315
- #, fuzzy
--#| msgid "'%s' at %L must have constant character length in this context"
- msgid "result with non-constant character length"
- msgstr "å˜é‡â€˜%s’在%L处上下文中字符长度必须为常é‡"
-
- #: fortran/resolve.c:2327
- #, fuzzy
--#| msgid "module procedure"
- msgid "bind(c) procedure"
- msgstr "模å—过程"
-
-@@ -4894,7 +4777,6 @@
-
- #: fortran/trans-intrinsic.c:6165
- #, fuzzy, c-format
--#| msgid "Argument NCOPIES of REPEAT intrinsic is negative (its value is %lld)"
- msgid "Argument NCOPIES of REPEAT intrinsic is negative (its value is %ld)"
- msgstr "内建函数 REPEAT çš„ NCOPIES å‚数为负(其值是 %lld)"
-
-@@ -4964,7 +4846,6 @@
-
- #: go/go-backend.c:171
- #, fuzzy
--#| msgid "Memory allocation failed"
- msgid "memory allocation failed while reading export data"
- msgstr "内存分é…失败"
-
-@@ -5230,13 +5111,11 @@
-
- #: ada/gcc-interface/lang-specs.h:52
- #, fuzzy
--#| msgid "-c or -S required for Ada"
- msgid "-c required for gnat2why"
- msgstr "Ada 需è¦æŒ‡å®š -c 或 -S"
-
- #: ada/gcc-interface/lang-specs.h:65
- #, fuzzy
--#| msgid "-c or -S required for Ada"
- msgid "-c required for gnat2scil"
- msgstr "Ada 需è¦æŒ‡å®š -c 或 -S"
-
-@@ -5266,7 +5145,6 @@
-
- #: config/avr/avr.h:526
- #, fuzzy
--#| msgid "-fpic is not supported"
- msgid "shared is not supported"
- msgstr "ä¸æ”¯æŒ -fpic"
-
-@@ -5284,7 +5162,6 @@
-
- #: config/rx/rx.h:76
- #, fuzzy
--#| msgid "rx200 cpu does not have FPU hardware"
- msgid "rx100 cpu does not have FPU hardware"
- msgstr "RX200 CPU 没有 FPU 硬件"
-
-@@ -5306,7 +5183,6 @@
-
- #: config/rs6000/freebsd64.h:161 config/rs6000/freebsd64.h:173
- #, fuzzy
--#| msgid "consider using `-pg' instead of `-p' with gprof(1) "
- msgid "consider using `-pg' instead of `-p' with gprof(1)"
- msgstr "与 gprof(1) 一起使用时请考虑使用‘-pg’以代替‘-p’"
-
-@@ -5321,7 +5197,6 @@
-
- #: gcc.c:731
- #, fuzzy
--#| msgid "-fdirectives-only is incompatible with -traditional"
- msgid "-fsanitize=address is incompatible with -fsanitize=thread"
- msgstr "-fdirectives-only 与 -traditional ä¸å…¼å®¹"
-
-@@ -5339,7 +5214,6 @@
-
- #: config/arm/arm.h:217
- #, fuzzy
--#| msgid "-msoft-float and -mhard_float may not be used together"
- msgid "-mfloat-abi=soft and -mfloat-abi=hard may not be used together"
- msgstr "-msoft-float å’Œ -mhard_float ä¸èƒ½ä¸€èµ·ä½¿ç”¨"
-
-@@ -5410,7 +5284,6 @@
-
- #: fortran/lang.opt:242
- #, fuzzy
--#| msgid "Warn about implicit function declarations"
- msgid "Warn about function call elimination"
- msgstr "对éšå¼å‡½æ•°å£°æ˜Žç»™å‡ºè­¦å‘Š"
-
-@@ -5436,13 +5309,11 @@
-
- #: fortran/lang.opt:270
- #, fuzzy
--#| msgid "Warn when a register variable is declared volatile"
- msgid "Warn when a left-hand-side array variable is reallocated"
- msgstr "当一个寄存器å˜é‡è¢«å£°æ˜Žä¸º volatile 时给出警告"
-
- #: fortran/lang.opt:274
- #, fuzzy
--#| msgid "Warn when a register variable is declared volatile"
- msgid "Warn when a left-hand-side variable is reallocated"
- msgstr "当一个寄存器å˜é‡è¢«å£°æ˜Žä¸º volatile 时给出警告"
-
-@@ -5473,7 +5344,6 @@
-
- #: fortran/lang.opt:306
- #, fuzzy
--#| msgid "Warn about zero-length formats"
- msgid "Warn about zero-trip DO loops"
- msgstr "对长度为 0 çš„æ ¼å¼å­—符串给出警告"
-
-@@ -5616,7 +5486,6 @@
-
- #: fortran/lang.opt:458
- #, fuzzy
--#| msgid "-ffpe-trap=[...]\tStop on following floating point exceptions"
- msgid "-ffpe-summary=[...]\tPrint summary of floating point exceptions"
- msgstr "-ffpe-trap=[...]\t在以下浮点异常的情况下åœæ­¢"
-
-@@ -5634,7 +5503,6 @@
-
- #: fortran/lang.opt:474
- #, fuzzy
--#| msgid "Enable linker optimizations"
- msgid "Enable front end optimization"
- msgstr "å¯ç”¨é“¾æŽ¥å™¨ä¼˜åŒ–"
-
-@@ -5784,7 +5652,6 @@
-
- #: fortran/lang.opt:670
- #, fuzzy
--#| msgid "Conform to the ISO Fortran 2008 standard"
- msgid "Conform to the ISO Fortran 2008 standard including TS 29113"
- msgstr "éµå¾ª ISO Fortran 2008 标准"
-
-@@ -5937,13 +5804,11 @@
-
- #: c-family/c.opt:296
- #, fuzzy
--#| msgid "Deprecated in favor of -std=c99"
- msgid "Deprecated in favor of -Wc++11-compat"
- msgstr "ä¸å»ºè®®ä½¿ç”¨ï¼Œè¯·æ”¹ç”¨ -std=c99"
-
- #: c-family/c.opt:300
- #, fuzzy
--#| msgid "Warn about C++ constructs whose meaning differs between ISO C++ 1998 and ISO C++ 200x"
- msgid "Warn about C++ constructs whose meaning differs between ISO C++ 1998 and ISO C++ 2011"
- msgstr "当 C++ 构造的æ„义在 ISO C++ 1998 å’Œ ISO C++ 200x 中ä¸åŒæ—¶ç»™å‡ºè­¦å‘Š"
-
-@@ -5989,13 +5854,11 @@
-
- #: c-family/c.opt:344
- #, fuzzy
--#| msgid "dereferencing pointer to incomplete type"
- msgid "Warn when deleting a pointer to incomplete type"
- msgstr "æ领指å‘ä¸å®Œå…¨ç±»åž‹çš„指针"
-
- #: c-family/c.opt:348
- #, fuzzy
--#| msgid "Warn about non-virtual destructors"
- msgid "Warn about deleting polymorphic objects with non-virtual destructors"
- msgstr "当æžæž„函数ä¸æ˜¯è™šå‡½æ•°æ—¶ç»™å‡ºè­¦å‘Š"
-
-@@ -6029,7 +5892,6 @@
-
- #: c-family/c.opt:392
- #, fuzzy
--#| msgid "Warn for implicit type conversions that may change a value"
- msgid "Warn for implicit type conversions that cause loss of floating point precision"
- msgstr "当éšå¼ç±»åž‹è½¬æ¢å¯èƒ½æ”¹å˜å€¼æ—¶ç»™å‡ºè­¦å‘Š"
-
-@@ -6286,7 +6148,6 @@
-
- #: c-family/c.opt:673
- #, fuzzy
--#| msgid "returning reference to temporary"
- msgid "Warn about returning a pointer/reference to a local or temporary variable."
- msgstr "返回临时å˜é‡çš„引用"
-
-@@ -6364,7 +6225,6 @@
-
- #: c-family/c.opt:777
- #, fuzzy
--#| msgid "Warn about macros defined in the main file that are not used"
- msgid "Warn when typedefs locally defined in a function are not used"
- msgstr "当定义在主文件中的å®æœªè¢«ä½¿ç”¨æ—¶ç»™å‡ºè­¦å‘Š"
-
-@@ -6378,7 +6238,6 @@
-
- #: c-family/c.opt:789
- #, fuzzy
--#| msgid "Do not warn about using variadic macros when -pedantic"
- msgid "Warn about using variadic macros"
- msgstr "指定 -pedantic æ—¶ä¸ä¸ºå¯å˜å‚æ•°å®ç»™å‡ºè­¦å‘Š"
-
-@@ -6404,13 +6263,11 @@
-
- #: c-family/c.opt:813
- #, fuzzy
--#| msgid "Warn when a label is unused"
- msgid "Warn when a literal '0' is used as null pointer"
- msgstr "有未使用的标å·æ—¶è­¦å‘Š"
-
- #: c-family/c.opt:817
- #, fuzzy
--#| msgid "Warn about misuses of pragmas"
- msgid "Warn about useless casts"
- msgstr "对错误使用的 pragma 加以警告"
-
-@@ -6467,25 +6324,21 @@
-
- #: c-family/c.opt:883
- #, fuzzy
--#| msgid "-ftemplate-depth=<number>\tSpecify maximum template instantiation depth"
- msgid "-fconstexpr-depth=<number>\tSpecify maximum constexpr recursion depth"
- msgstr "-ftemplate-depth=<N>\t指定模æ¿å®žä¾‹åŒ–的最大深度"
-
- #: c-family/c.opt:887
- #, fuzzy
--#| msgid "Enable traditional preprocessing"
- msgid "Emit debug annotations during preprocessing"
- msgstr "å¯ç”¨ä¼ ç»Ÿé¢„处ç†"
-
- #: c-family/c.opt:891
- #, fuzzy
--#| msgid "-fno-deduce-init-list\tdisable deduction of std::initializer_list for a template type parameter from a brace-enclosed initializer-list"
- msgid "-fdeduce-init-list\tenable deduction of std::initializer_list for a template type parameter from a brace-enclosed initializer-list"
- msgstr "-fno-deduce-init-list\tç¦ç”¨ä¸ºæ¨¡æ¿ç±»åž‹å‚数从花括å·ä¸­çš„åˆå§‹å€¼è®¾å®šåˆ—表演绎 std::initializer_list"
-
- #: c-family/c.opt:895
- #, fuzzy
--#| msgid "Warn when all constructors and destructors are private"
- msgid "Factor complex constructors and destructors to favor space over speed"
- msgstr "当所有构造函数和æžæž„函数都是ç§æœ‰æ—¶ç»™å‡ºè­¦å‘Š"
-
-@@ -6632,7 +6485,6 @@
-
- #: c-family/c.opt:1090
- #, fuzzy
--#| msgid "Unclassifiable OpenMP directive at %C"
- msgid "Enable OpenMP's SIMD directives"
- msgstr "%C处的 OpenMP 指示无法分类"
-
-@@ -6710,7 +6562,6 @@
-
- #: c-family/c.opt:1183
- #, fuzzy
--#| msgid "The maximum number of peelings of a single loop"
- msgid "Set the maximum number of template instantiation notes for a single warning or error"
- msgstr "å•ä¸ªå¾ªçŽ¯æœ€å¤§çš„剥离数"
-
-@@ -6740,7 +6591,6 @@
-
- #: c-family/c.opt:1217
- #, fuzzy
--#| msgid "Marks all inlined methods as having hidden visibility"
- msgid "Marks all inlined functions and methods as having hidden visibility"
- msgstr "将所有内è”函数标记为具有éšè—çš„å¯è§æ€§"
-
-@@ -6842,37 +6692,31 @@
-
- #: c-family/c.opt:1344 c-family/c.opt:1348
- #, fuzzy
--#| msgid "Conform to the ISO 1998 C++ standard with GNU extensions"
- msgid "Conform to the ISO 1998 C++ standard revised by the 2003 technical corrigendum"
- msgstr "éµå¾ª ISO 1998 C++ æ ‡å‡†ï¼Œä¹Ÿæ”¯æŒ GNU 扩展"
-
- #: c-family/c.opt:1352
- #, fuzzy
--#| msgid "Conform to the ISO 201X C standard draft (experimental and incomplete support)"
- msgid "Conform to the ISO 2011 C++ standard (experimental and incomplete support)"
- msgstr "éµå¾ª ISO 201X C 标准è‰æ¡ˆ(试验性质的ä¸å®Œå…¨æ”¯æŒ)"
-
- #: c-family/c.opt:1356
- #, fuzzy
--#| msgid "Deprecated in favor of -std=c99"
- msgid "Deprecated in favor of -std=c++11"
- msgstr "ä¸å»ºè®®ä½¿ç”¨ï¼Œè¯·æ”¹ç”¨ -std=c99"
-
- #: c-family/c.opt:1360
- #, fuzzy
--#| msgid "Conform to the ISO 201X C standard draft (experimental and incomplete support)"
- msgid "Conform to the ISO 201y(7?) C++ draft standard (experimental and incomplete support)"
- msgstr "éµå¾ª ISO 201X C 标准è‰æ¡ˆ(试验性质的ä¸å®Œå…¨æ”¯æŒ)"
-
- #: c-family/c.opt:1364 c-family/c.opt:1450
- #, fuzzy
--#| msgid "Conform to the ISO 201X C standard draft (experimental and incomplete support)"
- msgid "Conform to the ISO 2011 C standard (experimental and incomplete support)"
- msgstr "éµå¾ª ISO 201X C 标准è‰æ¡ˆ(试验性质的ä¸å®Œå…¨æ”¯æŒ)"
-
- #: c-family/c.opt:1368
- #, fuzzy
--#| msgid "Deprecated in favor of -std=c99"
- msgid "Deprecated in favor of -std=c11"
- msgstr "ä¸å»ºè®®ä½¿ç”¨ï¼Œè¯·æ”¹ç”¨ -std=c99"
-
-@@ -6890,37 +6734,31 @@
-
- #: c-family/c.opt:1388 c-family/c.opt:1393
- #, fuzzy
--#| msgid "Conform to the ISO 1998 C++ standard with GNU extensions"
- msgid "Conform to the ISO 1998 C++ standard revised by the 2003 technical"
- msgstr "éµå¾ª ISO 1998 C++ æ ‡å‡†ï¼Œä¹Ÿæ”¯æŒ GNU 扩展"
-
- #: c-family/c.opt:1398
- #, fuzzy
--#| msgid "Conform to the ISO 201X C standard draft with GNU extensions (experimental and incomplete support)"
- msgid "Conform to the ISO 2011 C++ standard with GNU extensions (experimental and incomplete support)"
- msgstr "éµå¾ª ISO 201X C 标准è‰æ¡ˆå’Œ GNU 扩展(试验性质的ä¸å®Œå…¨æ”¯æŒ)"
-
- #: c-family/c.opt:1402
- #, fuzzy
--#| msgid "Deprecated in favor of -std=gnu99"
- msgid "Deprecated in favor of -std=gnu++11"
- msgstr "ä¸å»ºè®®ä½¿ç”¨ï¼Œè¯·æ”¹ç”¨ -std=gnu99"
-
- #: c-family/c.opt:1406
- #, fuzzy
--#| msgid "Conform to the ISO 201X C standard draft with GNU extensions (experimental and incomplete support)"
- msgid "Conform to the ISO 201y(7?) C++ draft standard with GNU extensions (experimental and incomplete support)"
- msgstr "éµå¾ª ISO 201X C 标准è‰æ¡ˆå’Œ GNU 扩展(试验性质的ä¸å®Œå…¨æ”¯æŒ)"
-
- #: c-family/c.opt:1410
- #, fuzzy
--#| msgid "Conform to the ISO 201X C standard draft with GNU extensions (experimental and incomplete support)"
- msgid "Conform to the ISO 2011 C standard with GNU extensions (experimental and incomplete support)"
- msgstr "éµå¾ª ISO 201X C 标准è‰æ¡ˆå’Œ GNU 扩展(试验性质的ä¸å®Œå…¨æ”¯æŒ)"
-
- #: c-family/c.opt:1414
- #, fuzzy
--#| msgid "Deprecated in favor of -std=gnu99"
- msgid "Deprecated in favor of -std=gnu11"
- msgstr "ä¸å»ºè®®ä½¿ç”¨ï¼Œè¯·æ”¹ç”¨ -std=gnu99"
-
-@@ -6958,7 +6796,6 @@
-
- #: ada/gcc-interface/lang.opt:61
- #, fuzzy
--#| msgid "Synonym for -Wcomment"
- msgid "Synonym of -gnatk8"
- msgstr "-Wcomment çš„åŒä¹‰è¯"
-
-@@ -6968,7 +6805,6 @@
-
- #: ada/gcc-interface/lang.opt:73
- #, fuzzy
--#| msgid "Select code model"
- msgid "Select the runtime"
- msgstr "选择代ç æ¨¡åž‹"
-
-@@ -7036,7 +6872,6 @@
-
- #: config/vms/vms.opt:42
- #, fuzzy, c-format
--#| msgid "unknown TLS model %qs"
- msgid "unknown pointer size model %qs"
- msgstr "未知的 TLS 模型%qs"
-
-@@ -7547,7 +7382,6 @@
-
- #: config/aarch64/aarch64.opt:68
- #, fuzzy
--#| msgid "Generate code which uses hardware floating point instructions"
- msgid "Generate code which uses only the general registers"
- msgstr "生æˆä½¿ç”¨ç¡¬ä»¶æµ®ç‚¹æŒ‡ä»¤çš„代ç "
-
-@@ -7558,7 +7392,6 @@
-
- #: config/aarch64/aarch64.opt:76
- #, fuzzy
--#| msgid "Select code model"
- msgid "Specify the code model"
- msgstr "选择代ç æ¨¡åž‹"
-
-@@ -7576,13 +7409,11 @@
-
- #: config/aarch64/aarch64.opt:92
- #, fuzzy
--#| msgid "-mcpu=\tUse features of and schedule code for given CPU"
- msgid "-march=ARCH\tUse features of architecture ARCH"
- msgstr "-mcpu=\t使用指定 CPU 的特性和调度代ç "
-
- #: config/aarch64/aarch64.opt:96
- #, fuzzy
--#| msgid "-mcpu=\tUse features of and schedule code for given CPU"
- msgid "-mcpu=CPU\tUse features of and optimize for CPU"
- msgstr "-mcpu=\t使用指定 CPU 的特性和调度代ç "
-
-@@ -7592,7 +7423,6 @@
-
- #: config/aarch64/aarch64.opt:104
- #, fuzzy
--#| msgid "-mabi=ABI\tGenerate code that conforms to the given ABI"
- msgid "-mabi=ABI\tGenerate code that conforms to the specified ABI"
- msgstr "-mabi=ABI\t生æˆéµå¾ªç»™å®š ABI 的代ç "
-
-@@ -7874,25 +7704,21 @@
-
- #: config/epiphany/epiphany.opt:32
- #, fuzzy
--#| msgid "Relax branches"
- msgid "Set branch cost"
- msgstr "放宽跳转"
-
- #: config/epiphany/epiphany.opt:36
- #, fuzzy
--#| msgid "Enable all optional instructions"
- msgid "enable conditional move instruction usage."
- msgstr "å¯ç”¨æ‰€æœ‰å¯é€‰æŒ‡ä»¤"
-
- #: config/epiphany/epiphany.opt:40
- #, fuzzy
--#| msgid "The number of insns executed before prefetch is completed"
- msgid "set number of nops to emit before each insn pattern"
- msgstr "预å–æ“作完æˆå‰æ‰§è¡ŒæŒ‡ä»¤çš„æ•°ç›®"
-
- #: config/epiphany/epiphany.opt:52
- #, fuzzy
--#| msgid "Use software floating point"
- msgid "Use software floating point comparisons"
- msgstr "使用软件浮点å•å…ƒ"
-
-@@ -7918,13 +7744,11 @@
-
- #: config/epiphany/epiphany.opt:76
- #, fuzzy
--#| msgid "Generate call insns as indirect calls, if necessary"
- msgid "Generate call insns as indirect calls"
- msgstr "如有必须,为调用指令生æˆé—´æŽ¥è°ƒç”¨"
-
- #: config/epiphany/epiphany.opt:80
- #, fuzzy
--#| msgid "Generate call insns as indirect calls, if necessary"
- msgid "Generate call insns as direct calls"
- msgstr "如有必须,为调用指令生æˆé—´æŽ¥è°ƒç”¨"
-
-@@ -7938,7 +7762,6 @@
-
- #: config/epiphany/epiphany.opt:112
- #, fuzzy
--#| msgid "Use structs on stronger alignment for double-word copies"
- msgid "Vectorize for double-word operations."
- msgstr "为结构使用更强的对é½ä»¥ä½¿ç”¨åŒå­—å¤åˆ¶"
-
-@@ -7948,7 +7771,6 @@
-
- #: config/epiphany/epiphany.opt:132
- #, fuzzy
--#| msgid "Use hardware floating point conversion instructions"
- msgid "Use the floating point unit for integer add/subtract."
- msgstr "使用浮点转æ¢æŒ‡ä»¤"
-
-@@ -8184,7 +8006,6 @@
-
- #: config/i386/i386.opt:190
- #, fuzzy
--#| msgid "Use 128-bit long double"
- msgid "Use 80-bit long double"
- msgstr "使用 128 ä½ long double"
-
-@@ -8244,7 +8065,6 @@
-
- #: config/i386/i386.opt:271
- #, fuzzy
--#| msgid "Use given x86-64 code model"
- msgid "Use given address mode"
- msgstr "使用给定的 x86-64 代ç æ¨¡å¼"
-
-@@ -8291,19 +8111,16 @@
-
- #: config/i386/i386.opt:369
- #, fuzzy
--#| msgid "Set 80387 floating-point precision (-mpc32, -mpc64, -mpc80)"
- msgid "Set 80387 floating-point precision to 32-bit"
- msgstr "设定 80387 浮点精度(-mpc32ã€-mpc64ã€-mpc80)"
-
- #: config/i386/i386.opt:373
- #, fuzzy
--#| msgid "Set 80387 floating-point precision (-mpc32, -mpc64, -mpc80)"
- msgid "Set 80387 floating-point precision to 64-bit"
- msgstr "设定 80387 浮点精度(-mpc32ã€-mpc64ã€-mpc80)"
-
- #: config/i386/i386.opt:377
- #, fuzzy
--#| msgid "Set 80387 floating-point precision (-mpc32, -mpc64, -mpc80)"
- msgid "Set 80387 floating-point precision to 80-bit"
- msgstr "设定 80387 浮点精度(-mpc32ã€-mpc64ã€-mpc80)"
-
-@@ -8361,7 +8178,6 @@
-
- #: config/i386/i386.opt:433
- #, fuzzy
--#| msgid "bad value (%s) for %sstringop-strategy=%s %s"
- msgid "Valid arguments to -mstringop-strategy=:"
- msgstr "%2$sstringop-strategy=%3$s %4$s所带å‚æ•°(%1$s)ä¸æ­£ç¡®"
-
-@@ -8425,7 +8241,6 @@
-
- #: config/i386/i386.opt:543
- #, fuzzy
--#| msgid "Do dispatch scheduling if processor is bdver1 and Haifa scheduling"
- msgid "Do dispatch scheduling if processor is bdver1 or bdver2 or bdver3 or bdver4 and Haifa scheduling"
- msgstr "进行海法调度,当处ç†å™¨æ˜¯ bdver1 时也进行派é£è°ƒåº¦"
-
-@@ -8443,13 +8258,11 @@
-
- #: config/i386/i386.opt:562
- #, fuzzy
--#| msgid "Generate 64bit x86-64 code"
- msgid "Generate 32bit x86-64 code"
- msgstr "ç”Ÿæˆ 64 ä½ x86-64 代ç "
-
- #: config/i386/i386.opt:566
- #, fuzzy
--#| msgid "Generate 32bit i386 code"
- msgid "Generate 16bit i386 code"
- msgstr "ç”Ÿæˆ 32 ä½ i386 代ç "
-
-@@ -8503,31 +8316,26 @@
-
- #: config/i386/i386.opt:622
- #, fuzzy
--#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and FMA built-in functions and code generation"
- msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and AVX2 built-in functions and code generation"
- msgstr "æ”¯æŒ MMXã€SSEã€SSE2ã€SSE3ã€SSSE3ã€SSE4.1ã€SSE4.2ã€AVX å’Œ FMA 内建函数åŠä»£ç ç”Ÿæˆ"
-
- #: config/i386/i386.opt:626
- #, fuzzy
--#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and FMA built-in functions and code generation"
- msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F built-in functions and code generation"
- msgstr "æ”¯æŒ MMXã€SSEã€SSE2ã€SSE3ã€SSSE3ã€SSE4.1ã€SSE4.2ã€AVX å’Œ FMA 内建函数åŠä»£ç ç”Ÿæˆ"
-
- #: config/i386/i386.opt:630
- #, fuzzy
--#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and FMA built-in functions and code generation"
- msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512PF built-in functions and code generation"
- msgstr "æ”¯æŒ MMXã€SSEã€SSE2ã€SSE3ã€SSSE3ã€SSE4.1ã€SSE4.2ã€AVX å’Œ FMA 内建函数åŠä»£ç ç”Ÿæˆ"
-
- #: config/i386/i386.opt:634
- #, fuzzy
--#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and FMA built-in functions and code generation"
- msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512ER built-in functions and code generation"
- msgstr "æ”¯æŒ MMXã€SSEã€SSE2ã€SSE3ã€SSSE3ã€SSE4.1ã€SSE4.2ã€AVX å’Œ FMA 内建函数åŠä»£ç ç”Ÿæˆ"
-
- #: config/i386/i386.opt:638
- #, fuzzy
--#| msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX and FMA built-in functions and code generation"
- msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2 and AVX512F and AVX512CD built-in functions and code generation"
- msgstr "æ”¯æŒ MMXã€SSEã€SSE2ã€SSE3ã€SSSE3ã€SSE4.1ã€SSE4.2ã€AVX å’Œ FMA 内建函数åŠä»£ç ç”Ÿæˆ"
-
-@@ -8565,13 +8373,11 @@
-
- #: config/i386/i386.opt:674
- #, fuzzy
--#| msgid "Support BMI built-in functions and code generation"
- msgid "Support BMI2 built-in functions and code generation"
- msgstr "æ”¯æŒ BMI 内建函数åŠä»£ç ç”Ÿæˆ"
-
- #: config/i386/i386.opt:678
- #, fuzzy
--#| msgid "Support TBM built-in functions and code generation"
- msgid "Support LZCNT built-in function and code generation"
- msgstr "æ”¯æŒ TBM 内建函数åŠä»£ç ç”Ÿæˆ"
-
-@@ -8581,7 +8387,6 @@
-
- #: config/i386/i386.opt:686
- #, fuzzy
--#| msgid "Use SmartMIPS instructions"
- msgid "Support RDSEED instruction"
- msgstr "使用 SmartMIPS 指令"
-
-@@ -8591,7 +8396,6 @@
-
- #: config/i386/i386.opt:694
- #, fuzzy
--#| msgid "Support code generation of crc32 instruction."
- msgid "Support flag-preserving add-carry instructions"
- msgstr "支æŒç”Ÿæˆ crc32 指令。"
-
-@@ -8601,13 +8405,11 @@
-
- #: config/i386/i386.opt:702
- #, fuzzy
--#| msgid "Support calls between Thumb and ARM instruction sets"
- msgid "Support XSAVE and XRSTOR instructions"
- msgstr "æ”¯æŒ Thumb å’Œ ARM 指令集间互相调用g"
-
- #: config/i386/i386.opt:706
- #, fuzzy
--#| msgid "Support MMX built-in functions"
- msgid "Support XSAVEOPT instruction"
- msgstr "æ”¯æŒ MMX 内建函数"
-
-@@ -8637,7 +8439,6 @@
-
- #: config/i386/i386.opt:734
- #, fuzzy
--#| msgid "Support MMX and SSE built-in functions and code generation"
- msgid "Support SHA1 and SHA256 built-in functions and code generation"
- msgstr "æ”¯æŒ MMX å’Œ SSE 内建函数åŠä»£ç ç”Ÿæˆ"
-
-@@ -8680,13 +8481,11 @@
-
- #: config/i386/i386.opt:774
- #, fuzzy
--#| msgid "Support TBM built-in functions and code generation"
- msgid "Support RTM built-in functions and code generation"
- msgstr "æ”¯æŒ TBM 内建函数åŠä»£ç ç”Ÿæˆ"
-
- #: config/i386/i386.opt:778
- #, fuzzy
--#| msgid "Use propolice as a stack protection method"
- msgid "Use given stack-protector guard"
- msgstr "使用 propolice æ¥ä¿æŠ¤å †æ ˆ"
-
-@@ -8805,7 +8604,6 @@
-
- #: config/v850/v850.opt:41
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the callt instruction (default)"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -8871,13 +8669,11 @@
-
- #: config/v850/v850.opt:117
- #, fuzzy
--#| msgid "Compile for the v850e processor"
- msgid "Compile for the v850e3v5 processor"
- msgstr "为 v850e 处ç†å™¨ç¼–译"
-
- #: config/v850/v850.opt:124
- #, fuzzy
--#| msgid "Enable clip instructions"
- msgid "Enable v850e3v5 loop instructions"
- msgstr "å¯ç”¨ clip 指令"
-
-@@ -8887,37 +8683,31 @@
-
- #: config/v850/v850.opt:135
- #, fuzzy
--#| msgid "Enable the rank heuristic in the scheduler"
- msgid "Enable relaxing in the assembler"
- msgstr "在调度器中å¯ç”¨ç§©å¯å‘"
-
- #: config/v850/v850.opt:139
- #, fuzzy
--#| msgid "Prohibit PC relative function calls"
- msgid "Prohibit PC relative jumps"
- msgstr "ç¦æ­¢ç›¸å¯¹ PC 的函数调用"
-
- #: config/v850/v850.opt:143
- #, fuzzy
--#| msgid "Prevent the use of all hardware floating-point instructions"
- msgid "Inhibit the use of hardware floating point instructions"
- msgstr "ä¸å…许使用任何硬件浮点指令"
-
- #: config/v850/v850.opt:147
- #, fuzzy
--#| msgid "Allow the use of hardware floating-point ABI and instructions"
- msgid "Allow the use of hardware floating point instructions for V850E2V3 and up"
- msgstr "å…许使用硬件浮点 ABI 和指令"
-
- #: config/v850/v850.opt:151
- #, fuzzy
--#| msgid "Enable the use of RX FPU instructions. This is the default."
- msgid "Enable support for the RH850 ABI. This is the default"
- msgstr "å¯ç”¨ä½¿ç”¨ RX FPU 指令。这是默认值。"
-
- #: config/v850/v850.opt:155
- #, fuzzy
--#| msgid "Enable support for huge objects"
- msgid "Enable support for the old GCC ABI"
- msgstr "å¯ç”¨å¯¹å·¨åž‹å¯¹è±¡çš„支æŒ"
-
-@@ -8951,13 +8741,11 @@
-
- #: config/cr16/cr16.opt:23
- #, fuzzy
--#| msgid "-msim\tUse simulator runtime"
- msgid "-msim Use simulator runtime"
- msgstr "-msim\t使用仿真器è¿è¡Œæ—¶"
-
- #: config/cr16/cr16.opt:27
- #, fuzzy
--#| msgid "Generate bit instructions"
- msgid "Generate SBIT, CBIT instructions"
- msgstr "生æˆä½æŒ‡ä»¤"
-
-@@ -8971,19 +8759,16 @@
-
- #: config/cr16/cr16.opt:42
- #, fuzzy
--#| msgid "Generate code for a cpu32"
- msgid "Generate code for CR16C architecture"
- msgstr "为 cpu32 生æˆä»£ç "
-
- #: config/cr16/cr16.opt:46
- #, fuzzy
--#| msgid "Generate code for GNU assembler (gas)"
- msgid "Generate code for CR16C+ architecture (Default)"
- msgstr "为 GNU 汇编器(gas)生æˆä»£ç "
-
- #: config/cr16/cr16.opt:50
- #, fuzzy
--#| msgid "Pointers are 32-bit"
- msgid "Treat integers as 32-bit."
- msgstr "指针是 32 ä½"
-
-@@ -9038,7 +8823,6 @@
-
- #: config/avr/avr.opt:80
- #, fuzzy
--#| msgid "taking the address of a label is non-standard"
- msgid "Warn if the address space of an address is changed."
- msgstr "å–æ ‡å·çš„地å€ä¸ç¬¦åˆæ ‡å‡†"
-
-@@ -9157,7 +8941,6 @@
-
- #: config/s390/s390.opt:117
- #, fuzzy
--#| msgid "Use hardware floating point instructions"
- msgid "Use hardware transactional execution instructions"
- msgstr "使用硬件浮点指令"
-
-@@ -9203,7 +8986,6 @@
-
- #: config/s390/s390.opt:167 config/rs6000/rs6000.opt:470
- #, fuzzy
--#| msgid "Use ROM instead of RAM"
- msgid "Use LRA instead of reload"
- msgstr "使用 ROM 而ä¸æ˜¯ RAM"
-
-@@ -9217,7 +8999,6 @@
-
- #: config/rl78/rl78.opt:47
- #, fuzzy
--#| msgid "Specifies the number of registers to reserve for interrupt handlers."
- msgid "Use all registers, reserving none for interrupt handlers."
- msgstr "指定ä¿ç•™ç»™ä¸­æ–­å¤„ç†å‡½æ•°ä½¿ç”¨çš„寄存器的数é‡"
-
-@@ -9227,7 +9008,6 @@
-
- #: config/rl78/rl78.opt:55
- #, fuzzy
--#| msgid "Target the AM33/2.0 processor"
- msgid "Target the RL78/G10 series"
- msgstr "目标为 AM33/2.0 处ç†å™¨"
-
-@@ -9277,7 +9057,6 @@
-
- #: config/arm/arm.opt:90
- #, fuzzy
--#| msgid "Generate code for 32 bit addressing"
- msgid "Generate code in 32 bit ARM state."
- msgstr "为 32 ä½å¯»å€ç”Ÿæˆä»£ç "
-
-@@ -9303,7 +9082,6 @@
-
- #: config/arm/arm.opt:131
- #, fuzzy
--#| msgid "invalid __fp16 format option: -mfp16-format=%s"
- msgid "Known __fp16 formats (for use with the -mfp16-format= option):"
- msgstr "无效的 __fp16 浮点选项:-mfp16-format=%s"
-
-@@ -9317,7 +9095,6 @@
-
- #: config/arm/arm.opt:163
- #, fuzzy
--#| msgid "Assume arguments alias no other storage"
- msgid "Assume data segments are relative to text segment."
- msgstr "å‡å®šå®žå‚ä¸ä¸Žå…¶ä»–存储é‡å "
-
-@@ -9343,7 +9120,6 @@
-
- #: config/arm/arm.opt:190
- #, fuzzy
--#| msgid "Generate code for GNU as"
- msgid "Generate code for Thumb state"
- msgstr "为 GNU as 生æˆä»£ç "
-
-@@ -9353,7 +9129,6 @@
-
- #: config/arm/arm.opt:198
- #, fuzzy
--#| msgid "Use given thread-local storage dialect"
- msgid "Specify thread local storage scheme"
- msgstr "使用给定的线程局部存储模å¼"
-
-@@ -9380,7 +9155,6 @@
-
- #: config/arm/arm.opt:236
- #, fuzzy
--#| msgid "Assume big endian bytes, little endian words"
- msgid "Assume big endian bytes, little endian words. This option is deprecated."
- msgstr "å‡å®šé«˜ä½å­—节在å‰ï¼Œä½Žä½å­—在å‰"
-
-@@ -9390,7 +9164,6 @@
-
- #: config/arm/arm.opt:244
- #, fuzzy
--#| msgid "Use Neon quad-word (rather than double-word) registers for vectorization"
- msgid "Use Neon double-word (rather than quad-word) registers for vectorization"
- msgstr "使用 Neon 四字(而éžåŒå­—)寄存器æ¥è¿›è¡Œå‘é‡åŒ–"
-
-@@ -9436,7 +9209,6 @@
-
- #: config/sparc/sparc.opt:42
- #, fuzzy
--#| msgid "Use alternate register names"
- msgid "Use flat register window model"
- msgstr "使用å¦ä¸€å¥—寄存器å"
-
-@@ -9462,37 +9234,31 @@
-
- #: config/sparc/sparc.opt:66
- #, fuzzy
--#| msgid "Use UltraSPARC Visual Instruction Set extensions"
- msgid "Use UltraSPARC Visual Instruction Set version 1.0 extensions"
- msgstr "使用 UltraSPARC å¯è§†åŒ–指令集"
-
- #: config/sparc/sparc.opt:70
- #, fuzzy
--#| msgid "Use UltraSPARC Visual Instruction Set extensions"
- msgid "Use UltraSPARC Visual Instruction Set version 2.0 extensions"
- msgstr "使用 UltraSPARC å¯è§†åŒ–指令集"
-
- #: config/sparc/sparc.opt:74
- #, fuzzy
--#| msgid "Use UltraSPARC Visual Instruction Set extensions"
- msgid "Use UltraSPARC Visual Instruction Set version 3.0 extensions"
- msgstr "使用 UltraSPARC å¯è§†åŒ–指令集"
-
- #: config/sparc/sparc.opt:78
- #, fuzzy
--#| msgid "Use UltraSPARC Visual Instruction Set extensions"
- msgid "Use UltraSPARC Compare-and-Branch extensions"
- msgstr "使用 UltraSPARC å¯è§†åŒ–指令集"
-
- #: config/sparc/sparc.opt:82
- #, fuzzy
--#| msgid "Use UltraSPARC Visual Instruction Set extensions"
- msgid "Use UltraSPARC Fused Multiply-Add extensions"
- msgstr "使用 UltraSPARC å¯è§†åŒ–指令集"
-
- #: config/sparc/sparc.opt:86
- #, fuzzy
--#| msgid "Use hardware floating point instructions"
- msgid "Use UltraSPARC Population-Count instruction"
- msgstr "使用硬件浮点指令"
-
-@@ -9534,7 +9300,6 @@
-
- #: config/sparc/sparc.opt:196
- #, fuzzy
--#| msgid "-mdebug=\tEnable debug output"
- msgid "Enable debug output"
- msgstr "-mdebug=\tå¯ç”¨è°ƒè¯•è¾“出"
-
-@@ -9628,13 +9393,11 @@
-
- #: config/rs6000/rs6000.opt:145
- #, fuzzy
--#| msgid "Generate code in little endian mode"
- msgid "Generate Altivec instructions using little-endian element order"
- msgstr "生æˆå°ç«¯åœ¨å‰çš„代ç "
-
- #: config/rs6000/rs6000.opt:149
- #, fuzzy
--#| msgid "Generate VRSAVE instructions when generating AltiVec code"
- msgid "Generate Altivec instructions using big-endian element order"
- msgstr "ç”Ÿæˆ AltiVec 代ç æ—¶ç”Ÿæˆ VRSAVE 指令"
-
-@@ -9741,13 +9504,11 @@
-
- #: config/rs6000/rs6000.opt:322
- #, fuzzy
--#| msgid "-mvrsave=yes/no\tDeprecated option. Use -mvrsave/-mno-vrsave instead"
- msgid "Deprecated option. Use -mno-vrsave instead"
- msgstr "-mvrsave=yes/no\tä¸å»ºè®®ä½¿ç”¨çš„选项。请改用 -mvrsave/-mno-vrsave"
-
- #: config/rs6000/rs6000.opt:326
- #, fuzzy
--#| msgid "Deprecated. Use -Os instead"
- msgid "Deprecated option. Use -mvrsave instead"
- msgstr "ä¸å»ºè®®ä½¿ç”¨ã€‚请改用 -Os"
-
-@@ -9761,13 +9522,11 @@
-
- #: config/rs6000/rs6000.opt:338
- #, fuzzy
--#| msgid "-misel=yes/no\tDeprecated option. Use -misel/-mno-isel instead"
- msgid "Deprecated option. Use -mno-isel instead"
- msgstr "-misel=yes/no\tä¸å»ºè®®ä½¿ç”¨çš„选项。请改用 -misel/-mno-isel"
-
- #: config/rs6000/rs6000.opt:342
- #, fuzzy
--#| msgid "Deprecated. Use -Os instead"
- msgid "Deprecated option. Use -misel instead"
- msgstr "ä¸å»ºè®®ä½¿ç”¨ã€‚请改用 -Os"
-
-@@ -9781,13 +9540,11 @@
-
- #: config/rs6000/rs6000.opt:354
- #, fuzzy
--#| msgid "-mspe=yes/no\tDeprecated option. Use -mspe/-mno-spe instead"
- msgid "Deprecated option. Use -mno-spe instead"
- msgstr "-mspe=yes/no\tä¸å»ºè®®ä½¿ç”¨çš„选项。请改用 -mspe/-mno-spe"
-
- #: config/rs6000/rs6000.opt:358
- #, fuzzy
--#| msgid "Deprecated. Use -Os instead"
- msgid "Deprecated option. Use -mspe instead"
- msgstr "ä¸å»ºè®®ä½¿ç”¨ã€‚请改用 -Os"
-
-@@ -9797,37 +9554,31 @@
-
- #: config/rs6000/rs6000.opt:366
- #, fuzzy
--#| msgid "Use the Cray Pointer extension"
- msgid "Use the AltiVec ABI extensions"
- msgstr "使用 Cray 指针扩展"
-
- #: config/rs6000/rs6000.opt:370
- #, fuzzy
--#| msgid "Do not use the bit-field instructions"
- msgid "Do not use the AltiVec ABI extensions"
- msgstr "ä¸ä½¿ç”¨ä½æ®µæŒ‡ä»¤"
-
- #: config/rs6000/rs6000.opt:374
- #, fuzzy
--#| msgid "Use the Cray Pointer extension"
- msgid "Use the SPE ABI extensions"
- msgstr "使用 Cray 指针扩展"
-
- #: config/rs6000/rs6000.opt:378
- #, fuzzy
--#| msgid "Do not use the bit-field instructions"
- msgid "Do not use the SPE ABI extensions"
- msgstr "ä¸ä½¿ç”¨ä½æ®µæŒ‡ä»¤"
-
- #: config/rs6000/rs6000.opt:382
- #, fuzzy
--#| msgid "Use EABI"
- msgid "Use the ELFv1 ABI"
- msgstr "使用 EABI"
-
- #: config/rs6000/rs6000.opt:386
- #, fuzzy
--#| msgid "Use EABI"
- msgid "Use the ELFv2 ABI"
- msgstr "使用 EABI"
-
-@@ -9947,7 +9698,6 @@
-
- #: config/rs6000/rs6000.opt:554
- #, fuzzy
--#| msgid "Align destination of the string operations"
- msgid "Allow sign extension in fusion operations"
- msgstr "对é½å­—符串æ“作的目标"
-
-@@ -9957,7 +9707,6 @@
-
- #: config/rs6000/rs6000.opt:562
- #, fuzzy
--#| msgid "Use SmartMIPS instructions"
- msgid "Use ISA 2.07 crypto instructions"
- msgstr "使用 SmartMIPS 指令"
-
-@@ -9967,13 +9716,11 @@
-
- #: config/rs6000/rs6000.opt:570
- #, fuzzy
--#| msgid "Use vector/scalar (VSX) instructions"
- msgid "Use ISA 2.07 transactional memory (HTM) instructions"
- msgstr "使用å‘é‡/æ ‡é‡(VSX)指令"
-
- #: config/rs6000/rs6000.opt:574
- #, fuzzy
--#| msgid "Generate load/store multiple instructions"
- msgid "Generate the quad word memory instructions (lq/stq)."
- msgstr "生æˆåŠ è½½/存储乘法指令"
-
-@@ -10165,7 +9912,6 @@
-
- #: config/tilepro/tilepro.opt:28 config/tilegx/tilegx.opt:26
- #, fuzzy
--#| msgid "-mcpu=\tUse features of and schedule code for given CPU"
- msgid "-mcpu=CPU\tUse features of and schedule code for given CPU"
- msgstr "-mcpu=\t使用指定 CPU 的特性和调度代ç "
-
-@@ -10195,7 +9941,6 @@
-
- #: config/nios2/elf.opt:26
- #, fuzzy
--#| msgid "Link with the fast floating-point library"
- msgid "Link with a limited version of the C library"
- msgstr "与快速浮点库链接"
-
-@@ -10217,7 +9962,6 @@
-
- #: config/nios2/nios2.opt:39
- #, fuzzy
--#| msgid "Enable clip instructions"
- msgid "Enable MUL instructions"
- msgstr "å¯ç”¨ clip 指令"
-
-@@ -10227,19 +9971,16 @@
-
- #: config/nios2/nios2.opt:47
- #, fuzzy
--#| msgid "Use the software emulation for divides (default)"
- msgid "Use table based fast divide (default at -O3)"
- msgstr "使用软件模拟除法(默认)"
-
- #: config/nios2/nios2.opt:51
- #, fuzzy
--#| msgid "Enable unaligned load/store instruction"
- msgid "All memory accesses use I/O load/store instructions"
- msgstr "å¯ç”¨ä¸å¯¹é½çš„载入/存储指令"
-
- #: config/nios2/nios2.opt:55
- #, fuzzy
--#| msgid "Enable unaligned load/store instruction"
- msgid "Volatile memory accesses use I/O load/store instructions"
- msgstr "å¯ç”¨ä¸å¯¹é½çš„载入/存储指令"
-
-@@ -10268,7 +10009,6 @@
-
- #: config/nios2/nios2.opt:79
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the ftruncds custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10278,7 +10018,6 @@
-
- #: config/nios2/nios2.opt:87
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fextsd custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10288,19 +10027,16 @@
-
- #: config/nios2/nios2.opt:95
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fixdu custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
- #: config/nios2/nios2.opt:99
- #, fuzzy
--#| msgid "Enable divide and modulus instructions"
- msgid "Integer id (N) of fixdu custom instruction"
- msgstr "å¯ç”¨é™¤æ³•å’Œæ±‚余指令"
-
- #: config/nios2/nios2.opt:103
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fixdi custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10310,7 +10046,6 @@
-
- #: config/nios2/nios2.opt:111
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fixsu custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10320,7 +10055,6 @@
-
- #: config/nios2/nios2.opt:119
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fixsi custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10330,31 +10064,26 @@
-
- #: config/nios2/nios2.opt:127
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the floatud custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
- #: config/nios2/nios2.opt:131
- #, fuzzy
--#| msgid "Enable unaligned load/store instruction"
- msgid "Integer id (N) of floatud custom instruction"
- msgstr "å¯ç”¨ä¸å¯¹é½çš„载入/存储指令"
-
- #: config/nios2/nios2.opt:135
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the floatid custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
- #: config/nios2/nios2.opt:139
- #, fuzzy
--#| msgid "Enable unaligned load/store instruction"
- msgid "Integer id (N) of floatid custom instruction"
- msgstr "å¯ç”¨ä¸å¯¹é½çš„载入/存储指令"
-
- #: config/nios2/nios2.opt:143
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the floatus custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10364,7 +10093,6 @@
-
- #: config/nios2/nios2.opt:151
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the floatis custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10374,7 +10102,6 @@
-
- #: config/nios2/nios2.opt:159
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fcmpned custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10384,7 +10111,6 @@
-
- #: config/nios2/nios2.opt:167
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fcmpeqd custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10394,7 +10120,6 @@
-
- #: config/nios2/nios2.opt:175
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fcmpged custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10404,7 +10129,6 @@
-
- #: config/nios2/nios2.opt:183
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fcmpgtd custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10414,7 +10138,6 @@
-
- #: config/nios2/nios2.opt:191
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fcmpled custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10424,7 +10147,6 @@
-
- #: config/nios2/nios2.opt:199
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fcmpltd custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10434,7 +10156,6 @@
-
- #: config/nios2/nios2.opt:207
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the flogd custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10444,7 +10165,6 @@
-
- #: config/nios2/nios2.opt:215
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fexpd custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10454,7 +10174,6 @@
-
- #: config/nios2/nios2.opt:223
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fatand custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10464,19 +10183,16 @@
-
- #: config/nios2/nios2.opt:231
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the ftand custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
- #: config/nios2/nios2.opt:235
- #, fuzzy
--#| msgid "Enable divide and modulus instructions"
- msgid "Integer id (N) of ftand custom instruction"
- msgstr "å¯ç”¨é™¤æ³•å’Œæ±‚余指令"
-
- #: config/nios2/nios2.opt:239
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fsind custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10486,7 +10202,6 @@
-
- #: config/nios2/nios2.opt:247
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fcosd custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10496,7 +10211,6 @@
-
- #: config/nios2/nios2.opt:255
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fsqrtd custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10506,7 +10220,6 @@
-
- #: config/nios2/nios2.opt:263
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fabsd custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10516,7 +10229,6 @@
-
- #: config/nios2/nios2.opt:271
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fnegd custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10526,7 +10238,6 @@
-
- #: config/nios2/nios2.opt:279
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fmaxd custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10536,7 +10247,6 @@
-
- #: config/nios2/nios2.opt:287
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fmind custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10546,7 +10256,6 @@
-
- #: config/nios2/nios2.opt:295
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fdivd custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10556,19 +10265,16 @@
-
- #: config/nios2/nios2.opt:303
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fmuld custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
- #: config/nios2/nios2.opt:307
- #, fuzzy
--#| msgid "Enable divide and modulus instructions"
- msgid "Integer id (N) of fmuld custom instruction"
- msgstr "å¯ç”¨é™¤æ³•å’Œæ±‚余指令"
-
- #: config/nios2/nios2.opt:311
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fsubd custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10578,7 +10284,6 @@
-
- #: config/nios2/nios2.opt:319
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the faddd custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10588,7 +10293,6 @@
-
- #: config/nios2/nios2.opt:327
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fcmpnes custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10598,7 +10302,6 @@
-
- #: config/nios2/nios2.opt:335
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fcmpeqs custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10608,7 +10311,6 @@
-
- #: config/nios2/nios2.opt:343
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fcmpges custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10618,7 +10320,6 @@
-
- #: config/nios2/nios2.opt:351
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fcmpgts custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10628,7 +10329,6 @@
-
- #: config/nios2/nios2.opt:359
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fcmples custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10638,7 +10338,6 @@
-
- #: config/nios2/nios2.opt:367
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fcmplts custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10648,7 +10347,6 @@
-
- #: config/nios2/nios2.opt:375
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the flogs custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10658,7 +10356,6 @@
-
- #: config/nios2/nios2.opt:383
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fexps custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10668,7 +10365,6 @@
-
- #: config/nios2/nios2.opt:391
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fatans custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10678,7 +10374,6 @@
-
- #: config/nios2/nios2.opt:399
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the ftans custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10688,7 +10383,6 @@
-
- #: config/nios2/nios2.opt:407
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fsins custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10698,7 +10392,6 @@
-
- #: config/nios2/nios2.opt:415
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fcoss custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10708,7 +10401,6 @@
-
- #: config/nios2/nios2.opt:423
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fsqrts custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10718,7 +10410,6 @@
-
- #: config/nios2/nios2.opt:431
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fabss custom instr"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10728,7 +10419,6 @@
-
- #: config/nios2/nios2.opt:439
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fnegs custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10738,7 +10428,6 @@
-
- #: config/nios2/nios2.opt:447
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fmaxs custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10748,7 +10437,6 @@
-
- #: config/nios2/nios2.opt:455
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fmins custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10758,7 +10446,6 @@
-
- #: config/nios2/nios2.opt:463
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fdivs custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10768,19 +10455,16 @@
-
- #: config/nios2/nios2.opt:471
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fmuls custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
- #: config/nios2/nios2.opt:475
- #, fuzzy
--#| msgid "Enable divide and modulus instructions"
- msgid "Integer id (N) of fmuls custom instruction"
- msgstr "å¯ç”¨é™¤æ³•å’Œæ±‚余指令"
-
- #: config/nios2/nios2.opt:479
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fsubs custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10790,7 +10474,6 @@
-
- #: config/nios2/nios2.opt:487
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fadds custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10800,7 +10483,6 @@
-
- #: config/nios2/nios2.opt:495
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the frdy custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10810,7 +10492,6 @@
-
- #: config/nios2/nios2.opt:503
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the frdxhi custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10820,7 +10501,6 @@
-
- #: config/nios2/nios2.opt:511
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the frdxlo custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10830,7 +10510,6 @@
-
- #: config/nios2/nios2.opt:519
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fwry custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10840,7 +10519,6 @@
-
- #: config/nios2/nios2.opt:527
- #, fuzzy
--#| msgid "Do not use the callt instruction"
- msgid "Do not use the fwrx custom instruction"
- msgstr "ä¸ä½¿ç”¨ callt 指令"
-
-@@ -10882,7 +10560,6 @@
-
- #: config/rx/rx.opt:93
- #, fuzzy
--#| msgid "Generate assembler output that is compatible with the Renesas AS100 assembler. This may restrict some of the compiler's capabilities. The default is to generate GAS compatable syntax."
- msgid "Generate assembler output that is compatible with the Renesas AS100 assembler. This may restrict some of the compiler's capabilities. The default is to generate GAS compatible syntax."
- msgstr "生æˆä¸Ž Renesas AS100 兼容的汇编输出。这å¯èƒ½ä¼šé™åˆ¶ç¼–译器的æŸäº›åŠŸèƒ½ã€‚默认是使用与 GAS 兼容的语法。"
-
-@@ -10920,7 +10597,6 @@
-
- #: config/rx/rx.opt:141
- #, fuzzy
--#| msgid "Enable the use of the short load instructions"
- msgid "Enable the use of the LRA register allocator."
- msgstr "å¯ç”¨å¯¹çŸ­åŠ è½½æŒ‡ä»¤çš„使用"
-
-@@ -10977,7 +10653,6 @@
-
- #: config/microblaze/microblaze.opt:87
- #, fuzzy, c-format
--#| msgid "%qE is deprecated: %s"
- msgid "%qs is deprecated; use -fstack-check"
- msgstr "ä¸å»ºè®®ä½¿ç”¨%qE:%s"
-
-@@ -10991,7 +10666,6 @@
-
- #: config/microblaze/microblaze.opt:95
- #, fuzzy, c-format
--#| msgid "-mno-clearbss is deprecated; use -fno-zero-initialized-in-bss"
- msgid "%qs is deprecated; use -fno-zero-initialized-in-bss"
- msgstr "-mno-clearbsså·²ä¸å»ºè®®ä½¿ç”¨ï¼›è¯·æ”¹ç”¨ -fno-zero-initialized-in-bss"
-
-@@ -11225,61 +10899,51 @@
-
- #: config/mn10300/mn10300.opt:67
- #, fuzzy
--#| msgid "Allow gcc to generate LIW instructions"
- msgid "Allow gcc to generate the SETLB and Lcc instructions"
- msgstr "å…许 gcc ç”Ÿæˆ LIW 指令"
-
- #: config/nds32/nds32.opt:26
- #, fuzzy
--#| msgid "Generate code in big endian mode"
- msgid "Generate code in big-endian mode."
- msgstr "生æˆå¤§ç«¯åœ¨å‰çš„代ç "
-
- #: config/nds32/nds32.opt:30
- #, fuzzy
--#| msgid "Generate code in little endian mode"
- msgid "Generate code in little-endian mode."
- msgstr "生æˆå°ç«¯åœ¨å‰çš„代ç "
-
- #: config/nds32/nds32.opt:34
- #, fuzzy
--#| msgid "Reschedule instructions before register allocation"
- msgid "Use reduced-set registers for register allocation."
- msgstr "分é…寄存器å‰é‡æ–°è°ƒåº¦æŒ‡ä»¤"
-
- #: config/nds32/nds32.opt:38
- #, fuzzy
--#| msgid "Reschedule instructions before register allocation"
- msgid "Use full-set registers for register allocation."
- msgstr "分é…寄存器å‰é‡æ–°è°ƒåº¦æŒ‡ä»¤"
-
- #: config/nds32/nds32.opt:42
- #, fuzzy
--#| msgid "Generate bit instructions"
- msgid "Generate conditional move instructions."
- msgstr "生æˆä½æŒ‡ä»¤"
-
- #: config/nds32/nds32.opt:46
- #, fuzzy
--#| msgid "Generate bit instructions"
- msgid "Generate performance extension instructions."
- msgstr "生æˆä½æŒ‡ä»¤"
-
- #: config/nds32/nds32.opt:50
- #, fuzzy
--#| msgid "Generate isel instructions"
- msgid "Generate v3 push25/pop25 instructions."
- msgstr "ç”Ÿæˆ isel 指令"
-
- #: config/nds32/nds32.opt:54
- #, fuzzy
--#| msgid "Generate bit instructions"
- msgid "Generate 16-bit instructions."
- msgstr "生æˆä½æŒ‡ä»¤"
-
- #: config/nds32/nds32.opt:58
- #, fuzzy
--#| msgid "Generate isel instructions"
- msgid "Generate GP base instructions directly."
- msgstr "ç”Ÿæˆ isel 指令"
-
-@@ -11293,7 +10957,6 @@
-
- #: config/nds32/nds32.opt:70
- #, fuzzy
--#| msgid "Specify the name of the target architecture"
- msgid "Specify the name of the target architecture."
- msgstr "指定目标架构的å称"
-
-@@ -11307,19 +10970,16 @@
-
- #: config/nds32/nds32.opt:94
- #, fuzzy
--#| msgid "Run predictive commoning optimization."
- msgid "Use special directives to guide linker doing ex9 optimization."
- msgstr "å¯ç”¨é¢„测公因å­ä¼˜åŒ–。"
-
- #: config/nds32/nds32.opt:98
- #, fuzzy
--#| msgid "Warn when all constructors and destructors are private"
- msgid "Enable constructor/destructor feature."
- msgstr "当所有构造函数和æžæž„函数都是ç§æœ‰æ—¶ç»™å‡ºè­¦å‘Š"
-
- #: config/nds32/nds32.opt:102
- #, fuzzy
--#| msgid "Generate isel instructions"
- msgid "Guide linker to relax instructions."
- msgstr "ç”Ÿæˆ isel 指令"
-
-@@ -11353,13 +11013,11 @@
-
- #: config/c6x/c6x.opt:46
- #, fuzzy
--#| msgid "alias argument not a string"
- msgid "Valid arguments for the -msdata= option"
- msgstr "alias çš„å‚æ•°ä¸æ˜¯ä¸€ä¸ªå­—符串"
-
- #: config/c6x/c6x.opt:59
- #, fuzzy
--#| msgid "Create a shared library"
- msgid "Compile for the DSBT shared library ABI"
- msgstr "生æˆä¸€ä¸ªå…±äº«åº“"
-
-@@ -11633,7 +11291,6 @@
-
- #: config/sh/sh.opt:236 config/sh/sh.opt:240
- #, fuzzy, c-format
--#| msgid "Deprecated. This switch has no effect"
- msgid "%qs is deprecated and has no effect"
- msgstr "ä¸å»ºè®®ä½¿ç”¨ã€‚此开关ä¸èµ·ä½œç”¨ã€‚"
-
-@@ -11675,7 +11332,6 @@
-
- #: config/sh/sh.opt:277
- #, fuzzy
--#| msgid "Increase the IEEE compliance for floating-point code"
- msgid "Increase the IEEE compliance for floating-point comparisons"
- msgstr "让浮点代ç æ›´åŠ éµå¾ª IEEE 标准"
-
-@@ -11725,7 +11381,6 @@
-
- #: config/sh/sh.opt:331
- #, fuzzy
--#| msgid "Generate code for built-in atomic operations"
- msgid "Specify the model for atomic operations"
- msgstr "为内建原å­æ“作生æˆä»£ç "
-
-@@ -11751,13 +11406,11 @@
-
- #: config/sh/sh.opt:357
- #, fuzzy
--#| msgid "Enable the use of the short load instructions"
- msgid "Enable the use of the fsca instruction"
- msgstr "å¯ç”¨å¯¹çŸ­åŠ è½½æŒ‡ä»¤çš„使用"
-
- #: config/sh/sh.opt:361
- #, fuzzy
--#| msgid "Enable the use of the short load instructions"
- msgid "Enable the use of the fsrra instruction"
- msgstr "å¯ç”¨å¯¹çŸ­åŠ è½½æŒ‡ä»¤çš„使用"
-
-@@ -11895,7 +11548,6 @@
-
- #: config/mips/mips.opt:63
- #, fuzzy
--#| msgid "Use multiply add/subtract instructions"
- msgid "Use integer madd/msub instructions"
- msgstr "使用乘加/å‡æŒ‡ä»¤"
-
-@@ -11925,7 +11577,6 @@
-
- #: config/mips/mips.opt:91
- #, fuzzy
--#| msgid "invalid argument %qs to -fdebug-prefix-map"
- msgid "Valid arguments to -mcode-readable=:"
- msgstr "-fdebug-prefix-map çš„å‚æ•°%qs无效"
-
-@@ -11955,7 +11606,6 @@
-
- #: config/mips/mips.opt:146
- #, fuzzy
--#| msgid "Use the bit-field instructions"
- msgid "Use Enhanced Virtual Addressing instructions"
- msgstr "使用ä½æ®µæŒ‡ä»¤"
-
-@@ -11969,7 +11619,6 @@
-
- #: config/mips/mips.opt:158
- #, fuzzy
--#| msgid "Work around certain R4000 errata"
- msgid "Work around certain 24K errata"
- msgstr "为æŸäº› R4000 缺陷æä¾›å˜é€š"
-
-@@ -11983,7 +11632,6 @@
-
- #: config/mips/mips.opt:170
- #, fuzzy
--#| msgid "Work around certain R4000 errata"
- msgid "Work around certain RM7000 errata"
- msgstr "为æŸäº› R4000 缺陷æä¾›å˜é€š"
-
-@@ -12057,13 +11705,11 @@
-
- #: config/mips/mips.opt:252
- #, fuzzy
--#| msgid "Generate code that can be safely linked with MIPS16 code."
- msgid "Generate code that is link-compatible with MIPS16 and microMIPS code."
- msgstr "生æˆèƒ½ä¸Ž MIPS16 代ç å®‰å…¨é“¾æŽ¥çš„代ç ã€‚"
-
- #: config/mips/mips.opt:256
- #, fuzzy
--#| msgid "Does nothing. Preserved for backward compatibility."
- msgid "An alias for minterlink-compressed provided for backward-compatibility."
- msgstr "ä¸èµ·ä½œç”¨ã€‚为å‘å‰å…¼å®¹ä¿ç•™çš„选项。"
-
-@@ -12109,7 +11755,6 @@
-
- #: config/mips/mips.opt:300
- #, fuzzy
--#| msgid "Use SmartMIPS instructions"
- msgid "Use microMIPS instructions"
- msgstr "使用 SmartMIPS 指令"
-
-@@ -12123,7 +11768,6 @@
-
- #: config/mips/mips.opt:312
- #, fuzzy
--#| msgid "Use MIPS-3D instructions"
- msgid "Use MCU instructions"
- msgstr "使用 MIPS-3D 指令"
-
-@@ -12214,31 +11858,26 @@
-
- #: config/tilegx/tilegx.opt:37
- #, fuzzy
--#| msgid "Compile for 32-bit pointers"
- msgid "Compile with 32 bit longs and pointers."
- msgstr "为 32 ä½æŒ‡é’ˆç¼–译"
-
- #: config/tilegx/tilegx.opt:41
- #, fuzzy
--#| msgid "Compile for 64-bit pointers"
- msgid "Compile with 64 bit longs and pointers."
- msgstr "为 64 ä½æŒ‡é’ˆç¼–译"
-
- #: config/tilegx/tilegx.opt:45
- #, fuzzy
--#| msgid "Use given x86-64 code model"
- msgid "Use given TILE-Gx code model"
- msgstr "使用给定的 x86-64 代ç æ¨¡å¼"
-
- #: config/arc/arc.opt:26
- #, fuzzy
--#| msgid "Generate code in big endian mode"
- msgid "Compile code for big endian mode"
- msgstr "生æˆå¤§ç«¯åœ¨å‰çš„代ç "
-
- #: config/arc/arc.opt:30
- #, fuzzy
--#| msgid "Stores doubles in 32 bits. This is the default."
- msgid "Compile code for little endian mode. This is the default"
- msgstr "以 32 ä½åŒç²¾åº¦æ•°å­˜å‚¨ã€‚这是默认值。"
-
-@@ -12284,31 +11923,26 @@
-
- #: config/arc/arc.opt:80
- #, fuzzy
--#| msgid "Generate string instructions for block moves"
- msgid "Generate instructions supported by barrel shifter"
- msgstr "为å—移动使用字符串指令"
-
- #: config/arc/arc.opt:84
- #, fuzzy
--#| msgid "Generate bit instructions"
- msgid "Generate norm instruction"
- msgstr "生æˆä½æŒ‡ä»¤"
-
- #: config/arc/arc.opt:88
- #, fuzzy
--#| msgid "Generate isel instructions"
- msgid "Generate swap instruction"
- msgstr "ç”Ÿæˆ isel 指令"
-
- #: config/arc/arc.opt:92
- #, fuzzy
--#| msgid "Generate load/store multiple instructions"
- msgid "Generate mul64 and mulu64 instructions"
- msgstr "生æˆåŠ è½½/存储乘法指令"
-
- #: config/arc/arc.opt:96
- #, fuzzy
--#| msgid "Do not generate fused multiply/add instructions"
- msgid "Do not generate mpy instructions for ARC700"
- msgstr "ä¸ç”Ÿæˆèžåˆçš„乘/加指令"
-
-@@ -12322,13 +11956,11 @@
-
- #: config/arc/arc.opt:108
- #, fuzzy
--#| msgid "Generate call insns as indirect calls, if necessary"
- msgid "Generate call insns as register indirect calls"
- msgstr "如有必须,为调用指令生æˆé—´æŽ¥è°ƒç”¨"
-
- #: config/arc/arc.opt:112
- #, fuzzy
--#| msgid "Generate cld instruction in the function prologue."
- msgid "Do no generate BRcc instructions in arc_reorg."
- msgstr "在函数åºè¨€ä¸­ç”Ÿæˆ cld 指令"
-
-@@ -12346,7 +11978,6 @@
-
- #: config/arc/arc.opt:132
- #, fuzzy
--#| msgid "Generate bit instructions"
- msgid "FPX: Generate Single Precision FPX (fast) instructions."
- msgstr "生æˆä½æŒ‡ä»¤"
-
-@@ -12356,13 +11987,11 @@
-
- #: config/arc/arc.opt:140 config/arc/arc.opt:144
- #, fuzzy
--#| msgid "Generate bit instructions"
- msgid "FPX: Generate Double Precision FPX (compact) instructions."
- msgstr "生æˆä½æŒ‡ä»¤"
-
- #: config/arc/arc.opt:148
- #, fuzzy
--#| msgid "Generate bit instructions"
- msgid "FPX: Generate Double Precision FPX (fast) instructions."
- msgstr "生æˆä½æŒ‡ä»¤"
-
-@@ -12384,7 +12013,6 @@
-
- #: config/arc/arc.opt:187
- #, fuzzy
--#| msgid "Cost to assume for a multiply insn"
- msgid "Cost to assume for a multiply instruction, with 4 being equal to a normal insn."
- msgstr "为乘法指令设定的开销"
-
-@@ -12406,7 +12034,6 @@
-
- #: config/arc/arc.opt:215
- #, fuzzy
--#| msgid "Enable the use of the short load instructions"
- msgid "Enable the use of indexed loads"
- msgstr "å¯ç”¨å¯¹çŸ­åŠ è½½æŒ‡ä»¤çš„使用"
-
-@@ -12416,7 +12043,6 @@
-
- #: config/arc/arc.opt:223
- #, fuzzy
--#| msgid "Generate fused multiply/add instructions"
- msgid "Generate 32x16 multiply and mac instructions"
- msgstr "生æˆèžåˆçš„乘/加指令"
-
-@@ -12434,7 +12060,6 @@
-
- #: config/arc/arc.opt:241
- #, fuzzy
--#| msgid "Avoid all range limits on call instructions"
- msgid "Do alignment optimizations for call instructions."
- msgstr "为调用指令é¿å…一切范围é™åˆ¶"
-
-@@ -12448,7 +12073,6 @@
-
- #: config/arc/arc.opt:253
- #, fuzzy
--#| msgid "Enable cbranchdi4 pattern"
- msgid "Enable pre-reload use of cbranchsi pattern"
- msgstr "å¯ç”¨ cbranchdi4 æ ·å¼"
-
-@@ -12462,13 +12086,11 @@
-
- #: config/arc/arc.opt:265
- #, fuzzy
--#| msgid "Enable cbranchdi4 pattern"
- msgid "Enable compact casesi pattern"
- msgstr "å¯ç”¨ cbranchdi4 æ ·å¼"
-
- #: config/arc/arc.opt:269
- #, fuzzy
--#| msgid "Enable clip instructions"
- msgid "Enable 'q' instruction alternatives."
- msgstr "å¯ç”¨ clip 指令"
-
-@@ -12478,25 +12100,21 @@
-
- #: config/arc/arc.opt:280
- #, fuzzy
--#| msgid "Enable Plan 9 language extensions"
- msgid "Enable variable polynomial CRC extension"
- msgstr "å¯ç”¨ä¹å·è®¡åˆ’语言扩展"
-
- #: config/arc/arc.opt:284
- #, fuzzy
--#| msgid "Enable Plan 9 language extensions"
- msgid "Enable DSP 3.1 Pack A extensions"
- msgstr "å¯ç”¨ä¹å·è®¡åˆ’语言扩展"
-
- #: config/arc/arc.opt:288
- #, fuzzy
--#| msgid "Enable Plan 9 language extensions"
- msgid "Enable dual viterbi butterfly extension"
- msgstr "å¯ç”¨ä¹å·è®¡åˆ’语言扩展"
-
- #: config/arc/arc.opt:298
- #, fuzzy
--#| msgid "Enable leading zero instructions"
- msgid "Enable Dual and Single Operand Instructions for Telephony"
- msgstr "å¯ç”¨å‰å¯¼é›¶æŒ‡ä»¤"
-
-@@ -12506,19 +12124,16 @@
-
- #: config/arc/arc.opt:307
- #, fuzzy
--#| msgid "Enable dead store elimination"
- msgid "Enable Locked Load/Store Conditional extension"
- msgstr "删除死存储"
-
- #: config/arc/arc.opt:311
- #, fuzzy
--#| msgid "Enable sign extend instructions"
- msgid "Enable swap byte ordering extension instruction"
- msgstr "å¯ç”¨ç¬¦å·æ‰©å±•æŒ‡ä»¤"
-
- #: config/arc/arc.opt:315
- #, fuzzy
--#| msgid "Enable bit manipulation instructions"
- msgid "Enable 64-bit Time-Stamp Counter extension instruction"
- msgstr "å¯ç”¨ä½æ“作指令"
-
-@@ -12532,19 +12147,16 @@
-
- #: config/arc/arc.opt:327
- #, fuzzy
--#| msgid "Pass -z text to linker"
- msgid "Pass -EB option through to linker."
- msgstr "将 -z text 传递给链接器"
-
- #: config/arc/arc.opt:331
- #, fuzzy
--#| msgid "Pass -z text to linker"
- msgid "Pass -EL option through to linker."
- msgstr "将 -z text 传递给链接器"
-
- #: config/arc/arc.opt:335
- #, fuzzy
--#| msgid "Pass -z text to linker"
- msgid "Pass -marclinux option through to linker."
- msgstr "将 -z text 传递给链接器"
-
-@@ -12722,7 +12334,6 @@
-
- #: common.opt:457
- #, fuzzy
--#| msgid "Optimize for space rather than speed"
- msgid "Optimize for debugging experience rather than speed or size"
- msgstr "为最å°ç©ºé—´è€Œä¸æ˜¯æœ€å¤§é€Ÿåº¦ä¼˜åŒ–"
-
-@@ -12781,7 +12392,6 @@
-
- #: common.opt:562
- #, fuzzy
--#| msgid "%Kattempt to free a non-heap object"
- msgid "Warn when attempting to free a non-heap object"
- msgstr "%K试图 free 一个ä¸åœ¨å †ä¸Šçš„对象"
-
-@@ -12870,7 +12480,6 @@
-
- #: common.opt:660
- #, fuzzy
--#| msgid "Warn about uninitialized automatic variables"
- msgid "Warn about maybe uninitialized automatic variables"
- msgstr "自动å˜é‡æœªåˆå§‹åŒ–时警告"
-
-@@ -13007,7 +12616,6 @@
-
- #: common.opt:918
- #, fuzzy
--#| msgid "Check the return value of new"
- msgid "Check the return value of new in C++"
- msgstr "检查 new 的返回值"
-
-@@ -13094,7 +12702,6 @@
-
- #: common.opt:1012
- #, fuzzy
--#| msgid "Perform superblock formation via tail duplication"
- msgid "Perform speculative devirtualization"
- msgstr "通过尾å¤åˆ¶è¿›è¡Œè¶…å—åˆæˆ"
-
-@@ -13145,7 +12752,6 @@
-
- #: common.opt:1096
- #, fuzzy
--#| msgid "Do the full register move optimization pass"
- msgid "Dump optimization passes"
- msgstr "进行全寄存器传é€ä¼˜åŒ–"
-
-@@ -13265,7 +12871,6 @@
-
- #: common.opt:1243
- #, fuzzy
--#| msgid "Enable hoisting loads from conditional pointers."
- msgid "Enable hoisting adjacent loads to encourage generating conditional move"
- msgstr "为æ¡ä»¶æŒ‡é’ˆå¤–æ内存读å–æ“作。"
-
-@@ -13319,7 +12924,6 @@
-
- #: common.opt:1303
- #, fuzzy, c-format
--#| msgid "unknown TLS model %qs"
- msgid "unknown Stack Reuse Level %qs"
- msgstr "未知的 TLS 模型%qs"
-
-@@ -13346,19 +12950,16 @@
-
- #: common.opt:1342
- #, fuzzy
--#| msgid "Integrate simple functions into their callers when code size is known to not growth"
- msgid "Integrate functions into their callers when code size is known not to grow"
- msgstr "在ä¸å¯¼è‡´ä»£ç è†¨èƒ€çš„情况下将简å•å‡½æ•°é›†æˆåˆ°å®ƒä»¬çš„调用者中"
-
- #: common.opt:1346
- #, fuzzy
--#| msgid "Integrate functions called once into their callers"
- msgid "Integrate functions not declared \"inline\" into their callers when profitable"
- msgstr "å°†åªè¢«è°ƒç”¨ä¸€æ¬¡çš„函数集æˆåˆ°å®ƒä»¬çš„调用者中"
-
- #: common.opt:1350
- #, fuzzy
--#| msgid "Integrate functions called once into their callers"
- msgid "Integrate functions only required by their single caller"
- msgstr "å°†åªè¢«è°ƒç”¨ä¸€æ¬¡çš„函数集æˆåˆ°å®ƒä»¬çš„调用者中"
-
-@@ -13384,7 +12985,6 @@
-
- #: common.opt:1377
- #, fuzzy
--#| msgid "Perform Interprocedural constant propagation"
- msgid "Perform interprocedural constant propagation"
- msgstr "进行进程间的å¤å†™ä¼ é€’"
-
-@@ -13407,7 +13007,6 @@
-
- #: common.opt:1397
- #, fuzzy
--#| msgid "unimplemented functionality"
- msgid "Perform Semantic function equality"
- msgstr "未实现的功能"
-
-@@ -13504,7 +13103,6 @@
-
- #: common.opt:1521
- #, fuzzy
--#| msgid "Report various link-time optimization statistics"
- msgid "Report various link-time optimization statistics for WPA only"
- msgstr "报告å„ç§é“¾æŽ¥æ—¶ä¼˜åŒ–统计"
-
-@@ -13522,7 +13120,6 @@
-
- #: common.opt:1537
- #, fuzzy
--#| msgid "Report on permanent memory allocation"
- msgid "Report on permanent memory allocation in WPA only"
- msgstr "报告永久性内存分é…"
-
-@@ -13576,7 +13173,6 @@
-
- #: common.opt:1592
- #, fuzzy
--#| msgid "Enable loop optimizations on tree level"
- msgid "Enable all optimization info dumps on stderr"
- msgstr "在树级别进行循环优化"
-
-@@ -13690,13 +13286,11 @@
-
- #: common.opt:1713
- #, fuzzy
--#| msgid "internal consistency failure"
- msgid "Report on consistency of profile"
- msgstr "内部一致性错误"
-
- #: common.opt:1717
- #, fuzzy
--#| msgid "Reorder functions to improve code placement"
- msgid "Enable function reordering that improves code placement"
- msgstr "函数é‡æ–°æŽ’åºä»¥æ”¹å–„代ç å¸ƒå±€"
-
-@@ -13714,7 +13308,6 @@
-
- #: common.opt:1746
- #, fuzzy
--#| msgid "Enable register pressure sensitive insn scheduling"
- msgid "Relief of register pressure through live range shrinkage"
- msgstr "å¯ç”¨å¯¹å¯„存器压力æ•æ„Ÿçš„指令调度"
-
-@@ -13909,7 +13502,6 @@
-
- #: common.opt:1967
- #, fuzzy
--#| msgid "Use a stack protection method for every function"
- msgid "Use a smart stack protection method for certain functions"
- msgstr "为æ¯ä¸ªå‡½æ•°ä½¿ç”¨å †æ ˆä¿æŠ¤æœºåˆ¶"
-
-@@ -13986,7 +13578,6 @@
-
- #: common.opt:2065
- #, fuzzy
--#| msgid "Perform variable tracking and also tag variables that are uninitialized"
- msgid "Enable coalescing of copy-related user variables that are inlined"
- msgstr "进行å˜é‡è¿½è¸ªå¹¶ä¸”标记未被åˆå§‹åŒ–çš„å˜é‡"
-
-@@ -14020,7 +13611,6 @@
-
- #: common.opt:2101
- #, fuzzy
--#| msgid "Enable loop header copying on trees"
- msgid "Enable tail merging on trees"
- msgstr "å¯ç”¨æ ‘上的循环ä¸å˜é‡è½¬ç§»"
-
-@@ -14038,13 +13628,11 @@
-
- #: common.opt:2117
- #, fuzzy
--#| msgid "Enable SSA-CCP optimization on trees"
- msgid "Enable string length optimizations on trees"
- msgstr "å¯ç”¨æ ‘上的 SSA-CCP 优化"
-
- #: common.opt:2121
- #, fuzzy
--#| msgid "comparison with string literal results in unspecified behaviour"
- msgid "Detect paths which trigger erroneous or undefined behaviour due to"
- msgstr "与字é¢å­—符串比较的结构是ä¸å¯é¢„测的"
-
-@@ -14164,13 +13752,11 @@
-
- #: common.opt:2254
- #, fuzzy
--#| msgid "Use the hardware barrel shifter instead of emulation"
- msgid "Use the bfd linker instead of the default linker"
- msgstr "使用硬件桶型移ä½å™¨ä»£æ›¿ä»¿çœŸ"
-
- #: common.opt:2258
- #, fuzzy
--#| msgid "Use the hardware barrel shifter instead of emulation"
- msgid "Use the gold linker instead of the default linker"
- msgstr "使用硬件桶型移ä½å™¨ä»£æ›¿ä»¿çœŸ"
-
-@@ -14192,7 +13778,6 @@
-
- #: common.opt:2296
- #, fuzzy
--#| msgid "Enable loop vectorization on trees"
- msgid "Enable vectorization on trees"
- msgstr "在树上进行循环å‘é‡åŒ–"
-
-@@ -14206,7 +13791,6 @@
-
- #: common.opt:2312
- #, fuzzy
--#| msgid "Enable use of cost model in vectorization"
- msgid "Specifies the cost model for vectorization"
- msgstr "å¯ç”¨å‘é‡åŒ–开销模型"
-
-@@ -14216,19 +13800,16 @@
-
- #: common.opt:2319
- #, fuzzy, c-format
--#| msgid "unknown TLS model %qs"
- msgid "unknown vectorizer cost model %qs"
- msgstr "未知的 TLS 模型%qs"
-
- #: common.opt:2332
- #, fuzzy
--#| msgid "Does nothing. Preserved for backward compatibility."
- msgid "Enables the dynamic vectorizer cost model. Preserved for backward compatibility."
- msgstr "ä¸èµ·ä½œç”¨ã€‚为å‘å‰å…¼å®¹ä¿ç•™çš„选项。"
-
- #: common.opt:2336
- #, fuzzy
--#| msgid "Does nothing. Preserved for backward compatibility."
- msgid "Enables the unlimited vectorizer cost model. Preserved for backward compatibility."
- msgstr "ä¸èµ·ä½œç”¨ã€‚为å‘å‰å…¼å®¹ä¿ç•™çš„选项。"
-
-@@ -14255,7 +13836,6 @@
-
- #: common.opt:2380
- #, fuzzy, c-format
--#| msgid "(near initialization for %qs)"
- msgid "unknown vtable verify initialization priority %qs"
- msgstr "(在%qsçš„åˆå§‹åŒ–附近)"
-
-@@ -14301,7 +13881,6 @@
-
- #: common.opt:2433
- #, fuzzy
--#| msgid "Generate debug information in default format"
- msgid "Generate debug information in default version of DWARF format"
- msgstr "生æˆé»˜è®¤æ ¼å¼çš„调试信æ¯"
-
-@@ -14327,25 +13906,21 @@
-
- #: common.opt:2457
- #, fuzzy
--#| msgid "Record gcc command line switches in the object file."
- msgid "Don't record gcc command line switches in DWARF DW_AT_producer."
- msgstr "在目标文件中记录 gcc 命令行开关。"
-
- #: common.opt:2461
- #, fuzzy
--#| msgid "Record gcc command line switches in the object file."
- msgid "Record gcc command line switches in DWARF DW_AT_producer."
- msgstr "在目标文件中记录 gcc 命令行开关。"
-
- #: common.opt:2465
- #, fuzzy
--#| msgid "Generate debug information in default format"
- msgid "Don't generate debug information in separate .dwo files"
- msgstr "生æˆé»˜è®¤æ ¼å¼çš„调试信æ¯"
-
- #: common.opt:2469
- #, fuzzy
--#| msgid "Generate debug information in default format"
- msgid "Generate debug information in separate .dwo files"
- msgstr "生æˆé»˜è®¤æ ¼å¼çš„调试信æ¯"
-
-@@ -14387,7 +13962,6 @@
-
- #: common.opt:2512
- #, fuzzy
--#| msgid "-imultilib <dir>\tSet <dir> to be the multilib include subdirectory"
- msgid "-imultiarch <dir>\tSet <dir> to be the multiarch include subdirectory"
- msgstr "-imultilib <目录>\t将目录设定为 multilib 的包å«å­ç›®å½•"
-
-@@ -14450,7 +14024,6 @@
-
- #: go/gofrontend/expressions.cc:4157
- #, fuzzy
--#| msgid "expected integer or boolean type"
- msgid "expected boolean type"
- msgstr "需è¦æ•´æ•°æˆ–布尔类型"
-
-@@ -14469,7 +14042,6 @@
-
- #: go/gofrontend/expressions.cc:5925
- #, fuzzy
--#| msgid "invalid comparison code in gimple cond"
- msgid "invalid comparison of nil with nil"
- msgstr "gimple æ¡ä»¶ä¸­æ¯”较代ç æ— æ•ˆ"
-
-@@ -14480,7 +14052,6 @@
-
- #: go/gofrontend/expressions.cc:5969
- #, fuzzy
--#| msgid "division by zero"
- msgid "integer division by zero"
- msgstr "被零除"
-
-@@ -14508,13 +14079,11 @@
-
- #: go/gofrontend/expressions.cc:7156
- #, fuzzy
--#| msgid "invalid argument to built-in function"
- msgid "invalid use of %<...%> with builtin function"
- msgstr "内建函数实å‚无效"
-
- #: go/gofrontend/expressions.cc:7167
- #, fuzzy
--#| msgid "invalid use of template-name %qE without an argument list"
- msgid "invalid use of method value as argument of Offsetof"
- msgstr "使用模æ¿å%qEæ—¶ä¸å¸¦å®žå‚表无效"
-
-@@ -14540,7 +14109,6 @@
-
- #: go/gofrontend/expressions.cc:7271
- #, fuzzy
--#| msgid "argument must be a constant"
- msgid "argument 1 must be a map"
- msgstr "实å‚必须是常数"
-
-@@ -14551,7 +14119,6 @@
-
- #: go/gofrontend/expressions.cc:7384
- #, fuzzy
--#| msgid "bad length when making slice"
- msgid "length required when allocating a slice"
- msgstr "生æˆåˆ‡ç‰‡æ—¶é•¿åº¦é”™è¯¯"
-
-@@ -14561,7 +14128,6 @@
-
- #: go/gofrontend/expressions.cc:7435
- #, fuzzy
--#| msgid "too many arguments to %qE"
- msgid "too many arguments to make"
- msgstr "%qE实å‚太多"
-
-@@ -14603,19 +14169,16 @@
-
- #: go/gofrontend/expressions.cc:8317
- #, fuzzy
--#| msgid "left argument must be a slice"
- msgid "first argument must be []byte"
- msgstr "左实å‚必须是一个切片"
-
- #: go/gofrontend/expressions.cc:8320
- #, fuzzy
--#| msgid "right argument must be a slice or a string"
- msgid "second argument must be slice or string"
- msgstr "å³å®žå‚必须是一个切片或字符串"
-
- #: go/gofrontend/expressions.cc:8361
- #, fuzzy
--#| msgid "parameter %u has void type"
- msgid "argument 2 has invalid type"
- msgstr "第 %u 个å‚数类型为 void"
-
-@@ -14638,7 +14201,6 @@
-
- #: go/gofrontend/expressions.cc:9332
- #, fuzzy
--#| msgid "invalid use of %<this%> at top level"
- msgid "invalid use of %<...%> with non-slice"
- msgstr "在文件作用域使用%<this%>无效"
-
-@@ -14648,7 +14210,6 @@
-
- #: go/gofrontend/expressions.cc:9623
- #, fuzzy
--#| msgid "invalid use of %<this%> in non-member function"
- msgid "invalid use of %<...%> calling non-variadic function"
- msgstr "在éžæˆå‘˜å‡½æ•°ä¸­ä½¿ç”¨%<this%>无效"
-
-@@ -14666,7 +14227,6 @@
-
- #: go/gofrontend/expressions.cc:10474
- #, fuzzy
--#| msgid "slice end must be integer"
- msgid "slice capacity must be integer"
- msgstr "切片结尾必须是整数"
-
-@@ -14741,7 +14301,6 @@
-
- #: go/gofrontend/statements.cc:2654 go/gofrontend/statements.cc:2683
- #, fuzzy
--#| msgid "not enough arguments"
- msgid "not enough arguments to return"
- msgstr "实å‚太少"
-
-@@ -14783,49 +14342,41 @@
-
- #: go/gofrontend/types.cc:514
- #, fuzzy
--#| msgid "invalid comparison code in gimple cond"
- msgid "invalid comparison of non-ordered type"
- msgstr "gimple æ¡ä»¶ä¸­æ¯”较代ç æ— æ•ˆ"
-
- #: go/gofrontend/types.cc:530
- #, fuzzy
--#| msgid "duplicate class will only be compiled once"
- msgid "slice can only be compared to nil"
- msgstr "é‡å¤çš„ç±»åªä¼šè¢«ç¼–译一次"
-
- #: go/gofrontend/types.cc:532
- #, fuzzy
--#| msgid "duplicate class will only be compiled once"
- msgid "map can only be compared to nil"
- msgstr "é‡å¤çš„ç±»åªä¼šè¢«ç¼–译一次"
-
- #: go/gofrontend/types.cc:534
- #, fuzzy
--#| msgid "duplicate class will only be compiled once"
- msgid "func can only be compared to nil"
- msgstr "é‡å¤çš„ç±»åªä¼šè¢«ç¼–译一次"
-
- #: go/gofrontend/types.cc:540
- #, fuzzy, c-format
--#| msgid "invalid operand to %%R"
- msgid "invalid operation (%s)"
- msgstr "%%R çš„æ“作数无效"
-
- #: go/gofrontend/types.cc:563
- #, fuzzy
--#| msgid "invalid comparison code in gimple cond"
- msgid "invalid comparison of non-comparable type"
- msgstr "gimple æ¡ä»¶ä¸­æ¯”较代ç æ— æ•ˆ"
-
- #: go/gofrontend/types.cc:581
- #, fuzzy
--#| msgid "invalid comparison code in gimple cond"
- msgid "invalid comparison of non-comparable struct"
- msgstr "gimple æ¡ä»¶ä¸­æ¯”较代ç æ— æ•ˆ"
-
- #: go/gofrontend/types.cc:592
- #, fuzzy
--#| msgid "invalid use of non-lvalue array"
- msgid "invalid comparison of non-comparable array"
- msgstr "对éžå·¦å€¼æ•°ç»„的使用无效"
-
-@@ -14911,13 +14462,11 @@
-
- #: go/gofrontend/types.cc:7240
- #, fuzzy, c-format
--#| msgid "method %s%s%s requires a pointer"
- msgid "method %s%s%s requires a pointer receiver"
- msgstr "方法%s%s%s需è¦ä¸€ä¸ªæŒ‡é’ˆ"
-
- #: go/gofrontend/types.cc:7258
- #, fuzzy, c-format
--#| msgid "method %s%s%s requires a pointer"
- msgid "method %s%s%s is marked go:nointerface"
- msgstr "方法%s%s%s需è¦ä¸€ä¸ªæŒ‡é’ˆ"
-
-@@ -14930,7 +14479,6 @@
-
- #: attribs.c:450
- #, fuzzy, gcc-internal-format
--#| msgid "%qE attribute directive ignored"
- msgid "%<%E::%E%> scoped attribute directive ignored"
- msgstr "%qE属性指定被忽略"
-
-@@ -14944,7 +14492,6 @@
- #. type. Ignore it.
- #: attribs.c:472
- #, fuzzy, gcc-internal-format
--#| msgid "%qE attribute ignored"
- msgid "attribute ignored"
- msgstr "%qE属性被忽略"
-
-@@ -15045,7 +14592,6 @@
-
- #: builtins.c:5248
- #, fuzzy, gcc-internal-format
--#| msgid "invalid argument to built-in function"
- msgid "invalid memory model argument to builtin"
- msgstr "内建函数实å‚无效"
-
-@@ -15066,13 +14612,11 @@
-
- #: builtins.c:5360
- #, fuzzy, gcc-internal-format
--#| msgid "invalid use of %<auto%>"
- msgid "invalid memory model for %<__atomic_load%>"
- msgstr "错误地使用了%<auto%>"
-
- #: builtins.c:5390 builtins.c:5497
- #, fuzzy, gcc-internal-format
--#| msgid "invalid use of %<auto%>"
- msgid "invalid memory model for %<__atomic_store%>"
- msgstr "错误地使用了%<auto%>"
-
-@@ -15088,13 +14632,11 @@
-
- #: builtins.c:5709
- #, fuzzy, gcc-internal-format
--#| msgid "__builtin_eh_return not supported on this target"
- msgid "__builtin_thread_pointer is not supported on this target"
- msgstr "__builtin_eh_return 在此目标机上ä¸å—支æŒ"
-
- #: builtins.c:5729
- #, fuzzy, gcc-internal-format
--#| msgid "__builtin_eh_return not supported on this target"
- msgid "__builtin_set_thread_pointer is not supported on this target"
- msgstr "__builtin_eh_return 在此目标机上ä¸å—支æŒ"
-
-@@ -15189,7 +14731,6 @@
-
- #: calls.c:3055
- #, fuzzy, gcc-internal-format
--#| msgid "missing argument to %qs"
- msgid "passing too large argument on stack"
- msgstr "%qs缺少å‚æ•°"
-
-@@ -15335,7 +14876,6 @@
-
- #: cfghooks.c:310
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "%s does not support duplicate_block"
- msgid "%s does not support dump_bb_for_graph"
- msgstr "%s ä¸æ”¯æŒ duplicate_block"
-
-@@ -15406,7 +14946,6 @@
-
- #: cfghooks.c:984
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "%s does not support move_block_after"
- msgid "%s does not support force_nonfallthru"
- msgstr "%s ä¸æ”¯æŒt move_block_after"
-
-@@ -15447,7 +14986,6 @@
-
- #: cfgloop.c:1356
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Enable loop header copying on trees"
- msgid "loop with header %d not in loop tree"
- msgstr "å¯ç”¨æ ‘上的循环ä¸å˜é‡è½¬ç§»"
-
-@@ -15468,13 +15006,11 @@
-
- #: cfgloop.c:1395
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "bb %d do not belong to loop %d"
- msgid "bb %d does not belong to loop %d"
- msgstr "åŸºæœ¬å— %d ä¸å±žäºŽå¾ªçŽ¯ %d"
-
- #: cfgloop.c:1407
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "size of loop %d should be %d, not %d"
- msgid "bb %d has father loop %d, should be loop %d"
- msgstr "循环 %d 的大å°åº”该为 %d,而ä¸æ˜¯%d"
-
-@@ -15595,7 +15131,6 @@
-
- #: cfgrtl.c:2428
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "verify_flow_info: REG_BR_PROB does not match cfg %wi %i"
- msgid "verify_flow_info: REG_BR_PROB does not match cfg %i %i"
- msgstr "verify_flow_info:REG_BR_PROB ä¸åŒ¹é… cfg %wi %i"
-
-@@ -15606,19 +15141,16 @@
-
- #: cfgrtl.c:2454
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "fallthru edge crosses section boundary (bb %i)"
- msgid "fallthru edge crosses section boundary in bb %i"
- msgstr "直通边越过了节分界(åŸºæœ¬å— %i)"
-
- #: cfgrtl.c:2460
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "fallthru edge crosses section boundary (bb %i)"
- msgid "EH edge crosses section boundary in bb %i"
- msgstr "直通边越过了节分界(åŸºæœ¬å— %i)"
-
- #: cfgrtl.c:2467
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "fallthru edge crosses section boundary (bb %i)"
- msgid "No region crossing jump at section boundary in bb %i"
- msgstr "直通边越过了节分界(åŸºæœ¬å— %i)"
-
-@@ -15634,13 +15166,11 @@
-
- #: cfgrtl.c:2510
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "missing REG_EH_REGION note in the end of bb %i"
- msgid "missing REG_EH_REGION note at the end of bb %i"
- msgstr "åŸºæœ¬å— %i 结尾缺少 REG_EH_REGION 记录"
-
- #: cfgrtl.c:2515
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "too many outgoing branch edges from bb %i"
- msgid "too many exception handling edges in bb %i"
- msgstr "ä»ŽåŸºæœ¬å— %i 分出太多的分支边"
-
-@@ -15651,31 +15181,26 @@
-
- #: cfgrtl.c:2528
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "fallthru edge after unconditional jump %i"
- msgid "fallthru edge after unconditional jump in bb %i"
- msgstr "éžæ¡ä»¶è·³è½¬ %i 之åŽçš„直通边"
-
- #: cfgrtl.c:2533
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "wrong number of branch edges after unconditional jump %i"
- msgid "wrong number of branch edges after unconditional jump in bb %i"
- msgstr "éžæ¡ä»¶è·³è½¬ %i 之åŽçš„分支边数ä¸å¯¹"
-
- #: cfgrtl.c:2540
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "wrong amount of branch edges after conditional jump %i"
- msgid "wrong amount of branch edges after conditional jump in bb %i"
- msgstr "æ¡ä»¶è·³è½¬ %i 之åŽçš„分支边数ä¸å¯¹"
-
- #: cfgrtl.c:2546
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "call edges for non-call insn in bb %i"
- msgid "abnormal call edges for non-call insn in bb %i"
- msgstr "åœ¨åŸºæœ¬å— %i 中éžè°ƒç”¨æŒ‡ä»¤çš„调用边"
-
- #: cfgrtl.c:2551
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "call edges for non-call insn in bb %i"
- msgid "sibcall edges for non-call insn in bb %i"
- msgstr "åœ¨åŸºæœ¬å— %i 中éžè°ƒç”¨æŒ‡ä»¤çš„调用边"
-
-@@ -15801,7 +15326,6 @@
-
- #: cgraph.c:2651
- #, fuzzy, gcc-internal-format
--#| msgid "Assume symbols might be invalid"
- msgid "local symbols must be defined"
- msgstr "å‡å®šç¬¦å·å¯èƒ½æ— æ•ˆ"
-
-@@ -15817,7 +15341,6 @@
-
- #: cgraph.c:2666
- #, fuzzy, gcc-internal-format
--#| msgid "inline clone is needed"
- msgid "inline clone is forced to output"
- msgstr "需è¦å†…è”克隆"
-
-@@ -15943,7 +15466,6 @@
-
- #: cgraph.c:2895
- #, fuzzy, gcc-internal-format
--#| msgid "expected statement"
- msgid "reference to dead statement"
- msgstr "需è¦è¯­å¥"
-
-@@ -15984,7 +15506,6 @@
-
- #: cgraphunit.c:774
- #, fuzzy, gcc-internal-format
--#| msgid "Warn when an inlined function cannot be inlined"
- msgid "always_inline function might not be inlinable"
- msgstr "当内è”函数无法被内è”时给出警告"
-
-@@ -16010,7 +15531,6 @@
-
- #: cgraphunit.c:1200
- #, fuzzy, gcc-internal-format
--#| msgid "%q+D used prior to declaration"
- msgid "%q+D aliased declaration"
- msgstr "%q+D在声明å‰ä½¿ç”¨"
-
-@@ -16021,7 +15541,6 @@
-
- #: cgraphunit.c:1303
- #, fuzzy, gcc-internal-format
--#| msgid "failed to reclaim unneeded function"
- msgid "failed to reclaim unneeded function in same comdat group"
- msgstr "无法收回ä¸éœ€è¦çš„函数"
-
-@@ -16072,19 +15591,16 @@
-
- #: collect2.c:1567 collect2.c:1750 collect2.c:1790
- #, fuzzy, gcc-internal-format
--#| msgid "fopen %s"
- msgid "fopen %s: %m"
- msgstr "fopen %s"
-
- #: collect2.c:1570 collect2.c:1755 collect2.c:1793
- #, fuzzy, gcc-internal-format
--#| msgid "fclose %s"
- msgid "fclose %s: %m"
- msgstr "fclose %s"
-
- #: collect2.c:1857
- #, fuzzy, gcc-internal-format
--#| msgid "can't get program status: %s"
- msgid "can't get program status: %m"
- msgstr "无法获å–程åºçŠ¶æ€ï¼š%s"
-
-@@ -16130,7 +15646,6 @@
-
- #: collect2.c:2546
- #, fuzzy, gcc-internal-format
--#| msgid "can't open nm output"
- msgid "can't open nm output: %m"
- msgstr "无法打开 nm 的输出"
-
-@@ -16151,7 +15666,6 @@
-
- #: collect2.c:2742
- #, fuzzy, gcc-internal-format
--#| msgid "can't open ldd output"
- msgid "can't open ldd output: %m"
- msgstr "无法打开 ldd 输出"
-
-@@ -16247,7 +15761,6 @@
-
- #: coverage.c:291
- #, fuzzy, gcc-internal-format
--#| msgid "checksum is %x instead of %x"
- msgid "checksum is (%x,%x) instead of (%x,%x)"
- msgstr "检验和是 %x 而ä¸æ˜¯ %x"
-
-@@ -16273,7 +15786,6 @@
-
- #: coverage.c:393
- #, fuzzy, gcc-internal-format
--#| msgid "execution counts estimated"
- msgid "execution counts estimated\n"
- msgstr "预计执行次数"
-
-@@ -16374,7 +15886,6 @@
-
- #: dumpfile.c:862
- #, fuzzy, gcc-internal-format
--#| msgid "ignoring unknown option %q.*s in %<-fdump-%s%>"
- msgid "unknown option %q.*s in %<-fopt-info-%s%>"
- msgstr "忽略未知的选项%q.*s,在%<-fdump-%s%>中"
-
-@@ -16390,7 +15901,6 @@
-
- #: dwarf2out.c:11303
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "non-delegitimized UNSPEC %d found in variable location"
- msgid "non-delegitimized UNSPEC %s (%d) found in variable location"
- msgstr "å˜é‡ä½ç½®å¤„å‘现未被éžæ³•åŒ–çš„ UNSPEC %d"
-
-@@ -16481,7 +15991,6 @@
-
- #: expr.c:7657
- #, fuzzy, gcc-internal-format
--#| msgid "global register variable %qD used in nested function"
- msgid "local frame unavailable (naked function?)"
- msgstr "嵌套函数中使用了全局寄存器å˜é‡%qD"
-
-@@ -16853,7 +16362,6 @@
-
- #: gcc.c:7131
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "-fuse-linker-plugin, but "
- msgid "-fuse-linker-plugin, but %s not found"
- msgstr "使用了 -fuse-linker-plugin,但"
-
-@@ -16944,7 +16452,6 @@
-
- #: gcc.c:8636
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "too few arguments to function"
- msgid "too few arguments to %%:replace-extension"
- msgstr "给予函数的实å‚太少"
-
-@@ -17042,13 +16549,11 @@
-
- #: gimplify.c:5647
- #, fuzzy, gcc-internal-format
--#| msgid "%qE not specified in enclosing parallel"
- msgid "%qE not specified in enclosing task"
- msgstr "%qE未为在括入的并行中指定"
-
- #: gimplify.c:5653
- #, fuzzy, gcc-internal-format
--#| msgid "%qE not specified in enclosing parallel"
- msgid "%qE not specified in enclosing teams construct"
- msgstr "%qE未为在括入的并行中指定"
-
-@@ -17069,7 +16574,6 @@
-
- #: gimplify.c:5770 gimplify.c:5799
- #, fuzzy, gcc-internal-format
--#| msgid "iteration variable %qE should not be reduction"
- msgid "iteration variable %qE is predetermined linear"
- msgstr "迭代å˜é‡%qEä¸åº”当是 reduction"
-
-@@ -17090,19 +16594,16 @@
-
- #: gimplify.c:5793
- #, fuzzy, gcc-internal-format
--#| msgid "iteration variable %qE should not be firstprivate"
- msgid "iteration variable %qE should not be lastprivate"
- msgstr "迭代å˜é‡%qEä¸åº”当是 firstprivate"
-
- #: gimplify.c:5796
- #, fuzzy, gcc-internal-format
--#| msgid "iteration variable %qE should be private"
- msgid "iteration variable %qE should not be private"
- msgstr "迭代å˜é‡%qE应当是ç§æœ‰çš„"
-
- #: gimplify.c:6064
- #, fuzzy, gcc-internal-format
--#| msgid "%s variable %qE is private in outer context"
- msgid "copyprivate variable %qE is not threadprivate or private in outer context"
- msgstr "%s å˜é‡%qE在外层上下文中是ç§æœ‰çš„"
-
-@@ -17113,7 +16614,6 @@
-
- #: gimplify.c:8063
- #, fuzzy, gcc-internal-format
--#| msgid "expected %<}%> before %<else%>"
- msgid "expected %<_Cilk_spawn%> before %<_Cilk_sync%>"
- msgstr "%<else%>å‰éœ€è¦%<}%>"
-
-@@ -17170,7 +16670,6 @@
-
- #: ipa-devirt.c:302 ipa-devirt.c:337
- #, fuzzy, gcc-internal-format
--#| msgid "previous definition here"
- msgid "type %qD violates one definition rule "
- msgstr "å…ˆå‰çš„定义在这里"
-
-@@ -17212,7 +16711,6 @@
-
- #: ira.c:5544
- #, fuzzy, gcc-internal-format
--#| msgid "as %qD"
- msgid "for %qD"
- msgstr "作为%qD"
-
-@@ -17238,7 +16736,6 @@
-
- #: lto-cgraph.c:1083
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "bytecode stream: found multiple instances of cgraph node %d"
- msgid "bytecode stream: found multiple instances of cgraph node with uid %d"
- msgstr "字节ç æµï¼šæ‰¾åˆ° cgraph 节点 %d 的多个实例"
-
-@@ -17312,19 +16809,16 @@
-
- #: lto-streamer-in.c:824
- #, fuzzy, gcc-internal-format
--#| msgid "operand number out of range"
- msgid "Reference statement index out of range"
- msgstr "æ“作数å·è¶…出范围"
-
- #: lto-streamer-in.c:827
- #, fuzzy, gcc-internal-format
--#| msgid "Warn if deprecated empty statements are found"
- msgid "Reference statement index not found"
- msgstr "å‘现ä¸å»ºè®®ä½¿ç”¨çš„空语å¥æ—¶ç»™å‡ºè­¦å‘Š"
-
- #: lto-streamer-out.c:393 lto-streamer-out.c:1307
- #, fuzzy, gcc-internal-format
--#| msgid "tree code %qs is not supported in gimple streams"
- msgid "tree code %qs is not supported in LTO streams"
- msgstr "树代ç %qs在 gimple æµä¸­ä¸è¢«æ”¯æŒ"
-
-@@ -17370,13 +16864,11 @@
-
- #: omp-low.c:2351 omp-low.c:2364
- #, fuzzy, gcc-internal-format
--#| msgid "%<#pragma omp section%> may only be used in %<#pragma omp sections%> construct"
- msgid "%<#pragma omp cancel sections%> inside %<nowait%> sections construct"
- msgstr "%<#pragma omp section%>åªèƒ½ç”¨åœ¨%<#pragma omp sections%>结构中"
-
- #: omp-low.c:2378
- #, fuzzy, gcc-internal-format
--#| msgid "invalid PHI argument"
- msgid "invalid arguments"
- msgstr "无效的 PHI 实å‚"
-
-@@ -17417,7 +16909,6 @@
-
- #: omp-low.c:2492
- #, fuzzy, gcc-internal-format
--#| msgid "master region may not be closely nested inside of work-sharing or explicit task region"
- msgid "teams construct not closely nested inside of target region"
- msgstr "主è¦åŒºåŸŸä¸å¯ä»¥ç´§å¯†åµŒå¥—在工作共享或显å¼çš„任务区域内"
-
-@@ -17438,13 +16929,11 @@
-
- #: omp-low.c:10275
- #, fuzzy, gcc-internal-format
--#| msgid "invalid entry to OpenMP structured block"
- msgid "invalid entry to Cilk Plus structured block"
- msgstr "OpenMP 结构å—å…¥å£æ— æ•ˆ"
-
- #: omp-low.c:10283
- #, fuzzy, gcc-internal-format
--#| msgid "invalid branch to/from an OpenMP structured block"
- msgid "invalid branch to/from a Cilk Plus structured block"
- msgstr "进出 OpenMP 结构å—的分支无效"
-
-@@ -17455,7 +16944,6 @@
-
- #: omp-low.c:10761
- #, fuzzy, gcc-internal-format
--#| msgid "ignoring duplicate directory \"%s\"\n"
- msgid "ignoring large linear step"
- msgstr "忽略é‡å¤çš„目录“%sâ€\n"
-
-@@ -17558,7 +17046,6 @@
-
- #: opts.c:695
- #, fuzzy, gcc-internal-format
--#| msgid "-static-libgfortran is not supported in this configuration"
- msgid "transactional memory is not supported with non-call exceptions"
- msgstr "-static-libgfortran 在此é…置下ä¸å—支æŒ"
-
-@@ -17705,7 +17192,6 @@
-
- #: passes.c:107
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "%s does not support split_edge"
- msgid "pass %s does not support cloning"
- msgstr "%s ä¸æ”¯æŒ split_edge"
-
-@@ -17721,13 +17207,11 @@
-
- #: passes.c:999
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "unknown field %qE specified in initializer"
- msgid "unknown pass %s specified in -fenable"
- msgstr "åˆå§‹å€¼è®¾å®šé¡¹é‡Œæœ‰æœªçŸ¥çš„字段%qE"
-
- #: passes.c:1001
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "unknown field %qE specified in initializer"
- msgid "unknown pass %s specified in -fdisable"
- msgstr "åˆå§‹å€¼è®¾å®šé¡¹é‡Œæœ‰æœªçŸ¥çš„字段%qE"
-
-@@ -17743,19 +17227,16 @@
-
- #: passes.c:1065 passes.c:1093
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "invalid floating point option: -mfpu=%s"
- msgid "Invalid range %s in option %s"
- msgstr "无效的浮点选项:-mfpu=%s"
-
- #: passes.c:1111
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "invalid storage class for function %qE"
- msgid "enable pass %s for function %s"
- msgstr "函数%qE存储类无效"
-
- #: passes.c:1122
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "invalid storage class for function %qE"
- msgid "disable pass %s for function %s"
- msgstr "函数%qE存储类无效"
-
-@@ -17859,7 +17340,6 @@
-
- #: predict.c:2805
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Missing argument list in function '%s' at %C"
- msgid "Missing counts for called function %s/%i"
- msgstr "函数‘%s’在%C处缺少å‚数列表"
-
-@@ -17967,13 +17447,11 @@
-
- #: reginfo.c:770
- #, fuzzy, gcc-internal-format
--#| msgid "register used for two global register variables"
- msgid "register of %qD used for multiple global register variables"
- msgstr "寄存器用作两个全局寄存器å˜é‡"
-
- #: reginfo.c:773
- #, fuzzy, gcc-internal-format
--#| msgid " conflict with %q+D"
- msgid "conflicts with %qD"
- msgstr " 与%q+D冲çª"
-
-@@ -18199,25 +17677,21 @@
-
- #: symtab.c:736
- #, fuzzy, gcc-internal-format
--#| msgid "function returning a function"
- msgid "function symbol is not function"
- msgstr "函数返回了一个函数"
-
- #: symtab.c:744
- #, fuzzy, gcc-internal-format
--#| msgid "array is not addressable"
- msgid "variable symbol is not variable"
- msgstr "数组ä¸èƒ½è¢«å–指"
-
- #: symtab.c:750
- #, fuzzy, gcc-internal-format
--#| msgid "node has wrong clone list"
- msgid "node has unknown type"
- msgstr "节点的克隆列表ä¸æ­£ç¡®"
-
- #: symtab.c:759
- #, fuzzy, gcc-internal-format
--#| msgid "node not found in cgraph_hash"
- msgid "node not found in symtab decl hashtable"
- msgstr "cgraph_hash 中找ä¸åˆ°èŠ‚点"
-
-@@ -18233,19 +17707,16 @@
-
- #: symtab.c:790
- #, fuzzy, gcc-internal-format
--#| msgid "node not found in cgraph_hash"
- msgid "node not found in symtab assembler name hash"
- msgstr "cgraph_hash 中找ä¸åˆ°èŠ‚点"
-
- #: symtab.c:797
- #, fuzzy, gcc-internal-format
--#| msgid "double linked list of clones corrupted"
- msgid "double linked list of assembler names corrupted"
- msgstr "åŒå‘克隆链接列表已æŸå"
-
- #: symtab.c:802
- #, fuzzy, gcc-internal-format
--#| msgid "node is in clone list but it is not clone"
- msgid "node is analyzed byt it is not a definition"
- msgstr "节点在克隆列表中,但并ä¸æ˜¯å…‹éš†"
-
-@@ -18256,7 +17727,6 @@
-
- #: symtab.c:813
- #, fuzzy, gcc-internal-format
--#| msgid "node is in clone list but it is not clone"
- msgid "node is alias but not definition"
- msgstr "节点在克隆列表中,但并ä¸æ˜¯å…‹éš†"
-
-@@ -18272,7 +17742,6 @@
-
- #: symtab.c:832
- #, fuzzy, gcc-internal-format
--#| msgid "Combining units with different profiles is not supported."
- msgid "mixing different types of symbol in same comdat groups is not supported"
- msgstr "ä¸æ”¯æŒç»„åˆæœ‰ä¸åŒå–æ ·ä¿¡æ¯çš„å•å…ƒã€‚"
-
-@@ -18293,13 +17762,11 @@
-
- #: symtab.c:885
- #, fuzzy, gcc-internal-format
--#| msgid "verify_cgraph_node failed"
- msgid "verify_symtab_node failed"
- msgstr "verify_cgraph_node 失败"
-
- #: symtab.c:1110
- #, fuzzy, gcc-internal-format
--#| msgid "function %q+D redeclared as inline"
- msgid "function %q+D part of alias cycle"
- msgstr "函数%q+Dé‡å£°æ˜Žä¸ºå†…è”çš„"
-
-@@ -18335,13 +17802,11 @@
-
- #: tlink.c:489
- #, fuzzy, gcc-internal-format
--#| msgid "removing .rpo file"
- msgid "removing .rpo file: %m"
- msgstr "删除 .rpo 文件"
-
- #: tlink.c:491
- #, fuzzy, gcc-internal-format
--#| msgid "renaming .rpo file"
- msgid "renaming .rpo file: %m"
- msgstr "é‡å‘½å .rpo 文件"
-
-@@ -18382,7 +17847,6 @@
-
- #: toplev.c:989
- #, fuzzy, gcc-internal-format
--#| msgid "-fstack-usage not supported for this target"
- msgid "stack usage computation not supported for this target"
- msgstr "-fstack-usage 在此目标机上ä¸å—支æŒ"
-
-@@ -18393,13 +17857,11 @@
-
- #: toplev.c:1060
- #, fuzzy, gcc-internal-format
--#| msgid "stackframe too big: %d bytes"
- msgid "stack usage might be %wd bytes"
- msgstr "栈帧太大:%d 字节"
-
- #: toplev.c:1063
- #, fuzzy, gcc-internal-format
--#| msgid "stackframe too big: %d bytes"
- msgid "stack usage is %wd bytes"
- msgstr "栈帧太大:%d 字节"
-
-@@ -18495,7 +17957,6 @@
-
- #: toplev.c:1559
- #, fuzzy, gcc-internal-format
--#| msgid "-fdata-sections not supported for this target"
- msgid "-fsanitize=address not supported for this target"
- msgstr "-fdata-sections 在此目标机上ä¸å—支æŒ"
-
-@@ -18511,7 +17972,6 @@
-
- #: trans-mem.c:614
- #, fuzzy, gcc-internal-format
--#| msgid "invalid use of %qD in linkage specification"
- msgid "invalid volatile use of %qD inside transaction"
- msgstr "指定链接时使用%qD无效"
-
-@@ -18532,7 +17992,6 @@
-
- #: trans-mem.c:725
- #, fuzzy, gcc-internal-format
--#| msgid "indirect function call with a yet undetermined callee"
- msgid "unsafe indirect function call within atomic transaction"
- msgstr "间接函数调用目标未定义"
-
-@@ -18548,25 +18007,21 @@
-
- #: trans-mem.c:743
- #, fuzzy, gcc-internal-format
--#| msgid "indirect function call with a yet undetermined callee"
- msgid "unsafe indirect function call within %<transaction_safe%> function"
- msgstr "间接函数调用目标未定义"
-
- #: trans-mem.c:758 trans-mem.c:4721
- #, fuzzy, gcc-internal-format
--#| msgid "namespace %qD not allowed in using-declaration"
- msgid "asm not allowed in atomic transaction"
- msgstr "ä¸å…许在 using 声明中使用命å空间%qD"
-
- #: trans-mem.c:761
- #, fuzzy, gcc-internal-format
--#| msgid "attributes are not allowed on a function-definition"
- msgid "asm not allowed in %<transaction_safe%> function"
- msgstr "函数定义中ä¸å…许有属性"
-
- #: trans-mem.c:772
- #, fuzzy, gcc-internal-format
--#| msgid "Place each function into its own section"
- msgid "relaxed transaction in atomic transaction"
- msgstr "å°†æ¯ä¸ªå‡½æ•°åˆ†åˆ«æ”¾åœ¨å®ƒä»¬å„自的节中"
-
-@@ -18577,7 +18032,6 @@
-
- #: trans-mem.c:782
- #, fuzzy, gcc-internal-format
--#| msgid "pointer to a function used in subtraction"
- msgid "outer transaction in transaction"
- msgstr "函数指针ä¸èƒ½ç›¸å‡"
-
-@@ -18593,7 +18047,6 @@
-
- #: trans-mem.c:4348
- #, fuzzy, gcc-internal-format
--#| msgid "attributes are not allowed on a function-definition"
- msgid "%Kasm not allowed in %<transaction_safe%> function"
- msgstr "函数定义中ä¸å…许有属性"
-
-@@ -18684,7 +18137,6 @@
-
- #: tree-cfg.c:2836
- #, fuzzy, gcc-internal-format
--#| msgid "invalid position or size operand to BIT_FIELD_REF"
- msgid "position plus size exceeds size of referenced object in BIT_FIELD_REF"
- msgstr "BIT_FIELD_REF ä½ç½®æˆ–大å°æ“作数无效"
-
-@@ -18850,31 +18302,26 @@
-
- #: tree-cfg.c:3333
- #, fuzzy, gcc-internal-format
--#| msgid "type mismatch in comparison expression"
- msgid "mismatching comparison operand types"
- msgstr "比较表达å¼ç±»åž‹ä¸åŒ¹é…"
-
- #: tree-cfg.c:3347
- #, fuzzy, gcc-internal-format
--#| msgid "function returning a function"
- msgid "vector comparison returning a boolean"
- msgstr "函数返回了一个函数"
-
- #: tree-cfg.c:3361
- #, fuzzy, gcc-internal-format
--#| msgid "invalid operands in gimple comparison"
- msgid "non-vector operands in vector comparison"
- msgstr "gimple 比较中æ“作数无效"
-
- #: tree-cfg.c:3374
- #, fuzzy, gcc-internal-format
--#| msgid "invalid vector permutation constant"
- msgid "invalid vector comparison resulting type"
- msgstr "无效的å‘é‡ç½®æ¢å¸¸é‡"
-
- #: tree-cfg.c:3381
- #, fuzzy, gcc-internal-format
--#| msgid "Warn about comparison of different enum types"
- msgid "bogus comparison result type"
- msgstr "对ä¸åŒæžšä¸¾ç±»åž‹ä¹‹é—´çš„比较给出警告"
-
-@@ -18950,7 +18397,6 @@
-
- #: tree-cfg.c:3660 tree-cfg.c:3681
- #, fuzzy, gcc-internal-format
--#| msgid "type mismatch in vector shift expression"
- msgid "type mismatch in widening vector shift expression"
- msgstr "å‘é‡ç§»ä½è¡¨è¾¾å¼ç±»åž‹ä¸åŒ¹é…"
-
-@@ -19001,13 +18447,11 @@
-
- #: tree-cfg.c:3900
- #, fuzzy, gcc-internal-format
--#| msgid "type mismatch in vector shift expression"
- msgid "type mismatch in vector permute expression"
- msgstr "å‘é‡ç§»ä½è¡¨è¾¾å¼ç±»åž‹ä¸åŒ¹é…"
-
- #: tree-cfg.c:3912
- #, fuzzy, gcc-internal-format
--#| msgid "expected integer expression"
- msgid "vector types expected in vector permute expression"
- msgstr "需è¦æ•´æ•°è¡¨è¾¾å¼"
-
-@@ -19018,7 +18462,6 @@
-
- #: tree-cfg.c:3939
- #, fuzzy, gcc-internal-format
--#| msgid "invalid increment expression"
- msgid "invalid mask type in vector permute expression"
- msgstr "无效的自增语å¥"
-
-@@ -19084,43 +18527,36 @@
-
- #: tree-cfg.c:4268
- #, fuzzy, gcc-internal-format
--#| msgid "invalid operand to switch statement"
- msgid "non-integral type switch statement"
- msgstr "开关语å¥æ“作数无效"
-
- #: tree-cfg.c:4276
- #, fuzzy, gcc-internal-format
--#| msgid "%<default%> label not within a switch statement"
- msgid "invalid default case label in switch statement"
- msgstr "%<default%>æ ‡å·æœªå‡ºçŽ°åœ¨ switch 语å¥å†…"
-
- #: tree-cfg.c:4288
- #, fuzzy, gcc-internal-format
--#| msgid "case label not within a switch statement"
- msgid "invalid case label in switch statement"
- msgstr "case æ ‡å·å‡ºçŽ°åœ¨å¼€å…³è¯­å¥å¤–"
-
- #: tree-cfg.c:4295
- #, fuzzy, gcc-internal-format
--#| msgid "invalid operand to switch statement"
- msgid "invalid case range in switch statement"
- msgstr "开关语å¥æ“作数无效"
-
- #: tree-cfg.c:4305
- #, fuzzy, gcc-internal-format
--#| msgid "case label not within a switch statement"
- msgid "type mismatch for case label in switch statement"
- msgstr "case æ ‡å·å‡ºçŽ°åœ¨å¼€å…³è¯­å¥å¤–"
-
- #: tree-cfg.c:4315
- #, fuzzy, gcc-internal-format
--#| msgid "case label not within a switch statement"
- msgid "type precision mismatch in switch statement"
- msgstr "case æ ‡å·å‡ºçŽ°åœ¨å¼€å…³è¯­å¥å¤–"
-
- #: tree-cfg.c:4324
- #, fuzzy, gcc-internal-format
--#| msgid "case label not within a switch statement"
- msgid "case labels not sorted in switch statement"
- msgstr "case æ ‡å·å‡ºçŽ°åœ¨å¼€å…³è¯­å¥å¤–"
-
-@@ -19191,7 +18627,6 @@
-
- #: tree-cfg.c:4816
- #, fuzzy, gcc-internal-format
--#| msgid "from this location"
- msgid "PHI node with location"
- msgstr "从这个地方"
-
-@@ -19327,13 +18762,11 @@
-
- #: tree-diagnostic.c:203
- #, fuzzy, gcc-internal-format
--#| msgid "redefinition of %q+D"
- msgid "in definition of macro %qs"
- msgstr "%q+Dé‡å®šä¹‰"
-
- #: tree-diagnostic.c:220
- #, fuzzy, gcc-internal-format
--#| msgid "%s:%d: in constexpr expansion of %qs"
- msgid "in expansion of macro %qs"
- msgstr "%s:%d:在%qs的广义常表达å¼æ‰©å±•ä¸­"
-
-@@ -19439,7 +18872,6 @@
-
- #: tree-inline.c:4147
- #, fuzzy, gcc-internal-format
--#| msgid "inlining failed in call to %q+F: %s"
- msgid "inlining failed in call to always_inline %q+F: %s"
- msgstr "调用%q+F时内è”失败:%s"
-
-@@ -19466,7 +18898,6 @@
-
- #: tree-ssa-loop-niter.c:2632
- #, fuzzy, gcc-internal-format
--#| msgid "operation on %qE may be undefined"
- msgid "iteration %E invokes undefined behavior"
- msgstr "%qE上的è¿ç®—结果å¯èƒ½æ˜¯æœªå®šä¹‰çš„"
-
-@@ -19482,7 +18913,6 @@
-
- #: tree-ssa-operands.c:1001
- #, fuzzy, gcc-internal-format
--#| msgid "invalid operand in return statement"
- msgid "virtual def operand missing for stmt"
- msgstr "返回语å¥æ“作数无效"
-
-@@ -19503,7 +18933,6 @@
-
- #: tree-ssa-operands.c:1042
- #, fuzzy, gcc-internal-format
--#| msgid "operand number missing after %%-letter"
- msgid "use operand missing for stmt"
- msgstr "%% å­—æ¯åŽç¼ºå°‘æ“作数å·"
-
-@@ -19529,13 +18958,11 @@
-
- #: tree-ssa-uninit.c:238
- #, fuzzy, gcc-internal-format
--#| msgid "%qD is used uninitialized in this function"
- msgid "%qE is used uninitialized in this function"
- msgstr "此函数中的%qD在使用å‰æœªåˆå§‹åŒ–"
-
- #: tree-ssa-uninit.c:243
- #, fuzzy, gcc-internal-format
--#| msgid "%qD may be used uninitialized in this function"
- msgid "%qE may be used uninitialized in this function"
- msgstr "此函数中的%qD在使用å‰å¯èƒ½æœªåˆå§‹åŒ–"
-
-@@ -19676,7 +19103,6 @@
-
- #: tree-streamer-out.c:510
- #, fuzzy, gcc-internal-format
--#| msgid "gimple bytecode streams do not support machine specific builtin functions on this target"
- msgid "tree bytecode streams do not support machine specific builtin functions on this target"
- msgstr "GIMPLE 字节ç æµåœ¨æ­¤ç›®æ ‡æœºä¸Šä¸æ”¯æŒæœºå™¨ç›¸å…³çš„内建函数"
-
-@@ -19882,37 +19308,31 @@
-
- #: tree.c:12081
- #, fuzzy
--#| msgid "%qD is deprecated (declared at %s:%d): %s"
- msgid "%qD is deprecated (declared at %r%s:%d%R): %s"
- msgstr "ä¸å»ºè®®ä½¿ç”¨%qD(声明于 %s:%d):%s"
-
- #: tree.c:12085
- #, fuzzy
--#| msgid "%qD is deprecated (declared at %s:%d)"
- msgid "%qD is deprecated (declared at %r%s:%d%R)"
- msgstr "ä¸å»ºè®®ä½¿ç”¨%qD(声明于 %s:%d)"
-
- #: tree.c:12110
- #, fuzzy
--#| msgid "%qE is deprecated (declared at %s:%d): %s"
- msgid "%qE is deprecated (declared at %r%s:%d%R): %s"
- msgstr "ä¸å»ºè®®ä½¿ç”¨%qE(声明于 %s:%d):%s"
-
- #: tree.c:12114
- #, fuzzy
--#| msgid "%qE is deprecated (declared at %s:%d)"
- msgid "%qE is deprecated (declared at %r%s:%d%R)"
- msgstr "ä¸å»ºè®®ä½¿ç”¨%qE(声明于 %s:%d)"
-
- #: tree.c:12121
- #, fuzzy
--#| msgid "type is deprecated (declared at %s:%d): %s"
- msgid "type is deprecated (declared at %r%s:%d%R): %s"
- msgstr "ä¸å»ºè®®ä½¿ç”¨ç±»åž‹(声明于 %s:%d):%s"
-
- #: tree.c:12125
- #, fuzzy
--#| msgid "type is deprecated (declared at %s:%d)"
- msgid "type is deprecated (declared at %r%s:%d%R)"
- msgstr "ä¸å»ºè®®ä½¿ç”¨ç±»åž‹(声明于 %s:%d)"
-
-@@ -19968,13 +19388,11 @@
-
- #: varasm.c:319
- #, fuzzy, gcc-internal-format
--#| msgid "%+D causes a section type conflict"
- msgid "%+D causes a section type conflict with %D"
- msgstr "%+D 导致一个节类型冲çª"
-
- #: varasm.c:322
- #, fuzzy, gcc-internal-format
--#| msgid " conflict with %q+D"
- msgid "section type conflict with %D"
- msgstr " 与%q+D冲çª"
-
-@@ -19985,13 +19403,11 @@
-
- #: varasm.c:329
- #, fuzzy, gcc-internal-format
--#| msgid "%+D causes a section type conflict"
- msgid "section type conflict"
- msgstr "%+D 导致一个节类型冲çª"
-
- #: varasm.c:977
- #, fuzzy, gcc-internal-format
--#| msgid "alignment of %q+D is greater than maximum object file alignment. Using %d"
- msgid "alignment of %q+D is greater than maximum object file alignment %d"
- msgstr "%q+D的对é½è¦æ±‚大于目标文件的最大对é½è¾¹ç•Œã€‚使用 %d"
-
-@@ -20012,13 +19428,11 @@
-
- #: varasm.c:1295
- #, fuzzy, gcc-internal-format
--#| msgid "register specified for %q+D isn%'t suitable for data type"
- msgid "the register specified for %q+D cannot be accessed by the current target"
- msgstr "为%q+D指定的寄存器ä¸é€‚åˆæ­¤æ•°æ®ç±»åž‹"
-
- #: varasm.c:1298
- #, fuzzy, gcc-internal-format
--#| msgid "register used for two global register variables"
- msgid "the register specified for %q+D is not general enough to be used as a register variable"
- msgstr "寄存器用作两个全局寄存器å˜é‡"
-
-@@ -20094,7 +19508,6 @@
-
- #: varasm.c:5600
- #, fuzzy, gcc-internal-format
--#| msgid "nested functions not supported on this target"
- msgid "ifunc is not supported on this target"
- msgstr "嵌套函数在此目标机上ä¸å—支æŒ"
-
-@@ -20141,13 +19554,11 @@
-
- #: c-family/array-notation-common.c:70
- #, fuzzy, gcc-internal-format
--#| msgid "case label is not an integer constant expression"
- msgid "__sec_implicit_index parameter must be an integer constant expression"
- msgstr "case æ ‡å·ä¸æ˜¯ä¸€ä¸ªæ•´æ•°å¸¸é‡è¡¨è¾¾å¼"
-
- #: c-family/array-notation-common.c:106
- #, fuzzy, gcc-internal-format
--#| msgid "type mismatch in shift expression"
- msgid "length mismatch in expression"
- msgstr "移ä½è¡¨è¾¾å¼ç±»åž‹ä¸åŒ¹é…"
-
-@@ -20154,7 +19565,6 @@
- #: c-family/array-notation-common.c:278 c-family/array-notation-common.c:306
- #: c/c-array-notation.c:721 cp/cp-array-notation.c:610
- #, fuzzy, gcc-internal-format
--#| msgid "comparison between %qT and %qT"
- msgid "rank mismatch between %qE and %qE"
- msgstr "在%qT和%qT间比较"
-
-@@ -20166,7 +19576,6 @@
- #. may lie in the original expression.
- #: c-family/array-notation-common.c:287
- #, fuzzy, gcc-internal-format
--#| msgid "type mismatch in shift expression"
- msgid "rank mismatch in expression %qE"
- msgstr "移ä½è¡¨è¾¾å¼ç±»åž‹ä¸åŒ¹é…"
-
-@@ -20177,19 +19586,16 @@
-
- #: c-family/c-cilkplus.c:39
- #, fuzzy, gcc-internal-format
--#| msgid "iteration variable %qE should be private"
- msgid "iteration variable cannot be volatile"
- msgstr "迭代å˜é‡%qE应当是ç§æœ‰çš„"
-
- #: c-family/c-cilkplus.c:82
- #, fuzzy, gcc-internal-format
--#| msgid "%qE appears more than once in data clauses"
- msgid "variable appears in more than one clause"
- msgstr "%qE在数æ®å­å¥ä¸­å¤šæ¬¡å‡ºçŽ°"
-
- #: c-family/c-cilkplus.c:84
- #, fuzzy, gcc-internal-format
--#| msgid "struct defined here"
- msgid "other clause defined here"
- msgstr "结构在此定义"
-
-@@ -20400,13 +19806,11 @@
-
- #: c-family/c-common.c:2333
- #, fuzzy, gcc-internal-format
--#| msgid "the last argument must be an 8-bit immediate"
- msgid "__builtin_shuffle last argument must be an integer vector"
- msgstr "最åŽä¸€ä¸ªå®žå‚必须是一个 8 ä½ç«‹å³æ•°"
-
- #: c-family/c-common.c:2342
- #, fuzzy, gcc-internal-format
--#| msgid "%<__builtin_longjmp%> second argument must be 1"
- msgid "__builtin_shuffle arguments must be vectors"
- msgstr "%<__builtin_longjmp%>的第二个实å‚必须是 1"
-
-@@ -20557,13 +19961,11 @@
-
- #: c-family/c-common.c:4958
- #, fuzzy, gcc-internal-format
--#| msgid "ISO C++ does not allow %<alignof%> with a non-type"
- msgid "ISO C++ does not permit %<alignof%> applied to a function type"
- msgstr "ISO C++ ä¸å…许对éžç±»åž‹ä½¿ç”¨%<alignof%>"
-
- #: c-family/c-common.c:4961
- #, fuzzy, gcc-internal-format
--#| msgid "ISO C++ does not allow %<alignof%> with a non-type"
- msgid "ISO C does not permit %<_Alignof%> applied to a function type"
- msgstr "ISO C++ ä¸å…许对éžç±»åž‹ä½¿ç”¨%<alignof%>"
-
-@@ -20574,13 +19976,11 @@
-
- #: c-family/c-common.c:4981
- #, fuzzy, gcc-internal-format
--#| msgid "invalid application of %qs to incomplete type %qT "
- msgid "invalid application of %qs to incomplete type %qT"
- msgstr "%qsä¸èƒ½ç”¨äºŽä¸å®Œå…¨çš„类型%qT"
-
- #: c-family/c-common.c:4989
- #, fuzzy, gcc-internal-format
--#| msgid "invalid application of %qs to incomplete type %qT "
- msgid "invalid application of %qs to array type %qT of incomplete element type"
- msgstr "%qsä¸èƒ½ç”¨äºŽä¸å®Œå…¨çš„类型%qT"
-
-@@ -20787,13 +20187,11 @@
-
- #: c-family/c-common.c:7417
- #, fuzzy, gcc-internal-format
--#| msgid "requested alignment is not a constant"
- msgid "requested alignment is not an integer constant"
- msgstr "è¦æ±‚的对é½è¾¹ç•Œä¸æ˜¯å¸¸é‡"
-
- #: c-family/c-common.c:7425
- #, fuzzy, gcc-internal-format
--#| msgid "requested alignment is not a power of 2"
- msgid "requested alignment is not a positive power of 2"
- msgstr "è¦æ±‚的对é½è¾¹ç•Œä¸æ˜¯ 2 çš„æŸæ¬¡æ–¹"
-
-@@ -20804,7 +20202,6 @@
-
- #: c-family/c-common.c:7513
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "requested alignment is too large"
- msgid "requested alignment %d is larger than %d"
- msgstr "è¦æ±‚的对é½è¾¹ç•Œå¤ªå¤§"
-
-@@ -20921,37 +20318,31 @@
-
- #: c-family/c-common.c:8190
- #, fuzzy, gcc-internal-format
--#| msgid "%qE attribute ignored"
- msgid "%qE attribute duplicated"
- msgstr "%qE属性被忽略"
-
- #: c-family/c-common.c:8192
- #, fuzzy, gcc-internal-format
--#| msgid "%qE attribute ignored for %qE"
- msgid "%qE attribute follows %qE"
- msgstr "%qE属性为%qE所忽略"
-
- #: c-family/c-common.c:8291
- #, fuzzy, gcc-internal-format
--#| msgid "previously declared here"
- msgid "type was previously declared %qE"
- msgstr "以å‰åœ¨æ­¤å£°æ˜Žè¿‡"
-
- #: c-family/c-common.c:8344
- #, fuzzy, gcc-internal-format
--#| msgid "cleanup argument not an identifier"
- msgid "%qE argument not an identifier"
- msgstr "cleanup 实å‚ä¸æ˜¯ä¸€ä¸ªæ ‡è¯†ç¬¦"
-
- #: c-family/c-common.c:8355
- #, fuzzy, gcc-internal-format
--#| msgid "%qD is not declared in %qD"
- msgid "%qD is not compatible with %qD"
- msgstr "%qD未在%qD中声明"
-
- #: c-family/c-common.c:8358
- #, fuzzy, gcc-internal-format
--#| msgid "cleanup argument not a function"
- msgid "transaction_wrap argument is not a function"
- msgstr "cleanup 实å‚ä¸æ˜¯ä¸€ä¸ªå‡½æ•°"
-
-@@ -21095,7 +20486,6 @@
-
- #: c-family/c-common.c:9343
- #, fuzzy, gcc-internal-format
--#| msgid "non-const integer argument %u in call to function %qE"
- msgid "non-integer argument 3 in call to function %qE"
- msgstr "给予函数%2$qEçš„å‚æ•°%1$uä¸æ˜¯æ•´åž‹å¸¸é‡"
-
-@@ -21316,7 +20706,6 @@
-
- #: c-family/c-common.c:9932
- #, fuzzy, gcc-internal-format
--#| msgid "invalid type argument of %<->%> (have %qT)"
- msgid "invalid type argument of %<->*%> (have %qT)"
- msgstr "%<->%>å‚数类型无效(有%qT)"
-
-@@ -21342,49 +20731,41 @@
-
- #: c-family/c-common.c:10277
- #, fuzzy, gcc-internal-format
--#| msgid "not enough arguments to function %qE"
- msgid "incorrect number of arguments to function %qE"
- msgstr "æ供给函数%qE的实å‚太少"
-
- #: c-family/c-common.c:10285
- #, fuzzy, gcc-internal-format
--#| msgid "argument %d of %qE must be an address"
- msgid "argument 1 of %qE must be a non-void pointer type"
- msgstr "%2$qEçš„å®žå‚ %1$d 必须是地å€"
-
- #: c-family/c-common.c:10294
- #, fuzzy, gcc-internal-format
--#| msgid "%Kfirst argument of %D must be a pointer, second integer constant"
- msgid "argument 1 of %qE must be a pointer to a constant size type"
- msgstr "%K%D 的第一个实å‚必须是一个指针,第二个必须是整常é‡"
-
- #: c-family/c-common.c:10305
- #, fuzzy, gcc-internal-format
--#| msgid "%Kfirst argument of %D must be a pointer, second integer constant"
- msgid "argument 1 of %qE must be a pointer to a nonzero size object"
- msgstr "%K%D 的第一个实å‚必须是一个指针,第二个必须是整常é‡"
-
- #: c-family/c-common.c:10320
- #, fuzzy, gcc-internal-format
--#| msgid "argument %d of %qE must be an address"
- msgid "argument %d of %qE must be a pointer type"
- msgstr "%2$qEçš„å®žå‚ %1$d 必须是地å€"
-
- #: c-family/c-common.c:10327
- #, fuzzy, gcc-internal-format
--#| msgid "Type/rank mismatch in argument '%s' at %L"
- msgid "size mismatch in argument %d of %qE"
- msgstr "%2$L处实å‚‘%1$s’类型/秩ä¸åŒ¹é…"
-
- #: c-family/c-common.c:10343
- #, fuzzy, gcc-internal-format
--#| msgid "incompatible type for argument %d of %qE"
- msgid "invalid memory model argument %d of %qE"
- msgstr "%2$qE的第 %1$d 个实å‚类型ä¸å…¼å®¹"
-
- #: c-family/c-common.c:10350
- #, fuzzy, gcc-internal-format
--#| msgid "incompatible type for argument %d of %qE"
- msgid "non-integer memory model argument %d of %qE"
- msgstr "%2$qE的第 %1$d 个实å‚类型ä¸å…¼å®¹"
-
-@@ -21520,7 +20901,6 @@
-
- #: c-family/c-common.c:11454
- #, fuzzy, gcc-internal-format
--#| msgid "%q+D defined but not used"
- msgid "typedef %qD locally defined but not used"
- msgstr "%q+D定义åŽæœªä½¿ç”¨"
-
-@@ -21532,7 +20912,6 @@
- #: c-family/c-common.c:11733 c-family/c-common.c:11783
- #: c-family/c-common.c:11798 cp/call.c:4493 cp/call.c:4500
- #, fuzzy, gcc-internal-format
--#| msgid "conversion from %qT to %qT is ambiguous"
- msgid "conversion of scalar %qT to vector %qT involves truncation"
- msgstr "从%qT到%qT的转æ¢æœ‰æ­§ä¹‰"
-
-@@ -22020,7 +21399,6 @@
-
- #: c-family/c-omp.c:976
- #, fuzzy, gcc-internal-format
--#| msgid "%qE is not a function name"
- msgid "%qD is not an function argument"
- msgstr "%qEä¸æ˜¯ä¸€ä¸ªå‡½æ•°å"
-
-@@ -22091,7 +21469,6 @@
-
- #: c-family/c-opts.c:924
- #, fuzzy, gcc-internal-format
--#| msgid "nested functions not supported on this target"
- msgid "external TLS initialization functions not supported on this target"
- msgstr "嵌套函数在此目标机上ä¸å—支æŒ"
-
-@@ -22502,19 +21879,16 @@
-
- #: c-family/cilk.c:93 cp/parser.c:5784
- #, fuzzy, gcc-internal-format
--#| msgid "%<friend%> can only be specified inside a class"
- msgid "%<_Cilk_spawn%> may only be used inside a function"
- msgstr "%<friend%>åªèƒ½åœ¨ç±»ä¸­æŒ‡å®š"
-
- #: c-family/cilk.c:107
- #, fuzzy, gcc-internal-format
--#| msgid "virtual functions cannot be friends"
- msgid "only function calls can be spawned"
- msgstr "虚函数ä¸èƒ½æ˜¯å‹å…ƒ"
-
- #: c-family/cilk.c:356
- #, fuzzy, gcc-internal-format
--#| msgid "address of explicit register variable %qD requested"
- msgid "explicit register variable %qD may not be modified in spawn"
- msgstr "è¦æ±‚显å¼å¯„存器å˜é‡%qD的地å€ã€‚"
-
-@@ -22525,7 +21899,6 @@
-
- #: c-family/cilk.c:436
- #, fuzzy, gcc-internal-format
--#| msgid "invalid use of %qD in linkage specification"
- msgid "invalid use of label %q+D in %<_Cilk_spawn%>"
- msgstr "指定链接时使用%qD无效"
-
-@@ -22551,7 +21924,6 @@
-
- #: common/config/arc/arc-common.c:80
- #, fuzzy, gcc-internal-format
--#| msgid "multiple function type attributes specified"
- msgid "multiple -mcpu= options specified."
- msgstr "指定了多个函数类型属性"
-
-@@ -22572,43 +21944,36 @@
-
- #: common/config/i386/i386-common.c:764
- #, fuzzy, gcc-internal-format
--#| msgid "%salign-loops%s is obsolete, use -falign-loops%s"
- msgid "-malign-loops is obsolete, use -falign-loops"
- msgstr "%salign-loops%s å·²ç»è¿‡æ—¶ï¼Œè¯·ä½¿ç”¨ -falign-loops%s"
-
- #: common/config/i386/i386-common.c:766
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "%salign-loops=%d%s is not between 0 and %d"
- msgid "-malign-loops=%d is not between 0 and %d"
- msgstr "%salign-loops=%d%s ä¸åœ¨ 0 å’Œ %d 之间"
-
- #: common/config/i386/i386-common.c:773
- #, fuzzy, gcc-internal-format
--#| msgid "%salign-jumps%s is obsolete, use -falign-jumps%s"
- msgid "-malign-jumps is obsolete, use -falign-jumps"
- msgstr "%salign-jumps%s å·²ç»è¿‡æ—¶ï¼Œè¯·ä½¿ç”¨ -falign-jumps%s"
-
- #: common/config/i386/i386-common.c:775
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "%salign-loops=%d%s is not between 0 and %d"
- msgid "-malign-jumps=%d is not between 0 and %d"
- msgstr "%salign-loops=%d%s ä¸åœ¨ 0 å’Œ %d 之间"
-
- #: common/config/i386/i386-common.c:783
- #, fuzzy, gcc-internal-format
--#| msgid "%salign-functions%s is obsolete, use -falign-functions%s"
- msgid "-malign-functions is obsolete, use -falign-functions"
- msgstr "%salign-functions%s 已过时,请使用 -falign-functions%s"
-
- #: common/config/i386/i386-common.c:785
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "%salign-loops=%d%s is not between 0 and %d"
- msgid "-malign-functions=%d is not between 0 and %d"
- msgstr "%salign-loops=%d%s ä¸åœ¨ 0 å’Œ %d 之间"
-
- #: common/config/i386/i386-common.c:794
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "%sbranch-cost=%d%s is not between 0 and 5"
- msgid "-mbranch-cost=%d is not between 0 and 5"
- msgstr "%sbranch-cost=%d%sä¸åœ¨ 0 å’Œ 5 之间"
-
-@@ -22664,7 +22029,6 @@
-
- #: common/config/rx/rx-common.c:63
- #, fuzzy, gcc-internal-format
--#| msgid "the RX200 cpu does not have FPU hardware"
- msgid "the RX100 cpu does not have FPU hardware"
- msgstr "RX200 CPU 没有 FPU 硬件"
-
-@@ -22680,7 +22044,6 @@
-
- #: common/config/v850/v850-common.c:47
- #, fuzzy, gcc-internal-format
--#| msgid "value passed to %<-m%s%> is too large"
- msgid "value passed in %qs is too large"
- msgstr "传递给%<-m%s%>的值太大"
-
-@@ -22777,7 +22140,6 @@
-
- #: config/darwin.c:2738
- #, fuzzy, gcc-internal-format
--#| msgid "visibility attribute not supported in this configuration; ignored"
- msgid "protected visibility attribute not supported in this configuration; ignored"
- msgstr "å¯è§æ€§å±žæ€§åœ¨æ­¤é…置下ä¸å—支æŒï¼›å·²å¿½ç•¥"
-
-@@ -22788,19 +22150,16 @@
-
- #: config/darwin.c:3096
- #, fuzzy, gcc-internal-format
--#| msgid "%<-fobjc-abi-version%> >= 2 is only supported on %<-m64%> targets for %<-fnext-runtime%>"
- msgid "%<-fobjc-abi-version%> >= 2 must be used for %<-m64%> targets with %<-fnext-runtime%>"
- msgstr "%<-fobjc-abi-version%> >= 2 åªåœ¨%<-m64%>目标下支æŒ%<-fnext-runtime%>"
-
- #: config/darwin.c:3100
- #, fuzzy, gcc-internal-format
--#| msgid "%<-fobjc-abi-version%> >= 2 is only supported on %<-m64%> targets for %<-fnext-runtime%>"
- msgid "%<-fobjc-abi-version%> >= 2 is not supported on %<-m32%> targets with %<-fnext-runtime%>"
- msgstr "%<-fobjc-abi-version%> >= 2 åªåœ¨%<-m64%>目标下支æŒ%<-fnext-runtime%>"
-
- #: config/darwin.c:3185
- #, fuzzy, gcc-internal-format
--#| msgid "-mdynamic-no-pic overrides -fpic or -fPIC"
- msgid "%<-mdynamic-no-pic%> overrides %<-fpic%>, %<-fPIC%>, %<-fpie%> or %<-fPIE%>"
- msgstr "-mdynamic-no-pic 覆盖了 -fpic 或 -fPIC"
-
-@@ -22917,13 +22276,11 @@
-
- #: config/aarch64/aarch64-builtins.c:817
- #, fuzzy, gcc-internal-format
--#| msgid "incompatible type for argument %d of %qE"
- msgid "incompatible type for argument %d, expected %<const int%>"
- msgstr "%2$qE的第 %1$d 个实å‚类型ä¸å…¼å®¹"
-
- #: config/aarch64/aarch64.c:5041
- #, fuzzy, gcc-internal-format
--#| msgid "missing filename after %qs"
- msgid "missing feature modifier after %qs"
- msgstr "%qsåŽç¼ºå°‘文件å"
-
-@@ -22930,13 +22287,11 @@
- #. Extension not found in list.
- #: config/aarch64/aarch64.c:5062
- #, fuzzy, gcc-internal-format
--#| msgid "unknown TLS model %qs"
- msgid "unknown feature modifier %qs"
- msgstr "未知的 TLS 模型%qs"
-
- #: config/aarch64/aarch64.c:5093
- #, fuzzy, gcc-internal-format
--#| msgid "missing path after %qs"
- msgid "missing arch name in -march=%qs"
- msgstr "%qsåŽç¼ºå°‘路径"
-
-@@ -22948,13 +22303,11 @@
- #. ARCH name not found in list.
- #: config/aarch64/aarch64.c:5125
- #, fuzzy, gcc-internal-format
--#| msgid "unknown value %s for -mfpu"
- msgid "unknown value %qs for -march"
- msgstr "-mfpu 的值 %s 未知"
-
- #: config/aarch64/aarch64.c:5150
- #, fuzzy, gcc-internal-format
--#| msgid "missing path after %qs"
- msgid "missing cpu name in -mcpu=%qs"
- msgstr "%qsåŽç¼ºå°‘路径"
-
-@@ -22961,7 +22314,6 @@
- #. CPU name not found in list.
- #: config/aarch64/aarch64.c:5174
- #, fuzzy, gcc-internal-format
--#| msgid "unknown value %s for -mfpu"
- msgid "unknown value %qs for -mcpu"
- msgstr "-mfpu 的值 %s 未知"
-
-@@ -22968,13 +22320,11 @@
- #. CPU name not found in list.
- #: config/aarch64/aarch64.c:5198
- #, fuzzy, gcc-internal-format
--#| msgid "unknown value %s for -mfpu"
- msgid "unknown value %qs for -mtune"
- msgstr "-mfpu 的值 %s 未知"
-
- #: config/aarch64/aarch64.c:5234
- #, fuzzy, gcc-internal-format
--#| msgid "does not support multilib"
- msgid "Assembler does not support -mabi=ilp32"
- msgstr "ä¸æ”¯æŒ multilib"
-
-@@ -22986,19 +22336,16 @@
- #: config/aarch64/aarch64.c:5611 config/aarch64/aarch64.c:5719
- #: config/aarch64/aarch64.c:5958
- #, fuzzy, gcc-internal-format
--#| msgid "Use hardware floating point instructions"
- msgid "%qs and floating point or vector arguments"
- msgstr "使用硬件浮点指令"
-
- #: config/aarch64/aarch64.c:6830
- #, fuzzy, gcc-internal-format
--#| msgid "operand number out of range"
- msgid "lane out of range"
- msgstr "æ“作数å·è¶…出范围"
-
- #: config/aarch64/aarch64.c:6840
- #, fuzzy, gcc-internal-format
--#| msgid "constant argument out of range for %qs"
- msgid "constant out of range"
- msgstr "常é‡å®žå‚超过%qs的范围"
-
-@@ -23066,7 +22413,6 @@
-
- #: config/arc/arc.c:738
- #, fuzzy, gcc-internal-format
--#| msgid "-mrelax is only supported for RTP PIC"
- msgid "-mmul64 not supported for ARC700"
- msgstr "-mrelax åªåœ¨ RTP PIC 上å—支æŒ"
-
-@@ -23107,7 +22453,6 @@
-
- #: config/arc/arc.c:1230
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "multiple function type attributes specified"
- msgid "multiply option implies r%d is fixed"
- msgstr "指定了多个函数类型属性"
-
-@@ -23131,13 +22476,11 @@
-
- #: config/arc/arc.c:5373
- #, fuzzy, gcc-internal-format
--#| msgid "%<__builtin_next_arg%> called without an argument"
- msgid "__builtin_arc_aligned with non-constant alignment"
- msgstr "调用%<__builtin_next_arg%>时没有给定实å‚"
-
- #: config/arc/arc.c:5381
- #, fuzzy, gcc-internal-format
--#| msgid "invalid argument to %<__builtin_frame_address%>"
- msgid "invalid alignment value for __builtin_arc_aligned"
- msgstr "%<__builtin_frame_address%>的实å‚无效"
-
-@@ -23158,7 +22501,6 @@
-
- #: config/arc/arc.c:6206
- #, fuzzy, gcc-internal-format
--#| msgid "Bad address, not register:"
- msgid "insn addresses not freed"
- msgstr "错误的地å€ï¼Œä¸æ˜¯å¯„存器:"
-
-@@ -23294,7 +22636,6 @@
-
- #: config/arm/arm.c:2571
- #, fuzzy, gcc-internal-format
--#| msgid "-fPIC and -G are incompatible"
- msgid "iWMMXt and NEON are incompatible"
- msgstr "-fPIC 与 -G 互ä¸å…¼å®¹"
-
-@@ -23320,13 +22661,11 @@
-
- #: config/arm/arm.c:2638
- #, fuzzy, gcc-internal-format
--#| msgid "structure size boundary can only be set to %s"
- msgid "structure size boundary can only be set to 8, 32 or 64"
- msgstr "结构大å°è¾¹ç•Œåªèƒ½è¢«è®¾å®šä¸º %s"
-
- #: config/arm/arm.c:2640
- #, fuzzy, gcc-internal-format
--#| msgid "structure size boundary can only be set to %s"
- msgid "structure size boundary can only be set to 8 or 32"
- msgstr "结构大å°è¾¹ç•Œåªèƒ½è¢«è®¾å®šä¸º %s"
-
-@@ -23352,7 +22691,6 @@
-
- #: config/arm/arm.c:2715
- #, fuzzy, gcc-internal-format
--#| msgid "target CPU does not support ARM mode"
- msgid "target CPU does not support unaligned accesses"
- msgstr "目标 CPU ä¸æ”¯æŒ ARM 模å¼"
-
-@@ -23440,7 +22778,6 @@
-
- #: config/arm/arm.c:25441
- #, fuzzy, gcc-internal-format
--#| msgid "%qE attribute argument should be between 0 to 255"
- msgid "the range of mask should be in 0 to 255"
- msgstr "%qE属性的å‚数应当在 0 å’Œ 255 之间"
-
-@@ -23566,7 +22903,6 @@
-
- #: config/arm/arm.c:26165
- #, fuzzy, gcc-internal-format
--#| msgid "Unexpected end of module"
- msgid "Unexpected thumb1 far jump"
- msgstr "éžé¢„期的模å—结æŸ"
-
-@@ -23582,13 +22918,11 @@
-
- #: config/avr/avr-c.c:66 config/avr/avr-c.c:191
- #, fuzzy, gcc-internal-format
--#| msgid "%qs expects a constant argument"
- msgid "%qs expects 1 argument but %d given"
- msgstr "%qs需è¦ä¸€ä¸ªå¸¸é‡å®žå‚"
-
- #: config/avr/avr-c.c:77
- #, fuzzy, gcc-internal-format
--#| msgid "%qs expects a constant argument"
- msgid "%qs expects a fixed-point value as argument"
- msgstr "%qs需è¦ä¸€ä¸ªå¸¸é‡å®žå‚"
-
-@@ -23599,25 +22933,21 @@
-
- #: config/avr/avr-c.c:108 config/avr/avr-c.c:174 config/avr/avr-c.c:231
- #, fuzzy, gcc-internal-format
--#| msgid "no matching template for %qD found"
- msgid "no matching fixed-point overload found for %qs"
- msgstr "没有找到与%qD匹é…的模æ¿"
-
- #: config/avr/avr-c.c:125
- #, fuzzy, gcc-internal-format
--#| msgid "%qs expects a constant argument"
- msgid "%qs expects 2 arguments but %d given"
- msgstr "%qs需è¦ä¸€ä¸ªå¸¸é‡å®žå‚"
-
- #: config/avr/avr-c.c:137 config/avr/avr-c.c:202
- #, fuzzy, gcc-internal-format
--#| msgid "%qs expects a constant argument"
- msgid "%qs expects a fixed-point value as first argument"
- msgstr "%qs需è¦ä¸€ä¸ªå¸¸é‡å®žå‚"
-
- #: config/avr/avr-c.c:145
- #, fuzzy, gcc-internal-format
--#| msgid "%qs expects a constant argument"
- msgid "%qs expects an integer value as second argument"
- msgstr "%qs需è¦ä¸€ä¸ªå¸¸é‡å®žå‚"
-
-@@ -23633,19 +22963,16 @@
-
- #: config/avr/avr.c:322
- #, fuzzy, gcc-internal-format
--#| msgid "-fpic is not supported"
- msgid "-fpie is not supported"
- msgstr "ä¸æ”¯æŒ -fpic"
-
- #: config/avr/avr.c:324
- #, fuzzy, gcc-internal-format
--#| msgid "-fPIC is not supported"
- msgid "-fPIE is not supported"
- msgstr "ä¸æ”¯æŒ -fPIC"
-
- #: config/avr/avr.c:586
- #, fuzzy, gcc-internal-format
--#| msgid "-flto and -fwhopr are mutually exclusive"
- msgid "function attributes %qs, %qs and %qs are mutually exclusive"
- msgstr "-flto and -fwhopr 互斥"
-
-@@ -23656,25 +22983,21 @@
-
- #: config/avr/avr.c:616
- #, fuzzy, gcc-internal-format
--#| msgid "%qD cannot have default arguments"
- msgid "%qs function cannot have arguments"
- msgstr "%qDä¸èƒ½æœ‰é»˜è®¤å‚æ•°"
-
- #: config/avr/avr.c:619
- #, fuzzy, gcc-internal-format
--#| msgid "functions cannot return __fp16 type"
- msgid "%qs function cannot return a value"
- msgstr "函数ä¸èƒ½è¿”回 __fp16 类型"
-
- #: config/avr/avr.c:626
- #, fuzzy, gcc-internal-format
--#| msgid "%qs appears to be a misspelled signal handler"
- msgid "%qs appears to be a misspelled %s handler"
- msgstr "%qs似乎是一个拼写错的信å·å¤„ç†è€…"
-
- #: config/avr/avr.c:856
- #, fuzzy, gcc-internal-format
--#| msgid "'builtin_return_address' contains only 2 bytes of address"
- msgid "%<builtin_return_address%> contains only 2 bytes of address"
- msgstr "‘builtin_return_address’åªåŒ…å«ä¸¤å­—节地å€"
-
-@@ -23690,19 +23013,16 @@
-
- #: config/avr/avr.c:2241
- #, fuzzy, gcc-internal-format
--#| msgid "accessing program memory with data memory address"
- msgid "accessing program memory with data memory address"
- msgstr "用数æ®å†…存地å€è®¿é—®ç¨‹åºå†…å­˜"
-
- #: config/avr/avr.c:2660
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Number of registers used to pass integer arguments"
- msgid "fixed register %s used to pass parameter to function"
- msgstr "用以传递整数å‚数的寄存器个数"
-
- #: config/avr/avr.c:2931
- #, fuzzy, gcc-internal-format
--#| msgid "conflicting named address spaces (%s vs %s)"
- msgid "writing to address space %qs not supported"
- msgstr "冲çªçš„有å地å€ç©ºé—´(%så’Œ%s)"
-
-@@ -23718,13 +23038,11 @@
-
- #: config/avr/avr.c:8292
- #, fuzzy, gcc-internal-format
--#| msgid "pointers to disjoint address spaces used in conditional expression"
- msgid "pointer targeting address space %qs must be const in %qT"
- msgstr "æ¡ä»¶è¡¨è¾¾å¼ä¸­ä½¿ç”¨äº†æŒ‡å‘ä¸ç›¸äº¤åœ°å€ç©ºé—´çš„指针"
-
- #: config/avr/avr.c:8295
- #, fuzzy, gcc-internal-format
--#| msgid "pointers to disjoint address spaces used in conditional expression"
- msgid "pointer targeting address space %qs must be const in %s %q+D"
- msgstr "æ¡ä»¶è¡¨è¾¾å¼ä¸­ä½¿ç”¨äº†æŒ‡å‘ä¸ç›¸äº¤åœ°å€ç©ºé—´çš„指针"
-
-@@ -23745,7 +23063,6 @@
-
- #: config/avr/avr.c:8597
- #, fuzzy, gcc-internal-format
--#| msgid "only initialized variables can be placed into program memory area"
- msgid "uninitialized variable %q+D put into program memory area"
- msgstr "åªæœ‰åˆå§‹åŒ–çš„å˜é‡æ‰èƒ½æ”¾å…¥ç¨‹åºå†…存区"
-
-@@ -23756,19 +23073,16 @@
-
- #: config/avr/avr.c:11101
- #, fuzzy, gcc-internal-format
--#| msgid "Conversion from %s to %s at %L"
- msgid "conversion from address space %qs to address space %qs"
- msgstr "从 %s 转æ¢åˆ° %s,ä½äºŽ %L"
-
- #: config/avr/avr.c:12048
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Unexpected end of module in string constant"
- msgid "%s expects a compile time integer constant"
- msgstr "字符串常é‡ä¸­å‡ºçŽ°éžé¢„期的模å—结æŸ"
-
- #: config/avr/avr.c:12062
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "%qs expects a constant argument"
- msgid "%s expects a compile time long integer constant as first argument"
- msgstr "%qs需è¦ä¸€ä¸ªå¸¸é‡å®žå‚"
-
-@@ -23855,7 +23169,6 @@
-
- #: config/c6x/c6x.c:238
- #, fuzzy, gcc-internal-format
--#| msgid "-fPIC and -fpic are not supported for this target"
- msgid "-fpic and -fPIC not supported without -mdsbt on this target"
- msgstr "-fPIC å’Œ -fpic ä¸è¢«æ­¤ç›®æ ‡æ‰€æ”¯æŒ"
-
-@@ -23871,7 +23184,6 @@
-
- #: config/cr16/cr16.c:299
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "invalid thread pointer option: -mtp=%s"
- msgid "invalid data model option -mdata-model=%s"
- msgstr "无效的线程指钟选项:-mtp=%s"
-
-@@ -24020,13 +23332,11 @@
-
- #: config/epiphany/epiphany.c:1468
- #, fuzzy, gcc-internal-format
--#| msgid "stack size must be an exact power of 2"
- msgid "stack_offset must be at least 4"
- msgstr "栈大å°å¿…须刚好是 2 çš„æŸæ¬¡æ–¹"
-
- #: config/epiphany/epiphany.c:1470
- #, fuzzy, gcc-internal-format
--#| msgid "stack size must be an exact power of 2"
- msgid "stack_offset must be a multiple of 4"
- msgstr "栈大å°å¿…须刚好是 2 çš„æŸæ¬¡æ–¹"
-
-@@ -24092,7 +23402,6 @@
-
- #: config/h8300/h8300.c:324
- #, fuzzy, gcc-internal-format
--#| msgid "-f%s not supported: ignored"
- msgid "-msx is not supported in coff"
- msgstr "-f%s ä¸å—支æŒï¼šå·²å¿½ç•¥"
-
-@@ -24103,25 +23412,21 @@
-
- #: config/h8300/h8300.c:352
- #, fuzzy, gcc-internal-format
--#| msgid "-mn is used without -mh or -ms"
- msgid "-mn is used without -mh or -ms or -msx"
- msgstr "-mn 未与 -mh 或 -ms 一起使用"
-
- #: config/h8300/h8300.c:358
- #, fuzzy, gcc-internal-format
--#| msgid "-ms2600 is used without -ms"
- msgid "-mexr is used without -ms"
- msgstr "-ms2600 未与 -ms 一起使用"
-
- #: config/h8300/h8300.c:364
- #, fuzzy, gcc-internal-format
--#| msgid "%<__int128%> is not supported for this target"
- msgid "-mint32 is not supported for H8300 and H8300L targets"
- msgstr "%<__int128%>在此目标机上ä¸å—支æŒ"
-
- #: config/h8300/h8300.c:370
- #, fuzzy, gcc-internal-format
--#| msgid "-mn is used without -mh or -ms"
- msgid "-mexr is used without -ms or -msx"
- msgstr "-mn 未与 -mh 或 -ms 一起使用"
-
-@@ -24142,7 +23447,6 @@
-
- #: config/i386/i386.c:2911
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "-Werror=%s: no option -%s"
- msgid "wrong arg %s to option %s"
- msgstr "-Werror=%s:没有选项 -%s"
-
-@@ -24153,13 +23457,11 @@
-
- #: config/i386/i386.c:2929
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "register name not specified for %q+D"
- msgid "wrong stringop strategy name %s specified for option %s"
- msgstr "%q+D的寄存器å无效"
-
- #: config/i386/i386.c:2943
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "alignment may not be specified for %q+D"
- msgid "unknown alignment %s specified for option %s"
- msgstr "ä¸èƒ½ä¸º%q+D指定对é½"
-
-@@ -24170,13 +23472,11 @@
-
- #: config/i386/i386.c:2962
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "no class name specified with %qs"
- msgid "too many size ranges specified in option %s"
- msgstr "%qs没有指定类å"
-
- #: config/i386/i386.c:3016
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Unknown argument list function at %L"
- msgid "Unknown parameter to option -mtune-ctrl: %s"
- msgstr "%L处å‚数列表函数未知"
-
-@@ -24193,7 +23493,6 @@
-
- #: config/i386/i386.c:3424
- #, fuzzy, gcc-internal-format
--#| msgid "code model %qs not supported in the %s bit mode"
- msgid "address mode %qs not supported in the %s bit mode"
- msgstr "代ç æ¨¡å¼%qs在 %s ä½æ¨¡å¼ä¸‹ä¸å—支æŒ"
-
-@@ -24205,7 +23504,6 @@
-
- #: config/i386/i386.c:3462 config/i386/i386.c:3474
- #, fuzzy, gcc-internal-format
--#| msgid "code model %qs not supported in the %s bit mode"
- msgid "code model %qs not supported in x32 mode"
- msgstr "代ç æ¨¡å¼%qs在 %s ä½æ¨¡å¼ä¸‹ä¸å—支æŒ"
-
-@@ -24216,7 +23514,6 @@
-
- #: config/i386/i386.c:3517
- #, fuzzy, gcc-internal-format
--#| msgid "-m%s not supported in this configuration"
- msgid "-masm=intel not supported in this configuration"
- msgstr "-m%s 在此é…置下ä¸å—支æŒ"
-
-@@ -24237,7 +23534,6 @@
-
- #: config/i386/i386.c:3678
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "generic CPU can be used only for %stune=%s %s"
- msgid "intel CPU can be used only for %stune=%s %s"
- msgstr "generic åªèƒ½ç”¨åœ¨%stune%s %s中"
-
-@@ -24253,13 +23549,11 @@
-
- #: config/i386/i386.c:3777
- #, fuzzy, gcc-internal-format
--#| msgid "%sregparm%s is ignored in 64-bit mode"
- msgid "-mregparm is ignored in 64-bit mode"
- msgstr "%sregparm%s 在 64 ä½æ¨¡å¼ä¸‹è¢«å¿½ç•¥"
-
- #: config/i386/i386.c:3780
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "%sregparm=%d%s is not between 0 and %d"
- msgid "-mregparm=%d is not between 0 and %d"
- msgstr "%sregparm=%d%s ä¸åœ¨ 0 å’Œ %d 之间"
-
-@@ -24270,13 +23564,11 @@
-
- #: config/i386/i386.c:3900
- #, fuzzy, gcc-internal-format
--#| msgid "%spreferred-stack-boundary%s is not supported for this target"
- msgid "-mpreferred-stack-boundary is not supported for this target"
- msgstr "%spreferred-stack-boundary%s 在此目标机上ä¸è¢«æ”¯æŒ"
-
- #: config/i386/i386.c:3903
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "%spreferred-stack-boundary=%d%s is not between %d and %d"
- msgid "-mpreferred-stack-boundary=%d is not between %d and %d"
- msgstr "%spreferred-stack-boundary=%d%s ä¸åœ¨ %d å’Œ %d 之间"
-
-@@ -24308,7 +23600,7 @@
- #: config/i386/i386.c:4108
- #, gcc-internal-format
- msgid "-mfentry isn%'t supported for 32-bit in combination with -fpic"
--msgstr "-mfentry 在 32 ä½ä¸‹ä¸èƒ½å’Œ -pic åŒæ—¶ä½¿ç”¨"
-+msgstr "-mfentry 在 32 ä½ä¸‹ä¸èƒ½å’Œ -fpic åŒæ—¶ä½¿ç”¨"
-
- #: config/i386/i386.c:4115
- #, gcc-internal-format
-@@ -24422,7 +23714,6 @@
-
- #: config/i386/i386.c:6236
- #, fuzzy, gcc-internal-format
--#| msgid "AVX vector argument without AVX enabled changes the ABI"
- msgid "AVX vector return without AVX enabled changes the ABI"
- msgstr "没有å¯ç”¨ AVX,å´å‡ºçŽ°äº† AVX å‘é‡å®žå‚,这改å˜äº† ABI"
-
-@@ -24515,7 +23806,6 @@
-
- #: config/i386/i386.c:14881
- #, fuzzy, gcc-internal-format
--#| msgid "non-integer operand used with operand code '%c'"
- msgid "non-integer operand used with operand code 'z'"
- msgstr "éžæ•´æ•°æ“作数使用了æ“作数代ç â€˜%c’"
-
-@@ -24541,7 +23831,6 @@
-
- #: config/i386/i386.c:31750 config/i386/i386.c:32198
- #, fuzzy, gcc-internal-format
--#| msgid "static linking is not supported"
- msgid "Virtual function multiversioning not supported"
- msgstr "ä¸æ”¯æŒé™æ€é“¾æŽ¥"
-
-@@ -24552,25 +23841,21 @@
-
- #: config/i386/i386.c:31818
- #, fuzzy, gcc-internal-format
--#| msgid "previous declaration of %q+D"
- msgid "previous declaration of %D"
- msgstr "%q+Dçš„å‰ä¸€ä¸ªå£°æ˜Ž"
-
- #: config/i386/i386.c:32037
- #, fuzzy, gcc-internal-format
--#| msgid "nested functions not supported on this target"
- msgid "multiversioning needs ifunc which is not supported on this target"
- msgstr "嵌套函数在此目标机上ä¸å—支æŒ"
-
- #: config/i386/i386.c:32405
- #, fuzzy, gcc-internal-format
--#| msgid "argument to %qs must be a 2-bit unsigned literal"
- msgid "Parameter to builtin must be a string constant or literal"
- msgstr "%qs的实å‚必须是一个 2 ä½æ— ç¬¦å·å­—é¢å¸¸é‡"
-
- #: config/i386/i386.c:32430 config/i386/i386.c:32480
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Argument to -ffpe-trap is not valid: %s"
- msgid "Parameter to builtin not valid: %s"
- msgstr "-ffpe-trap çš„å‚数无效:%s"
-
-@@ -24581,25 +23866,21 @@
-
- #: config/i386/i386.c:33287
- #, fuzzy, gcc-internal-format
--#| msgid "the fifth argument must be a 8-bit immediate"
- msgid "the fifth argument must be an 8-bit immediate"
- msgstr "第五个实å‚必须是一个 8 ä½ç«‹å³æ•°"
-
- #: config/i386/i386.c:33382
- #, fuzzy, gcc-internal-format
--#| msgid "the third argument must be a 8-bit immediate"
- msgid "the third argument must be an 8-bit immediate"
- msgstr "第三个实å‚必须是一个 8 ä½ç«‹å³æ•°"
-
- #: config/i386/i386.c:33967
- #, fuzzy, gcc-internal-format
--#| msgid "the last argument must be a 1-bit immediate"
- msgid "the last argument must be an 1-bit immediate"
- msgstr "最åŽä¸€ä¸ªå®žå‚必须是一个 1 ä½ç«‹å³æ•°"
-
- #: config/i386/i386.c:33974
- #, fuzzy, gcc-internal-format
--#| msgid "the last argument must be a 32-bit immediate"
- msgid "the last argument must be a 3-bit immediate"
- msgstr "最åŽä¸€ä¸ªå‚数必须是一个 32 ä½ç«‹å³æ•°"
-
-@@ -24630,37 +23911,31 @@
-
- #: config/i386/i386.c:34214
- #, fuzzy, gcc-internal-format
--#| msgid "argument must be a constant"
- msgid "the third argument must be comparison constant"
- msgstr "实å‚必须是常数"
-
- #: config/i386/i386.c:34219
- #, fuzzy, gcc-internal-format
--#| msgid "incorrect sharing of tree nodes"
- msgid "incorect comparison mode"
- msgstr "对树结节的共享ä¸æ­£ç¡®"
-
- #: config/i386/i386.c:34225 config/i386/i386.c:34421
- #, fuzzy, gcc-internal-format
--#| msgid "incorrect sharing of tree nodes"
- msgid "incorrect rounding operand"
- msgstr "对树结节的共享ä¸æ­£ç¡®"
-
- #: config/i386/i386.c:34403
- #, fuzzy, gcc-internal-format
--#| msgid "the last argument must be a 4-bit immediate"
- msgid "the immediate argument must be a 4-bit immediate"
- msgstr "最åŽä¸€ä¸ªå®žå‚必须是一个 4 ä½ç«‹å³æ•°"
-
- #: config/i386/i386.c:34409
- #, fuzzy, gcc-internal-format
--#| msgid "the last argument must be a 5-bit immediate"
- msgid "the immediate argument must be a 5-bit immediate"
- msgstr "最åŽä¸€ä¸ªå®žå‚必须是一个 5 ä½ç«‹å³æ•°"
-
- #: config/i386/i386.c:34412
- #, fuzzy, gcc-internal-format
--#| msgid "the last argument must be an 8-bit immediate"
- msgid "the immediate argument must be an 8-bit immediate"
- msgstr "最åŽä¸€ä¸ªå®žå‚必须是一个 8 ä½ç«‹å³æ•°"
-
-@@ -24691,25 +23966,21 @@
-
- #: config/i386/i386.c:35816 config/i386/i386.c:35964
- #, fuzzy, gcc-internal-format
--#| msgid "the last argument must be a 4-bit immediate"
- msgid "the last argument must be scale 1, 2, 4, 8"
- msgstr "最åŽä¸€ä¸ªå®žå‚必须是一个 4 ä½ç«‹å³æ•°"
-
- #: config/i386/i386.c:36016
- #, fuzzy, gcc-internal-format
--#| msgid "left argument must be a slice"
- msgid "the forth argument must be scale 1, 2, 4, 8"
- msgstr "左实å‚必须是一个切片"
-
- #: config/i386/i386.c:36022
- #, fuzzy, gcc-internal-format
--#| msgid "the last argument must be a 4-bit immediate"
- msgid "the last argument must be hint 0 or 1"
- msgstr "最åŽä¸€ä¸ªå®žå‚必须是一个 4 ä½ç«‹å³æ•°"
-
- #: config/i386/i386.c:36041
- #, fuzzy, gcc-internal-format
--#| msgid "the last argument must be an 8-bit immediate"
- msgid "the xabort's argument must be an 8-bit immediate"
- msgstr "最åŽä¸€ä¸ªå®žå‚必须是一个 8 ä½ç«‹å³æ•°"
-
-@@ -24735,7 +24006,6 @@
-
- #: config/i386/i386.c:46439
- #, fuzzy, gcc-internal-format
--#| msgid "Unknown architecture '%s'"
- msgid "Unknown architecture specific memory model"
- msgstr "未知的架构‘%s’"
-
-@@ -24751,7 +24021,6 @@
-
- #: config/i386/i386.c:46476
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "unsupported ELF file class"
- msgid "unsupported simdlen %d"
- msgstr "ä¸æ”¯æŒçš„ ELF 文件类"
-
-@@ -24955,7 +24224,6 @@
-
- #: config/m68k/m68k.c:624
- #, fuzzy, gcc-internal-format
--#| msgid "stack limits not supported on this target"
- msgid "-fstack-limit- options are not supported on this cpu"
- msgstr "堆栈é™åˆ¶åœ¨æ­¤ç›®æ ‡æœºä¸Šä¸å—支æŒ"
-
-@@ -25240,7 +24508,6 @@
-
- #: config/microblaze/microblaze.c:1679
- #, fuzzy, gcc-internal-format
--#| msgid "-fPIC and -fpic are not supported for this target"
- msgid "-fPIC/-fpic not supported for this target"
- msgstr "-fPIC å’Œ -fpic ä¸è¢«æ­¤ç›®æ ‡æ‰€æ”¯æŒ"
-
-@@ -25276,7 +24543,6 @@
-
- #: config/mips/mips.c:1427 config/mips/mips.c:1433
- #, fuzzy, gcc-internal-format
--#| msgid "%qE cannot have both %<mips16%> and %<nomips16%> attributes"
- msgid "%qE cannot have both %qs and %qs attributes"
- msgstr "%qEä¸èƒ½åŒæ—¶æœ‰%<mips16%>å’Œ%<nomips16%>属性"
-
-@@ -25385,7 +24651,6 @@
-
- #: config/mips/mips.c:17050 config/mips/mips.c:17052 config/mips/mips.c:17065
- #, fuzzy, gcc-internal-format
--#| msgid "assert: %s is assign compatible with %s"
- msgid "%qs is incompatible with %qs"
- msgstr "assert:%s 与 %s 赋值兼容"
-
-@@ -25396,7 +24661,6 @@
- #. an error.
- #: config/mips/mips.c:17059
- #, fuzzy, gcc-internal-format
--#| msgid "assert: %s is assign compatible with %s"
- msgid "the combination of %qs and %qs is incompatible with %qs"
- msgstr "assert:%s 与 %s 赋值兼容"
-
-@@ -25407,13 +24671,11 @@
-
- #: config/mips/mips.c:17120
- #, fuzzy, gcc-internal-format
--#| msgid "the %qs architecture does not support the synci instruction"
- msgid "the %qs architecture does not support madd or msub instructions"
- msgstr "%qs架构ä¸æ”¯æŒ synci 指令"
-
- #: config/mips/mips.c:17134
- #, fuzzy, gcc-internal-format
--#| msgid "Generate position-independent code if possible (large mode)"
- msgid "cannot generate position-independent code for %qs"
- msgstr "å°½å¯èƒ½ç”Ÿæˆä¸Žä½ç½®æ— å…³çš„代ç (大模å¼)"
-
-@@ -25530,19 +24792,16 @@
-
- #: config/msp430/msp430.c:1102
- #, fuzzy, gcc-internal-format
--#| msgid "invalid argument of %qE attribute"
- msgid "unrecognised interrupt vector argument of %qE attribute"
- msgstr "属性%qEçš„å‚数无效"
-
- #: config/msp430/msp430.c:1111
- #, fuzzy, gcc-internal-format
--#| msgid "argument %d of %qE must be in the range %d...%d"
- msgid "numeric argument of %qE attribute must be in range 0..63"
- msgstr "%2$qE的第 %1$d 个å‚数必须是在 %3$d å’Œ %4$d 之间"
-
- #: config/msp430/msp430.c:1117
- #, fuzzy, gcc-internal-format
--#| msgid "argument of %qE attribute is not a string constant"
- msgid "argument of %qE attribute is not a string constant or number"
- msgstr "%qE属性的实å‚ä¸æ˜¯ä¸€ä¸ªå­—符串常é‡"
-
-@@ -25564,13 +24823,11 @@
-
- #: config/nds32/nds32.c:1213
- #, fuzzy, gcc-internal-format
--#| msgid "multiple function type attributes specified"
- msgid "multiple nested types attributes to function %qD"
- msgstr "指定了多个函数类型属性"
-
- #: config/nds32/nds32.c:1225
- #, fuzzy, gcc-internal-format
--#| msgid "multiple interrupt attributes not allowed"
- msgid "multiple interrupt attributes to function %qD"
- msgstr "ä¸å…许多个中断属性"
-
-@@ -25581,7 +24838,6 @@
- #: config/nds32/nds32.c:3007 config/nds32/nds32.c:3013
- #: config/nds32/nds32.c:3045
- #, fuzzy, gcc-internal-format
--#| msgid "nested functions not supported on this target"
- msgid "a nested function is not supported for reduced registers"
- msgstr "嵌套函数在此目标机上ä¸å—支æŒ"
-
-@@ -25588,37 +24844,31 @@
- #. The enum index value for array size is out of range.
- #: config/nds32/nds32.c:2848
- #, fuzzy, gcc-internal-format
--#| msgid "invalid register in the instruction"
- msgid "intrinsic register index is out of range"
- msgstr "此指令中寄存器无效"
-
- #: config/nds32/nds32.c:3153
- #, fuzzy, gcc-internal-format
--#| msgid "invalid type for iteration variable %qE"
- msgid "invalid id value for interrupt/exception attribute"
- msgstr "迭代å˜é‡%qE类型无效"
-
- #: config/nds32/nds32.c:3181
- #, fuzzy, gcc-internal-format
--#| msgid "invalid argument of %qs attribute"
- msgid "invalid id value for reset attribute"
- msgstr "属性%qsçš„å‚数无效"
-
- #: config/nds32/nds32.c:3197
- #, fuzzy, gcc-internal-format
--#| msgid "invalid argument of %qs attribute"
- msgid "invalid nmi function for reset attribute"
- msgstr "属性%qsçš„å‚数无效"
-
- #: config/nds32/nds32.c:3210
- #, fuzzy, gcc-internal-format
--#| msgid "invalid argument of %qs attribute"
- msgid "invalid warm function for reset attribute"
- msgstr "属性%qsçš„å‚数无效"
-
- #: config/nds32/nds32.c:3284
- #, fuzzy, gcc-internal-format
--#| msgid "%s does not support split_block"
- msgid "not support -fpic"
- msgstr "%s ä¸æ”¯æŒ split_block"
-
-@@ -25629,7 +24879,6 @@
-
- #: config/nios2/nios2.c:794
- #, fuzzy, gcc-internal-format
--#| msgid "target attribute or pragma changes double precision floating point"
- msgid "switch %<-mcustom-%s%> is required for double precision floating point"
- msgstr "目标属性或 pragma 改å˜äº†åŒç²¾åº¦æµ®ç‚¹æ•°"
-
-@@ -25675,7 +24924,6 @@
-
- #: config/nios2/nios2.c:2598
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "invalid argument to built-in function"
- msgid "invalid argument to built-in function %s"
- msgstr "内建函数实å‚无效"
-
-@@ -25686,7 +24934,6 @@
-
- #: config/nios2/nios2.c:2743
- #, fuzzy, gcc-internal-format
--#| msgid "switch -mcpu=%s conflicts with -march=%s switch"
- msgid "switch %<-mcustom-%s%> conflicts with switch %<-mcustom-%s%>"
- msgstr "开关 -mcpu=%s 与 -march=%s 冲çª"
-
-@@ -25707,7 +24954,6 @@
-
- #: config/nios2/nios2.c:2899
- #, fuzzy, gcc-internal-format
--#| msgid "%s only accepts 2 arguments"
- msgid "%<no-custom-%s%> does not accept arguments"
- msgstr "%s åªæŽ¥å— 2 个å‚æ•°"
-
-@@ -25728,7 +24974,6 @@
-
- #: config/nios2/nios2.c:2943
- #, fuzzy, gcc-internal-format
--#| msgid "type of %qE is unknown"
- msgid "%<%s%> is unknown"
- msgstr "%qE的类型未知"
-
-@@ -25979,13 +25224,11 @@
-
- #: config/rs6000/rs6000.c:3173
- #, fuzzy, gcc-internal-format
--#| msgid "not configured for ABI: '%s'"
- msgid "not configured for SPE ABI"
- msgstr "没有为此 ABI é…置:‘%s’"
-
- #: config/rs6000/rs6000.c:3178
- #, fuzzy, gcc-internal-format
--#| msgid "Do not use PowerPC instruction set"
- msgid "not configured for SPE instruction set"
- msgstr "ä¸ä½¿ç”¨ PowerPC 指令集"
-
-@@ -26021,7 +25264,6 @@
-
- #: config/rs6000/rs6000.c:3333
- #, fuzzy, gcc-internal-format
--#| msgid "--resource requires -o"
- msgid "-mdirect-move requires -mvsx"
- msgstr "--resource éœ€è¦ -o"
-
-@@ -26032,13 +25274,11 @@
-
- #: config/rs6000/rs6000.c:3347
- #, fuzzy, gcc-internal-format
--#| msgid "--resource requires -o"
- msgid "-mpower8-vector requires -mvsx"
- msgstr "--resource éœ€è¦ -o"
-
- #: config/rs6000/rs6000.c:3354
- #, fuzzy, gcc-internal-format
--#| msgid "--resource requires -o"
- msgid "-mvsx-timode requires -mvsx"
- msgstr "--resource éœ€è¦ -o"
-
-@@ -26099,7 +25339,6 @@
-
- #: config/rs6000/rs6000.c:11517
- #, fuzzy, gcc-internal-format
--#| msgid "argument 1 must be a 5-bit signed literal"
- msgid "argument 1 must be an 8-bit field value"
- msgstr "å®žå‚ 1 必须是一个 5 ä½æœ‰ç¬¦å·å­—é¢å€¼"
-
-@@ -26125,13 +25364,11 @@
-
- #: config/rs6000/rs6000.c:12074
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "argument 2 must be a 5-bit unsigned literal"
- msgid "argument %d must be an unsigned literal"
- msgstr "å®žå‚ 2 必须是一个 5 ä½æ— ç¬¦å·å­—é¢å€¼"
-
- #: config/rs6000/rs6000.c:12076
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "argument 1 of __builtin_spe_predicate is out of range"
- msgid "argument %d is an unsigned literal that is out of range"
- msgstr "__builtin_spe_predicate 的第 1 个实å‚越界"
-
-@@ -26152,13 +25389,11 @@
-
- #: config/rs6000/rs6000.c:12246
- #, fuzzy, gcc-internal-format
--#| msgid "number must be 0 or 1"
- msgid "argument 2 must be 0 or 1"
- msgstr "数字必须是 0 或 1"
-
- #: config/rs6000/rs6000.c:12254
- #, fuzzy, gcc-internal-format
--#| msgid "argument %d of %qE must be in the range %d...%d"
- msgid "argument 3 must be in the range 0..15"
- msgstr "%2$qE的第 %1$d 个å‚数必须是在 %3$d å’Œ %4$d 之间"
-
-@@ -26199,7 +25434,6 @@
-
- #: config/rs6000/rs6000.c:13239
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "this builtin function is only available on the fr450"
- msgid "Builtin function %s is only valid for the cell processor"
- msgstr "此内建函数åªåœ¨ fr450 上å¯ç”¨"
-
-@@ -26464,19 +25698,16 @@
-
- #: config/rs6000/e500.h:37
- #, fuzzy, gcc-internal-format
--#| msgid "AltiVec and E500 instructions cannot coexist"
- msgid "AltiVec and SPE instructions cannot coexist"
- msgstr "AltiVec å’Œ E500 指令ä¸èƒ½å…±å­˜"
-
- #: config/rs6000/e500.h:39
- #, fuzzy, gcc-internal-format
--#| msgid "VSX and E500 instructions cannot coexist"
- msgid "VSX and SPE instructions cannot coexist"
- msgstr "VSX å’Œ E500 指令ä¸èƒ½å…±å­˜"
-
- #: config/rs6000/e500.h:41
- #, fuzzy, gcc-internal-format
--#| msgid "64-bit E500 not supported"
- msgid "64-bit SPE not supported"
- msgstr "ä¸æ”¯æŒ 64 ä½ E500"
-
-@@ -26492,7 +25723,6 @@
-
- #: config/rs6000/linux64.h:116
- #, fuzzy, gcc-internal-format
--#| msgid "-mas100-syntax is incompatible with -gdwarf"
- msgid "-mcall-aixdesc incompatible with -mabi=elfv2"
- msgstr "-mas100-syntax 与 -gdwarf ä¸å…¼å®¹"
-
-@@ -26550,13 +25780,11 @@
-
- #: config/rx/rx.c:644
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "unreocgnized control register number: %d - using 'psw'"
- msgid "unrecognized control register number: %d - using 'psw'"
- msgstr "无法识别的控制寄存器å·ï¼š%d - 使用‘psw’"
-
- #: config/rx/rx.c:1380
- #, fuzzy, gcc-internal-format
--#| msgid "multiple interrupt attributes not allowed"
- msgid "multiple fast interrupt routines seen: %qE and %qE"
- msgstr "ä¸å…许多个中断属性"
-
-@@ -26577,13 +25805,11 @@
-
- #: config/s390/s390.c:479
- #, fuzzy, gcc-internal-format
--#| msgid "argument of %qE attribute is not a string constant"
- msgid "requested %qE attribute is not a non-negative integer constant or too large (max. %d)"
- msgstr "%qE属性的实å‚ä¸æ˜¯ä¸€ä¸ªå­—符串常é‡"
-
- #: config/s390/s390.c:1712
- #, fuzzy, gcc-internal-format
--#| msgid "argument to %qE attribute larger than %d"
- msgid "argument to %qs is too large (max. %d)"
- msgstr "%qE属性的实å‚大于 %d"
-
-@@ -26634,13 +25860,11 @@
-
- #: config/s390/s390.c:5480
- #, fuzzy, gcc-internal-format
--#| msgid "function %q+D redeclared with attribute noinline"
- msgid "function %qE with the %qs attribute is not hotpatchable"
- msgstr "函数%q+Dé‡å£°æ˜Žä¸ºå¸¦æœ‰ä¸å¯å†…è”属性"
-
- #: config/s390/s390.c:5521
- #, fuzzy, gcc-internal-format
--#| msgid "ms_hook_prologue is not compatible with nested function"
- msgid "hotpatch_prologue is not compatible with nested function"
- msgstr "ms_hook_prologue 与嵌套函数ä¸å…¼å®¹"
-
-@@ -26661,7 +25885,6 @@
-
- #: config/s390/s390.c:9019
- #, fuzzy, gcc-internal-format
--#| msgid "frame size of %qs is "
- msgid "frame size of %qs is %wd bytes"
- msgstr "%qs的框架大å°æ˜¯"
-
-@@ -26770,7 +25993,6 @@
-
- #: config/sparc/sparc.c:1298
- #, fuzzy, gcc-internal-format
--#| msgid "-fdata-sections not supported for this target"
- msgid "-fcall-saved-REG is not supported for out registers"
- msgstr "-fdata-sections 在此目标机上ä¸å—支æŒ"
-
-@@ -26856,13 +26078,11 @@
-
- #: config/tilegx/tilegx.c:3512 config/tilepro/tilepro.c:3118
- #, fuzzy, gcc-internal-format
--#| msgid "bad builtin code"
- msgid "bad builtin icode"
- msgstr "错误的内建代ç "
-
- #: config/tilegx/tilegx.c:3553 config/tilepro/tilepro.c:3144
- #, fuzzy, gcc-internal-format
--#| msgid "mask must be an immediate"
- msgid "operand must be an immediate of the right size"
- msgstr "掩ç å¿…须是一个立å³æ•°"
-
-@@ -26983,19 +26203,16 @@
-
- #: config/vms/vms-c.c:44
- #, fuzzy, gcc-internal-format
--#| msgid "junk at end of #pragma ghs starttda"
- msgid "junk at end of #pragma __nostandard"
- msgstr "#pragma ghs starttda 末尾有垃圾字符"
-
- #: config/vms/vms-c.c:55
- #, fuzzy, gcc-internal-format
--#| msgid "junk at end of #pragma %s"
- msgid "junk at end of #pragma __standard"
- msgstr "#pragma %s 末尾有垃圾字符"
-
- #: config/vms/vms-c.c:80
- #, fuzzy, gcc-internal-format
--#| msgid "malformed %<#pragma align%>, ignoring"
- msgid "malformed '#pragma member_alignment', ignoring"
- msgstr "%<#pragma align%>æ ¼å¼é”™è¯¯ - 已忽略"
-
-@@ -27006,25 +26223,21 @@
-
- #: config/vms/vms-c.c:100
- #, fuzzy, gcc-internal-format
--#| msgid "malformed %<#pragma align%>"
- msgid "malformed '#pragma member_alignment'"
- msgstr "%<#pragma align%>æ ¼å¼é”™è¯¯"
-
- #: config/vms/vms-c.c:134
- #, fuzzy, gcc-internal-format
--#| msgid "invalid alignment for %<#pragma align%>, ignoring"
- msgid "unhandled alignment for '#pragma nomember_alignment'"
- msgstr "%<#pragma align%>指定的对é½è¾¹ç•Œæ— æ•ˆï¼Œå¿½ç•¥"
-
- #: config/vms/vms-c.c:147
- #, fuzzy, gcc-internal-format
--#| msgid "junk at end of '#pragma options'"
- msgid "garbage at end of '#pragma nomember_alignment'"
- msgstr "‘#pragma options’末尾有垃圾字符"
-
- #: config/vms/vms-c.c:202
- #, fuzzy, gcc-internal-format
--#| msgid "malformed '#pragma options', ignoring"
- msgid "malformed '#pragma extern_model', ignoring"
- msgstr "‘#pragma options’格å¼é”™è¯¯ - 已忽略"
-
-@@ -27040,31 +26253,26 @@
-
- #: config/vms/vms-c.c:234
- #, fuzzy, gcc-internal-format
--#| msgid "junk at end of %<#pragma extern_prefix%>"
- msgid "junk at end of '#pragma extern_model'"
- msgstr "%<#pragma extern_prefix%>末尾有垃圾字符"
-
- #: config/vms/vms-c.c:248
- #, fuzzy, gcc-internal-format
--#| msgid "malformed %<#pragma message%>, ignored"
- msgid "vms '#pragma __message' is ignored"
- msgstr "%<#pragma message%>æ ¼å¼é”™è¯¯ï¼Œå·²å¿½ç•¥"
-
- #: config/vms/vms-c.c:273 config/vms/vms-c.c:279
- #, fuzzy, gcc-internal-format
--#| msgid "malformed #pragma extern_prefix, ignored"
- msgid "malformed '#pragma __extern_prefix', ignoring"
- msgstr "#pragma extern_prefix æ ¼å¼é”™è¯¯ï¼Œå·²å¿½ç•¥"
-
- #: config/vms/vms-c.c:312 config/vms/vms-c.c:332
- #, fuzzy, gcc-internal-format
--#| msgid "malformed %<#pragma %s%>, ignored"
- msgid "malformed %<#pragma %s%>, ignoring"
- msgstr "%<#pragma %s%>æ ¼å¼é”™è¯¯ï¼Œå·²å¿½ç•¥"
-
- #: config/vms/vms-c.c:328
- #, fuzzy, gcc-internal-format
--#| msgid "invalid constant in %<#pragma pack%> - ignored"
- msgid "invalid constant in %<#pragma %s%>"
- msgstr "%<#pragma pack%>ä¸­æœ‰æ— æ•ˆå¸¸é‡ - 已忽略"
-
-@@ -27146,31 +26354,26 @@
-
- #: c/c-array-notation.c:708 c/c-array-notation.c:714
- #, fuzzy, gcc-internal-format
--#| msgid "%qD cannot be declared as constexpr"
- msgid "%qE cannot be scalar when %qE is not"
- msgstr "%qDä¸èƒ½è¢«å£°æ˜Žä¸ºå¹¿ä¹‰å¸¸è¡¨è¾¾å¼"
-
- #: c/c-array-notation.c:776 cp/cp-array-notation.c:658
- #, fuzzy, gcc-internal-format
--#| msgid "type mismatch between an SSA_NAME and its symbol"
- msgid "length mismatch between LHS and RHS"
- msgstr "SSA_NAME 和其符å·é—´ç±»åž‹ä¸åŒ¹é…"
-
- #: c/c-array-notation.c:1323 cp/cp-array-notation.c:1407
- #, fuzzy, gcc-internal-format
--#| msgid "array subscript is not an integer"
- msgid "start-index of array notation triplet is not an integer"
- msgstr "数组下标ä¸æ˜¯ä¸€ä¸ªæ•´æ•°"
-
- #: c/c-array-notation.c:1328 cp/cp-array-notation.c:1412
- #, fuzzy, gcc-internal-format
--#| msgid "array subscript is not an integer"
- msgid "length of array notation triplet is not an integer"
- msgstr "数组下标ä¸æ˜¯ä¸€ä¸ªæ•´æ•°"
-
- #: c/c-array-notation.c:1335 cp/cp-array-notation.c:1417
- #, fuzzy, gcc-internal-format
--#| msgid "array subscript is not an integer"
- msgid "stride of array notation triplet is not an integer"
- msgstr "数组下标ä¸æ˜¯ä¸€ä¸ªæ•´æ•°"
-
-@@ -27593,7 +26796,6 @@
-
- #: c/c-decl.c:3755
- #, fuzzy, gcc-internal-format
--#| msgid "empty declaration with type qualifier does not redeclare tag"
- msgid "empty declaration with %<_Alignas%> does not redeclare tag"
- msgstr "带有类型é™å®šçš„空声明没有é‡å£°æ˜Žæ ‡è®°"
-
-@@ -27609,7 +26811,6 @@
-
- #: c/c-decl.c:3799
- #, fuzzy, gcc-internal-format
--#| msgid "%<inline%> in empty declaration"
- msgid "%<_Noreturn%> in empty declaration"
- msgstr "%<inline%>用于空声明中"
-
-@@ -27630,7 +26831,6 @@
-
- #: c/c-decl.c:3824
- #, fuzzy, gcc-internal-format
--#| msgid "useless type name in empty declaration"
- msgid "useless %qs in empty declaration"
- msgstr "空声明中类型å无用"
-
-@@ -27641,7 +26841,6 @@
-
- #: c/c-decl.c:3844
- #, fuzzy, gcc-internal-format
--#| msgid "useless %<__thread%> in empty declaration"
- msgid "useless %<_Alignas%> in empty declaration"
- msgstr "空声明中%<__thread%>无用"
-
-@@ -27890,7 +27089,6 @@
-
- #: c/c-decl.c:5147
- #, fuzzy, gcc-internal-format
--#| msgid "duplicate %<restrict%>"
- msgid "duplicate %<_Atomic%>"
- msgstr "é‡å¤çš„%<restrict%>"
-
-@@ -27921,7 +27119,6 @@
-
- #: c/c-decl.c:5190
- #, fuzzy, gcc-internal-format
--#| msgid "function definition declared %<auto%>"
- msgid "function definition declared %qs"
- msgstr "函数声明定义为%<auto%>"
-
-@@ -27977,7 +27174,6 @@
-
- #: c/c-decl.c:5259
- #, fuzzy, gcc-internal-format
--#| msgid "function-scope %qE implicitly auto and declared %<__thread%>"
- msgid "function-scope %qE implicitly auto and declared %qs"
- msgstr "函数作用域的%qEéšå¼ä¸º auto,å´è¢«å£°æ˜Žä¸º%<__thread%>"
-
-@@ -28103,7 +27299,6 @@
- #: c/c-decl.c:5754 c/c-decl.c:5952 c/c-decl.c:6005 c/c-decl.c:6078
- #: c/c-decl.c:6179 c/c-parser.c:2401
- #, fuzzy, gcc-internal-format
--#| msgid "ISO C forbids qualified function types"
- msgid "%<_Atomic%>-qualified function type"
- msgstr "ISO C ä¸å…许使用 const 或 volatile é™å®šå‡½æ•°ç±»åž‹"
-
-@@ -28149,55 +27344,46 @@
-
- #: c/c-decl.c:5880
- #, fuzzy, gcc-internal-format
--#| msgid "bit-field %qs has invalid type"
- msgid "bit-field %qE has atomic type"
- msgstr "ä½æ®µ%qs类型无效"
-
- #: c/c-decl.c:5882
- #, fuzzy, gcc-internal-format
--#| msgid "bit-field %qs has invalid type"
- msgid "bit-field has atomic type"
- msgstr "ä½æ®µ%qs类型无效"
-
- #: c/c-decl.c:5891
- #, fuzzy, gcc-internal-format
--#| msgid "alignment may not be specified for %q+D"
- msgid "alignment specified for typedef %qE"
- msgstr "ä¸èƒ½ä¸º%q+D指定对é½"
-
- #: c/c-decl.c:5893
- #, fuzzy, gcc-internal-format
--#| msgid "%qs specified for parameter %qE"
- msgid "alignment specified for %<register%> object %qE"
- msgstr "为形å‚%2$qE指定了%1$qs"
-
- #: c/c-decl.c:5898
- #, fuzzy, gcc-internal-format
--#| msgid "%qs specified for parameter %qE"
- msgid "alignment specified for parameter %qE"
- msgstr "为形å‚%2$qE指定了%1$qs"
-
- #: c/c-decl.c:5900
- #, fuzzy, gcc-internal-format
--#| msgid "%qs specified for unnamed parameter"
- msgid "alignment specified for unnamed parameter"
- msgstr "为无åå½¢å‚指定了%qs"
-
- #: c/c-decl.c:5905
- #, fuzzy, gcc-internal-format
--#| msgid "alignment may not be specified for %q+D"
- msgid "alignment specified for bit-field %qE"
- msgstr "ä¸èƒ½ä¸º%q+D指定对é½"
-
- #: c/c-decl.c:5907
- #, fuzzy, gcc-internal-format
--#| msgid "%qs specified for unnamed parameter"
- msgid "alignment specified for unnamed bit-field"
- msgstr "为无åå½¢å‚指定了%qs"
-
- #: c/c-decl.c:5910
- #, fuzzy, gcc-internal-format
--#| msgid "assignment of function %qD"
- msgid "alignment specified for function %qE"
- msgstr "å‘函数%qD赋值"
-
-@@ -28218,7 +27404,6 @@
-
- #: c/c-decl.c:5968
- #, fuzzy, gcc-internal-format
--#| msgid "typedef %q+D declared %<inline%>"
- msgid "typedef %q+D declared %<_Noreturn%>"
- msgstr "typedef%q+D声明为%<inline%>"
-
-@@ -28250,7 +27435,6 @@
-
- #: c/c-decl.c:6111
- #, fuzzy, gcc-internal-format
--#| msgid "parameter %q+D declared %<inline%>"
- msgid "parameter %q+D declared %<_Noreturn%>"
- msgstr "å½¢å‚%q+D声明为%<inline%>"
-
-@@ -28281,19 +27465,16 @@
-
- #: c/c-decl.c:6223
- #, fuzzy, gcc-internal-format
--#| msgid "%qE initialized and declared %<extern%>"
- msgid "%<main%> declared %<_Noreturn%>"
- msgstr "%qEå·²åˆå§‹åŒ–,å´åˆè¢«å£°æ˜Žä¸º%<extern%>"
-
- #: c/c-decl.c:6236
- #, fuzzy, gcc-internal-format
--#| msgid "ISO C99 does not support %<_Static_assert%>"
- msgid "ISO C99 does not support %<_Noreturn%>"
- msgstr "ISO C90 ä¸æ”¯æŒ%<_Static_assert%>"
-
- #: c/c-decl.c:6239
- #, fuzzy, gcc-internal-format
--#| msgid "ISO C90 does not support %<long long%>"
- msgid "ISO C90 does not support %<_Noreturn%>"
- msgstr "ISO C90 ä¸æ”¯æŒ%<long long%>"
-
-@@ -28309,7 +27490,6 @@
-
- #: c/c-decl.c:6280
- #, fuzzy, gcc-internal-format
--#| msgid "variable %q+D declared %<inline%>"
- msgid "variable %q+D declared %<_Noreturn%>"
- msgstr "å˜é‡%q+D声明为%<inline%>"
-
-@@ -28482,7 +27662,6 @@
-
- #: c/c-decl.c:7352 cp/class.c:6386
- #, fuzzy, gcc-internal-format
--#| msgid "size of array %qE is too large"
- msgid "type %qT is too large"
- msgstr "数组%qE太大"
-
-@@ -28682,13 +27861,11 @@
- #. allow it.
- #: c/c-decl.c:8697
- #, fuzzy, gcc-internal-format
--#| msgid "%<for%> loop initial declarations are only allowed in C99 mode"
- msgid "%<for%> loop initial declarations are only allowed in C99 or C11 mode"
- msgstr "åªå…许在 C99 模å¼ä¸‹ä½¿ç”¨%<for%>循环åˆå§‹åŒ–声明"
-
- #: c/c-decl.c:8702
- #, fuzzy, gcc-internal-format
--#| msgid "use option -std=c99 or -std=gnu99 to compile your code"
- msgid "use option -std=c99, -std=gnu99, -std=c11 or -std=gnu11 to compile your code"
- msgstr "使用 -std=c99 或 -std=gnu99 æ¥ç¼–译您的代ç "
-
-@@ -28799,31 +27976,26 @@
-
- #: c/c-decl.c:9862
- #, fuzzy, gcc-internal-format
--#| msgid "%<__thread%> used with %<auto%>"
- msgid "%qE used with %<auto%>"
- msgstr "%<__thread%>与%<auto%>一起使用"
-
- #: c/c-decl.c:9864
- #, fuzzy, gcc-internal-format
--#| msgid "%<__thread%> used with %<register%>"
- msgid "%qE used with %<register%>"
- msgstr "%<__thread%>与%<register%>一起使用"
-
- #: c/c-decl.c:9866
- #, fuzzy, gcc-internal-format
--#| msgid "%<__thread%> used with %<typedef%>"
- msgid "%qE used with %<typedef%>"
- msgstr "%<__thread%>与%<typedef%>一起使用"
-
- #: c/c-decl.c:9880 c/c-parser.c:6560
- #, fuzzy, gcc-internal-format
--#| msgid "%s does not support %s"
- msgid "ISO C99 does not support %qE"
- msgstr "%s ä¸æ”¯æŒ %s"
-
- #: c/c-decl.c:9883 c/c-parser.c:6563
- #, fuzzy, gcc-internal-format
--#| msgid "ISO C90 does not support %<long long%>"
- msgid "ISO C90 does not support %qE"
- msgstr "ISO C90 ä¸æ”¯æŒ%<long long%>"
-
-@@ -28849,7 +28021,6 @@
-
- #: c/c-decl.c:9933
- #, fuzzy, gcc-internal-format
--#| msgid "%qs must be used with %qs"
- msgid "%qs used with %qE"
- msgstr "%qs必须与%qs一起使用"
-
-@@ -28906,7 +28077,6 @@
-
- #: c/c-parser.c:1535
- #, fuzzy, gcc-internal-format
--#| msgid "%<inline%> in empty declaration"
- msgid "%<__auto_type%> in empty declaration"
- msgstr "%<inline%>用于空声明中"
-
-@@ -28942,13 +28112,11 @@
-
- #: c/c-parser.c:1706
- #, fuzzy, gcc-internal-format
--#| msgid "%<typeof%> applied to a bit-field"
- msgid "%<__auto_type%> used with a bit-field initializer"
- msgstr "为ä½æ®µä½¿ç”¨%<typeof%>"
-
- #: c/c-parser.c:1778 c/c-parser.c:1863
- #, fuzzy, gcc-internal-format
--#| msgid "%<auto%> in file-scope empty declaration"
- msgid "%<__auto_type%> requires an initialized data declaration"
- msgstr "文件作用域中出现%<auto%>空声明"
-
-@@ -29022,19 +28190,16 @@
-
- #: c/c-parser.c:2372
- #, fuzzy, gcc-internal-format
--#| msgid "ISO C99 does not support %<_Static_assert%>"
- msgid "ISO C99 does not support the %<_Atomic%> qualifier"
- msgstr "ISO C90 ä¸æ”¯æŒ%<_Static_assert%>"
-
- #: c/c-parser.c:2375
- #, fuzzy, gcc-internal-format
--#| msgid "ISO C90 does not support %<_Static_assert%>"
- msgid "ISO C90 does not support the %<_Atomic%> qualifier"
- msgstr "ISO C90 ä¸æ”¯æŒ%<_Static_assert%>"
-
- #: c/c-parser.c:2403
- #, fuzzy, gcc-internal-format
--#| msgid "%<typeof%> applied to a bit-field"
- msgid "%<_Atomic%> applied to a qualified type"
- msgstr "为ä½æ®µä½¿ç”¨%<typeof%>"
-
-@@ -29109,13 +28274,11 @@
-
- #: c/c-parser.c:3049
- #, fuzzy, gcc-internal-format
--#| msgid "ISO C90 does not support %<long long%>"
- msgid "ISO C99 does not support %<_Alignas%>"
- msgstr "ISO C90 ä¸æ”¯æŒ%<long long%>"
-
- #: c/c-parser.c:3052
- #, fuzzy, gcc-internal-format
--#| msgid "ISO C90 does not support %<long long%>"
- msgid "ISO C90 does not support %<_Alignas%>"
- msgstr "ISO C90 ä¸æ”¯æŒ%<long long%>"
-
-@@ -29126,7 +28289,6 @@
-
- #: c/c-parser.c:3349 c/c-parser.c:3378
- #, fuzzy, gcc-internal-format
--#| msgid "Warn for obsolescent usage in a declaration"
- msgid "array notations cannot be used in declaration"
- msgstr "对声明中的过时用法给出警告"
-
-@@ -29306,37 +28468,31 @@
-
- #: c/c-parser.c:6616
- #, fuzzy, gcc-internal-format
--#| msgid "ISO C++ does not allow %<alignof%> with a non-type"
- msgid "ISO C does not allow %<%E (expression)%>"
- msgstr "ISO C++ ä¸å…许对éžç±»åž‹ä½¿ç”¨%<alignof%>"
-
- #: c/c-parser.c:6643
- #, fuzzy, gcc-internal-format
--#| msgid "cannot take address of bit-field %qD"
- msgid "cannot take address of %qs"
- msgstr "无法å–å¾—ä½æ®µ%qD的地å€"
-
- #: c/c-parser.c:6727
- #, fuzzy, gcc-internal-format
--#| msgid "ISO C99 does not support %<_Static_assert%>"
- msgid "ISO C99 does not support %<_Generic%>"
- msgstr "ISO C90 ä¸æ”¯æŒ%<_Static_assert%>"
-
- #: c/c-parser.c:6730
- #, fuzzy, gcc-internal-format
--#| msgid "ISO C90 does not support %<_Static_assert%>"
- msgid "ISO C90 does not support %<_Generic%>"
- msgstr "ISO C90 ä¸æ”¯æŒ%<_Static_assert%>"
-
- #: c/c-parser.c:6797
- #, fuzzy, gcc-internal-format
--#| msgid "cast specifies function type"
- msgid "%<_Generic%> association has function type"
- msgstr "类型转æ¢æŒ‡å®šäº†å‡½æ•°ç±»åž‹"
-
- #: c/c-parser.c:6800
- #, fuzzy, gcc-internal-format
--#| msgid "expression statement has incomplete type"
- msgid "%<_Generic%> association has incomplete type"
- msgstr "表达å¼è¯­å¥ç±»åž‹ä¸å®Œå…¨"
-
-@@ -29352,7 +28508,6 @@
-
- #: c/c-parser.c:6829
- #, fuzzy, gcc-internal-format
--#| msgid "originally defined here"
- msgid "original %<default%> is here"
- msgstr "原先在这里定义"
-
-@@ -29368,7 +28523,6 @@
-
- #: c/c-parser.c:6861
- #, fuzzy, gcc-internal-format
--#| msgid "Generate load/store multiple instructions"
- msgid "%<_Generic> selector matches multiple associations"
- msgstr "生æˆåŠ è½½/存储乘法指令"
-
-@@ -29399,7 +28553,6 @@
-
- #: c/c-parser.c:7265
- #, fuzzy, gcc-internal-format
--#| msgid "wrong number of arguments to function %<__builtin_next_arg%>"
- msgid "wrong number of arguments to %<__builtin_choose_expr%>"
- msgstr "给函数%<__builtin_next_arg%>çš„å‚æ•°æ•°ç›®ä¸å¯¹"
-
-@@ -29410,7 +28563,6 @@
-
- #: c/c-parser.c:7347
- #, fuzzy, gcc-internal-format
--#| msgid "wrong number of arguments to function %<__builtin_next_arg%>"
- msgid "wrong number of arguments to %<__builtin_complex%>"
- msgstr "给函数%<__builtin_next_arg%>çš„å‚æ•°æ•°ç›®ä¸å¯¹"
-
-@@ -29421,13 +28573,11 @@
-
- #: c/c-parser.c:7378
- #, fuzzy, gcc-internal-format
--#| msgid "%<__builtin_longjmp%> second argument must be 1"
- msgid "%<__builtin_complex%> operands of different types"
- msgstr "%<__builtin_longjmp%>的第二个实å‚必须是 1"
-
- #: c/c-parser.c:7424 cp/parser.c:5861
- #, fuzzy, gcc-internal-format
--#| msgid "wrong number of arguments to function %<__builtin_next_arg%>"
- msgid "wrong number of arguments to %<__builtin_shuffle%>"
- msgstr "给函数%<__builtin_next_arg%>çš„å‚æ•°æ•°ç›®ä¸å¯¹"
-
-@@ -29538,19 +28688,16 @@
-
- #: c/c-parser.c:9422 cp/parser.c:31380
- #, fuzzy, gcc-internal-format
--#| msgid "%<#pragma omp taskwait%> may only be used in compound statements"
- msgid "%<#pragma omp taskyield%> may only be used in compound statements"
- msgstr "%<#pragma omp taskwait%>åªèƒ½ç”¨åœ¨å¤åˆè¯­å¥ä¸­"
-
- #: c/c-parser.c:9433 cp/parser.c:31396
- #, fuzzy, gcc-internal-format
--#| msgid "%<#pragma omp barrier%> may only be used in compound statements"
- msgid "%<#pragma omp cancel%> may only be used in compound statements"
- msgstr "%<#pragma omp barrier%>åªèƒ½ç”¨åœ¨å¤åˆè¯­å¥ä¸­"
-
- #: c/c-parser.c:9444 cp/parser.c:31412
- #, fuzzy, gcc-internal-format
--#| msgid "%<#pragma omp taskwait%> may only be used in compound statements"
- msgid "%<#pragma omp cancellation point%> may only be used in compound statements"
- msgstr "%<#pragma omp taskwait%>åªèƒ½ç”¨åœ¨å¤åˆè¯­å¥ä¸­"
-
-@@ -29561,7 +28708,6 @@
-
- #: c/c-parser.c:9479 cp/parser.c:31468
- #, fuzzy, gcc-internal-format
--#| msgid "for statement expected"
- msgid "for, while or do statement expected"
- msgstr "éœ€è¦ for 语å¥"
-
-@@ -29598,7 +28744,6 @@
-
- #: c/c-parser.c:10195
- #, fuzzy, gcc-internal-format
--#| msgid "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, or %<||%>"
- msgid "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%>, %<min%> or %<max%>"
- msgstr "需è¦%<+%>ã€%<*%>ã€%<-%>ã€%<&%>ã€%<^%>ã€%<|%>ã€%<&&%>或%<||%>"
-
-@@ -29619,19 +28764,16 @@
-
- #: c/c-parser.c:10410
- #, fuzzy, gcc-internal-format
--#| msgid "%<num_threads%> value must be positive"
- msgid "%<num_teams%> value must be positive"
- msgstr "%<num_threads%>值必须为正"
-
- #: c/c-parser.c:10454
- #, fuzzy, gcc-internal-format
--#| msgid "%<num_threads%> value must be positive"
- msgid "%<thread_limit%> value must be positive"
- msgstr "%<num_threads%>值必须为正"
-
- #: c/c-parser.c:10496 cp/semantics.c:5589
- #, fuzzy, gcc-internal-format
--#| msgid "%Hcollapse argument needs positive constant integer expression"
- msgid "%<aligned%> clause alignment expression must be positive constant integer expression"
- msgstr "%H折å å˜é‡éœ€è¦æ­£æ•´å¸¸æ•°è¡¨è¾¾å¼"
-
-@@ -29642,49 +28784,41 @@
-
- #: c/c-parser.c:10538
- #, fuzzy, gcc-internal-format
--#| msgid "schedule chunk size expression must be integral"
- msgid "%<linear%> clause step expression must be integral"
- msgstr "调度å—大å°è¡¨è¾¾å¼å¿…须为整型"
-
- #: c/c-parser.c:10575
- #, fuzzy, gcc-internal-format
--#| msgid "%Hcollapse argument needs positive constant integer expression"
- msgid "%<safelen%> clause expression must be positive constant integer expression"
- msgstr "%H折å å˜é‡éœ€è¦æ­£æ•´å¸¸æ•°è¡¨è¾¾å¼"
-
- #: c/c-parser.c:10611
- #, fuzzy, gcc-internal-format
--#| msgid "%Hcollapse argument needs positive constant integer expression"
- msgid "%<simdlen%> clause expression must be positive constant integer expression"
- msgstr "%H折å å˜é‡éœ€è¦æ­£æ•´å¸¸æ•°è¡¨è¾¾å¼"
-
- #: c/c-parser.c:10673 cp/parser.c:27875 cp/parser.c:28058
- #, fuzzy, gcc-internal-format
--#| msgid "invalid schedule kind"
- msgid "invalid depend kind"
- msgstr "无效的调度类型"
-
- #: c/c-parser.c:10710 cp/parser.c:27915
- #, fuzzy, gcc-internal-format
--#| msgid "invalid mask"
- msgid "invalid map kind"
- msgstr "无效掩ç "
-
- #: c/c-parser.c:10775 cp/parser.c:28005
- #, fuzzy, gcc-internal-format
--#| msgid "invalid schedule kind"
- msgid "invalid dist_schedule kind"
- msgstr "无效的调度类型"
-
- #: c/c-parser.c:10844
- #, fuzzy, gcc-internal-format
--#| msgid "invalid schedule kind"
- msgid "invalid proc_bind kind"
- msgstr "无效的调度类型"
-
- #: c/c-parser.c:10999 cp/parser.c:28194
- #, fuzzy, gcc-internal-format
--#| msgid "%qs must be used with %qs"
- msgid "%qs must be the first clause of %qs"
- msgstr "%qs必须与%qs一起使用"
-
-@@ -29700,7 +28834,6 @@
-
- #: c/c-parser.c:11459 cp/parser.c:28653 cp/parser.c:28679
- #, fuzzy, gcc-internal-format
--#| msgid "invalid operator for %<#pragma omp atomic%>"
- msgid "invalid form of %<#pragma omp atomic%>"
- msgstr "%<#pragma omp atomic%>è¿ç®—符无效"
-
-@@ -29746,19 +28879,16 @@
-
- #: c/c-parser.c:12219 cp/parser.c:29731
- #, fuzzy, gcc-internal-format
--#| msgid "expected %<operator%>"
- msgid "expected %<for%> after %qs"
- msgstr "需è¦%<operator%>"
-
- #: c/c-parser.c:12411 cp/parser.c:29918
- #, fuzzy, gcc-internal-format
--#| msgid "expected %<using%>"
- msgid "expected %<point%>"
- msgstr "需è¦%<using%>"
-
- #: c/c-parser.c:12615 cp/parser.c:30140
- #, fuzzy, gcc-internal-format
--#| msgid "%<#pragma omp taskwait%> may only be used in compound statements"
- msgid "%<#pragma omp target update%> may only be used in compound statements"
- msgstr "%<#pragma omp taskwait%>åªèƒ½ç”¨åœ¨å¤åˆè¯­å¥ä¸­"
-
-@@ -29774,7 +28904,6 @@
-
- #: c/c-parser.c:12817 c/c-parser.c:12845
- #, fuzzy, gcc-internal-format
--#| msgid "%<#pragma align%> must appear before the declaration of %D, ignoring"
- msgid "%<#pragma omp declare simd%> must be followed by function declaration or definition"
- msgstr "%<#pragma align%>必须出现在 %D 的声明之å‰ï¼Œå¿½ç•¥"
-
-@@ -29795,19 +28924,16 @@
-
- #: c/c-parser.c:12983 cp/parser.c:30450
- #, fuzzy, gcc-internal-format
--#| msgid "expected %<try%>"
- msgid "expected %<target%>"
- msgstr "需è¦%<try%>"
-
- #: c/c-parser.c:12990 cp/parser.c:30457
- #, fuzzy, gcc-internal-format
--#| msgid "expected %<decltype%>"
- msgid "expected %<declare%>"
- msgstr "需è¦%<decltype%>"
-
- #: c/c-parser.c:12996 cp/parser.c:30464
- #, fuzzy, gcc-internal-format
--#| msgid "%<#pragma GCC pop_options%> without a corresponding %<#pragma GCC push_options%>"
- msgid "%<#pragma omp end declare target%> without corresponding %<#pragma omp declare target%>"
- msgstr "%<#pragma GCC pop_options%>缺少相应的%<#pragma GCC push_options%>"
-
-@@ -29818,7 +28944,6 @@
-
- #: c/c-parser.c:13074
- #, fuzzy, gcc-internal-format
--#| msgid "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, or %<||%>"
- msgid "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%>, %<min%> or identifier"
- msgstr "需è¦%<+%>ã€%<*%>ã€%<-%>ã€%<&%>ã€%<^%>ã€%<|%>ã€%<&&%>或%<||%>"
-
-@@ -29844,19 +28969,16 @@
-
- #: c/c-parser.c:13125
- #, fuzzy, gcc-internal-format
--#| msgid "previous declaration"
- msgid "previous %<#pragma omp declare reduction%>"
- msgstr "上一个声明"
-
- #: c/c-parser.c:13242
- #, fuzzy, gcc-internal-format
--#| msgid "expected %<(%> or end of line"
- msgid "expected %<omp_priv%> or function-name"
- msgstr "需è¦%<(%>或行尾"
-
- #: c/c-parser.c:13253
- #, fuzzy, gcc-internal-format
--#| msgid "expected function"
- msgid "expected function-name %<(%>"
- msgstr "需è¦å‡½æ•°"
-
-@@ -29867,7 +28989,6 @@
-
- #: c/c-parser.c:13388 cp/parser.c:30900
- #, fuzzy, gcc-internal-format
--#| msgid "expected %<#pragma omp section%> or %<}%>"
- msgid "expected %<simd%> or %<reduction%> or %<target%>"
- msgstr "需è¦%<#pragma omp section%>或%<}%>"
-
-@@ -29898,31 +29019,26 @@
-
- #: c/c-parser.c:13536
- #, fuzzy, gcc-internal-format
--#| msgid "#pragma GCC optimize is not allowed inside functions"
- msgid "pragma simd must be inside a function"
- msgstr "#pragma GCC optimize ä¸å…许用在函数中"
-
- #: c/c-parser.c:13580 cp/parser.c:31586
- #, fuzzy, gcc-internal-format
--#| msgid "selector must be an integer constant in the range 0..%wi"
- msgid "vectorlength must be an integer constant"
- msgstr "选择å­å¿…须是 0 到 %wi 间的整常é‡"
-
- #: c/c-parser.c:13582 cp/parser.c:31589
- #, fuzzy, gcc-internal-format
--#| msgid "stack size must be an exact power of 2"
- msgid "vectorlength must be a power of 2"
- msgstr "栈大å°å¿…须刚好是 2 çš„æŸæ¬¡æ–¹"
-
- #: c/c-parser.c:13665 cp/parser.c:31696
- #, fuzzy, gcc-internal-format
--#| msgid "selector must be an integer constant in the range 0..%wi"
- msgid "step size must be an integer constant expression or an integer variable"
- msgstr "选择å­å¿…须是 0 到 %wi 间的整常é‡"
-
- #: c/c-parser.c:13764 cp/parser.c:31789
- #, fuzzy, gcc-internal-format
--#| msgid "expected %<#pragma omp%> clause"
- msgid "expected %<#pragma simd%> clause"
- msgstr "需è¦%<#pragma omp%>å­å¥"
-
-@@ -29953,7 +29069,6 @@
-
- #: c/c-parser.c:14059 cp/parser.c:6263
- #, fuzzy, gcc-internal-format
--#| msgid "expected %<:%> or %<::%>"
- msgid "expected %<:%> or numeral"
- msgstr "需è¦%<:%>或%<::%>"
-
-@@ -29964,7 +29079,6 @@
-
- #: c/c-parser.c:14077 c/c-parser.c:14120
- #, fuzzy, gcc-internal-format
--#| msgid "new cannot be applied to a function type"
- msgid "array notations cannot be used with function type"
- msgstr "new ä¸èƒ½ç”¨äºŽå‡½æ•°ç±»åž‹"
-
-@@ -29980,7 +29094,6 @@
-
- #: c/c-parser.c:14148 c/c-parser.c:14151
- #, fuzzy, gcc-internal-format
--#| msgid "expected boolean expression"
- msgid "expected array notation expression"
- msgstr "需è¦å¸ƒå°”表达å¼"
-
-@@ -30062,7 +29175,6 @@
-
- #: c/c-typeck.c:1832
- #, fuzzy, gcc-internal-format
--#| msgid "defining a type in a compound literal is invalid in C++"
- msgid "converting an array compound literal to a pointer is ill-formed in C++"
- msgstr "C++ ä¸å…许在组åˆå­—é¢å¸¸é‡ä¸­å®šä¹‰ç±»åž‹"
-
-@@ -30088,7 +29200,6 @@
-
- #: c/c-typeck.c:2434
- #, fuzzy, gcc-internal-format
--#| msgid "alignment of array elements is greater than element size"
- msgid "rank of the array's index is greater than 1"
- msgstr "数组元素的对é½è¾¹ç•Œæ¯”元素大å°è¿˜è¦å¤§"
-
-@@ -30129,19 +29240,16 @@
-
- #: c/c-typeck.c:2881
- #, fuzzy, gcc-internal-format
--#| msgid "called object %qE is not a function"
- msgid "called object %qE is not a function or function pointer"
- msgstr "被调用的对象%qEä¸æ˜¯ä¸€ä¸ªå‡½æ•°"
-
- #: c/c-typeck.c:2886
- #, fuzzy, gcc-internal-format
--#| msgid "called object %qE is not a function"
- msgid "called object %qD is not a function or function pointer"
- msgstr "被调用的对象%qEä¸æ˜¯ä¸€ä¸ªå‡½æ•°"
-
- #: c/c-typeck.c:2892
- #, fuzzy, gcc-internal-format
--#| msgid "called object %qE is not a function"
- msgid "called object is not a function or function pointer"
- msgstr "被调用的对象%qEä¸æ˜¯ä¸€ä¸ªå‡½æ•°"
-
-@@ -30250,7 +29358,6 @@
-
- #: c/c-typeck.c:3515 cp/typeck.c:5054
- #, fuzzy, gcc-internal-format
--#| msgid "arithmetic on pointer to an incomplete type"
- msgid "arithmetic on pointer to an empty aggregate"
- msgstr "在指å‘ä¸å®Œå…¨ç±»åž‹çš„指针上执行算术è¿ç®—"
-
-@@ -30366,7 +29473,6 @@
-
- #: c/c-typeck.c:4725 cp/typeck.c:6204
- #, fuzzy, gcc-internal-format
--#| msgid "a function call cannot appear in a constant-expression"
- msgid "spawned function call cannot be part of a comma expression"
- msgstr "函数调用ä¸èƒ½å‡ºçŽ°åœ¨å¸¸é‡è¡¨è¾¾å¼ä¸­"
-
-@@ -30377,7 +29483,6 @@
-
- #: c/c-typeck.c:4777 c/c-typeck.c:9666
- #, fuzzy, gcc-internal-format
--#| msgid "left-hand operand of comma expression has no effect"
- msgid "right-hand operand of comma expression has no effect"
- msgstr "逗å·è¡¨è¾¾å¼çš„å·¦æ“作数ä¸èµ·ä½œç”¨"
-
-@@ -30473,7 +29578,6 @@
-
- #: c/c-typeck.c:5214
- #, fuzzy, gcc-internal-format
--#| msgid "assignment suppression"
- msgid "assignment to expression with array type"
- msgstr "å–消赋值"
-
-@@ -30819,7 +29923,6 @@
-
- #: c/c-typeck.c:7436
- #, fuzzy, gcc-internal-format
--#| msgid "missing initializer for member %qD"
- msgid "missing initializer for field %qD of %qT"
- msgstr "æˆå‘˜%qD缺少åˆå§‹å€¼è®¾å®š"
-
-@@ -30945,7 +30048,6 @@
-
- #: c/c-typeck.c:9139 cp/typeck.c:8333
- #, fuzzy, gcc-internal-format
--#| msgid "Logical range in CASE statement at %L is not allowed"
- msgid "use of %<_Cilk_spawn%> in a return statement is not allowed"
- msgstr "%L处 CASE 语å¥ä¸­çš„逻辑范围是ä¸è¢«å…许的"
-
-@@ -31031,13 +30133,11 @@
-
- #: c/c-typeck.c:9621
- #, fuzzy, gcc-internal-format
--#| msgid "break statement not within loop or switch"
- msgid "break statement within %<#pragma simd%> loop body"
- msgstr "break 语å¥ä¸åœ¨å¾ªçŽ¯æˆ–开关语å¥å†…"
-
- #: c/c-typeck.c:9623 cp/parser.c:10656
- #, fuzzy, gcc-internal-format
--#| msgid "continue statement not within a loop"
- msgid "continue statement within %<#pragma simd%> loop body"
- msgstr "continue 语å¥å‡ºçŽ°åœ¨å¾ªçŽ¯ä»¥å¤–"
-
-@@ -31053,7 +30153,6 @@
-
- #: c/c-typeck.c:10464 c/c-typeck.c:10601 cp/typeck.c:4570
- #, fuzzy, gcc-internal-format
--#| msgid "Warn about comparison of different enum types"
- msgid "comparing vectors with different element types"
- msgstr "对ä¸åŒæžšä¸¾ç±»åž‹ä¹‹é—´çš„比较给出警告"
-
-@@ -31140,7 +30239,6 @@
-
- #: c/c-typeck.c:11053
- #, fuzzy, gcc-internal-format
--#| msgid "used struct type value where scalar is required"
- msgid "used vector type where scalar is required"
- msgstr "需è¦æ ‡é‡æ—¶ä½¿ç”¨äº†ç»“构类型"
-
-@@ -31156,7 +30254,6 @@
-
- #: c/c-typeck.c:11269 cp/semantics.c:4222 cp/semantics.c:5655
- #, fuzzy, gcc-internal-format
--#| msgid "%qD is not a variable in clause %qs"
- msgid "%qD is not a variable in %qs clause"
- msgstr "%qD在å­å¥%qs中ä¸æ˜¯ä¸€ä¸ªå˜é‡"
-
-@@ -31163,7 +30260,6 @@
- #: c/c-typeck.c:11273 c/c-typeck.c:12044 cp/semantics.c:4226
- #: cp/semantics.c:5658
- #, fuzzy, gcc-internal-format
--#| msgid "%qE is not a variable in clause %qs"
- msgid "%qE is not a variable in %qs clause"
- msgstr "%qE在å­å¥%qs中ä¸æ˜¯ä¸€ä¸ªå˜é‡"
-
-@@ -31170,19 +30266,16 @@
- #: c/c-typeck.c:11281 c/c-typeck.c:12051 cp/semantics.c:4234
- #: cp/semantics.c:5664
- #, fuzzy, gcc-internal-format
--#| msgid "%qD is not a variable in clause %qs"
- msgid "%qD is threadprivate variable in %qs clause"
- msgstr "%qD在å­å¥%qs中ä¸æ˜¯ä¸€ä¸ªå˜é‡"
-
- #: c/c-typeck.c:11303 cp/semantics.c:4260
- #, fuzzy, gcc-internal-format
--#| msgid "size in array new must have integral type"
- msgid "low bound %qE of array section does not have integral type"
- msgstr "数组 new 的大å°å¿…须有整数类型"
-
- #: c/c-typeck.c:11310 cp/semantics.c:4267
- #, fuzzy, gcc-internal-format
--#| msgid "size in array new must have integral type"
- msgid "length %qE of array section does not have integral type"
- msgstr "数组 new 的大å°å¿…须有整数类型"
-
-@@ -31198,7 +30291,6 @@
-
- #: c/c-typeck.c:11359 cp/semantics.c:4316
- #, fuzzy, gcc-internal-format
--#| msgid "variable length array is used"
- msgid "negative length in array section in %qs clause"
- msgstr "使用了å˜é•¿æ•°ç»„"
-
-@@ -31219,7 +30311,6 @@
-
- #: c/c-typeck.c:11447 cp/semantics.c:4404
- #, fuzzy, gcc-internal-format
--#| msgid "for increment expression has no effect"
- msgid "for pointer type length expression must be specified"
- msgstr "for 循环増é‡è¡¨è¾¾å¼ä¸èµ·ä½œç”¨"
-
-@@ -31226,7 +30317,6 @@
- #: c/c-typeck.c:11456 c/c-typeck.c:11571 cp/semantics.c:4413
- #: cp/semantics.c:4524
- #, fuzzy, gcc-internal-format
--#| msgid "Copy array sections into a contiguous block on procedure entry"
- msgid "array section is not contiguous in %qs clause"
- msgstr "在过程入å£å¤„将数组段å¤åˆ¶åˆ°ä¸€ä¸ªè¿žç»­çš„å—中"
-
-@@ -31282,25 +30372,21 @@
-
- #: c/c-typeck.c:11975 cp/semantics.c:5545
- #, fuzzy, gcc-internal-format
--#| msgid "%qE is not a variable in clause %qs"
- msgid "%qE is not a variable in %<aligned%> clause"
- msgstr "%qE在å­å¥%qs中ä¸æ˜¯ä¸€ä¸ªå˜é‡"
-
- #: c/c-typeck.c:11982
- #, fuzzy, gcc-internal-format
--#| msgid "type to vector delete is neither pointer or array type"
- msgid "%qE in %<aligned%> clause is neither a pointer nor an array"
- msgstr "å‘é‡ delete 的实å‚类型既éžæŒ‡é’ˆä¹Ÿéžæ•°ç»„"
-
- #: c/c-typeck.c:11989
- #, fuzzy, gcc-internal-format
--#| msgid "%qE appears more than once in data clauses"
- msgid "%qE appears more than once in %<aligned%> clauses"
- msgstr "%qE在数æ®å­å¥ä¸­å¤šæ¬¡å‡ºçŽ°"
-
- #: c/c-typeck.c:12010 cp/semantics.c:5615
- #, fuzzy, gcc-internal-format
--#| msgid "%qE is not a variable in clause %qs"
- msgid "%qE is not a variable in %<depend%> clause"
- msgstr "%qE在å­å¥%qs中ä¸æ˜¯ä¸€ä¸ªå˜é‡"
-
-@@ -31311,31 +30397,26 @@
-
- #: c/c-typeck.c:12062 cp/semantics.c:5680
- #, fuzzy, gcc-internal-format
--#| msgid "%qD is not a variable in clause %qs"
- msgid "%qD does not have a mappable type in %qs clause"
- msgstr "%qD在å­å¥%qs中ä¸æ˜¯ä¸€ä¸ªå˜é‡"
-
- #: c/c-typeck.c:12069 cp/semantics.c:5687
- #, fuzzy, gcc-internal-format
--#| msgid "%qD appears more than once in data clauses"
- msgid "%qD appears more than once in motion clauses"
- msgstr "%qD在数æ®å­å¥ä¸­å¤šæ¬¡å‡ºçŽ°"
-
- #: c/c-typeck.c:12071 cp/semantics.c:5689
- #, fuzzy, gcc-internal-format
--#| msgid "%qD appears more than once in data clauses"
- msgid "%qD appears more than once in map clauses"
- msgstr "%qD在数æ®å­å¥ä¸­å¤šæ¬¡å‡ºçŽ°"
-
- #: c/c-typeck.c:12084 cp/semantics.c:5703
- #, fuzzy, gcc-internal-format
--#| msgid "%qD is not a variable in clause %qs"
- msgid "%qD is not an argument in %<uniform%> clause"
- msgstr "%qD在å­å¥%qs中ä¸æ˜¯ä¸€ä¸ªå˜é‡"
-
- #: c/c-typeck.c:12087 cp/semantics.c:5705
- #, fuzzy, gcc-internal-format
--#| msgid "%qE is not a variable in clause %qs"
- msgid "%qE is not an argument in %<uniform%> clause"
- msgstr "%qE在å­å¥%qs中ä¸æ˜¯ä¸€ä¸ªå˜é‡"
-
-@@ -31424,7 +30505,6 @@
- #. Re-run template unification with diagnostics.
- #: cp/call.c:3279
- #, fuzzy, gcc-internal-format
--#| msgid "template argument %d is invalid"
- msgid " template argument deduction/substitution failed:"
- msgstr "模æ¿ç¬¬ %d 个å‚数无效"
-
-@@ -31472,25 +30552,21 @@
-
- #: cp/call.c:4245
- #, fuzzy, gcc-internal-format
--#| msgid "ambiguous overload for %qs in %<%s %E%>"
- msgid "ambiguous overload for "
- msgstr "%qs在%<%s %E%>中的é‡è½½æœ‰æ­§ä¹‰"
-
- #: cp/call.c:4246
- #, fuzzy, gcc-internal-format
--#| msgid "no match for %qs in %<%s %E%>"
- msgid "no match for "
- msgstr "%qs在%<%s %E%>中没有匹é…"
-
- #: cp/call.c:4249
- #, fuzzy, gcc-internal-format
--#| msgid "invalid operands to binary %s (have %qT and %qT)"
- msgid " (operand types are %qT, %qT, and %qT)"
- msgstr "åŒç›®è¿ç®—符 %s æ“作数(%qTå’Œ%qT)无效"
-
- #: cp/call.c:4251
- #, fuzzy, gcc-internal-format
--#| msgid "invalid operands to binary %s (have %qT and %qT)"
- msgid " (operand types are %qT and %qT)"
- msgstr "åŒç›®è¿ç®—符 %s æ“作数(%qTå’Œ%qT)无效"
-
-@@ -31501,61 +30577,51 @@
-
- #: cp/call.c:4273
- #, fuzzy, gcc-internal-format
--#| msgid "expected %<operator%>"
- msgid "ternary %<operator?:%>"
- msgstr "需è¦%<operator%>"
-
- #: cp/call.c:4277
- #, fuzzy, gcc-internal-format
--#| msgid "no match for ternary %<operator?:%> in %<%E ? %E : %E%>"
- msgid "ternary %<operator?:%> in %<%E ? %E : %E%>"
- msgstr "三元%<operator?:%>在%<%E ? %E : %E%>中没有匹é…"
-
- #: cp/call.c:4286 cp/call.c:4317 cp/call.c:4326
- #, fuzzy, gcc-internal-format
--#| msgid "expected %<operator%>"
- msgid "%<operator%s%>"
- msgstr "需è¦%<operator%>"
-
- #: cp/call.c:4289
- #, fuzzy, gcc-internal-format
--#| msgid "no match for %<operator%s%> in %<%E%s%>"
- msgid "%<operator%s%> in %<%E%s%>"
- msgstr "%<operator%s%>在%<%E%s%>中没有匹é…"
-
- #: cp/call.c:4296
- #, fuzzy, gcc-internal-format
--#| msgid "expected %<operator%>"
- msgid "%<operator[]%>"
- msgstr "需è¦%<operator%>"
-
- #: cp/call.c:4299
- #, fuzzy, gcc-internal-format
--#| msgid "no match for %<operator[]%> in %<%E[%E]%>"
- msgid "%<operator[]%> in %<%E[%E]%>"
- msgstr "%<operator[]%>在%<%E[%E]%>中没有匹é…"
-
- #: cp/call.c:4307
- #, fuzzy, gcc-internal-format
--#| msgid "%s"
- msgid "%qs"
- msgstr "%s"
-
- #: cp/call.c:4310
- #, fuzzy, gcc-internal-format
--#| msgid "no match for %qs in %<%s %E%>"
- msgid "%qs in %<%s %E%>"
- msgstr "%qs在%<%s %E%>中没有匹é…"
-
- #: cp/call.c:4320
- #, fuzzy, gcc-internal-format
--#| msgid "no match for %<operator%s%> in %<%E %s %E%>"
- msgid "%<operator%s%> in %<%E %s %E%>"
- msgstr "%<operator%s%>在%<%E %s %E%>中没有匹é…"
-
- #: cp/call.c:4329
- #, fuzzy, gcc-internal-format
--#| msgid "no match for %<operator%s%> in %<%s%E%>"
- msgid "%<operator%s%> in %<%s%E%>"
- msgstr "%<operator%s%>在%<%s%E%>中没有匹é…"
-
-@@ -31571,7 +30637,6 @@
-
- #: cp/call.c:4554
- #, fuzzy, gcc-internal-format
--#| msgid "enumeral mismatch in conditional expression: %qT vs %qT"
- msgid "incompatible vector types in conditional expression: %qT, %qT and %qT"
- msgstr "æ¡ä»¶è¡¨è¾¾å¼ä¸­æžšä¸¾ä¸åŒ¹é…:%qT对%qT"
-
-@@ -31672,7 +30737,6 @@
-
- #: cp/call.c:5883
- #, fuzzy, gcc-internal-format
--#| msgid "converting %<false%> to pointer type for argument %P of %qD"
- msgid "converting %<false%> to pointer type %qT"
- msgstr "å°†%<false%>转æ¢ä¸ºæŒ‡å‘%2$qDçš„å®žå‚ %1$P 的指针类型"
-
-@@ -31683,7 +30747,6 @@
-
- #: cp/call.c:5940
- #, fuzzy, gcc-internal-format
--#| msgid "invalid conversion from %qT to %qT"
- msgid "invalid user-defined conversion from %qT to %qT"
- msgstr "从类型%qT到类型%qT的转æ¢æ— æ•ˆ"
-
-@@ -31694,7 +30757,6 @@
-
- #: cp/call.c:5975
- #, fuzzy, gcc-internal-format
--#| msgid " initializing argument %P of %qD"
- msgid "initializing argument %P of %qD"
- msgstr " åˆå§‹åŒ–%2$qDçš„å®žå‚ %1$P"
-
-@@ -31705,7 +30767,6 @@
-
- #: cp/call.c:6080 cp/call.c:6219
- #, fuzzy, gcc-internal-format
--#| msgid " initializing argument %P of %q+D"
- msgid "initializing argument %P of %q+D"
- msgstr "以åˆå§‹åŒ–%2$q+Dçš„å®žå‚ %1$P"
-
-@@ -31736,7 +30797,6 @@
-
- #: cp/call.c:6370 cp/cvt.c:1720
- #, fuzzy, gcc-internal-format
--#| msgid "class %qT will be considered nearly empty in a future version of GCC"
- msgid "scoped enum %qT will not promote to an integral type in a future version of GCC"
- msgstr "在 GCC 的未æ¥ç‰ˆæœ¬ä¸­ç±»%qT将被看作几乎为空"
-
-@@ -31758,7 +30818,6 @@
-
- #: cp/call.c:6507
- #, fuzzy, gcc-internal-format
--#| msgid "the default argument for parameter %d of %qD has not yet been parsed"
- msgid "call to %qD uses the default argument for parameter %P, which is not yet defined"
- msgstr "%2$qD的第 %1$d 个形å‚的默认实å‚尚未被解æžåˆ°"
-
-@@ -31769,7 +30828,6 @@
-
- #: cp/call.c:6668
- #, fuzzy, gcc-internal-format
--#| msgid "defaulted function %q+D with default argument"
- msgid "use of multiversioned function without a default"
- msgstr "默认化函数%q+D有默认å‚æ•°"
-
-@@ -31820,7 +30878,6 @@
-
- #: cp/call.c:7662
- #, fuzzy, gcc-internal-format
--#| msgid " for a function-style cast, remove the redundant %<::%D%>"
- msgid "for a function-style cast, remove the redundant %<::%D%>"
- msgstr "对于函数类型的类型转æ¢ï¼Œç§»é™¤å†—余的%<::%D%>"
-
-@@ -31891,7 +30948,6 @@
-
- #: cp/call.c:9075
- #, fuzzy, gcc-internal-format
--#| msgid "could not convert %qE to %qT"
- msgid "could not convert %qE from %qT to %qT"
- msgstr "ä¸èƒ½å°†%qE转æ¢ä¸º%qT"
-
-@@ -31912,25 +30968,21 @@
-
- #: cp/class.c:302
- #, fuzzy, gcc-internal-format
--#| msgid "cannot convert from base %qT to derived type %qT via virtual base %qT"
- msgid "cannot convert from pointer to base class %qT to pointer to derived class %qT because the base is virtual"
- msgstr "无法从基类%qT转æ¢åˆ°æ´¾ç”Ÿç±»%qT,通过虚基类%qT"
-
- #: cp/class.c:306
- #, fuzzy, gcc-internal-format
--#| msgid "cannot convert from base %qT to derived type %qT via virtual base %qT"
- msgid "cannot convert from base class %qT to derived class %qT because the base is virtual"
- msgstr "无法从基类%qT转æ¢åˆ°æ´¾ç”Ÿç±»%qT,通过虚基类%qT"
-
- #: cp/class.c:313
- #, fuzzy, gcc-internal-format
--#| msgid "cannot convert from base %qT to derived type %qT via virtual base %qT"
- msgid "cannot convert from pointer to base class %qT to pointer to derived class %qT via virtual base %qT"
- msgstr "无法从基类%qT转æ¢åˆ°æ´¾ç”Ÿç±»%qT,通过虚基类%qT"
-
- #: cp/class.c:318
- #, fuzzy, gcc-internal-format
--#| msgid "cannot convert from base %qT to derived type %qT via virtual base %qT"
- msgid "cannot convert from base class %qT to derived class %qT via virtual base %qT"
- msgstr "无法从基类%qT转æ¢åˆ°æ´¾ç”Ÿç±»%qT,通过虚基类%qT"
-
-@@ -31946,13 +30998,11 @@
-
- #: cp/class.c:1159
- #, fuzzy, gcc-internal-format
--#| msgid " inlined from %qs"
- msgid "%q#D inherited from %qT"
- msgstr " 内è”自%qs"
-
- #: cp/class.c:1162
- #, fuzzy, gcc-internal-format
--#| msgid "conflicts with previous declaration here"
- msgid "conflicts with version inherited from %qT"
- msgstr "与先å‰æ­¤å¤„的声明冲çª"
-
-@@ -31998,7 +31048,6 @@
-
- #: cp/class.c:1389 cp/class.c:1399
- #, fuzzy, gcc-internal-format
--#| msgid "%qD declared here"
- msgid "%qT declared here"
- msgstr "%qD在此声明"
-
-@@ -32009,7 +31058,6 @@
-
- #: cp/class.c:1508
- #, fuzzy, gcc-internal-format
--#| msgid "cannot convert from base %qT to derived type %qT via virtual base %qT"
- msgid "cannot derive from %<final%> base %qT in derived type %qT"
- msgstr "无法从基类%qT转æ¢åˆ°æ´¾ç”Ÿç±»%qT,通过虚基类%qT"
-
-@@ -32040,7 +31088,6 @@
-
- #: cp/class.c:2753
- #, fuzzy, gcc-internal-format
--#| msgid "%q+D defined but not used"
- msgid "%q+#D marked final, but is not virtual"
- msgstr "%q+D定义åŽæœªä½¿ç”¨"
-
-@@ -32177,13 +31224,11 @@
-
- #: cp/class.c:3594
- #, fuzzy, gcc-internal-format
--#| msgid "non-member %qs cannot be declared %<mutable%>"
- msgid "member %q+D cannot be declared both %<const%> and %<mutable%>"
- msgstr "éžæˆå‘˜%qsä¸èƒ½è¢«å£°æ˜Žä¸º%<mutable%>"
-
- #: cp/class.c:3600
- #, fuzzy, gcc-internal-format
--#| msgid "non-member %qs cannot be declared %<mutable%>"
- msgid "member %q+D cannot be declared as a %<mutable%> reference"
- msgstr "éžæˆå‘˜%qsä¸èƒ½è¢«å£°æ˜Žä¸º%<mutable%>"
-
-@@ -32244,13 +31289,11 @@
-
- #: cp/class.c:5393
- #, fuzzy, gcc-internal-format
--#| msgid "%q#T is not a class"
- msgid "%q+T is not literal because:"
- msgstr "%q#Tä¸æ˜¯ä¸€ä¸ªç±»"
-
- #: cp/class.c:5395
- #, fuzzy, gcc-internal-format
--#| msgid "base class %q#T has a non-virtual destructor"
- msgid " %q+T has a non-trivial destructor"
- msgstr "基类%q#T有一个éžè™šæžæž„函数"
-
-@@ -32266,7 +31309,6 @@
-
- #: cp/class.c:5450
- #, fuzzy, gcc-internal-format
--#| msgid "non-static data member %qD has Java class type"
- msgid " non-static data member %q+D has non-literal type"
- msgstr "éžé™æ€æ•°æ®æˆå‘˜%qD具有 Java 类类型"
-
-@@ -32339,7 +31381,6 @@
-
- #: cp/class.c:6643
- #, fuzzy, gcc-internal-format
--#| msgid "type %qT does not have a known size"
- msgid "type transparent %q#T does not have any fields"
- msgstr "类型%qT大å°æœªçŸ¥"
-
-@@ -32350,7 +31391,6 @@
-
- #: cp/class.c:6653
- #, fuzzy, gcc-internal-format
--#| msgid "type %qE has virtual member functions"
- msgid "type transparent class %qT has virtual functions"
- msgstr "类型%qE有虚æˆå‘˜å‡½æ•°"
-
-@@ -32421,7 +31461,6 @@
-
- #: cp/cp-array-notation.c:605
- #, fuzzy, gcc-internal-format
--#| msgid "%qD cannot be declared as constexpr"
- msgid "%qD cannot be scalar when %qD is not"
- msgstr "%qDä¸èƒ½è¢«å£°æ˜Žä¸ºå¹¿ä¹‰å¸¸è¡¨è¾¾å¼"
-
-@@ -32463,7 +31502,6 @@
-
- #: cp/cp-array-notation.c:1422
- #, fuzzy, gcc-internal-format
--#| msgid "new cannot be applied to a function type"
- msgid "array notation cannot be used with function type"
- msgstr "new ä¸èƒ½ç”¨äºŽå‡½æ•°ç±»åž‹"
-
-@@ -32484,13 +31522,11 @@
-
- #: cp/cp-cilkplus.c:53
- #, fuzzy, gcc-internal-format
--#| msgid "statement-expressions are not allowed outside functions nor in template-argument lists"
- msgid "throw expressions are not allowed inside loops marked with pragma simd"
- msgstr "语å¥è¡¨è¾¾å¼åªèƒ½ç”¨äºŽå‡½æ•°æˆ–模æ¿å®žå‚列表内"
-
- #: cp/cp-cilkplus.c:60
- #, fuzzy, gcc-internal-format
--#| msgid "%s statement is not allowed inside of BLOCK at %C"
- msgid "try statements are not allowed inside loops marked with #pragma simd"
- msgstr "%s 语å¥ä¸èƒ½ç”¨åœ¨%C处 BLOCK 内"
-
-@@ -32561,7 +31597,6 @@
-
- #: cp/cvt.c:780
- #, fuzzy, gcc-internal-format
--#| msgid "could not convert %qE to %qT"
- msgid "could not convert %qE from %<void%> to %<bool%>"
- msgstr "ä¸èƒ½å°†%qE转æ¢ä¸º%qT"
-
-@@ -32822,7 +31857,6 @@
-
- #: cp/cvt.c:1644
- #, fuzzy, gcc-internal-format
--#| msgid "could not convert template argument %qE to %qT"
- msgid "default type conversion can't deduce template argument for %qD"
- msgstr "ä¸èƒ½å°†æ¨¡æ¿å‚数从%qE转æ¢åˆ°%qT"
-
-@@ -32894,7 +31928,6 @@
-
- #: cp/decl.c:1304
- #, fuzzy, gcc-internal-format
--#| msgid "previous declaration of %q+D with attribute noinline"
- msgid "previous declaration of %qD with attribute noinline"
- msgstr "å…ˆå‰%q+D的声明带有 noinline 属性"
-
-@@ -32905,7 +31938,6 @@
-
- #: cp/decl.c:1314
- #, fuzzy, gcc-internal-format
--#| msgid "previous declaration of %q+D was inline"
- msgid "previous declaration of %qD was inline"
- msgstr "%q+Då…ˆå‰è¢«å£°æ˜Žä¸ºå†…è”çš„"
-
-@@ -32926,25 +31958,21 @@
-
- #: cp/decl.c:1349
- #, fuzzy, gcc-internal-format
--#| msgid "conflicts with built-in declaration %q#D"
- msgid "declaration of %q#D conflicts with built-in declaration %q#D"
- msgstr "与内建声明%q#D冲çª"
-
- #: cp/decl.c:1357
- #, fuzzy, gcc-internal-format
--#| msgid "declaration of %qD shadows a global declaration"
- msgid "redeclaration of %<pragma omp declare reduction%>"
- msgstr "%qD的声明éšè—了一个全局声明"
-
- #: cp/decl.c:1359
- #, fuzzy, gcc-internal-format
--#| msgid "previous non-function declaration %q+#D"
- msgid "previous %<pragma omp declare reduction%> declaration"
- msgstr "å…ˆå‰å¯¹äºŽ%q+#Dçš„éžå‡½æ•°å£°æ˜Ž"
-
- #: cp/decl.c:1410
- #, fuzzy, gcc-internal-format
--#| msgid "ambiguates built-in declaration %q#D"
- msgid "new declaration %q#D ambiguates built-in declaration %q#D"
- msgstr "使内建声明%q#D出现歧义"
-
-@@ -32955,37 +31983,31 @@
-
- #: cp/decl.c:1505 cp/decl.c:1526 cp/decl.c:1553
- #, fuzzy, gcc-internal-format
--#| msgid "previous declaration %q+D"
- msgid "previous declaration %q#D"
- msgstr "å…ˆå‰çš„声明%q+D"
-
- #: cp/decl.c:1524
- #, fuzzy, gcc-internal-format
--#| msgid "declaration of template %q#D"
- msgid "conflicting declaration of template %q#D"
- msgstr "模æ¿å£°æ˜Ž%q#D"
-
- #: cp/decl.c:1540
- #, fuzzy, gcc-internal-format
--#| msgid "ambiguates old declaration %q+#D"
- msgid "ambiguating new declaration %q#D"
- msgstr "使旧的声明%q+#D出现歧义"
-
- #: cp/decl.c:1542 cp/decl.c:1565
- #, fuzzy, gcc-internal-format
--#| msgid "global declaration %q+#D"
- msgid "old declaration %q#D"
- msgstr "全局声明%q+#D"
-
- #: cp/decl.c:1550
- #, fuzzy, gcc-internal-format
--#| msgid "conflicting declaration %q#D"
- msgid "conflicting declaration of C function %q#D"
- msgstr "相互冲çªçš„声明%q#D"
-
- #: cp/decl.c:1563
- #, fuzzy, gcc-internal-format
--#| msgid "ambiguates old declaration %q+#D"
- msgid "ambiguating new declaration of %q#D"
- msgstr "使旧的声明%q+#D出现歧义"
-
-@@ -32996,7 +32018,6 @@
-
- #: cp/decl.c:1575
- #, fuzzy, gcc-internal-format
--#| msgid "previous declaration of %q+#D"
- msgid "previous declaration as %q#D"
- msgstr "%q+#Dçš„å‰ä¸€ä¸ªå£°æ˜Ž"
-
-@@ -33009,13 +32030,11 @@
- #. of the program.
- #: cp/decl.c:1627
- #, fuzzy, gcc-internal-format
--#| msgid "conflicting declaration %q#D"
- msgid "conflicting declaration of namespace %qD"
- msgstr "相互冲çªçš„声明%q#D"
-
- #: cp/decl.c:1629
- #, fuzzy, gcc-internal-format
--#| msgid "previous declaration of namespace %q+D here"
- msgid "previous declaration of namespace %qD here"
- msgstr "命å空间%q+D早先的声明在这里"
-
-@@ -33026,37 +32045,31 @@
-
- #: cp/decl.c:1642 cp/name-lookup.c:1152 cp/name-lookup.c:1175
- #, fuzzy, gcc-internal-format
--#| msgid "previously declared here"
- msgid "%q+#D previously declared here"
- msgstr "以å‰åœ¨æ­¤å£°æ˜Žè¿‡"
-
- #: cp/decl.c:1652
- #, fuzzy, gcc-internal-format
--#| msgid "prototype for %q+#D"
- msgid "prototype specified for %q#D"
- msgstr "%q+#D的原型"
-
- #: cp/decl.c:1654
- #, fuzzy, gcc-internal-format
--#| msgid "follows non-prototype definition here"
- msgid "previous non-prototype definition here"
- msgstr "出现在此处的éžåŽŸåž‹å®šä¹‰ä¹‹åŽ"
-
- #: cp/decl.c:1693
- #, fuzzy, gcc-internal-format
--#| msgid "conflicts with new declaration with %qL linkage"
- msgid "conflicting declaration of %q#D with %qL linkage"
- msgstr "与带有%qL链接的新声明冲çª"
-
- #: cp/decl.c:1696
- #, fuzzy, gcc-internal-format
--#| msgid "previous declaration of %q+#D with %qL linkage"
- msgid "previous declaration with %qL linkage"
- msgstr "%q+#D的早先声明有%qL链接"
-
- #: cp/decl.c:1723
- #, fuzzy, gcc-internal-format
--#| msgid "redeclaration of friend %q#D may not have default template arguments"
- msgid "redeclaration of %q#D may not have default arguments"
- msgstr "å‹å…ƒ%q#Dçš„é‡å£°æ˜Žä¸èƒ½æœ‰é»˜è®¤æ¨¡æ¿å‚æ•°"
-
-@@ -33067,7 +32080,6 @@
-
- #: cp/decl.c:1741 cp/decl.c:1749
- #, fuzzy, gcc-internal-format
--#| msgid "after previous specification in %q+#D"
- msgid "previous specification in %q#D here"
- msgstr "但先å‰åœ¨%q+#D中已有指定"
-
-@@ -33078,7 +32090,6 @@
-
- #: cp/decl.c:1815 cp/decl.c:1825
- #, fuzzy, gcc-internal-format
--#| msgid "previous declaration of %q+D"
- msgid "previous declaration of %qD"
- msgstr "%q+Dçš„å‰ä¸€ä¸ªå£°æ˜Ž"
-
-@@ -33243,7 +32254,6 @@
-
- #: cp/decl.c:3395
- #, fuzzy, gcc-internal-format
--#| msgid "no class template named %q#T in %q#T"
- msgid "no type named %q#T in %q#T"
- msgstr "没有å为%q#T的类模æ¿ï¼Œåœ¨%q#T中 "
-
-@@ -33299,13 +32309,11 @@
-
- #: cp/decl.c:4246
- #, fuzzy, gcc-internal-format
--#| msgid "attribute ignored in declaration of %q+#T"
- msgid "attribute ignored in declaration of %q#T"
- msgstr "属性于%q+#T的声明中被忽略"
-
- #: cp/decl.c:4249
- #, fuzzy, gcc-internal-format
--#| msgid "attribute for %q+#T must follow the %qs keyword"
- msgid "attribute for %q#T must follow the %qs keyword"
- msgstr "%q+#T的属性必须跟在%qs关键字åŽé¢"
-
-@@ -33321,7 +32329,6 @@
-
- #: cp/decl.c:4294
- #, fuzzy, gcc-internal-format
--#| msgid "%qs can only be specified for functions"
- msgid "%<auto%> can only be specified for variables or function declarations"
- msgstr "åªèƒ½ä¸ºå‡½æ•°æŒ‡å®š%qs"
-
-@@ -33372,13 +32379,11 @@
-
- #: cp/decl.c:4378
- #, fuzzy, gcc-internal-format
--#| msgid "attributes ignored on template instantiation"
- msgid "attribute ignored in explicit instantiation %q#T"
- msgstr "属性在模æ¿å®žä¾‹åŒ–上被忽略"
-
- #: cp/decl.c:4381
- #, fuzzy, gcc-internal-format
--#| msgid "%qE attribute can only be applied to class definitions"
- msgid "no attribute can be applied to an explicit instantiation"
- msgstr "åªèƒ½ä¸ºç±»å®šä¹‰åº”用%qE属性"
-
-@@ -33543,7 +32548,6 @@
-
- #: cp/decl.c:5260
- #, fuzzy, gcc-internal-format
--#| msgid "name %qD used in a GNU-style designated initializer for an array"
- msgid "%<[%E] =%> used in a GNU-style designated initializer for class %qT"
- msgstr "åå­—%qD用在 GNU 风格的数组指定元素åˆå§‹å€¼è®¾å®šä¸­"
-
-@@ -33590,7 +32594,6 @@
-
- #: cp/decl.c:5632
- #, fuzzy, gcc-internal-format
--#| msgid "%qD has incomplete type"
- msgid "%q#D has incomplete type"
- msgstr "%qD类型ä¸å®Œå…¨"
-
-@@ -33666,19 +32669,16 @@
-
- #: cp/decl.c:7176
- #, fuzzy, gcc-internal-format
--#| msgid "initializer fails to determine size of %qD"
- msgid "initializer fails to determine size of %qT"
- msgstr "åˆå§‹å€¼è®¾å®šæ— æ³•å†³å®š%qD的大å°"
-
- #: cp/decl.c:7180
- #, fuzzy, gcc-internal-format
--#| msgid "array size missing in %qD"
- msgid "array size missing in %qT"
- msgstr "%qD缺少数组大å°"
-
- #: cp/decl.c:7183
- #, fuzzy, gcc-internal-format
--#| msgid "zero-size array %qD"
- msgid "zero-size array %qT"
- msgstr "大å°ä¸º 0 的数组%qD"
-
-@@ -33795,7 +32795,6 @@
-
- #: cp/decl.c:7499
- #, fuzzy, gcc-internal-format
--#| msgid "%<inline%> is not allowed in declaration of friend template specialization %qD"
- msgid "%<constexpr%> is not allowed in declaration of friend template specialization %qD"
- msgstr "%<inline%>ä¸å…许用于å‹å…ƒæ¨¡æ¿ç‰¹ä¾‹åŒ–%qD的声明"
-
-@@ -33811,7 +32810,6 @@
-
- #: cp/decl.c:7547
- #, fuzzy, gcc-internal-format
--#| msgid "cannot declare %<::main%> to be inline"
- msgid "cannot declare %<::main%> to be constexpr"
- msgstr "ä¸èƒ½å°†%<::main%>声明为 inline"
-
-@@ -33847,19 +32845,16 @@
-
- #: cp/decl.c:7620
- #, fuzzy, gcc-internal-format
--#| msgid "static member function %qD cannot have cv-qualifier"
- msgid "static member function %qD cannot have ref-qualifier"
- msgstr "æˆå‘˜å‡½æ•°%qDä¸èƒ½æ‹¥æœ‰ cv é™å®šç¬¦"
-
- #: cp/decl.c:7621
- #, fuzzy, gcc-internal-format
--#| msgid "non-member function %qD cannot have cv-qualifier"
- msgid "non-member function %qD cannot have ref-qualifier"
- msgstr "éžæˆå‘˜å‡½æ•°%qDä¸èƒ½æ‹¥æœ‰ cv é™å®šç¬¦"
-
- #: cp/decl.c:7638
- #, fuzzy, gcc-internal-format
--#| msgid "template with C linkage"
- msgid "literal operator with C linkage"
- msgstr "模æ¿æœ‰ C 链接"
-
-@@ -33880,7 +32875,6 @@
-
- #: cp/decl.c:7667
- #, fuzzy, gcc-internal-format
--#| msgid "%qD must be a nonstatic member function"
- msgid "%qD must be a non-member function"
- msgstr "%qD必须是一个éžé™æ€çš„æˆå‘˜å‡½æ•°"
-
-@@ -33896,13 +32890,11 @@
-
- #: cp/decl.c:7792
- #, fuzzy, gcc-internal-format
--#| msgid "definition of implicitly-declared %qD"
- msgid "definition of explicitly-defaulted %q+D"
- msgstr "éšå¼å£°æ˜Žçš„%qD的定义"
-
- #: cp/decl.c:7793
- #, fuzzy, gcc-internal-format
--#| msgid "%q+#D previously defined here"
- msgid "%q+#D explicitly defaulted here"
- msgstr "%q+#D已在此定义过"
-
-@@ -34017,7 +33009,6 @@
-
- #: cp/decl.c:8522
- #, fuzzy, gcc-internal-format
--#| msgid "declaration of %qD as array of void"
- msgid "declaration of %qD as array of %<auto%>"
- msgstr "%qD声明为 void 的数组"
-
-@@ -34073,7 +33064,6 @@
-
- #: cp/decl.c:8578
- #, fuzzy, gcc-internal-format
--#| msgid "creating array of functions"
- msgid "array of array of runtime bound"
- msgstr "创建函数的数组"
-
-@@ -34144,13 +33134,11 @@
-
- #: cp/decl.c:9014
- #, fuzzy, gcc-internal-format
--#| msgid "template declaration of %<typedef%>"
- msgid "declaration of %qD as %<typedef%>"
- msgstr "%<typedef%>的模æ¿å£°æ˜Ž"
-
- #: cp/decl.c:9019
- #, fuzzy, gcc-internal-format
--#| msgid "declaration of %q+D shadows a parameter"
- msgid "declaration of %qD as parameter"
- msgstr "%q+D的声明éšè—了一个形å‚"
-
-@@ -34326,25 +33314,21 @@
-
- #: cp/decl.c:9608
- #, fuzzy, gcc-internal-format
--#| msgid "%qs function uses %<auto%> type specifier without late return type"
- msgid "%qs function uses %<auto%> type specifier without trailing return type"
- msgstr "%qs函数使用了%<auto%>类型é™å®šå´æ²¡æœ‰è¿Ÿè¿”回类型"
-
- #: cp/decl.c:9611
- #, fuzzy, gcc-internal-format
--#| msgid "scoped enums only available with -std=c++0x or -std=gnu++0x"
- msgid "deduced return type only available with -std=c++1y or -std=gnu++1y"
- msgstr "带作用域的枚举åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
-
- #: cp/decl.c:9616
- #, fuzzy, gcc-internal-format
--#| msgid "virtual functions cannot be friends"
- msgid "virtual function cannot have deduced return type"
- msgstr "虚函数ä¸èƒ½æ˜¯å‹å…ƒ"
-
- #: cp/decl.c:9621
- #, fuzzy, gcc-internal-format
--#| msgid "%qs function with late return type has %qT as its type rather than plain %<auto%>"
- msgid "%qs function with trailing return type has %qT as its type rather than plain %<auto%>"
- msgstr "%qs函数使用迟返回类型%qT作为它的类型,而ä¸æ˜¯%<auto%>"
-
-@@ -34357,7 +33341,6 @@
-
- #: cp/decl.c:9635
- #, fuzzy, gcc-internal-format
--#| msgid "%qs function with late return type not declared with %<auto%> type specifier"
- msgid "%qs function with trailing return type not declared with %<auto%> type specifier"
- msgstr "%qs函数使用了迟返回类型å´æœªç”¨%<auto%>类型é™å®šå£°æ˜Ž"
-
-@@ -34368,7 +33351,6 @@
-
- #: cp/decl.c:9670
- #, fuzzy, gcc-internal-format
--#| msgid "destructor cannot be static member function"
- msgid "constructor cannot be static member function"
- msgstr "æžæž„函数ä¸èƒ½æ˜¯é™æ€æˆå‘˜å‡½æ•°"
-
-@@ -34379,13 +33361,11 @@
-
- #: cp/decl.c:9675
- #, fuzzy, gcc-internal-format
--#| msgid "destructors may not be cv-qualified"
- msgid "constructors may not be cv-qualified"
- msgstr "æžæž„函数ä¸èƒ½è¢« cv é™å®š"
-
- #: cp/decl.c:9683
- #, fuzzy, gcc-internal-format
--#| msgid "destructors may not be cv-qualified"
- msgid "destructors may not be ref-qualified"
- msgstr "æžæž„函数ä¸èƒ½è¢« cv é™å®š"
-
-@@ -34447,13 +33427,11 @@
-
- #: cp/decl.c:9829
- #, fuzzy, gcc-internal-format
--#| msgid "Array reference out of bounds"
- msgid "reference to array of runtime bound"
- msgstr "对数组的引用超出范围"
-
- #: cp/decl.c:9830
- #, fuzzy, gcc-internal-format
--#| msgid "pointer to a function used in subtraction"
- msgid "pointer to array of runtime bound"
- msgstr "函数指针ä¸èƒ½ç›¸å‡"
-
-@@ -34489,7 +33467,6 @@
-
- #: cp/decl.c:10028
- #, fuzzy, gcc-internal-format
--#| msgid "cannot define member function %<%T::%s%> within %<%T%>"
- msgid "cannot declare member function %<%T::%s%> within %<%T%>"
- msgstr "无法定义æˆå‘˜å‡½æ•°%<%T::%s%>,在%<%T%>中"
-
-@@ -34557,13 +33534,11 @@
-
- #: cp/decl.c:10170
- #, fuzzy, gcc-internal-format
--#| msgid "parameter declared %<auto%>"
- msgid "typedef declared %<auto%>"
- msgstr "å½¢å‚声明为%<auto%>"
-
- #: cp/decl.c:10176
- #, fuzzy, gcc-internal-format
--#| msgid "creating array of functions"
- msgid "typedef naming array of runtime bound"
- msgstr "创建函数的数组"
-
-@@ -34624,7 +33599,6 @@
-
- #: cp/decl.c:10420
- #, fuzzy, gcc-internal-format
--#| msgid "%<this%> may not be used in this context"
- msgid "%<auto%> parameter not permitted in this context"
- msgstr "%<this%>ä¸èƒ½ç”¨åœ¨æ­¤ä¸Šä¸‹æ–‡ä¸­"
-
-@@ -34635,7 +33609,6 @@
-
- #: cp/decl.c:10465
- #, fuzzy, gcc-internal-format
--#| msgid "non-static data member %qE declared %<constexpr%>"
- msgid "non-static data member declared %<auto%>"
- msgstr "éžé™æ€æ•°æ®æˆå‘˜%qE被声明为%<constexpr%>"
-
-@@ -34682,7 +33655,6 @@
-
- #: cp/decl.c:10608
- #, fuzzy, gcc-internal-format
--#| msgid "field %qD has incomplete type"
- msgid "field %qD has incomplete type %qT"
- msgstr "字段%qD类型ä¸å®Œå…¨"
-
-@@ -34723,13 +33695,11 @@
-
- #: cp/decl.c:10747
- #, fuzzy, gcc-internal-format
--#| msgid "storage class %<__thread%> invalid for function %qs"
- msgid "storage class %<thread_local%> invalid for function %qs"
- msgstr "函数%qs的存储类%<__thread%>无效"
-
- #: cp/decl.c:10752
- #, fuzzy, gcc-internal-format
--#| msgid "an asm-specification is not allowed on a function-definition"
- msgid "virt-specifiers in %qs not allowed outside a class definition"
- msgstr "函数定义中ä¸å…许出现 asm 指定"
-
-@@ -34755,7 +33725,6 @@
-
- #: cp/decl.c:10783
- #, fuzzy, gcc-internal-format
--#| msgid "%qs defined in a non-class scope"
- msgid "%qs declared in a non-class scope"
- msgstr "%qs定义在在éžç±»ä½œç”¨åŸŸä¸­"
-
-@@ -34802,7 +33771,6 @@
-
- #: cp/decl.c:11032
- #, fuzzy, gcc-internal-format
--#| msgid "default argument %qE uses local variable %qD"
- msgid "default argument %qE uses %qD"
- msgstr "默认实å‚%qE使用了局部å˜é‡%qD"
-
-@@ -34984,7 +33952,6 @@
-
- #: cp/decl.c:11915
- #, fuzzy, gcc-internal-format
--#| msgid "ambiguous template specialization %qD for %q+D"
- msgid "using alias template specialization %qT after %qs"
- msgstr "有歧义的模æ¿ç‰¹ä¾‹åŒ–%qD(为%q+D)"
-
-@@ -34995,7 +33962,6 @@
-
- #: cp/decl.c:11920
- #, fuzzy, gcc-internal-format
--#| msgid "%q+D has a previous declaration here"
- msgid "%qD has a previous declaration here"
- msgstr "%q+Då…ˆå‰åœ¨æ­¤å¤„有过声明"
-
-@@ -35123,7 +34089,6 @@
-
- #: cp/decl.c:12928
- #, fuzzy, gcc-internal-format
--#| msgid "integer constant is too large for %<unsigned long%> type"
- msgid "incremented enumerator value is too large for %<unsigned long%>"
- msgstr "对%<unsigned long%>类型而言整数常é‡å¤ªå¤§"
-
-@@ -35134,7 +34099,6 @@
-
- #: cp/decl.c:12960
- #, fuzzy, gcc-internal-format
--#| msgid "enumerator value %E is too large for underlying type %<%T%>"
- msgid "enumerator value %E is outside the range of underlying type %<%T%>"
- msgstr "枚举值 %E 对其类型%<%T%>而言太大了"
-
-@@ -35170,13 +34134,11 @@
-
- #: cp/decl.c:13960
- #, fuzzy, gcc-internal-format
--#| msgid "no return statement in function returning non-void"
- msgid "no return statements in function returning %qT"
- msgstr "在有返回值的函数中未å‘现 return 语å¥"
-
- #: cp/decl.c:13962 cp/typeck.c:8384
- #, fuzzy, gcc-internal-format
--#| msgid "function return types not compatible due to %<volatile%>"
- msgid "only plain %<auto%> return type can be deduced to %<void%>"
- msgstr "由于%<volatile%>,函数返回类型ä¸å…¼å®¹"
-
-@@ -35197,7 +34159,6 @@
-
- #: cp/decl.c:14531 cp/decl2.c:4673
- #, fuzzy, gcc-internal-format
--#| msgid "type of %qD defaults to %<int%>"
- msgid "use of %qD before deduction of %<auto%>"
- msgstr "%qD的类型默认为%<int%>"
-
-@@ -35218,7 +34179,6 @@
-
- #: cp/decl2.c:449
- #, fuzzy, gcc-internal-format
--#| msgid "deleting array %q#D"
- msgid "deleting array %q#E"
- msgstr "删除数组%q#D"
-
-@@ -35337,7 +34297,6 @@
-
- #: cp/decl2.c:1388
- #, fuzzy, gcc-internal-format
--#| msgid "%qD is not a static data member of a class template"
- msgid "%q+D static data member inside of declare target directive"
- msgstr "%qDä¸æ˜¯ç±»æ¨¡æ¿çš„éžé™æ€æ•°æ®æˆå‘˜"
-
-@@ -35444,43 +34403,36 @@
-
- #: cp/error.c:3474
- #, fuzzy, gcc-internal-format
--#| msgid "extended initializer lists only available with -std=c++0x or -std=gnu++0x"
- msgid "extended initializer lists only available with -std=c++11 or -std=gnu++11"
- msgstr "扩展åˆå§‹å€¼è®¾å®šåˆ—表åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
-
- #: cp/error.c:3479
- #, fuzzy, gcc-internal-format
--#| msgid "explicit conversion operators only available with -std=c++0x or -std=gnu++0x"
- msgid "explicit conversion operators only available with -std=c++11 or -std=gnu++11"
- msgstr "显å¼è½¬æ¢è¿ç®—符åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
-
- #: cp/error.c:3484
- #, fuzzy, gcc-internal-format
--#| msgid "variadic templates only available with -std=c++0x or -std=gnu++0x"
- msgid "variadic templates only available with -std=c++11 or -std=gnu++11"
- msgstr "å¯å˜å‚数模æ¿åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
-
- #: cp/error.c:3489
- #, fuzzy, gcc-internal-format
--#| msgid "lambda expressions only available with -std=c++0x or -std=gnu++0x"
- msgid "lambda expressions only available with -std=c++11 or -std=gnu++11"
- msgstr "Lambda 表达å¼åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
-
- #: cp/error.c:3494
- #, fuzzy, gcc-internal-format
--#| msgid "C++0x auto only available with -std=c++0x or -std=gnu++0x"
- msgid "C++11 auto only available with -std=c++11 or -std=gnu++11"
- msgstr "C++0x auto åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
-
- #: cp/error.c:3498
- #, fuzzy, gcc-internal-format
--#| msgid "scoped enums only available with -std=c++0x or -std=gnu++0x"
- msgid "scoped enums only available with -std=c++11 or -std=gnu++11"
- msgstr "带作用域的枚举åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
-
- #: cp/error.c:3502
- #, fuzzy, gcc-internal-format
--#| msgid "defaulted and deleted functions only available with -std=c++0x or -std=gnu++0x"
- msgid "defaulted and deleted functions only available with -std=c++11 or -std=gnu++11"
- msgstr "默认化和被删除的函数åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
-
-@@ -35491,25 +34443,21 @@
-
- #: cp/error.c:3512
- #, fuzzy, gcc-internal-format
--#| msgid "explicit conversion operators only available with -std=c++0x or -std=gnu++0x"
- msgid "override controls (override/final) only available with -std=c++11 or -std=gnu++11"
- msgstr "显å¼è½¬æ¢è¿ç®—符åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
-
- #: cp/error.c:3517
- #, fuzzy, gcc-internal-format
--#| msgid "extended initializer lists only available with -std=c++0x or -std=gnu++0x"
- msgid "non-static data member initializers only available with -std=c++11 or -std=gnu++11"
- msgstr "扩展åˆå§‹å€¼è®¾å®šåˆ—表åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
-
- #: cp/error.c:3522
- #, fuzzy, gcc-internal-format
--#| msgid "extended initializer lists only available with -std=c++0x or -std=gnu++0x"
- msgid "user-defined literals only available with -std=c++11 or -std=gnu++11"
- msgstr "扩展åˆå§‹å€¼è®¾å®šåˆ—表åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
-
- #: cp/error.c:3527
- #, fuzzy, gcc-internal-format
--#| msgid "explicit conversion operators only available with -std=c++0x or -std=gnu++0x"
- msgid "delegating constructors only available with -std=c++11 or -std=gnu++11"
- msgstr "显å¼è½¬æ¢è¿ç®—符åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
-
-@@ -35520,13 +34468,11 @@
-
- #: cp/error.c:3537
- #, fuzzy, gcc-internal-format
--#| msgid "C++0x auto only available with -std=c++0x or -std=gnu++0x"
- msgid "c++11 attributes only available with -std=c++11 or -std=gnu++11"
- msgstr "C++0x auto åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
-
- #: cp/error.c:3542
- #, fuzzy, gcc-internal-format
--#| msgid "scoped enums only available with -std=c++0x or -std=gnu++0x"
- msgid "ref-qualifiers only available with -std=c++11 or -std=gnu++11"
- msgstr "带作用域的枚举åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
-
-@@ -35599,19 +34545,16 @@
-
- #: cp/except.c:987
- #, fuzzy, gcc-internal-format
--#| msgid "cannot declare parameter %q+D to be of abstract type %qT"
- msgid "cannot declare catch parameter to be of rvalue reference type %qT"
- msgstr "ä¸èƒ½å°†å½¢å‚%q+D声明为具有抽象类型%qT"
-
- #: cp/except.c:994
- #, fuzzy, gcc-internal-format
--#| msgid "cannot create type information for type %qT because it involves types of variable size"
- msgid "cannot throw expression of type %qT because it involves types of variable size"
- msgstr "无法为类型%qT创建类型信æ¯ï¼Œå› ä¸ºå®ƒçš„大å°æ˜¯å¯å˜çš„"
-
- #: cp/except.c:997
- #, fuzzy, gcc-internal-format
--#| msgid "cannot create type information for type %qT because it involves types of variable size"
- msgid "cannot catch type %qT because it involves types of variable size"
- msgstr "无法为类型%qT创建类型信æ¯ï¼Œå› ä¸ºå®ƒçš„大å°æ˜¯å¯å˜çš„"
-
-@@ -35726,7 +34669,6 @@
-
- #: cp/init.c:378
- #, fuzzy, gcc-internal-format
--#| msgid "invalid application of %qs to incomplete type %qT "
- msgid "value-initialization of incomplete type %qT"
- msgstr "%qsä¸èƒ½ç”¨äºŽä¸å®Œå…¨çš„类型%qT"
-
-@@ -35737,13 +34679,11 @@
-
- #: cp/init.c:482
- #, fuzzy, gcc-internal-format
--#| msgid "value-initialization of reference"
- msgid "value-initialization of function type %qT"
- msgstr "引用被值所åˆå§‹åŒ–"
-
- #: cp/init.c:488
- #, fuzzy, gcc-internal-format
--#| msgid "value-initialization of reference"
- msgid "value-initialization of reference type %qT"
- msgstr "引用被值所åˆå§‹åŒ–"
-
-@@ -35759,7 +34699,6 @@
-
- #: cp/init.c:585
- #, fuzzy, gcc-internal-format
--#| msgid "%qD is used uninitialized in this function"
- msgid "%qD is initialized with itself"
- msgstr "此函数中的%qD在使用å‰æœªåˆå§‹åŒ–"
-
-@@ -35910,7 +34849,6 @@
-
- #: cp/init.c:2147
- #, fuzzy, gcc-internal-format
--#| msgid "uninitialized reference member in %q#T"
- msgid "uninitialized reference member in base %q#T of %q#T"
- msgstr "%q#T中有未åˆå§‹åŒ–的引用æˆå‘˜"
-
-@@ -35936,25 +34874,21 @@
-
- #: cp/init.c:2317
- #, fuzzy, gcc-internal-format
--#| msgid "integer overflow in expression"
- msgid "integer overflow in array size"
- msgstr "整数溢出"
-
- #: cp/init.c:2327
- #, fuzzy, gcc-internal-format
--#| msgid "Variable '%s' at %L in this context must be constant"
- msgid "array size in operator new must be constant"
- msgstr "å˜é‡â€˜%s’在%L处上下文中必须是常é‡"
-
- #: cp/init.c:2341
- #, fuzzy, gcc-internal-format
--#| msgid "variably modified field at file scope"
- msgid "variably modified type not allowed in operator new"
- msgstr "文件域中的动æ€å¯å˜å­—段"
-
- #: cp/init.c:2355
- #, fuzzy, gcc-internal-format
--#| msgid "ISO C does not support saturating types"
- msgid "ISO C++ does not support variable-length array types"
- msgstr "ISO C ä¸æ”¯æŒé¥±å’Œç±»åž‹"
-
-@@ -35970,7 +34904,6 @@
-
- #: cp/init.c:2477
- #, fuzzy, gcc-internal-format
--#| msgid "not a valid Java .class file"
- msgid "%qT isn%'t a valid Java class type"
- msgstr "ä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„ Java .class 文件。"
-
-@@ -35996,7 +34929,6 @@
-
- #: cp/init.c:2775
- #, fuzzy, gcc-internal-format
--#| msgid "attributes after parenthesized initializer ignored"
- msgid "parenthesized initializer in array new"
- msgstr "括起的åˆå§‹å€¼è®¾å®šåŽå‡ºçŽ°çš„属性被忽略"
-
-@@ -36027,7 +34959,6 @@
-
- #: cp/init.c:3158
- #, fuzzy, gcc-internal-format
--#| msgid "possible problem detected in invocation of delete operator:"
- msgid "possible problem detected in invocation of delete [] operator:"
- msgstr "检测到调用 delete è¿ç®—符时å¯èƒ½å‡ºçŽ°çš„问题:"
-
-@@ -36088,7 +35019,6 @@
-
- #: cp/lambda.c:477
- #, fuzzy, gcc-internal-format
--#| msgid "compound literal has variable size"
- msgid "because the array element type %qT has variable size"
- msgstr "å¤åˆå­—é¢å€¼æœ‰å¯å˜çš„大å°"
-
-@@ -36099,7 +35029,6 @@
-
- #: cp/lambda.c:514
- #, fuzzy, gcc-internal-format
--#| msgid "already captured %<this%> in lambda expression"
- msgid "already captured %qD in lambda expression"
- msgstr "å·²ç»åœ¨ Lambda 表达å¼ä¸­æ•èŽ·äº†%<this%>"
-
-@@ -36170,7 +35099,6 @@
-
- #: cp/mangle.c:2116
- #, fuzzy, gcc-internal-format
--#| msgid "mangling unknown fixed point type"
- msgid "mangling __underlying_type"
- msgstr "修饰未知的定点类型"
-
-@@ -36206,7 +35134,6 @@
-
- #: cp/mangle.c:3500
- #, fuzzy, gcc-internal-format
--#| msgid "-fabi-version=4 (or =0) avoids this error with a change in vector mangling"
- msgid "-fabi-version=6 (or =0) avoids this error with a change in mangling"
- msgstr "-fabi-version=4 (or =0) å¯ä»¥æ”¹å˜å‘é‡ä¿®é¥°æ¥é¿å…这个错误"
-
-@@ -36237,13 +35164,11 @@
-
- #: cp/method.c:1010
- #, fuzzy, gcc-internal-format
--#| msgid "a destructor cannot be %<constexpr%>"
- msgid "defaulted constructor calls non-constexpr %q+D"
- msgstr "æžæž„函数ä¸èƒ½æ˜¯%<constexpr%>"
-
- #: cp/method.c:1071
- #, fuzzy, gcc-internal-format
--#| msgid "uninitialized const %qD is invalid in C++"
- msgid "initializer for %q+#D is invalid"
- msgstr "未åˆå§‹åŒ–的常é‡%qD在C++中是无效的"
-
-@@ -36264,7 +35189,6 @@
-
- #: cp/method.c:1128
- #, fuzzy, gcc-internal-format
--#| msgid "non-static data member %qD has Java class type"
- msgid "copying non-static data member %q#D of rvalue reference type"
- msgstr "éžé™æ€æ•°æ®æˆå‘˜%qD具有 Java 类类型"
-
-@@ -36315,7 +35239,6 @@
-
- #: cp/method.c:1814
- #, fuzzy, gcc-internal-format
--#| msgid "function %q+D defaulted on its first declaration must not have an exception-specification"
- msgid "function %q+D defaulted on its redeclaration with an exception-specification that differs from the implicit declaration %q#D"
- msgstr "首次声明时被默认化的函数%q+Dä¸å¯ä»¥æŒ‡å®šå¼‚常"
-
-@@ -36326,7 +35249,6 @@
-
- #: cp/method.c:1860
- #, fuzzy, gcc-internal-format
--#| msgid "%qD cannot be defaulted"
- msgid "a template cannot be defaulted"
- msgstr "%qDä¸èƒ½è¢«é»˜è®¤åŒ–"
-
-@@ -36347,13 +35269,11 @@
-
- #: cp/name-lookup.c:567
- #, fuzzy, gcc-internal-format
--#| msgid "%q#D conflicts with previous using declaration %q#D"
- msgid "%q#D conflicts with a previous declaration"
- msgstr "%q#D与先å‰çš„ using 声明%q#D冲çª"
-
- #: cp/name-lookup.c:569
- #, fuzzy, gcc-internal-format
--#| msgid "previous declaration %q+D"
- msgid "previous declaration %q+#D"
- msgstr "å…ˆå‰çš„声明%q+D"
-
-@@ -36420,7 +35340,6 @@
-
- #: cp/name-lookup.c:1189
- #, fuzzy, gcc-internal-format
--#| msgid "declaration of %q+D shadows a parameter"
- msgid "declaration of %qD shadows a lambda capture"
- msgstr "%q+D的声明éšè—了一个形å‚"
-
-@@ -36629,7 +35548,6 @@
-
- #: cp/parser.c:792
- #, fuzzy, gcc-internal-format
--#| msgid "identifier %qE will become a keyword in C++0x"
- msgid "identifier %qE is a keyword in C++11"
- msgstr "标志符%qE将会æˆä¸º C++0x 的一个关键字"
-
-@@ -36730,7 +35648,6 @@
-
- #: cp/parser.c:2719
- #, fuzzy, gcc-internal-format
--#| msgid "%qE is not a template"
- msgid "%qE is not a class template"
- msgstr "%qEä¸æ˜¯ä¸€ä¸ªæ¨¡æ¿"
-
-@@ -36811,7 +35728,6 @@
-
- #: cp/parser.c:2809
- #, fuzzy, gcc-internal-format
--#| msgid "a function call cannot appear in a constant-expression"
- msgid "a transaction expression cannot appear in a constant-expression"
- msgstr "函数调用ä¸èƒ½å‡ºçŽ°åœ¨å¸¸é‡è¡¨è¾¾å¼ä¸­"
-
-@@ -36844,7 +35760,6 @@
-
- #: cp/parser.c:2903
- #, fuzzy, gcc-internal-format
--#| msgid "C++0x %<constexpr%> only available with -std=c++0x or -std=gnu++0x"
- msgid "C++11 %<constexpr%> only available with -std=c++11 or -std=gnu++11"
- msgstr "C++0x %<constexpr%>åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
-
-@@ -36855,7 +35770,6 @@
-
- #: cp/parser.c:2948
- #, fuzzy, gcc-internal-format
--#| msgid "%qE in namespace %qE does not name a type"
- msgid "%qE in namespace %qE does not name a template type"
- msgstr "%qEä¸æ˜¯å‘½å空间%qE中的一个类型å"
-
-@@ -36882,13 +35796,11 @@
-
- #: cp/parser.c:2974
- #, fuzzy, gcc-internal-format
--#| msgid "%qE in class %qT does not name a type"
- msgid "%qE in %q#T does not name a template type"
- msgstr "%qEä¸æ˜¯ç±»%qT中的一个类型å"
-
- #: cp/parser.c:2978
- #, fuzzy, gcc-internal-format
--#| msgid "%qE in class %qT does not name a type"
- msgid "%qE in %q#T does not name a type"
- msgstr "%qEä¸æ˜¯ç±»%qT中的一个类型å"
-
-@@ -36914,25 +35826,21 @@
-
- #: cp/parser.c:3867
- #, fuzzy, gcc-internal-format
--#| msgid "floating constant exceeds range of %qT"
- msgid "integer literal exceeds range of %qT type"
- msgstr "浮点常é‡è¶…出%qT的范围"
-
- #: cp/parser.c:3873
- #, fuzzy, gcc-internal-format
--#| msgid "floating constant exceeds range of %qT"
- msgid "floating literal exceeds range of %qT type"
- msgstr "浮点常é‡è¶…出%qT的范围"
-
- #: cp/parser.c:3877
- #, fuzzy, gcc-internal-format
--#| msgid "floating constant truncated to zero"
- msgid "floating literal truncated to zero"
- msgstr "浮点常é‡å‘零截断"
-
- #: cp/parser.c:3920
- #, fuzzy, gcc-internal-format
--#| msgid "unable to find a register to spill in class %qs"
- msgid "unable to find numeric literal operator %qD"
- msgstr "在类%qs中找ä¸åˆ°å¯æº¢å‡ºçš„寄存器"
-
-@@ -36943,7 +35851,6 @@
-
- #: cp/parser.c:3969
- #, fuzzy, gcc-internal-format
--#| msgid "unable to find a register to spill in class %qs"
- msgid "unable to find string literal operator %qD"
- msgstr "在类%qs中找ä¸åˆ°å¯æº¢å‡ºçš„寄存器"
-
-@@ -37004,7 +35911,6 @@
-
- #: cp/parser.c:4935 cp/parser.c:6785
- #, fuzzy, gcc-internal-format
--#| msgid "C++0x auto only available with -std=c++0x or -std=gnu++0x"
- msgid "%<~auto%> only available with -std=c++1y or -std=gnu++1y"
- msgstr "C++0x auto åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
-
-@@ -37035,7 +35941,6 @@
-
- #: cp/parser.c:5276
- #, fuzzy, gcc-internal-format
--#| msgid "%qT resolves to %qT, which is not an enumeration type"
- msgid "decltype evaluates to %qT, which is not a class or enumeration type"
- msgstr "%qT被解æžåˆ°éžæžšä¸¾ç±»åž‹%qT"
-
-@@ -37076,7 +35981,6 @@
-
- #: cp/parser.c:6368
- #, fuzzy, gcc-internal-format
--#| msgid "-client_name not allowed with -dynamiclib"
- msgid "braced list index is not allowed with array notation"
- msgstr "-client_name ä¸èƒ½å’Œ -dynamiclib 一起使用"
-
-@@ -37092,7 +35996,6 @@
-
- #: cp/parser.c:6558
- #, fuzzy, gcc-internal-format
--#| msgid "%<%D::%D%> is not a member of %qT"
- msgid "%<%D::%D%> is not a class member"
- msgstr "%<%D::%D%>ä¸æ˜¯%qTçš„æˆå‘˜"
-
-@@ -37113,7 +36016,6 @@
-
- #: cp/parser.c:7262
- #, fuzzy, gcc-internal-format
--#| msgid "types may not be defined in a new-type-id"
- msgid "types may not be defined in a new-expression"
- msgstr "类型ä¸èƒ½å®šä¹‰åœ¨ new-type-id 中"
-
-@@ -37144,7 +36046,6 @@
-
- #: cp/parser.c:7891
- #, fuzzy, gcc-internal-format
--#| msgid "%<>>%> operator will be treated as two right angle brackets in C++0x"
- msgid "%<>>%> operator is treated as two right angle brackets in C++11"
- msgstr "%<>>%>è¿ç®—符在 C++0x 中将被认为是两个å³å°–括å·"
-
-@@ -37175,7 +36076,6 @@
-
- #: cp/parser.c:8901
- #, fuzzy, gcc-internal-format
--#| msgid "lambda expressions only available with -std=c++0x or -std=gnu++0x"
- msgid "lambda capture initializers only available with -std=c++1y or -std=gnu++1y"
- msgstr "Lambda 表达å¼åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
-
-@@ -37186,13 +36086,11 @@
-
- #: cp/parser.c:8931
- #, fuzzy, gcc-internal-format
--#| msgid "increment of read-only variable %qD"
- msgid "capture of non-variable %qD "
- msgstr "令åªè¯»å˜é‡%qD自增"
-
- #: cp/parser.c:8933 cp/parser.c:8942 cp/semantics.c:3237
- #, fuzzy, gcc-internal-format
--#| msgid "%q+D declared here"
- msgid "%q+#D declared here"
- msgstr "%q+D已在此声明过"
-
-@@ -37213,7 +36111,6 @@
-
- #: cp/parser.c:9027
- #, fuzzy, gcc-internal-format
--#| msgid "variadic templates only available with -std=c++0x or -std=gnu++0x"
- msgid "lambda templates are only available with -std=c++1y or -std=gnu++1y"
- msgstr "å¯å˜å‚数模æ¿åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
-
-@@ -37224,7 +36121,6 @@
-
- #: cp/parser.c:9485
- #, fuzzy, gcc-internal-format
--#| msgid "attributes after parenthesized initializer ignored"
- msgid "attributes at the beginning of statement are ignored"
- msgstr "括起的åˆå§‹å€¼è®¾å®šåŽå‡ºçŽ°çš„属性被忽略"
-
-@@ -37250,7 +36146,6 @@
-
- #: cp/parser.c:9692
- #, fuzzy, gcc-internal-format
--#| msgid "%qD is not a constexpr function"
- msgid "compound-statement in constexpr function"
- msgstr "%qDä¸æ˜¯ä¸€ä¸ªå¹¿ä¹‰å¸¸å‡½æ•°"
-
-@@ -37266,7 +36161,6 @@
-
- #: cp/parser.c:10305
- #, fuzzy, gcc-internal-format
--#| msgid "expression statement has incomplete type"
- msgid "range-based %<for%> expression of type %qT has incomplete type"
- msgstr "表达å¼è¯­å¥ç±»åž‹ä¸å®Œå…¨"
-
-@@ -37292,13 +36186,11 @@
-
- #: cp/parser.c:10568
- #, fuzzy, gcc-internal-format
--#| msgid "range-based-for loops are not allowed in C++98 mode"
- msgid "range-based %<for%> loops are not allowed in C++98 mode"
- msgstr "C++98 模å¼ä¸‹ä¸å…许使用基于范围的 for 循环"
-
- #: cp/parser.c:10642
- #, fuzzy, gcc-internal-format
--#| msgid "break statement used with OpenMP for loop"
- msgid "break statement used with Cilk Plus for loop"
- msgstr "OpenMP for 循环中使用了 break 语å¥"
-
-@@ -37337,7 +36229,6 @@
- #. we're complaining about C++0x compatibility.
- #: cp/parser.c:11485
- #, fuzzy, gcc-internal-format
--#| msgid "%<auto%> will change meaning in C++0x; please remove it"
- msgid "%<auto%> changes meaning in C++11; please remove it"
- msgstr "%<auto%>的语义在 C++0x 中将被改å˜ï¼›è¯·è€ƒè™‘删除它"
-
-@@ -37368,7 +36259,6 @@
-
- #: cp/parser.c:12122
- #, fuzzy, gcc-internal-format
--#| msgid "types may not be defined in a new-type-id"
- msgid "types may not be defined in a conversion-type-id"
- msgstr "类型ä¸èƒ½å®šä¹‰åœ¨ new-type-id 中"
-
-@@ -37379,7 +36269,6 @@
-
- #: cp/parser.c:12153
- #, fuzzy, gcc-internal-format
--#| msgid "invalid use of %<auto%> in conversion operator"
- msgid "use of %<auto%> in member template conversion operator can never be deduced"
- msgstr "在转æ¢è¿ç®—符中使用%<auto%>无效"
-
-@@ -37395,7 +36284,6 @@
-
- #: cp/parser.c:12276
- #, fuzzy, gcc-internal-format
--#| msgid "static declaration of %q+D follows non-static declaration"
- msgid "mem-initializer for %qD follows constructor delegation"
- msgstr "对%qDçš„é™æ€å£°æ˜Žå‡ºçŽ°åœ¨éžé™æ€å£°æ˜Žä¹‹åŽ"
-
-@@ -37421,7 +36309,6 @@
-
- #: cp/parser.c:12737 cp/parser.c:12784
- #, fuzzy, gcc-internal-format
--#| msgid "expected a string after %<#pragma message%>"
- msgid "expected empty string after %<operator%> keyword"
- msgstr "%<#pragma message%>åŽéœ€è¦ä¸€ä¸ªå­—符串"
-
-@@ -37432,7 +36319,6 @@
-
- #: cp/parser.c:12761
- #, fuzzy, gcc-internal-format
--#| msgid "expected identifier"
- msgid "expected suffix identifier"
- msgstr "需è¦æ ‡è¯†ç¬¦"
-
-@@ -37484,7 +36370,6 @@
-
- #: cp/parser.c:13403
- #, fuzzy, gcc-internal-format
--#| msgid "(if you use %<-fpermissive%> G++ will accept your code)"
- msgid "(if you use %<-fpermissive%> or %<-std=c++11%>, or %<-std=gnu++11%> G++ will accept your code)"
- msgstr "(如果您使用%<-fpermissive%>G++ 会接å—您的代ç )"
-
-@@ -37547,19 +36432,16 @@
-
- #: cp/parser.c:14510
- #, fuzzy, gcc-internal-format
--#| msgid "defaulted and deleted functions only available with -std=c++0x or -std=gnu++0x"
- msgid "use of %<auto%> in lambda parameter declaration only available with -std=c++1y or -std=gnu++1y"
- msgstr "默认化和被删除的函数åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
-
- #: cp/parser.c:14516
- #, fuzzy, gcc-internal-format
--#| msgid "defaulted and deleted functions only available with -std=c++0x or -std=gnu++0x"
- msgid "use of %<auto%> in parameter declaration only available with -std=c++1y or -std=gnu++1y"
- msgstr "默认化和被删除的函数åªåœ¨ -std=c++0x 或 -std=gnu++0x 下å¯ç”¨"
-
- #: cp/parser.c:14521
- #, fuzzy, gcc-internal-format
--#| msgid "ISO C forbids forward parameter declarations"
- msgid "ISO C++ forbids use of %<auto%> in parameter declaration"
- msgstr "ISO C ä¸å…许å‰å‘å‚数声明"
-
-@@ -37640,7 +36522,6 @@
-
- #: cp/parser.c:15524
- #, fuzzy, gcc-internal-format
--#| msgid "ISO C++ forbids incrementing an enum"
- msgid "ISO C++ forbids empty anonymous enum"
- msgstr "ISO C++ ä¸å…许枚举自增"
-
-@@ -37681,7 +36562,6 @@
-
- #: cp/parser.c:16101
- #, fuzzy, gcc-internal-format
--#| msgid "types may not be defined in exception-declarations"
- msgid "types may not be defined in alias template declarations"
- msgstr "类型ä¸èƒ½å®šä¹‰åœ¨å¼‚常声明中"
-
-@@ -37764,7 +36644,6 @@
- #. function.
- #: cp/parser.c:17476
- #, fuzzy, gcc-internal-format
--#| msgid "invalid type in declaration"
- msgid "qualified-id in declaration"
- msgstr "声明中有无效类型"
-
-@@ -37780,7 +36659,6 @@
-
- #: cp/parser.c:17605
- #, fuzzy, gcc-internal-format
--#| msgid "creating pointer to member of non-class type %qT"
- msgid "cannot form pointer to member of non-class %q#T"
- msgstr "生æˆéžç±»ç±»åž‹%qTçš„æˆå‘˜æŒ‡é’ˆ"
-
-@@ -37796,13 +36674,11 @@
-
- #: cp/parser.c:17739
- #, fuzzy, gcc-internal-format
--#| msgid "duplicate cv-qualifier"
- msgid "multiple ref-qualifiers"
- msgstr "é‡å¤çš„ cv é™å®š"
-
- #: cp/parser.c:17797
- #, fuzzy, gcc-internal-format
--#| msgid "duplicate cv-qualifier"
- msgid "duplicate virt-specifier"
- msgstr "é‡å¤çš„ cv é™å®š"
-
-@@ -37843,13 +36719,11 @@
-
- #: cp/parser.c:18594
- #, fuzzy, gcc-internal-format
--#| msgid "%H%sparameter pack %qD cannot have a default argument"
- msgid "parameter pack %qD cannot have a default argument"
- msgstr "%H%s模æ¿å‚数包%qDä¸èƒ½æœ‰é»˜è®¤å‚æ•°"
-
- #: cp/parser.c:18602
- #, fuzzy, gcc-internal-format
--#| msgid "%H%sparameter pack cannot have a default argument"
- msgid "parameter pack cannot have a default argument"
- msgstr "%H%s模æ¿å‚数包ä¸èƒ½æœ‰é»˜è®¤å‚æ•°"
-
-@@ -37860,7 +36734,6 @@
-
- #: cp/parser.c:18907
- #, fuzzy, gcc-internal-format
--#| msgid "ISO C++ does not allow designated initializers"
- msgid "ISO C++ does not allow C99 designated initializers"
- msgstr "ISO C++ ä¸å…许指定元素åˆå§‹å€¼è®¾å®š"
-
-@@ -37891,7 +36764,6 @@
-
- #: cp/parser.c:19667
- #, fuzzy, gcc-internal-format
--#| msgid "cannot find file for class %s"
- msgid "cannot specify %<override%> for a class"
- msgstr "无法为类 %s 找到文件"
-
-@@ -37942,7 +36814,6 @@
-
- #: cp/parser.c:20181
- #, fuzzy, gcc-internal-format
--#| msgid "a class-key must be used when declaring a friend"
- msgid "in C++03 a class-key must be used when declaring a friend"
- msgstr "声明å‹å…ƒæ—¶å¿…须使用 class 关键字"
-
-@@ -38018,7 +36889,6 @@
-
- #: cp/parser.c:21749
- #, fuzzy, gcc-internal-format
--#| msgid "expected identifier or %<(%>"
- msgid "expected an identifier for the attribute name"
- msgstr "需è¦æ ‡è¯†ç¬¦æˆ–%<(%>"
-
-@@ -38113,13 +36983,11 @@
-
- #: cp/parser.c:24031
- #, fuzzy, gcc-internal-format
--#| msgid "both %<_Sat%> and %<char%> in declaration specifiers"
- msgid "both %<__thread%> and %<thread_local%> specified"
- msgstr "声明中åŒæ—¶ä½¿ç”¨äº†%<_Sat%>å’Œ%<char%>"
-
- #: cp/parser.c:24033
- #, fuzzy, gcc-internal-format
--#| msgid "duplicate %qE"
- msgid "duplicate %qD"
- msgstr "é‡å¤çš„%qE"
-
-@@ -38225,13 +37093,11 @@
-
- #: cp/parser.c:24157
- #, fuzzy, gcc-internal-format
--#| msgid "expected %<static_assert%>"
- msgid "expected %<__transaction_atomic%>"
- msgstr "需è¦%<static_assert%>"
-
- #: cp/parser.c:24160
- #, fuzzy, gcc-internal-format
--#| msgid "expected %<static_assert%>"
- msgid "expected %<__transaction_relaxed%>"
- msgstr "需è¦%<static_assert%>"
-
-@@ -38272,7 +37138,6 @@
-
- #: cp/parser.c:24488
- #, fuzzy, gcc-internal-format
--#| msgid "previously declared here"
- msgid "%q#T was previously declared here"
- msgstr "以å‰åœ¨æ­¤å£°æ˜Žè¿‡"
-
-@@ -38283,7 +37148,6 @@
-
- #: cp/parser.c:24528
- #, fuzzy, gcc-internal-format
--#| msgid "%<template%> (as a disambiguator) is only allowed within templates"
- msgid "in C++98 %<template%> (as a disambiguator) is only allowed within templates"
- msgstr "用作消歧义的%<template%>åªèƒ½ç”¨äºŽæ¨¡æ¿å†…"
-
-@@ -38354,7 +37218,6 @@
-
- #: cp/parser.c:27475
- #, fuzzy, gcc-internal-format
--#| msgid "invalid initializer"
- msgid "invalid reduction-identifier"
- msgstr "无效的åˆå§‹å€¼è®¾å®š"
-
-@@ -38365,7 +37228,6 @@
-
- #: cp/parser.c:29045
- #, fuzzy, gcc-internal-format
--#| msgid "parenthesized initialization is not allowed in OpenMP %<for%> loop"
- msgid "parenthesized initialization is not allowed in for-loop"
- msgstr "括起的åˆå§‹åŒ–ä¸å…许使用在 OpenMP %<for%>循环中"
-
-@@ -38381,13 +37243,11 @@
-
- #: cp/parser.c:30334
- #, fuzzy, gcc-internal-format
--#| msgid "attributes are not allowed on a function-definition"
- msgid "vector attribute not immediately followed by a single function declaration or definition"
- msgstr "函数定义中ä¸å…许有属性"
-
- #: cp/parser.c:30561
- #, fuzzy, gcc-internal-format
--#| msgid "invalid initializer"
- msgid "invalid initializer clause"
- msgstr "无效的åˆå§‹å€¼è®¾å®š"
-
-@@ -38403,13 +37263,11 @@
-
- #: cp/parser.c:30678
- #, fuzzy, gcc-internal-format
--#| msgid "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, or %<||%>"
- msgid "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%> or identifier"
- msgstr "需è¦%<+%>ã€%<*%>ã€%<-%>ã€%<&%>ã€%<^%>ã€%<|%>ã€%<&&%>或%<||%>"
-
- #: cp/parser.c:30697
- #, fuzzy, gcc-internal-format
--#| msgid "new types may not be defined in a return type"
- msgid "types may not be defined in declare reduction type list"
- msgstr "ä¸èƒ½åœ¨è¿”回类型中定义新类型"
-
-@@ -38450,7 +37308,6 @@
-
- #: cp/parser.c:31479
- #, fuzzy, gcc-internal-format
--#| msgid "#pragma GCC optimize is not allowed inside functions"
- msgid "%<#pragma simd%> must be inside a function"
- msgstr "#pragma GCC optimize ä¸å…许用在函数中"
-
-@@ -38461,19 +37318,16 @@
-
- #: cp/parser.c:31650
- #, fuzzy, gcc-internal-format
--#| msgid "Expected variable name at %C"
- msgid "expected variable-name"
- msgstr "在%C处需è¦å˜é‡å"
-
- #: cp/parser.c:31714
- #, fuzzy, gcc-internal-format
--#| msgid "expected %<,%> or %<)%>"
- msgid "expected %<,%> or %<)%> after %qE"
- msgstr "éœ€è¦ %<,%> 或 %<)%>"
-
- #: cp/parser.c:31996
- #, fuzzy, gcc-internal-format
--#| msgid "templates may not be %<virtual%>"
- msgid "implicit templates may not be %<virtual%>"
- msgstr "模æ¿ä¸èƒ½æ˜¯%<virtual%>çš„"
-
-@@ -38524,7 +37378,6 @@
-
- #: cp/pt.c:831
- #, fuzzy, gcc-internal-format
--#| msgid "declaration of template %q#D"
- msgid "specialization of alias template %qD"
- msgstr "模æ¿å£°æ˜Ž%q#D"
-
-@@ -38562,13 +37415,11 @@
-
- #: cp/pt.c:1769
- #, fuzzy, gcc-internal-format
--#| msgid "candidate is: %+#D"
- msgid "candidate is: %#D"
- msgstr "备选为:%+#D"
-
- #: cp/pt.c:1776 cp/semantics.c:4775
- #, fuzzy, gcc-internal-format
--#| msgid "%s %+#D"
- msgid "%s %#D"
- msgstr "%s %+#D"
-
-@@ -38599,7 +37450,6 @@
-
- #: cp/pt.c:2299
- #, fuzzy, gcc-internal-format
--#| msgid "wrong number of template arguments (%d, should be %d)"
- msgid "too many template headers for %D (should be %d)"
- msgstr "模æ¿å‚æ•°æ•°ç›®ä¸å¯¹(ä¸åº”是 %d 个而应是 %d 个)"
-
-@@ -38735,7 +37585,6 @@
-
- #: cp/pt.c:4159
- #, fuzzy, gcc-internal-format
--#| msgid "previously declared here"
- msgid "primary template here"
- msgstr "以å‰åœ¨æ­¤å£°æ˜Žè¿‡"
-
-@@ -38792,7 +37641,6 @@
-
- #: cp/pt.c:4478
- #, fuzzy, gcc-internal-format
--#| msgid "default template arguments may not be used in function templates without -std=c++0x or -std=gnu++0x"
- msgid "default template arguments may not be used in function templates without -std=c++11 or -std=gnu++11"
- msgstr "åªæœ‰æŒ‡å®šäº† -std=c++0x 或 -std=gnu++0x æ—¶æ‰èƒ½åœ¨å‡½æ•°æ¨¡æ¿ä¸­ä½¿ç”¨é»˜è®¤å‚æ•°"
-
-@@ -38914,19 +37762,16 @@
-
- #: cp/pt.c:5229
- #, fuzzy, gcc-internal-format
--#| msgid "it must be the address of a function with external linkage"
- msgid "it must be the name of a function with external linkage"
- msgstr "它必须是一个具有外部链接函数的地å€"
-
- #: cp/pt.c:5237
- #, fuzzy, gcc-internal-format
--#| msgid "%qE is not a valid template argument for type %qT because object %qD has not external linkage"
- msgid "%qE is not a valid template argument for type %qT because %qD has no linkage"
- msgstr "%qEä¸æ˜¯ç±»åž‹%qT的有效模æ¿å®žå‚,因为对象%qD没有外部链接"
-
- #: cp/pt.c:5241
- #, fuzzy, gcc-internal-format
--#| msgid "%qE is not a valid template argument of type %qT because %qD does not have external linkage"
- msgid "%qE is not a valid template argument for type %qT because %qD does not have external linkage"
- msgstr "%qEä¸æ˜¯ç±»åž‹%qT的有效模æ¿å®žå‚,因为函数%qD没有外部链接"
-
-@@ -38937,7 +37782,6 @@
-
- #: cp/pt.c:5318
- #, fuzzy, gcc-internal-format
--#| msgid "got %d template parameters for %q#D"
- msgid " couldn't deduce template parameter %qD"
- msgstr "得到 %d 个模æ¿å‚数,为%q#D"
-
-@@ -38948,31 +37792,26 @@
-
- #: cp/pt.c:5342
- #, fuzzy, gcc-internal-format
--#| msgid "comparison between types %qT and %qT"
- msgid " mismatched types %qT and %qT"
- msgstr "在类型%qT和%qT间比较"
-
- #: cp/pt.c:5351
- #, fuzzy, gcc-internal-format
--#| msgid "template parameter pack %qD cannot have a default argument"
- msgid " template parameter %qD is not a parameter pack, but argument %qD is"
- msgstr "模æ¿å‚数包%qDä¸èƒ½æœ‰é»˜è®¤å‚æ•°"
-
- #: cp/pt.c:5362
- #, fuzzy, gcc-internal-format
--#| msgid "template arguments to %qD do not match original template %qD"
- msgid " template argument %qE does not match pointer-to-member constant %qE"
- msgstr "ç»™%qD的模æ¿å®žå‚ä¸åŒ¹é…原先的模æ¿%qD"
-
- #: cp/pt.c:5372
- #, fuzzy, gcc-internal-format
--#| msgid "%qs is not valid for %qs"
- msgid " %qE is not equivalent to %qE"
- msgstr "%qs对%qs而言无效"
-
- #: cp/pt.c:5381
- #, fuzzy, gcc-internal-format
--#| msgid "inconsistent deduction for %qT: %qT and then %qT"
- msgid " inconsistent parameter pack deduction with %qT and %qT"
- msgstr "对%qTä¸ä¸€è‡´çš„演绎:先是%qT然åŽæ˜¯%qT"
-
-@@ -38988,31 +37827,26 @@
-
- #: cp/pt.c:5408
- #, fuzzy, gcc-internal-format
--#| msgid "partial specialization %qT does not specialize any template arguments"
- msgid " variable-sized array type %qT is not a valid template argument"
- msgstr "部分特例化%qT并未特例化任何模æ¿å‚æ•°"
-
- #: cp/pt.c:5419
- #, fuzzy, gcc-internal-format
--#| msgid "%qE is not a valid template argument for type %qT"
- msgid " member function type %qT is not a valid template argument"
- msgstr "%qEä¸æ˜¯ç±»åž‹%qT的有效模æ¿å‚æ•°"
-
- #: cp/pt.c:5453
- #, fuzzy, gcc-internal-format
--#| msgid "cannot convert type %qT to type %qT"
- msgid " cannot convert %qE (type %qT) to type %qT"
- msgstr "ä¸èƒ½å°†ç±»åž‹%qT转æ¢ä¸ºç±»åž‹%qT"
-
- #: cp/pt.c:5466
- #, fuzzy, gcc-internal-format
--#| msgid "%qT is an ambiguous base of %qT"
- msgid " %qT is an ambiguous base class of %qT"
- msgstr "%qT是%qT的有歧义的基类"
-
- #: cp/pt.c:5470
- #, fuzzy, gcc-internal-format
--#| msgid "type %qT is not derived from type %qT"
- msgid " %qT is not derived from %qT"
- msgstr "类型%qTä¸æ˜¯ç”±ç±»åž‹%qT派生的"
-
-@@ -39023,13 +37857,11 @@
-
- #: cp/pt.c:5491
- #, fuzzy, gcc-internal-format
--#| msgid "cannot decrement a pointer to incomplete type %qT"
- msgid " can't deduce a template for %qT from non-template type %qT"
- msgstr "指å‘ä¸å®Œå…¨ç±»åž‹%qT的指针ä¸èƒ½è‡ªå‡"
-
- #: cp/pt.c:5501
- #, fuzzy, gcc-internal-format
--#| msgid "template arguments to %qD do not match original template %qD"
- msgid " template argument %qE does not match %qD"
- msgstr "ç»™%qD的模æ¿å®žå‚ä¸åŒ¹é…原先的模æ¿%qD"
-
-@@ -39055,7 +37887,6 @@
-
- #: cp/pt.c:5747
- #, fuzzy, gcc-internal-format
--#| msgid "%qD is not a valid template argument because %qD is a variable, not the address of a variable"
- msgid "%qE is not a valid template argument for %qT because it is not the address of a variable"
- msgstr "%qDä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆæ¨¡æ¿å®žå‚,因为%qD是一个å˜é‡ï¼Œè€Œéžå˜é‡çš„地å€"
-
-@@ -39071,7 +37902,6 @@
-
- #: cp/pt.c:5778
- #, fuzzy, gcc-internal-format
--#| msgid "%qE is not a valid template argument of type %qT because %qE is not a variable"
- msgid "%qE is not a valid template argument of type %qT because %qD has no linkage"
- msgstr "%qEä¸æ˜¯ç±»åž‹%qT的有效模æ¿å®žå‚,因为%qEä¸æ˜¯ä¸€ä¸ªå˜é‡"
-
-@@ -39132,7 +37962,6 @@
-
- #: cp/pt.c:6336
- #, fuzzy, gcc-internal-format
--#| msgid "invalid use of destructor %qD as a type"
- msgid "invalid use of destructor %qE as a type"
- msgstr "å°†æžæž„函数%qD用作类型无效"
-
-@@ -39210,13 +38039,11 @@
-
- #: cp/pt.c:6754
- #, fuzzy, gcc-internal-format
--#| msgid "default argument for template parameter for class enclosing %qD"
- msgid "pack expansion argument for non-pack parameter %qD of alias template %qD"
- msgstr "包å«%qD的类的模æ¿å‚数有默认å‚æ•°"
-
- #: cp/pt.c:7085
- #, fuzzy, gcc-internal-format
--#| msgid "%qD is not a function template"
- msgid "%q#D is not a function template"
- msgstr "%qDä¸æ˜¯ä¸€ä¸ªå‡½æ•°æ¨¡æ¿"
-
-@@ -39232,7 +38059,6 @@
-
- #: cp/pt.c:8088
- #, fuzzy
--#| msgid "template instantiation depth exceeds maximum of %d (use -ftemplate-depth= to increase the maximum) instantiating %qD"
- msgid "template instantiation depth exceeds maximum of %d (use -ftemplate-depth= to increase the maximum) substituting %qS"
- msgstr "在实例化%2$qD时模æ¿å®žä¾‹åŒ–深度超过最大值 %1$d(使用 use -ftemplate-depth= æ¥å¢žå¤§æœ€å¤§å€¼)"
-
-@@ -39253,7 +38079,6 @@
-
- #: cp/pt.c:10108
- #, fuzzy, gcc-internal-format
--#| msgid "redefinition of default argument for %q#D"
- msgid " when instantiating default argument for call to %D"
- msgstr "é‡å®šä¹‰%q#D的默认å‚æ•°"
-
-@@ -39317,25 +38142,21 @@
-
- #: cp/pt.c:11791
- #, fuzzy, gcc-internal-format
--#| msgid "cannot declare pointer to qualified function type %qT"
- msgid "forming pointer to qualified function type %qT"
- msgstr "ä¸èƒ½å£°æ˜ŽæŒ‡å‘é™å®šå‡½æ•°ç±»åž‹%qT的指针"
-
- #: cp/pt.c:11794
- #, fuzzy, gcc-internal-format
--#| msgid "cannot declare reference to qualified function type %qT"
- msgid "forming reference to qualified function type %qT"
- msgstr "ä¸èƒ½å£°æ˜ŽæŒ‡å‘é™å®šå‡½æ•°ç±»åž‹%qT的引用"
-
- #: cp/pt.c:11831
- #, fuzzy, gcc-internal-format
--#| msgid "cannot declare reference to qualified function type %qT"
- msgid "cannot declare reference to array of runtime bound"
- msgstr "ä¸èƒ½å£°æ˜ŽæŒ‡å‘é™å®šå‡½æ•°ç±»åž‹%qT的引用"
-
- #: cp/pt.c:11832
- #, fuzzy, gcc-internal-format
--#| msgid "cannot declare pointer to %q#T member"
- msgid "cannot declare pointer to array of runtime bound"
- msgstr "无法声明指å‘%q#Tæˆå‘˜çš„指针"
-
-@@ -39426,13 +38247,11 @@
-
- #: cp/pt.c:14567
- #, fuzzy, gcc-internal-format
--#| msgid "%<%T::%E%> is not a type"
- msgid "use %<%T::%D%> instead"
- msgstr "%<%T::%E%>ä¸æ˜¯ä¸€ä¸ªç±»åž‹"
-
- #: cp/pt.c:14571
- #, fuzzy, gcc-internal-format
--#| msgid "%qE undeclared here (not in a function)"
- msgid "%q+D declared here, later in the translation unit"
- msgstr "%qE未声明(ä¸åœ¨å‡½æ•°å†…)"
-
-@@ -39518,7 +38337,6 @@
-
- #: cp/pt.c:18935
- #, fuzzy, gcc-internal-format
--#| msgid "explicit instantiation of non-template %q#D"
- msgid "explicit instantiation of non-class template %qD"
- msgstr "对éžæ¨¡æ¿%q#D的显å¼å®žä¾‹åŒ–"
-
-@@ -39561,13 +38379,11 @@
-
- #: cp/pt.c:20137
- #, fuzzy, gcc-internal-format
--#| msgid "invalid use of template type parameter %qT"
- msgid "invalid template non-type parameter"
- msgstr "对模æ¿ç±»åž‹å‚æ•°%qT的使用无效"
-
- #: cp/pt.c:20139
- #, fuzzy, gcc-internal-format
--#| msgid "%q#T is not a valid type for a template constant parameter"
- msgid "%q#T is not a valid type for a template non-type parameter"
- msgstr "%q#Tä¸æ˜¯ä¸€ä¸ªæœ‰æ•ˆçš„模æ¿å¸¸é‡å‚数类型"
-
-@@ -39583,7 +38399,6 @@
-
- #: cp/pt.c:21484
- #, fuzzy, gcc-internal-format
--#| msgid "unable to deduce %qT from %qE"
- msgid "unable to deduce lambda return type from %qE"
- msgstr "无法从%2$qE推导出%1$qT"
-
-@@ -39629,7 +38444,6 @@
-
- #: cp/rtti.c:399
- #, fuzzy, gcc-internal-format
--#| msgid "creating array of functions"
- msgid "typeid of array of runtime bound"
- msgstr "创建函数的数组"
-
-@@ -39640,7 +38454,6 @@
-
- #: cp/rtti.c:491
- #, fuzzy, gcc-internal-format
--#| msgid "cannot declare pointer to qualified function type %qT"
- msgid "typeid of qualified function type %qT"
- msgstr "ä¸èƒ½å£°æ˜ŽæŒ‡å‘é™å®šå‡½æ•°ç±»åž‹%qT的指针"
-
-@@ -39671,7 +38484,6 @@
-
- #: cp/search.c:1899
- #, fuzzy, gcc-internal-format
--#| msgid "invalid covariant return type for %q+#D"
- msgid "invalid covariant return type for %q#D"
- msgstr "%q+#Dçš„åå˜è¿”回类型无效"
-
-@@ -39727,13 +38539,11 @@
-
- #: cp/search.c:1966
- #, fuzzy, gcc-internal-format
--#| msgid "virtual non-class function %qs"
- msgid "virtual function %q+D"
- msgstr "虚函数%qsä¸æ˜¯ç±»æˆå‘˜"
-
- #: cp/search.c:1967
- #, fuzzy, gcc-internal-format
--#| msgid "overriding deleted function %q+D"
- msgid "overriding final function %q+D"
- msgstr "éšè—了被删除的函数%q+D"
-
-@@ -39851,7 +38661,6 @@
-
- #: cp/semantics.c:3218
- #, fuzzy, gcc-internal-format
--#| msgid "protected member %q+#D in anonymous union"
- msgid "cannot capture member %qD of anonymous union"
- msgstr "匿åè”åˆä¸­å‡ºçŽ°ä¿æŠ¤æˆå‘˜%q+#D"
-
-@@ -39862,13 +38671,11 @@
-
- #: cp/semantics.c:3235
- #, fuzzy, gcc-internal-format
--#| msgid "use of %<auto%> variable from containing function"
- msgid "use of local variable with automatic storage from containing function"
- msgstr "在包å«å‡½æ•°ä¸­ä½¿ç”¨%<auto%>å˜é‡"
-
- #: cp/semantics.c:3236
- #, fuzzy, gcc-internal-format
--#| msgid "use of %<auto%> variable from containing function"
- msgid "use of parameter from containing function"
- msgstr "在包å«å‡½æ•°ä¸­ä½¿ç”¨%<auto%>å˜é‡"
-
-@@ -39910,7 +38717,6 @@
-
- #: cp/semantics.c:3622
- #, fuzzy, gcc-internal-format
--#| msgid "%qD is not an enumerator-name"
- msgid "%qT is not an enumeration type"
- msgstr "%qDä¸æ˜¯ä¸€ä¸ªæžšä¸¾å"
-
-@@ -39917,7 +38723,6 @@
- #. Parameter packs can only be used in templates
- #: cp/semantics.c:3771
- #, fuzzy, gcc-internal-format
--#| msgid "storage class specifiers invalid in parameter declarations"
- msgid "Parameter pack __bases only valid in template declaration"
- msgstr "为形å‚声明指定了无效的存储类"
-
-@@ -39938,7 +38743,6 @@
-
- #: cp/semantics.c:4772
- #, fuzzy, gcc-internal-format
--#| msgid "reference to %qD is ambiguous"
- msgid "user defined reduction lookup is ambiguous"
- msgstr "对%qD的引用有歧义"
-
-@@ -39959,7 +38763,6 @@
-
- #: cp/semantics.c:5267
- #, fuzzy, gcc-internal-format
--#| msgid "num_threads expression must be integral"
- msgid "linear step expression must be integral"
- msgstr "num_threads 表达å¼å¿…须是整型的"
-
-@@ -39995,43 +38798,36 @@
-
- #: cp/semantics.c:5434
- #, fuzzy, gcc-internal-format
--#| msgid "num_threads expression must be integral"
- msgid "%qs length expression must be integral"
- msgstr "num_threads 表达å¼å¿…须是整型的"
-
- #: cp/semantics.c:5447
- #, fuzzy, gcc-internal-format
--#| msgid "%Hcollapse argument needs positive constant integer expression"
- msgid "%qs length expression must be positive constant integer expression"
- msgstr "%H折å å˜é‡éœ€è¦æ­£æ•´å¸¸æ•°è¡¨è¾¾å¼"
-
- #: cp/semantics.c:5464
- #, fuzzy, gcc-internal-format
--#| msgid "num_threads expression must be integral"
- msgid "%<num_teams%> expression must be integral"
- msgstr "num_threads 表达å¼å¿…须是整型的"
-
- #: cp/semantics.c:5483
- #, fuzzy, gcc-internal-format
--#| msgid "num_threads expression must be integral"
- msgid "%<thread_limit%> expression must be integral"
- msgstr "num_threads 表达å¼å¿…须是整型的"
-
- #: cp/semantics.c:5502
- #, fuzzy, gcc-internal-format
--#| msgid "slice end must be integer"
- msgid "%<device%> id must be integral"
- msgstr "切片结尾必须是整数"
-
- #: cp/semantics.c:5523
- #, fuzzy, gcc-internal-format
--#| msgid "schedule chunk size expression must be integral"
- msgid "%<dist_schedule%> chunk size expression must be integral"
- msgstr "调度å—大å°è¡¨è¾¾å¼å¿…须为整型"
-
- #: cp/semantics.c:5543
- #, fuzzy, gcc-internal-format
--#| msgid "%qD is not a variable in clause %qs"
- msgid "%qD is not a variable in %<aligned%> clause"
- msgstr "%qD在å­å¥%qs中ä¸æ˜¯ä¸€ä¸ªå˜é‡"
-
-@@ -40042,19 +38838,16 @@
-
- #: cp/semantics.c:5563
- #, fuzzy, gcc-internal-format
--#| msgid "%qD appears more than once in data clauses"
- msgid "%qD appears more than once in %<aligned%> clauses"
- msgstr "%qD在数æ®å­å¥ä¸­å¤šæ¬¡å‡ºçŽ°"
-
- #: cp/semantics.c:5576
- #, fuzzy, gcc-internal-format
--#| msgid "schedule chunk size expression must be integral"
- msgid "%<aligned%> clause alignment expression must be integral"
- msgstr "调度å—大å°è¡¨è¾¾å¼å¿…须为整型"
-
- #: cp/semantics.c:5613
- #, fuzzy, gcc-internal-format
--#| msgid "%qD is not a variable in clause %qs"
- msgid "%qD is not a variable in %<depend%> clause"
- msgstr "%qD在å­å¥%qs中ä¸æ˜¯ä¸€ä¸ªå˜é‡"
-
-@@ -40091,7 +38884,6 @@
- #. Report the error.
- #: cp/semantics.c:6870
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "static assertion failed: %E"
- msgid "static assertion failed: %s"
- msgstr "é™æ€æ–­è¨€é”™è¯¯ï¼š%E"
-
-@@ -40137,7 +38929,6 @@
-
- #: cp/semantics.c:7494
- #, fuzzy, gcc-internal-format
--#| msgid "%q#T is not a class"
- msgid "%q#T has virtual base classes"
- msgstr "%q#Tä¸æ˜¯ä¸€ä¸ªç±»"
-
-@@ -40168,7 +38959,6 @@
-
- #: cp/semantics.c:8033
- #, fuzzy, gcc-internal-format
--#| msgid "%qD is not a constexpr function"
- msgid "%q+D is not usable as a constexpr function because:"
- msgstr "%qDä¸æ˜¯ä¸€ä¸ªå¹¿ä¹‰å¸¸å‡½æ•°"
-
-@@ -40179,7 +38969,6 @@
-
- #: cp/semantics.c:8382 cp/semantics.c:10054
- #, fuzzy, gcc-internal-format
--#| msgid "call to non-function %qD"
- msgid "call to non-constexpr function %qD"
- msgstr "调用éžå‡½æ•°çš„%qD"
-
-@@ -40186,7 +38975,6 @@
- #. The definition of fun was somehow unsuitable.
- #: cp/semantics.c:8416
- #, fuzzy, gcc-internal-format
--#| msgid "%qE is not a constant expression"
- msgid "%qD called in a constant expression"
- msgstr "%qEä¸æ˜¯ä¸€ä¸ªå¸¸é‡è¡¨è¾¾å¼"
-
-@@ -40202,7 +38990,6 @@
-
- #: cp/semantics.c:8462
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "template instantiation depth exceeds maximum of %d (use -ftemplate-depth= to increase the maximum) instantiating %qD"
- msgid "constexpr evaluation depth exceeds maximum of %d (use -fconstexpr-depth= to increase the maximum)"
- msgstr "在实例化%2$qD时模æ¿å®žä¾‹åŒ–深度超过最大值 %1$d(使用 use -ftemplate-depth= æ¥å¢žå¤§æœ€å¤§å€¼)"
-
-@@ -40218,7 +39005,6 @@
-
- #: cp/semantics.c:8682
- #, fuzzy, gcc-internal-format
--#| msgid "Expected array subscript at %C"
- msgid "negative array subscript"
- msgstr "%C处需è¦æ•°ç»„下标"
-
-@@ -40284,13 +39070,11 @@
-
- #: cp/semantics.c:9492 cp/semantics.c:10361
- #, fuzzy, gcc-internal-format
--#| msgid "enumeral and non-enumeral type in conditional expression"
- msgid "temporary of non-literal type %qT in a constant expression"
- msgstr "枚举和éžæžšä¸¾ç±»åž‹ä¸€èµ·å‡ºçŽ°åœ¨æ¡ä»¶è¡¨è¾¾å¼ä¸­"
-
- #: cp/semantics.c:9735 cp/semantics.c:10146
- #, fuzzy, gcc-internal-format
--#| msgid "reinterpret_cast from type %qT to type %qT casts away qualifiers"
- msgid "reinterpret_cast from integer to pointer"
- msgstr "从类型%qT到类型%qTçš„ reinterpret_cast 丢失了é™å®šç¬¦"
-
-@@ -40331,7 +39115,6 @@
-
- #: cp/semantics.c:10200
- #, fuzzy, gcc-internal-format
--#| msgid "%qE is not a constant expression"
- msgid "use of %<this%> in a constant expression"
- msgstr "%qEä¸æ˜¯ä¸€ä¸ªå¸¸é‡è¡¨è¾¾å¼"
-
-@@ -40352,7 +39135,6 @@
-
- #: cp/semantics.c:10336
- #, fuzzy, gcc-internal-format
--#| msgid "Bad type in constant expression"
- msgid "cast to non-integral type %qT in a constant expression"
- msgstr "常é‡è¡¨è¾¾å¼ä¸­ç±»åž‹é”™è¯¯"
-
-@@ -40423,43 +39205,36 @@
-
- #: cp/tree.c:3333
- #, fuzzy, gcc-internal-format
--#| msgid "declaration of %qD as member of %qT"
- msgid "redeclaration of %qD adds abi tag %E"
- msgstr "%qD声明为%qT的一个æˆå‘˜"
-
- #: cp/tree.c:3339
- #, fuzzy, gcc-internal-format
--#| msgid "previous declaration %q+#D here"
- msgid "previous declaration here"
- msgstr "与此处早先的声明%q+#D冲çª"
-
- #: cp/tree.c:3356
- #, fuzzy, gcc-internal-format
--#| msgid "%qE attribute ignored on non-class types"
- msgid "%qE attribute applied to non-class, non-enum type %qT"
- msgstr "%qE属性在ä¸æ˜¯ç±»çš„类型上被忽略"
-
- #: cp/tree.c:3362
- #, fuzzy, gcc-internal-format
--#| msgid "ignoring attributes applied to %qT after definition"
- msgid "%qE attribute applied to %qT after its definition"
- msgstr "忽略在其定义之åŽä¸º%qT应用的属性"
-
- #: cp/tree.c:3384
- #, fuzzy, gcc-internal-format
--#| msgid "%qE attribute applies only to functions"
- msgid "%qE attribute applied to non-function %qD"
- msgstr "%qE属性åªèƒ½ç”¨äºŽå‡½æ•°"
-
- #: cp/tree.c:3389
- #, fuzzy, gcc-internal-format
--#| msgid "%qE attribute applies only to functions"
- msgid "%qE attribute applied to extern \"C\" function %qD"
- msgstr "%qE属性åªèƒ½ç”¨äºŽå‡½æ•°"
-
- #: cp/tree.c:4093
- #, fuzzy, gcc-internal-format
--#| msgid "array bound is not an integer constant"
- msgid "zero as null pointer constant"
- msgstr "数组边界ä¸æ˜¯ä¸€ä¸ªæ•´æ•°å¸¸é‡"
-
-@@ -40530,7 +39305,6 @@
-
- #: cp/typeck.c:1559
- #, fuzzy, gcc-internal-format
--#| msgid "creating array of functions"
- msgid "taking sizeof array of runtime bound"
- msgstr "创建函数的数组"
-
-@@ -40561,7 +39335,6 @@
-
- #: cp/typeck.c:1961
- #, fuzzy, gcc-internal-format
--#| msgid "taking address of temporary"
- msgid "taking address of temporary array"
- msgstr "å–临时å˜é‡çš„地å€"
-
-@@ -40572,7 +39345,6 @@
-
- #: cp/typeck.c:2248 cp/typeck.c:2658
- #, fuzzy, gcc-internal-format
--#| msgid "request for member %qD in %qE, which is of non-class type %qT"
- msgid "request for member %qD in %qE, which is of pointer type %qT (maybe you meant to use %<->%> ?)"
- msgstr "对æˆå‘˜%qD的请求出现在%qE中,而åŽè€…具有éžç±»ç±»åž‹%qT"
-
-@@ -40663,7 +39435,6 @@
-
- #: cp/typeck.c:3029
- #, fuzzy, gcc-internal-format
--#| msgid "alignment of array elements is greater than element size"
- msgid "rank of the array%'s index is greater than 1"
- msgstr "数组元素的对é½è¾¹ç•Œæ¯”元素大å°è¿˜è¦å¤§"
-
-@@ -40704,13 +39475,11 @@
-
- #: cp/typeck.c:3486
- #, fuzzy, gcc-internal-format
--#| msgid "%qE cannot be used as a function"
- msgid "%qD cannot be used as a function"
- msgstr "%qEä¸èƒ½ç”¨ä½œå‡½æ•°"
-
- #: cp/typeck.c:3489
- #, fuzzy, gcc-internal-format
--#| msgid "%qE cannot be used as a function"
- msgid "expression cannot be used as a function"
- msgstr "%qEä¸èƒ½ç”¨ä½œå‡½æ•°"
-
-@@ -40821,13 +39590,11 @@
-
- #: cp/typeck.c:4572 cp/typeck.c:4584
- #, fuzzy, gcc-internal-format
--#| msgid "comparison between %qT and %qT"
- msgid "operand types are %qT and %qT"
- msgstr "在%qT和%qT间比较"
-
- #: cp/typeck.c:4596
- #, fuzzy, gcc-internal-format
--#| msgid "could not find interface for class %qE"
- msgid "could not find an integer type of the same size as %qT"
- msgstr "找ä¸åˆ°ç±»%qE的接å£"
-
-@@ -40925,7 +39692,6 @@
-
- #: cp/typeck.c:5473
- #, fuzzy, gcc-internal-format
--#| msgid "taking address of expression of type %<void%>"
- msgid "taking address of array of runtime bound"
- msgstr "å–一个类型为%<void%>的表达å¼çš„地å€"
-
-@@ -40981,7 +39747,6 @@
-
- #: cp/typeck.c:6077
- #, fuzzy, gcc-internal-format
--#| msgid "initializer for %qT must be brace-enclosed"
- msgid "list-initializer for non-class type must not be parenthesized"
- msgstr "%qTçš„åˆå§‹å€¼è®¾å®šå¿…须在花括å·å†…"
-
-@@ -41027,7 +39792,6 @@
-
- #: cp/typeck.c:6296
- #, fuzzy, gcc-internal-format
--#| msgid "invalid cast to function type %qT"
- msgid "useless cast to type %qT"
- msgstr "å‘函数类型%qT的转æ¢æ— æ•ˆ"
-
-@@ -41058,7 +39822,6 @@
-
- #: cp/typeck.c:6850
- #, fuzzy, gcc-internal-format
--#| msgid "ISO C++ forbids casting between pointer-to-function and pointer-to-object"
- msgid "casting between pointer-to-function and pointer-to-object is conditionally-supported"
- msgstr "ISO C++ ä¸å…许在函数指针和对象指针间进行转æ¢"
-
-@@ -41253,7 +40016,6 @@
-
- #: cp/typeck.c:8390
- #, fuzzy, gcc-internal-format
--#| msgid "<brace-enclosed initializer list>"
- msgid "returning initializer list"
- msgstr "<花括å·å†…çš„åˆå§‹å€¼åˆ—表>"
-
-@@ -41335,7 +40097,6 @@
-
- #: cp/typeck2.c:333
- #, fuzzy, gcc-internal-format
--#| msgid "cannot declare parameter %q+D to be of abstract type %qT"
- msgid "cannot declare parameter to be of abstract type %qT"
- msgstr "ä¸èƒ½å°†å½¢å‚%q+D声明为具有抽象类型%qT"
-
-@@ -41372,37 +40133,31 @@
-
- #: cp/typeck2.c:356
- #, fuzzy, gcc-internal-format
--#| msgid "invalid cast to function type %qT"
- msgid "invalid cast to abstract class type %qT"
- msgstr "å‘函数类型%qT的转æ¢æ— æ•ˆ"
-
- #: cp/typeck2.c:359
- #, fuzzy, gcc-internal-format
--#| msgid "invalid cast of an rvalue expression of type %qT to type %qT"
- msgid "invalid new-expression of abstract class type %qT"
- msgstr "从具有类型%qTçš„å³å€¼è¡¨è¾¾å¼åˆ°ç±»åž‹%qT中的转æ¢æ— æ•ˆ"
-
- #: cp/typeck2.c:362
- #, fuzzy, gcc-internal-format
--#| msgid "invalid parameter type %qT"
- msgid "invalid abstract return type %qT"
- msgstr "无效的å‚数类型%qT"
-
- #: cp/typeck2.c:365
- #, fuzzy, gcc-internal-format
--#| msgid "invalid parameter type %qT"
- msgid "invalid abstract parameter type %qT"
- msgstr "无效的å‚数类型%qT"
-
- #: cp/typeck2.c:368
- #, fuzzy, gcc-internal-format
--#| msgid "expression %qE of abstract class type %qT cannot be used in throw-expression"
- msgid "expression of abstract class type %qT cannot be used in throw-expression"
- msgstr "表达å¼%qE具有抽象类类型%qT,ä¸èƒ½ç”¨äºŽ throw 表达å¼ä¸­"
-
- #: cp/typeck2.c:372
- #, fuzzy, gcc-internal-format
--#| msgid "cannot declare parameter %q+D to be of abstract type %qT"
- msgid "cannot declare catch parameter to be of abstract class type %qT"
- msgstr "ä¸èƒ½å°†å½¢å‚%q+D声明为具有抽象类型%qT"
-
-@@ -41448,7 +40203,6 @@
-
- #: cp/typeck2.c:501
- #, fuzzy, gcc-internal-format
--#| msgid "invalid use of member (did you forget the %<&%> ?)"
- msgid "invalid use of member function (did you forget the %<()%> ?)"
- msgstr "对æˆå‘˜çš„使用无效(您是å¦é—忘了%<&%>?)"
-
-@@ -41474,7 +40228,6 @@
-
- #: cp/typeck2.c:534
- #, fuzzy, gcc-internal-format
--#| msgid "<brace-enclosed initializer list>"
- msgid "invalid use of brace-enclosed initializer list"
- msgstr "<花括å·å†…çš„åˆå§‹å€¼åˆ—表>"
-
-@@ -41510,7 +40263,6 @@
-
- #: cp/typeck2.c:922
- #, fuzzy, gcc-internal-format
--#| msgid "narrowing conversion of %qE from %qT to %qT inside { }"
- msgid "narrowing conversion of %qE from %qT to %qT inside { } is ill-formed in C++11"
- msgstr "在 {} 内将%qE从%qT转æ¢ä¸ºè¾ƒçª„的类型%qT"
-
-@@ -41606,19 +40358,16 @@
-
- #: cp/typeck2.c:1759
- #, fuzzy, gcc-internal-format
--#| msgid "pointer to member function used in arithmetic"
- msgid "pointer-to-member-function type %qT requires an rvalue"
- msgstr "在算术表达å¼ä¸­ä½¿ç”¨äº†æˆå‘˜æŒ‡é’ˆ"
-
- #: cp/typeck2.c:1766
- #, fuzzy, gcc-internal-format
--#| msgid "pointer to member function used in arithmetic"
- msgid "pointer-to-member-function type %qT requires an lvalue"
- msgstr "在算术表达å¼ä¸­ä½¿ç”¨äº†æˆå‘˜æŒ‡é’ˆ"
-
- #: cp/typeck2.c:1807
- #, fuzzy, gcc-internal-format
--#| msgid "invalid cast to function type %qT"
- msgid "functional cast to array type %qT"
- msgstr "å‘函数类型%qT的转æ¢æ— æ•ˆ"
-
-@@ -41659,7 +40408,6 @@
-
- #: fortran/arith.c:904 fortran/arith.c:929
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: Noninteger exponent in an initialization expression at %L"
- msgid "Noninteger exponent in an initialization expression at %L"
- msgstr "Fortran 2003:%L处åˆå§‹åŒ–表达å¼ä¸­éžæ•´æ•°æŒ‡æ•°"
-
-@@ -41833,7 +40581,6 @@
-
- #: fortran/array.c:578
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Array specification at %C has more than %d dimensions"
- msgid "Array specification at %C with more than 7 dimensions"
- msgstr "%C处数组规格中有多于 %d 的维数"
-
-@@ -41864,13 +40611,11 @@
-
- #: fortran/array.c:1060
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: [...] style array constructors at %C"
- msgid "[...] style array constructors at %C"
- msgstr "Fortran 2003:%C处 [...] 风格的数组构造"
-
- #: fortran/array.c:1082
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: Array constructor including type specification at %C"
- msgid "Array constructor including type specification at %C"
- msgstr "Fortran 2003:%C处包å«ç±»åž‹è§„格的数组构造"
-
-@@ -42074,7 +40819,6 @@
- #: fortran/check.c:868 fortran/check.c:1807 fortran/check.c:1933
- #: fortran/check.c:2007 fortran/check.c:2427
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Extension: Different type kinds at %L"
- msgid "Different type kinds at %L"
- msgstr "扩展:%L处类型ç§åˆ«ä¸åŒ"
-
-@@ -42085,7 +40829,6 @@
-
- #: fortran/check.c:913 fortran/check.c:949 fortran/check.c:2945
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "'%s' argument of '%s' intrinsic at %L must be of kind %d"
- msgid "'%s' argument of '%s' intrinsic at %L shall not be coindexed"
- msgstr "%3$L处内建函数‘%2$s’的实å‚‘%1$s’必须具有ç§åˆ« %4$d"
-
-@@ -42121,19 +40864,16 @@
-
- #: fortran/check.c:1030
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "'%s' and '%s' arguments of '%s' intrinsic at %L must have the same type"
- msgid "ATOM and VALUE argument of the %s intrinsic function shall have the same type at %L"
- msgstr "%4$L处‘%3$s’内建函数的‘%1$s’和‘%2$s’实å‚类型必须相åŒ"
-
- #: fortran/check.c:1048
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "'%s' argument of '%s' intrinsic at %L must be default real"
- msgid "ATOM argument of the %s intrinsic function at %L shall be definable"
- msgstr "%3$L处内建函数‘%2$s’的‘%1$s’实å‚类型必须为默认实型"
-
- #: fortran/check.c:1065
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "'%s' argument of '%s' intrinsic at %L must be default real"
- msgid "VALUE argument of the %s intrinsic function at %L shall be definable"
- msgstr "%3$L处内建函数‘%2$s’的‘%1$s’实å‚类型必须为默认实型"
-
-@@ -42162,7 +40902,6 @@
- #: fortran/check.c:3609 fortran/check.c:3664 fortran/check.c:4620
- #: fortran/check.c:4749
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: '%s' intrinsic with KIND argument at %L"
- msgid "'%s' intrinsic with KIND argument at %L"
- msgstr "Fortran 2003:%2$L处的‘%1$s’内建函数有 KIND 实å‚"
-
-@@ -42203,7 +40942,6 @@
-
- #: fortran/check.c:1739
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2008: COMPLEX argument '%s' argument of '%s' intrinsic at %L"
- msgid "COMPLEX argument '%s' argument of '%s' intrinsic at %L"
- msgstr "Fortran 2008:%3$L处的‘%2$s’内建函数有 COMPLEX å‚数‘%1$s’"
-
-@@ -42239,19 +40977,16 @@
-
- #: fortran/check.c:2384
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "'%s' argument of '%s' intrinsic at %L is empty"
- msgid "Missing '%s' argument to the %s intrinsic at %L"
- msgstr "%3$L处内建‘%2$s’内建函数的‘%1$s’实å‚为空"
-
- #: fortran/check.c:2399
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "arguments '%s' and '%s' for intrinsic %s"
- msgid "Duplicate argument '%s' at %L to intrinsic %s"
- msgstr "‘%s’和‘%s’用作内建函数‘%s’的å‚æ•°"
-
- #: fortran/check.c:2404
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "arguments '%s' and '%s' for intrinsic %s"
- msgid "Unknown argument '%s' at %L to intrinsic %s"
- msgstr "‘%s’和‘%s’用作内建函数‘%s’的å‚æ•°"
-
-@@ -42262,7 +40997,6 @@
-
- #: fortran/check.c:2464
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: '%s' intrinsic with CHARACTER argument at %L"
- msgid "'%s' intrinsic with CHARACTER argument at %L"
- msgstr "Fortran 2003:%2$L处的‘%1$s’内建函数有 CHARACTER 实å‚"
-
-@@ -42298,13 +41032,11 @@
-
- #: fortran/check.c:2815
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Second argument of NEAREST at %L shall not be zero"
- msgid "The FROM argument to MOVE_ALLOC at %L shall not be coindexed"
- msgstr "%L处 NEAREST 的第二个å‚æ•°ä¸èƒ½ä¸º 0"
-
- #: fortran/check.c:2826
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Second argument of NEAREST at %L shall not be zero"
- msgid "The TO argument to MOVE_ALLOC at %L shall not be coindexed"
- msgstr "%L处 NEAREST 的第二个å‚æ•°ä¸èƒ½ä¸º 0"
-
-@@ -42315,25 +41047,21 @@
-
- #: fortran/check.c:2844
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "the '%s' and '%s' arguments of '%s' intrinsic at %L must have the same rank %d/%d"
- msgid "The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L must have the same rank %d/%d"
- msgstr "%4$L处‘%3$s’内建函数的‘%1$s’和‘%2$s’实å‚必须有相åŒçš„秩 %5$d/%6$d"
-
- #: fortran/check.c:2853
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "the '%s' and '%s' arguments of '%s' intrinsic at %L must have the same rank %d/%d"
- msgid "The FROM and TO arguments of the MOVE_ALLOC intrinsic at %L must have the same corank %d/%d"
- msgstr "%4$L处‘%3$s’内建函数的‘%1$s’和‘%2$s’实å‚必须有相åŒçš„秩 %5$d/%6$d"
-
- #: fortran/check.c:2880
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Second argument of NEAREST at %L shall not be zero"
- msgid "Argument 'S' of NEAREST at %L shall not be zero"
- msgstr "%L处 NEAREST 的第二个å‚æ•°ä¸èƒ½ä¸º 0"
-
- #: fortran/check.c:2930
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "'%s' argument of '%s' intrinsic at %L must be ALLOCATABLE"
- msgid "'%s' argument of '%s' intrinsic at %L must be a POINTER, ALLOCATABLE or procedure pointer"
- msgstr "%3$L处内建函数‘%2$s’的实å‚‘%1$s’必须为 ALLOCATABLE"
-
-@@ -42364,7 +41092,6 @@
-
- #: fortran/check.c:3150
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "'%s' argument of '%s' intrinsic at %L must be a variable"
- msgid "The argument of the RANK intrinsic at %L must be a data object"
- msgstr "%3$L处内建函数‘%2$s’的实å‚‘%1$s’必须是一个å˜é‡"
-
-@@ -42410,7 +41137,6 @@
-
- #: fortran/check.c:3408 fortran/check.c:3427
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "'%s' argument of '%s' intrinsic at %L must be %s"
- msgid "'%s' argument of '%s' intrinsic at %L cannot be of type %s"
- msgstr "%3$L处内建函数‘%2$s’的实å‚‘%1$s’必须是 %4$s"
-
-@@ -42436,19 +41162,16 @@
-
- #: fortran/check.c:3679 fortran/check.c:5705
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "'%s' argument of '%s' intrinsic at %L must be a scalar"
- msgid "'%s' argument of '%s' intrinsic at %L shall not be a procedure"
- msgstr "%3$L处内建函数‘%2$s’的实å‚‘%1$s’必须是一个标é‡"
-
- #: fortran/check.c:3687 fortran/check.c:3826 fortran/check.c:5697
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "'%s' argument of '%s' intrinsic at %L cannot be INTENT(IN)"
- msgid "'%s' argument of '%s' intrinsic at %L shall not be TYPE(*)"
- msgstr "%3$L处内建函数‘%2$s’的实å‚‘%1$s’ä¸èƒ½æ˜¯ INTENT(IN)"
-
- #: fortran/check.c:3698 fortran/check.c:3838
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "'source' argument of 'shape' intrinsic at %L must not be an assumed size array"
- msgid "'%s' argument of '%s' intrinsic at %L shall not be an assumed-size array"
- msgstr "‘shape’内建函数的‘source’实å‚在%L处ä¸èƒ½æ˜¯å‡å®šå¤§å°çš„数组"
-
-@@ -42474,7 +41197,6 @@
-
- #: fortran/check.c:3906
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Argument dim at %L must be scalar"
- msgid "Argument FPTR at %L to C_F_POINTER must be a pointer"
- msgstr "%L 实å‚维数必须是标é‡"
-
-@@ -42540,7 +41262,6 @@
-
- #: fortran/check.c:4036
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Function result '%s' at %L has no IMPLICIT type"
- msgid "Function result '%s' at %L is invalid as X argument to C_FUNLOC"
- msgstr "%2$L处的函数返回值‘%1$s’处没有éšå¼ç±»åž‹"
-
-@@ -42551,7 +41272,6 @@
-
- #: fortran/check.c:4050
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "User operator procedure '%s' at %L must be a FUNCTION"
- msgid "Noninteroperable procedure at %L to C_FUNLOC"
- msgstr "%2$L处的用户è¿ç®—符‘%1$s’必须是一个 FUNCTION"
-
-@@ -42567,7 +41287,6 @@
-
- #: fortran/check.c:4081
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Component at %C must have the POINTER attribute"
- msgid "Argument X at %L to C_LOC shall have either the POINTER or the TARGET attribute"
- msgstr "%C处的组件必须有 POINTER 属性"
-
-@@ -42730,7 +41449,6 @@
-
- #: fortran/data.c:327 fortran/data.c:493
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Extension: re-initialization of '%s' at %L"
- msgid "re-initialization of '%s' at %L"
- msgstr "扩展:‘%s’é‡åˆå§‹åŒ–于 %L"
-
-@@ -42741,7 +41459,6 @@
-
- #: fortran/decl.c:271
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Extension: initialization of common block variable '%s' in DATA statement at %C"
- msgid "initialization of common block variable '%s' in DATA statement at %C"
- msgstr "扩展:DATA 语å¥ä¸­å¯¹å…¬å…±å—å˜é‡â€˜%s’在%C处åˆå§‹åŒ–"
-
-@@ -42787,7 +41504,6 @@
-
- #: fortran/decl.c:752
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Obsolescent feature: Old-style character length at %C"
- msgid "Old-style character length at %C"
- msgstr "已过时:%C处的旧å¼å­—符长度"
-
-@@ -42823,13 +41539,11 @@
-
- #: fortran/decl.c:1032
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Variable '%s' at %L is a parameter to the BIND(C) procedure '%s' but may not be C interoperable"
- msgid "Variable '%s' at %L is a dummy argument to the BIND(C) procedure '%s' but is not C interoperable because it is polymorphic"
- msgstr "%2$L处å˜é‡â€˜%1$s’是 BIND(C) 过程‘%3$s’的å‚数,但它ä¸èƒ½ä¸Ž C 互æ“作"
-
- #: fortran/decl.c:1038
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Variable '%s' at %L is a parameter to the BIND(C) procedure '%s' but may not be C interoperable"
- msgid "Variable '%s' at %L is a dummy argument of the BIND(C) procedure '%s' but may not be C interoperable"
- msgstr "%2$L处å˜é‡â€˜%1$s’是 BIND(C) 过程‘%3$s’的å‚数,但它ä¸èƒ½ä¸Ž C 互æ“作"
-
-@@ -42840,37 +41554,31 @@
-
- #: fortran/decl.c:1066
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Variable '%s' at %L cannot have the ALLOCATABLE attribute because procedure '%s' is BIND(C)"
- msgid "Variable '%s' at %L with ALLOCATABLE attribute in procedure '%s' with BIND(C)"
- msgstr "%2$L处å˜é‡â€˜%1$s’ä¸èƒ½æœ‰ ALLOCATABLE 属性,因为过程‘%3$s’是 BIND(C)"
-
- #: fortran/decl.c:1074
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Variable '%s' at %L cannot have the POINTER attribute because procedure '%s' is BIND(C)"
- msgid "Variable '%s' at %L with POINTER attribute in procedure '%s' with BIND(C)"
- msgstr "%2$L处å˜é‡â€˜%1$s’ä¸èƒ½æœ‰ POINTER 属性,因为过程‘%3$s’是 BIND(C)"
-
- #: fortran/decl.c:1083
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Variable '%s' at %L cannot have the ALLOCATABLE attribute because procedure '%s' is BIND(C)"
- msgid "Scalar variable '%s' at %L with POINTER or ALLOCATABLE in procedure '%s' with BIND(C) is not yet supported"
- msgstr "%2$L处å˜é‡â€˜%1$s’ä¸èƒ½æœ‰ ALLOCATABLE 属性,因为过程‘%3$s’是 BIND(C)"
-
- #: fortran/decl.c:1092
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Variable '%s' at %L cannot have the OPTIONAL attribute because procedure '%s' is BIND(C)"
- msgid "Variable '%s' at %L cannot have both the OPTIONAL and the VALUE attribute because procedure '%s' is BIND(C)"
- msgstr "%2$L处å˜é‡â€˜%1$s’ä¸èƒ½æœ‰ OPTIONAL 属性,因为过程‘%3$s’是 BIND(C)"
-
- #: fortran/decl.c:1099
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Variable '%s' at %L cannot have the OPTIONAL attribute because procedure '%s' is BIND(C)"
- msgid "Variable '%s' at %L with OPTIONAL attribute in procedure '%s' which is BIND(C)"
- msgstr "%2$L处å˜é‡â€˜%1$s’ä¸èƒ½æœ‰ OPTIONAL 属性,因为过程‘%3$s’是 BIND(C)"
-
- #: fortran/decl.c:1110
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Assumed-shape array '%s' at %L cannot be an argument to the procedure '%s' at %L because the procedure is BIND(C)"
- msgid "Assumed-shape array '%s' at %L as dummy argument to the BIND(C) procedure '%s' at %L"
- msgstr "%2$L处å‡å®šå¤–形数组‘%1$s’ä¸èƒ½æ˜¯%4$L处过程‘%3$s’的å‚数,因为该过程是 BIND(C)"
-
-@@ -42946,7 +41654,6 @@
-
- #: fortran/decl.c:1724
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "NULL() initialization at %C is ambiguous"
- msgid "NULL() initialization at %C may not have MOLD"
- msgstr "%C处的 NULL() åˆå§‹åŒ–有歧义"
-
-@@ -42987,7 +41694,6 @@
-
- #: fortran/decl.c:2003
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Extension: Old-style initialization at %C"
- msgid "Old-style initialization at %C"
- msgstr "扩展:%C处旧å¼çš„åˆå§‹åŒ–"
-
-@@ -43068,7 +41774,6 @@
-
- #: fortran/decl.c:2597
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Extension: BYTE type at %C"
- msgid "BYTE type at %C"
- msgstr "扩展:%C处的 BYTE 类型"
-
-@@ -43079,7 +41784,6 @@
-
- #: fortran/decl.c:2624
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "By-value argument at %L is not allowed in this context"
- msgid "Assumed type at %C is not allowed for components"
- msgstr "%L处上下文中ä¸å…许使用按值传递的实å‚"
-
-@@ -43101,7 +41805,6 @@
-
- #: fortran/decl.c:2780
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: CLASS statement at %C"
- msgid "CLASS statement at %C"
- msgstr "Fortran 2003:%C处的 CLASS 语å¥"
-
-@@ -43138,7 +41841,6 @@
-
- #: fortran/decl.c:3171
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Empty IMPLICIT statement at %C"
- msgid "IMPORT statement at %C"
- msgstr "%C处 IMPLICIT 语å¥ä¸ºç©º"
-
-@@ -43179,7 +41881,6 @@
-
- #: fortran/decl.c:3667
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: ALLOCATABLE attribute at %C in a TYPE definition"
- msgid "ALLOCATABLE attribute at %C in a TYPE definition"
- msgstr "Fortran 2003:%C处的 ALLOCATABLE 属性出现在 TYPE 定义中"
-
-@@ -43190,7 +41891,6 @@
-
- #: fortran/decl.c:3694
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: Attribute %s at %L in a TYPE definition"
- msgid "Attribute %s at %L in a TYPE definition"
- msgstr "Fortran 2003:属性 %s 在%L处出现在 TYPE 定义中"
-
-@@ -43201,7 +41901,6 @@
-
- #: fortran/decl.c:3718
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: ASYNCHRONOUS attribute at %C"
- msgid "ASYNCHRONOUS attribute at %C"
- msgstr "Fortran 2003:%C处的 ASYNCHRONOUS 属性"
-
-@@ -43217,19 +41916,16 @@
-
- #: fortran/decl.c:3780
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: PROTECTED attribute at %C"
- msgid "PROTECTED attribute at %C"
- msgstr "Fortran 2003:%C处的 PROTECT 属性"
-
- #: fortran/decl.c:3809
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: VALUE attribute at %C"
- msgid "VALUE attribute at %C"
- msgstr "Fortran 2003:%C处的 VALUE 属性"
-
- #: fortran/decl.c:3816
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: VOLATILE attribute at %C"
- msgid "VOLATILE attribute at %C"
- msgstr "Fortran 2003:%C处的 VOLATILE 属性"
-
-@@ -43302,7 +41998,6 @@
-
- #: fortran/decl.c:4212
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Empty IMPLICIT statement at %C"
- msgid "BIND(C) statement at %C"
- msgstr "%C处 IMPLICIT 语å¥ä¸ºç©º"
-
-@@ -43328,7 +42023,6 @@
-
- #: fortran/decl.c:4475 fortran/primary.c:1717
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Expected alternate return label at %C"
- msgid "Alternate-return argument at %C"
- msgstr "%C处需è¦æ›¿ä»£çš„返回标å·"
-
-@@ -43359,7 +42053,6 @@
-
- #: fortran/decl.c:4687 fortran/decl.c:5753
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2008: BIND(C) attribute at %L may not be specified for an internal procedure"
- msgid "BIND(C) attribute at %L may not be specified for an internal procedure"
- msgstr "Fortran 2008:%L处的 BIND(C)属性对于内部过程ä¸å¯ä»¥æŒ‡å®š"
-
-@@ -43400,7 +42093,6 @@
-
- #: fortran/decl.c:5031
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: Procedure pointer component at %C"
- msgid "Procedure pointer component at %C"
- msgstr "Fortran 2003:%C处的过程指针组件"
-
-@@ -43416,13 +42108,11 @@
-
- #: fortran/decl.c:5130 fortran/decl.c:7325
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Syntax error in PROCEDURE statement at %C"
- msgid "double colon in MODULE PROCEDURE statement at %L"
- msgstr "%C处 PROCEDURE 语å¥è¯­æ³•é”™è¯¯"
-
- #: fortran/decl.c:5199
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: PROCEDURE statement at %C"
- msgid "PROCEDURE statement at %C"
- msgstr "Fortran 2003:%C处的 PROCEDURE 语å¥"
-
-@@ -43440,7 +42130,6 @@
-
- #: fortran/decl.c:5440
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Empty IMPLICIT statement at %C"
- msgid "ENTRY statement at %C"
- msgstr "%C处 IMPLICIT 语å¥ä¸ºç©º"
-
-@@ -43562,13 +42251,11 @@
-
- #: fortran/decl.c:6144
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Expecting %s statement at %C"
- msgid "Expecting %s statement at %L"
- msgstr "éœ€è¦ %s 语å¥ï¼ŒäºŽ %C"
-
- #: fortran/decl.c:6162
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Expected block name of '%s' in %s statement at %C"
- msgid "Expected block name of '%s' in %s statement at %L"
- msgstr "需è¦å—å‘%s’在‘%s’表达å¼ä¸­ï¼ŒäºŽ %C"
-
-@@ -43674,7 +42361,6 @@
-
- #: fortran/decl.c:6834
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: PROTECTED statement at %C"
- msgid "PROTECTED statement at %C"
- msgstr "Fortran 2003:%C处的 PROTECTED 语å¥"
-
-@@ -43740,7 +42426,6 @@
-
- #: fortran/decl.c:7128
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: VALUE statement at %C"
- msgid "VALUE statement at %C"
- msgstr "Fortran 2003:%C处的 VALUE 语å¥"
-
-@@ -43751,7 +42436,6 @@
-
- #: fortran/decl.c:7177
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: VOLATILE statement at %C"
- msgid "VOLATILE statement at %C"
- msgstr "Fortran 2003:%C处的 VOLATILE 语å¥"
-
-@@ -43767,7 +42451,6 @@
-
- #: fortran/decl.c:7236
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: ASYNCHRONOUS statement at %C"
- msgid "ASYNCHRONOUS statement at %C"
- msgstr "Fortran 2003:%C处的 ASYNCHRONOUS 语å¥"
-
-@@ -43793,7 +42476,6 @@
-
- #: fortran/decl.c:7416
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Symbol '%s' at %C has already been host associated"
- msgid "Symbol '%s' at %C has not been previously defined"
- msgstr "%2$C处符å·â€˜%1$s’已ç»ä¸Žä¸»æœºç›¸å…³è”"
-
-@@ -43824,7 +42506,6 @@
-
- #: fortran/decl.c:7492
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "ABSTRACT type '%s' used at %L"
- msgid "ABSTRACT type at %C"
- msgstr "%2$L处使用了 ABSTRACT 类型‘%1$s’"
-
-@@ -43855,7 +42536,6 @@
-
- #: fortran/decl.c:7722
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: ENUM and ENUMERATOR at %C"
- msgid "ENUM and ENUMERATOR at %C"
- msgstr "Fortran 2003:%C处的 ENUM 和 ENUMERATOR"
-
-@@ -44171,7 +42851,6 @@
-
- #: fortran/expr.c:2414
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Extension: Evaluation of nonstandard initialization expression at %L"
- msgid "Evaluation of nonstandard initialization expression at %L"
- msgstr "扩展:%L处求éžæ ‡é‡åˆå§‹åŒ–表达å¼çš„值"
-
-@@ -44302,19 +42981,16 @@
-
- #: fortran/expr.c:3161
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "POINTER valued function appears on right-hand side of assignment at %L"
- msgid "POINTER-valued function appears on right-hand side of assignment at %L"
- msgstr "%L处赋值å³æ‰‹è¾¹å‡ºçŽ°å€¼ä¸º POINTER 的函数"
-
- #: fortran/expr.c:3171
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Extension: BOZ literal at %L used to initialize non-integer variable '%s'"
- msgid "BOZ literal at %L used to initialize non-integer variable '%s'"
- msgstr "扩展:%L处 BOZ å­—é¢å€¼è¢«ç”¨æ¥åˆå§‹åŒ–éžæ•´æ•°å˜é‡â€˜%s’"
-
- #: fortran/expr.c:3176 fortran/resolve.c:9062
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Extension: BOZ literal at %L outside a DATA statement and outside INT/REAL/DBLE/CMPLX"
- msgid "BOZ literal at %L outside a DATA statement and outside INT/REAL/DBLE/CMPLX"
- msgstr "扩展:在 %L处的 BOZ å­—é¢å€¼åœ¨ä¸€ä¸ª DATA 语å¥ä¹‹å¤–并且也在 INT/REAL/DBLE/CMPLX 之外"
-
-@@ -44375,7 +43051,6 @@
-
- #: fortran/expr.c:3343
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: Bounds specification for '%s' in pointer assignment at %L"
- msgid "Bounds specification for '%s' in pointer assignment at %L"
- msgstr "Fortran 2003:%2$L处指针赋值语å¥ä¸­â€˜%1$s’的边界规格"
-
-@@ -44406,7 +43081,6 @@
-
- #: fortran/expr.c:3445
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Statement function '%s' is invalid in procedure pointer assignment at %L"
- msgid "Function result '%s' is invalid as proc-target in procedure pointer assignment at %L"
- msgstr "语å¥å‡½æ•°â€˜%s’在%L处的过程指针赋值中是éžæ³•çš„"
-
-@@ -44427,13 +43101,11 @@
-
- #: fortran/expr.c:3477
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Internal procedure '%s' is invalid in procedure pointer assignment at %L"
- msgid "Intrinsic '%s' at %L is invalid in procedure pointer assignment"
- msgstr "内部过程‘%s’在%L处的过程指针赋值中是éžæ³•çš„"
-
- #: fortran/expr.c:3485
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Internal procedure '%s' is invalid in procedure pointer assignment at %L"
- msgid "Nonintrinsic elemental procedure '%s' is invalid in procedure pointer assignment at %L"
- msgstr "内部过程‘%s’在%L处的过程指针赋值中是éžæ³•çš„"
-
-@@ -44444,7 +43116,6 @@
-
- #: fortran/expr.c:3564 fortran/expr.c:3571 fortran/resolve.c:2430
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "NOPASS or explicit interface required at %C"
- msgid "Explicit interface required for '%s' at %L: %s"
- msgstr "%Cå¤„éœ€è¦ NOPASS 或显å¼æŽ¥å£"
-
-@@ -44632,31 +43303,26 @@
-
- #: fortran/frontend-passes.c:562 fortran/frontend-passes.c:565
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Return value of function '%s' at %L not set"
- msgid "Removing call to function '%s' at %L"
- msgstr "%2$L处函数‘%1$s’的返回值没有设置"
-
- #: fortran/frontend-passes.c:1668
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Variable '%s' at %C cannot be redefined inside loop beginning at %L"
- msgid "Variable '%s' at %L set to undefined value inside loop beginning at %L as INTENT(OUT) argument to subroutine '%s'"
- msgstr "å˜é‡â€˜%s’(ä½äºŽ %C)ä¸èƒ½åœ¨ä»Ž %L 开始的循环的内部é‡å®šä¹‰"
-
- #: fortran/frontend-passes.c:1674
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Variable '%s' at %C cannot be redefined inside loop beginning at %L"
- msgid "Variable '%s' at %L not definable inside loop beginning at %L as INTENT(INOUT) argument to subroutine '%s'"
- msgstr "å˜é‡â€˜%s’(ä½äºŽ %C)ä¸èƒ½åœ¨ä»Ž %L 开始的循环的内部é‡å®šä¹‰"
-
- #: fortran/frontend-passes.c:1738
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Variable '%s' at %C cannot be redefined inside loop beginning at %L"
- msgid "Variable '%s' at %L set to undefined value inside loop beginning at %L as INTENT(OUT) argument to function '%s'"
- msgstr "å˜é‡â€˜%s’(ä½äºŽ %C)ä¸èƒ½åœ¨ä»Ž %L 开始的循环的内部é‡å®šä¹‰"
-
- #: fortran/frontend-passes.c:1744
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Variable '%s' at %C cannot be redefined inside loop beginning at %L"
- msgid "Variable '%s' at %L not definable inside loop beginning at %L as INTENT(INOUT) argument to function '%s'"
- msgstr "å˜é‡â€˜%s’(ä½äºŽ %C)ä¸èƒ½åœ¨ä»Ž %L 开始的循环的内部é‡å®šä¹‰"
-
-@@ -44687,7 +43353,6 @@
-
- #: fortran/interface.c:254
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: ABSTRACT INTERFACE at %C"
- msgid "ABSTRACT INTERFACE at %C"
- msgstr "Fortran 2003:%C处的 ABSTRACT INTERFACE"
-
-@@ -44803,7 +43468,6 @@
-
- #: fortran/interface.c:1590
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Cray pointee '%s' in %s clause at %L"
- msgid "Internal procedure '%s' in %s at %L"
- msgstr "%3$L处 %2$s 分å¥ä¸­ çš„Cray 指针目标‘%1$s’"
-
-@@ -44824,7 +43488,6 @@
-
- #: fortran/interface.c:1893
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Assumed shape array at %L must be a dummy argument"
- msgid "The assumed-rank array at %L requires that the dummy argument '%s' has assumed-rank"
- msgstr "%L处å‡å®šå¤–形的数组必须是一个虚å‚"
-
-@@ -44865,7 +43528,6 @@
-
- #: fortran/interface.c:2007
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Assumed-shape actual argument at %L is incompatible with the non-assumed-shape dummy argument '%s' due to VOLATILE attribute"
- msgid "Assumed-type actual argument at %L requires that dummy argument '%s' is of assumed type"
- msgstr "%L处å‡å®šå¤–形的实å‚由于 VOLATILE 属性而与éžå‡å®šå¤–形虚å‚‘%s’ä¸å…¼å®¹"
-
-@@ -45051,7 +43713,6 @@
-
- #: fortran/interface.c:2843
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Actual argument for '%s' must be a pointer at %L"
- msgid "Actual CLASS array argument for '%s' must be a full array at %L"
- msgstr "‘%s’的实å‚在%L处必须是一个指针"
-
-@@ -45142,7 +43803,6 @@
-
- #: fortran/interface.c:3298
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Symbol '%s' at %L already has an explicit interface"
- msgid "Assumed-type argument %s at %L requires an explicit interface"
- msgstr "符å·â€˜%s’在%L处已ç»æœ‰äº†æ˜¾å¼æŽ¥å£"
-
-@@ -45158,7 +43818,6 @@
-
- #: fortran/interface.c:3328
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Keyword argument requires explicit interface for procedure '%s' at %L"
- msgid "Assumed-rank argument requires an explicit interface at %L"
- msgstr "%2$L处过程‘%1$s’的关键字å‚æ•°è¦æ±‚显å¼çš„接å£"
-
-@@ -45179,7 +43838,6 @@
-
- #: fortran/interface.c:3902
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Entity '%s' at %C is already present in the interface"
- msgid "Entity '%s' at %L is already present in the interface"
- msgstr "%2$C处实体‘%1$s’已ç»å‡ºçŽ°åœ¨æŽ¥å£ä¸­"
-
-@@ -45225,7 +43883,6 @@
-
- #: fortran/interface.c:4184
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Interface mismatch in dummy procedure '%s' at %L: %s"
- msgid "Result mismatch for the overriding procedure '%s' at %L: %s"
- msgstr "哑过程‘%s’接å£åœ¨%L处ä¸åŒ¹é…:%s"
-
-@@ -45241,7 +43898,6 @@
-
- #: fortran/interface.c:4236
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Interface mismatch in dummy procedure '%s' at %L: %s"
- msgid "Argument mismatch for the overriding procedure '%s' at %L: %s"
- msgstr "哑过程‘%s’接å£åœ¨%L处ä¸åŒ¹é…:%s"
-
-@@ -45267,31 +43923,26 @@
-
- #: fortran/intrinsic.c:196
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "NULL pointer at %L is not permitted as actual argument of '%s' intrinsic function"
- msgid "Variable with NO_ARG_CHECK attribute at %L is only permitted as argument to the intrinsic functions C_LOC and PRESENT"
- msgstr "%L çš„ NULL 指针ä¸èƒ½ç”¨ä½œå†…建函数‘%s’的实å‚"
-
- #: fortran/intrinsic.c:210
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "NULL pointer at %L is not permitted as actual argument of '%s' intrinsic function"
- msgid "Assumed-type argument at %L is not permitted as actual argument to the intrinsic %s"
- msgstr "%L çš„ NULL 指针ä¸èƒ½ç”¨ä½œå†…建函数‘%s’的实å‚"
-
- #: fortran/intrinsic.c:217
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "NULL pointer at %L is not permitted as actual argument of '%s' intrinsic function"
- msgid "Assumed-type argument at %L is only permitted as first actual argument to the intrinsic %s"
- msgstr "%L çš„ NULL 指针ä¸èƒ½ç”¨ä½œå†…建函数‘%s’的实å‚"
-
- #: fortran/intrinsic.c:224
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "NULL pointer at %L is not permitted as actual argument of '%s' intrinsic function"
- msgid "Assumed-rank argument at %L is only permitted as actual argument to intrinsic inquiry functions"
- msgstr "%L çš„ NULL 指针ä¸èƒ½ç”¨ä½œå†…建函数‘%s’的实å‚"
-
- #: fortran/intrinsic.c:231
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "NULL pointer at %L is not permitted as actual argument of '%s' intrinsic function"
- msgid "Assumed-rank argument at %L is only permitted as first actual argument to the intrinsic inquiry function %s"
- msgstr "%L çš„ NULL 指针ä¸èƒ½ç”¨ä½œå†…建函数‘%s’的实å‚"
-
-@@ -45342,19 +43993,16 @@
-
- #: fortran/intrinsic.c:4255
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: Function '%s' as initialization expression at %L"
- msgid "Function '%s' as initialization expression at %L"
- msgstr "Fortran 2003:函数‘%s’在%L处用作åˆå§‹åŒ–表达å¼"
-
- #: fortran/intrinsic.c:4331
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: Elemental function as initialization expression with non-integer/non-character arguments at %L"
- msgid "Elemental function as initialization expression with non-integer/non-character arguments at %L"
- msgstr "Fortran 2003:作为åˆå§‹è¡¨è¾¾å¼çš„基本函数在%L处使用了éžæ•´æ•°æˆ–éžå­—符的å‚æ•°"
-
- #: fortran/intrinsic.c:4402
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Subroutine call to intrinsic '%s' at %L is not PURE"
- msgid "Subroutine call to intrinsic '%s' in DO CONCURRENT block at %L is not PURE"
- msgstr "在%2$L处调用内建‘%1$s’的å­ä¾‹ç¨‹ä¸æ˜¯ PURE"
-
-@@ -45395,25 +44043,21 @@
-
- #: fortran/io.c:455
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: DP format specifier not allowed at %C"
- msgid "DP format specifier not allowed at %C"
- msgstr "Fortran 2003:ä¸å…许在%C处使用 DP æ ¼å¼é™å®šç¬¦"
-
- #: fortran/io.c:462
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: DC format specifier not allowed at %C"
- msgid "DC format specifier not allowed at %C"
- msgstr "Fortran 2003:ä¸å…许在%C处使用 DC æ ¼å¼é™å®šç¬¦"
-
- #: fortran/io.c:651
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Extension: X descriptor requires leading space count at %L"
- msgid "X descriptor requires leading space count at %L"
- msgstr "扩展:X æ述符在%L需è¦å‰å¯¼ç©ºæ ¼æ•°é‡"
-
- #: fortran/io.c:680
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Extension: $ descriptor at %L"
- msgid "$ descriptor at %L"
- msgstr "扩展:%L处的 $ æ述符"
-
-@@ -45429,7 +44073,6 @@
-
- #: fortran/io.c:826
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2008: 'G0' in format at %L"
- msgid "'G0' in format at %L"
- msgstr "Fortran 2008:%L处格å¼ä¸­çš„‘G0’"
-
-@@ -45455,7 +44098,6 @@
-
- #: fortran/io.c:1059 fortran/io.c:1121
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Extension: Missing comma at %L"
- msgid "Missing comma at %L"
- msgstr "扩展:%L处缺少逗å·"
-
-@@ -45511,13 +44153,11 @@
-
- #: fortran/io.c:1399
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "FORMAT tag at %L must be of type CHARACTER or INTEGER"
- msgid "FORMAT tag at %L must be of type default-kind CHARACTER or of INTEGER"
- msgstr "%L处 FORMAT 标记必须具有类型 CHARACTER 或 INTEGER"
-
- #: fortran/io.c:1405
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Deleted feature: ASSIGNED variable in FORMAT tag at %L"
- msgid "ASSIGNED variable in FORMAT tag at %L"
- msgstr "已删除的特性:%L处 FORMAT 标记中有 ASSIGNED å˜é‡"
-
-@@ -45533,7 +44173,6 @@
-
- #: fortran/io.c:1429
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Extension: Non-character in FORMAT tag at %L"
- msgid "Non-character in FORMAT tag at %L"
- msgstr "扩展:%L处的 FORMAT 标记中有éžå­—符"
-
-@@ -45559,7 +44198,6 @@
-
- #: fortran/io.c:1482
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Concat operator at %L must concatenate strings of the same kind"
- msgid "%s tag at %L must be a character string of default kind"
- msgstr "%L处的毗连è¿ç®—符必须毗连åŒä¸€ç§åˆ«çš„字符串"
-
-@@ -45570,7 +44208,6 @@
-
- #: fortran/io.c:1495
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: IOMSG tag at %L"
- msgid "IOMSG tag at %L"
- msgstr "Fortran 2003:%L处的 IOMSG 标记"
-
-@@ -45586,13 +44223,11 @@
-
- #: fortran/io.c:1516
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "UNIT not specified at %L"
- msgid "NEWUNIT specifier at %L"
- msgstr "%L没有指定 UNIT"
-
- #: fortran/io.c:1534
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Extension: CONVERT tag at %L"
- msgid "CONVERT tag at %L"
- msgstr "扩展:%L处的 CONVERT 标记"
-
-@@ -45603,7 +44238,6 @@
-
- #: fortran/io.c:1727 fortran/io.c:1754
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "%s specifier in %s statement at %C has invalid value '%s'"
- msgid "%s specifier in %s statement at %C has value '%s'"
- msgstr "为%3$C处 %2$s 语å¥ä¸­ %1$s 指定了éžæ³•çš„值‘%4$s’"
-
-@@ -45639,37 +44273,31 @@
-
- #: fortran/io.c:1889
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: ASYNCHRONOUS= at %C not allowed in Fortran 95"
- msgid "ASYNCHRONOUS= at %C not allowed in Fortran 95"
- msgstr "Fortran 2003:%C处的 ASYNCHRONOUS= ä¸å…许用在 Fortran 95 中"
-
- #: fortran/io.c:1907 fortran/io.c:3350
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: BLANK= at %C not allowed in Fortran 95"
- msgid "BLANK= at %C not allowed in Fortran 95"
- msgstr "Fortran 2003:%C处的 BLANK= ä¸å…许用在 Fortran 95 中"
-
- #: fortran/io.c:1925 fortran/io.c:3329
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: DECIMAL= at %C not allowed in Fortran 95"
- msgid "DECIMAL= at %C not allowed in Fortran 95"
- msgstr "Fortran 2003:%C处的 DECIMAL= ä¸å…许用在 Fortran 95 中"
-
- #: fortran/io.c:1957
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: ENCODING= at %C not allowed in Fortran 95"
- msgid "ENCODING= at %C not allowed in Fortran 95"
- msgstr "Fortran 2003:%C处的 ENCODING= ä¸å…许用在 Fortran 95 中"
-
- #: fortran/io.c:2008 fortran/io.c:3392
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: ROUND= at %C not allowed in Fortran 95"
- msgid "ROUND= at %C not allowed in Fortran 95"
- msgstr "Fortran 2003:%C处的 ROUND= ä¸å…许用在 Fortran 95 中"
-
- #: fortran/io.c:2028
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: SIGN= at %C not allowed in Fortran 95"
- msgid "SIGN= at %C not allowed in Fortran 95"
- msgstr "Fortran 2003:%C处的 SIGN= ä¸å…许用在 Fortran 95 中"
-
-@@ -45680,7 +44308,6 @@
-
- #: fortran/io.c:2301
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "ASSIGNED GOTO statement at %L requires an INTEGER variable"
- msgid "CLOSE statement at %L requires a UNIT number"
- msgstr "ASSIGNED GOTO 语å¥åœ¨%L处需è¦ä¸€ä¸ª INTEGER å˜é‡"
-
-@@ -45701,7 +44328,6 @@
-
- #: fortran/io.c:2474
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: FLUSH statement at %C"
- msgid "FLUSH statement at %C"
- msgstr "Fortran 2003:%C处的 FLUSH 语å¥"
-
-@@ -45767,7 +44393,6 @@
-
- #: fortran/io.c:2904
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Extension: Comma before i/o item list at %L"
- msgid "Comma before i/o item list at %L"
- msgstr "扩展:%L处 i/o 项目列表å‰çš„逗å·"
-
-@@ -45814,7 +44439,6 @@
-
- #: fortran/io.c:3246
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: Internal file at %L with namelist"
- msgid "Internal file at %L with namelist"
- msgstr "Fortran 2003:%L处内部文件有å字列表"
-
-@@ -45825,13 +44449,11 @@
-
- #: fortran/io.c:3371
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: PAD= at %C not allowed in Fortran 95"
- msgid "PAD= at %C not allowed in Fortran 95"
- msgstr "Fortran 2003:%C处的 PAD= ä¸å…许用在 Fortran 95 中"
-
- #: fortran/io.c:3437
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: DELIM= at %C not allowed in Fortran 95"
- msgid "DELIM= at %C not allowed in Fortran 95"
- msgstr "Fortran 2003:%C处的 DELIM= ä¸å…许用在 Fortran 95 中"
-
-@@ -45877,7 +44499,6 @@
-
- #: fortran/io.c:4188
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: WAIT at %C not allowed in Fortran 95"
- msgid "WAIT at %C not allowed in Fortran 95"
- msgstr "Fortran 2003:%C处的 WAIT ä¸å…许用在 Fortran 95 中"
-
-@@ -45933,7 +44554,6 @@
-
- #: fortran/match.c:560
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Invalid character '$' at %C. Use -fdollar-ok to allow it as an extension"
- msgid "Invalid character '$' at %L. Use -fdollar-ok to allow it as an extension"
- msgstr "%C处无效的字符‘$’。使用 -fdollar-ok 以å…许它作为一个扩展"
-
-@@ -45974,7 +44594,6 @@
-
- #: fortran/match.c:1395 fortran/match.c:1475
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Obsolescent feature: Arithmetic IF statement at %C"
- msgid "Arithmetic IF statement at %C"
- msgstr "已过时的特性:%C处的算术 IF 语å¥"
-
-@@ -46186,7 +44805,6 @@
-
- #: fortran/match.c:2766
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Unexpected CASE statement at %C"
- msgid "PAUSE statement at %C"
- msgstr "%C处éžé¢„期的 CASE 语å¥"
-
-@@ -46224,19 +44842,16 @@
-
- #: fortran/match.c:2907
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Redundant SOURCE tag found at %L "
- msgid "Redundant ACQUIRED_LOCK tag found at %L "
- msgstr "%L有多余的 SOURCE 标记"
-
- #: fortran/match.c:2972
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Empty IMPLICIT statement at %C"
- msgid "LOCK statement at %C"
- msgstr "%C处 IMPLICIT 语å¥ä¸ºç©º"
-
- #: fortran/match.c:2982
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Empty IMPLICIT statement at %C"
- msgid "UNLOCK statement at %C"
- msgstr "%C处 IMPLICIT 语å¥ä¸ºç©º"
-
-@@ -46262,13 +44877,11 @@
-
- #: fortran/match.c:3211
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Deleted feature: ASSIGN statement at %C"
- msgid "ASSIGN statement at %C"
- msgstr "已删除的特性:%C处的 ASSIGN 语å¥"
-
- #: fortran/match.c:3255
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Deleted feature: Assigned GOTO statement at %C"
- msgid "Assigned GOTO statement at %C"
- msgstr "已删除的特性:%C处赋值 GOTO 语å¥"
-
-@@ -46279,7 +44892,6 @@
-
- #: fortran/match.c:3360
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Obsolescent feature: Computed GOTO at %C"
- msgid "Computed GOTO at %C"
- msgstr "已过时的特性:%C处的计算转移 GOTO 语å¥"
-
-@@ -46290,7 +44902,6 @@
-
- #: fortran/match.c:3442
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: typespec in ALLOCATE at %L"
- msgid "typespec in ALLOCATE at %L"
- msgstr "Fortran 2003:%L处 ALLOCATE 中有 typespec"
-
-@@ -46331,13 +44942,11 @@
-
- #: fortran/match.c:3607
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: ERRMSG tag at %L"
- msgid "ERRMSG tag at %L"
- msgstr "Fortran 2003:%L处的 ERRMSG 标记"
-
- #: fortran/match.c:3630
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: SOURCE tag at %L"
- msgid "SOURCE tag at %L"
- msgstr "Fortran 2003:%L处的 SOURCE 标记"
-
-@@ -46353,7 +44962,6 @@
-
- #: fortran/match.c:3649
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "SOURCE tag at %L requires only a single entity in the allocation-list"
- msgid "SOURCE tag at %L with more than a single allocate object"
- msgstr "%L处的 SOURCE 标记在分é…列表中åªéœ€è¦ä¸€ä¸ªå•ç‹¬çš„实体"
-
-@@ -46409,13 +45017,11 @@
-
- #: fortran/match.c:3906
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Allocate-object at %C is not a nonprocedure pointer or an allocatable variable"
- msgid "Allocate-object at %C is not a nonprocedure pointer nor an allocatable variable"
- msgstr "%C处的分é…对象ä¸æ˜¯ä¸€ä¸ªéžè¿‡ç¨‹æŒ‡é’ˆæˆ–å¯åˆ†é…çš„å˜é‡"
-
- #: fortran/match.c:3943
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: ERRMSG at %L"
- msgid "ERRMSG at %L"
- msgstr "Fortran 2003:%L处的 ERRMSG"
-
-@@ -46436,7 +45042,6 @@
-
- #: fortran/match.c:4046
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Extension: RETURN statement in main program at %C"
- msgid "RETURN statement in main program at %C"
- msgstr "扩展:%C处 RETURN 语å¥å‡ºçŽ°åœ¨ä¸»ç¨‹åºä¸­"
-
-@@ -46545,7 +45150,6 @@
-
- #: fortran/match.c:4941
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Statement function at %L is recursive"
- msgid "Statement function at %C"
- msgstr "%L处的语å¥å‡½æ•°æ˜¯é€’å½’çš„"
-
-@@ -46561,7 +45165,6 @@
-
- #: fortran/match.c:5339
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Syntax error in PROTECTED statement at %C"
- msgid "parse error in SELECT TYPE statement at %C"
- msgstr "%C处 PROTECTED 语å¥è¯­æ³•é”™è¯¯"
-
-@@ -46638,7 +45241,6 @@
-
- #: fortran/module.c:527
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: module nature in USE statement at %C"
- msgid "module nature in USE statement at %C"
- msgstr "Fortran 2003:%C处的 USE 语å¥ä¸­æ¨¡å—本性"
-
-@@ -46654,7 +45256,6 @@
-
- #: fortran/module.c:562
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: \"USE :: module\" at %C"
- msgid "\"USE :: module\" at %C"
- msgstr "Fortran 2003:%C处的“USE :: moduleâ€"
-
-@@ -46665,7 +45266,6 @@
-
- #: fortran/module.c:629
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: Renaming operators in USE statements at %C"
- msgid "Renaming operators in USE statements at %C"
- msgstr "Fortran 2003:%C处的 USE 语å¥ä¸­æ›´åè¿ç®—符"
-
-@@ -46701,7 +45301,6 @@
-
- #: fortran/module.c:4494
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Name '%s' at %C is an ambiguous reference to '%s' from current program unit"
- msgid "'%s' of module '%s', imported at %C, is also the name of the current program unit"
- msgstr "%2$C处的å字‘%1$s’是从当å‰ç¨‹åºå•å…ƒå¯¹â€˜%3$s’有歧义的引用"
-
-@@ -46778,13 +45377,11 @@
-
- #: fortran/module.c:6307
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: ISO_FORTRAN_ENV intrinsic module at %C"
- msgid "ISO_FORTRAN_ENV intrinsic module at %C"
- msgstr "Fortran 2003:%C 处的 ISO_FORTRAN_ENV 内建模å—"
-
- #: fortran/module.c:6319
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: ISO_C_BINDING module at %C"
- msgid "ISO_C_BINDING module at %C"
- msgstr "Fortran 2003:%C处的 ISO_C_BINDING 模å—"
-
-@@ -46805,7 +45402,6 @@
-
- #: fortran/module.c:6368
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "File '%s' opened at %C is not a GFORTRAN module file"
- msgid "File '%s' opened at %C is not a GNU Fortran module file"
- msgstr "%2$C处打开的文件的‘%1$s’并éžä¸€ä¸ª GFORTRAN 模å—文件"
-
-@@ -46906,7 +45502,6 @@
-
- #: fortran/openmp.c:824
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "IF clause at %L requires a scalar LOGICAL expression"
- msgid "FINAL clause at %L requires a scalar LOGICAL expression"
- msgstr "%L处的 IF 分å¥éœ€è¦ä¸€ä¸ªæ ‡é‡ LOGICAL 表达å¼"
-
-@@ -47023,25 +45618,21 @@
-
- #: fortran/openmp.c:1189
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "!$OMP ATOMIC statement must set a scalar variable of intrinsic type at %L"
- msgid "!$OMP ATOMIC READ statement must read from a scalar variable of intrinsic type at %L"
- msgstr "%L处 !$OMP ATOMIC 语å¥å¿…须设定一个内建类型的标é‡å€¼"
-
- #: fortran/openmp.c:1194
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "expr in !$OMP ATOMIC assignment var = var op expr must be scalar and cannot reference var at %L"
- msgid "expr in !$OMP ATOMIC WRITE assignment var = expr must be scalar and cannot reference var at %L"
- msgstr "%L处 !$OMP ATOMIC 赋值“å˜é‡ = å˜é‡ è¿ç®—符 表达å¼â€ä¸­çš„“表达å¼â€å¿…须是标é‡å¹¶ä¸”ä¸èƒ½å¼•ç”¨â€œå˜é‡â€"
-
- #: fortran/openmp.c:1216 fortran/openmp.c:1486
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "!$OMP ATOMIC statement must set a scalar variable of intrinsic type at %L"
- msgid "!$OMP ATOMIC CAPTURE capture statement must read from a scalar variable of intrinsic type at %L"
- msgstr "%L处 !$OMP ATOMIC 语å¥å¿…须设定一个内建类型的标é‡å€¼"
-
- #: fortran/openmp.c:1231
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "!$OMP ATOMIC statement must set a scalar variable of intrinsic type at %L"
- msgid "!$OMP ATOMIC CAPTURE update statement must set a scalar variable of intrinsic type at %L"
- msgstr "%L处 !$OMP ATOMIC 语å¥å¿…须设定一个内建类型的标é‡å€¼"
-
-@@ -47052,7 +45643,6 @@
-
- #: fortran/openmp.c:1282
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "!$OMP ATOMIC assignment operator must be +, *, -, /, .AND., .OR., .EQV. or .NEQV. at %L"
- msgid "!$OMP ATOMIC assignment operator must be binary +, *, -, /, .AND., .OR., .EQV. or .NEQV. at %L"
- msgstr "%L处 !$OMP ATOMIC 赋值è¿ç®—符必须是 +ã€*ã€-ã€/ã€.AND.ã€.OR.ã€.EQV. 或 .NEQV."
-
-@@ -47103,7 +45693,6 @@
-
- #: fortran/openmp.c:1464
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "!$OMP ATOMIC statement must set a scalar variable of intrinsic type at %L"
- msgid "!$OMP ATOMIC CAPTURE capture statement must set a scalar variable of intrinsic type at %L"
- msgstr "%L处 !$OMP ATOMIC 语å¥å¿…须设定一个内建类型的标é‡å€¼"
-
-@@ -47199,7 +45788,6 @@
-
- #: fortran/options.c:564
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Argument to -ffpe-trap is not valid: %s"
- msgid "Argument to -ffpe-summary is not valid: %s"
- msgstr "-ffpe-trap çš„å‚数无效:%s"
-
-@@ -47340,25 +45928,21 @@
-
- #: fortran/parse.c:1987
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: Type-bound procedure at %C"
- msgid "Type-bound procedure at %C"
- msgstr "Fortran 2003:%C处的类型é™å®šè¿‡ç¨‹"
-
- #: fortran/parse.c:1995
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Junk after GENERIC binding at %C"
- msgid "GENERIC binding at %C"
- msgstr "%C 处的泛型绑定åŽæœ‰åžƒåœ¾å­—符"
-
- #: fortran/parse.c:2003
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: FINAL procedure declaration at %C"
- msgid "FINAL procedure declaration at %C"
- msgstr "Fortran 2003:%C处的的 FINAL 过程声明"
-
- #: fortran/parse.c:2015
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2008: Derived type definition at %C with empty CONTAINS section"
- msgid "Derived type definition at %C with empty CONTAINS section"
- msgstr "Fortran 2008:%C的派生类型定义有空的 CONTAINS 节"
-
-@@ -47394,7 +45978,6 @@
-
- #: fortran/parse.c:2119
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: Derived type definition at %C without components"
- msgid "Derived type definition at %C without components"
- msgstr "Fortran 2003:%C处的派生类型定义没有组件"
-
-@@ -47420,7 +46003,6 @@
-
- #: fortran/parse.c:2173
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: CONTAINS block in derived type definition at %C"
- msgid "CONTAINS block in derived type definition at %C"
- msgstr "Fortran 2003:%C处的派生类型定义中的 CONTAINS å—"
-
-@@ -47436,7 +46018,6 @@
-
- #: fortran/parse.c:2272
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Allocatable component of structure at %C must have a deferred shape"
- msgid "Allocatable component %s at %L of type LOCK_TYPE must have a codimension"
- msgstr "%C处å¯åˆ†é…的组件必须有延迟的外形"
-
-@@ -47487,7 +46068,6 @@
-
- #: fortran/parse.c:2653
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "%s statement is not allowed inside of BLOCK at %C"
- msgid "%s statement is not allowed inside of BLOCK DATA at %C"
- msgstr "%s 语å¥ä¸èƒ½ç”¨åœ¨%C处 BLOCK 内"
-
-@@ -47568,7 +46148,6 @@
-
- #: fortran/parse.c:3372
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2008: BLOCK construct at %C"
- msgid "BLOCK construct at %C"
- msgstr "Fortran 2008:%C处的 BLOCK 结构"
-
-@@ -47604,7 +46183,6 @@
-
- #: fortran/parse.c:3863
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "FORMAT statement at %L does not have a statement label"
- msgid "DATA statement at %C after the first executable statement"
- msgstr "%L处 FORMAT 语å¥æ²¡æœ‰è¯­å¥æ ‡å·"
-
-@@ -47620,7 +46198,6 @@
-
- #: fortran/parse.c:4135
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2008: CONTAINS statement without FUNCTION or SUBROUTINE statement at %C"
- msgid "CONTAINS statement without FUNCTION or SUBROUTINE statement at %C"
- msgstr "Fortran 2008:%C处 CONTAINS 语å¥æ²¡æœ‰ FUNCTION 或 SUBROUTINE 语å¥"
-
-@@ -47631,7 +46208,6 @@
-
- #: fortran/parse.c:4263
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Global name '%s' at %L is already being used as a %s at %L"
- msgid "Global binding name '%s' at %L is already being used as a %s at %L"
- msgstr "%2$L处的å字‘%1$s’已ç»åœ¨%4$L处被用作 %3$s"
-
-@@ -47680,7 +46256,6 @@
-
- #: fortran/primary.c:270
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Extension: Hollerith constant at %C"
- msgid "Hollerith constant at %C"
- msgstr "扩展:%C处的è·å‹’瑞斯常é‡"
-
-@@ -47701,7 +46276,6 @@
-
- #: fortran/primary.c:393
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Extension: Hexadecimal constant at %C uses non-standard syntax"
- msgid "Hexadecimal constant at %C uses non-standard syntax"
- msgstr "扩展:%C处的å六进制常é‡ä½¿ç”¨äº†éžæ ‡å‡†è¯­æ³•"
-
-@@ -47717,7 +46291,6 @@
-
- #: fortran/primary.c:431
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Extension: BOZ constant at %C uses non-standard postfix syntax"
- msgid "BOZ constant at %C uses non-standard postfix syntax"
- msgstr "扩展:%C处的 BOZ 常é‡ä½¿ç”¨äº†éžæ ‡å‡†çš„åŽåºè¯­æ³•ã€‚"
-
-@@ -47728,7 +46301,6 @@
-
- #: fortran/primary.c:467
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: BOZ used outside a DATA statement at %C"
- msgid "BOZ used outside a DATA statement at %C"
- msgstr "Fortran 2003:%C处的 BOZ 用在了 DATA 语å¥ä¹‹å¤–"
-
-@@ -47739,7 +46311,6 @@
-
- #: fortran/primary.c:561
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Extension: Hollerith constant at %C"
- msgid "Extension: exponent-letter 'q' in real-literal-constant at %C"
- msgstr "扩展:%C处的è·å‹’瑞斯常é‡"
-
-@@ -47755,13 +46326,11 @@
-
- #: fortran/primary.c:663
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Real number at %C has a 'd' exponent and an explicit kind"
- msgid "Real number at %C has a 'q' exponent and an explicit kind"
- msgstr "%C处的实数有一个‘d’指数和一个显å¼çš„ç§åˆ«"
-
- #: fortran/primary.c:677
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Invalid initializer %s in Data statement at %C"
- msgid "Invalid exponent-letter 'q' in real-literal-constant at %C"
- msgstr "%2$C处 DATA 语å¥åˆå§‹å€¼è®¾å®š %1$s 无效"
-
-@@ -47822,7 +46391,6 @@
-
- #: fortran/primary.c:1216
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Expected PARAMETER symbol in complex constant at %C"
- msgid "PARAMETER symbol in complex constant at %C"
- msgstr "%C处å¤æ•°å¸¸é‡ä¸­éœ€è¦ PARAMETER 符å·"
-
-@@ -47843,7 +46411,6 @@
-
- #: fortran/primary.c:1645
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Unknown argument list function at %L"
- msgid "argument list function at %C"
- msgstr "%L处å‚数列表函数未知"
-
-@@ -47874,13 +46441,11 @@
-
- #: fortran/primary.c:1915
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Symbol '%s' at %L has no IMPLICIT type"
- msgid "Symbol '%s' at %C has no IMPLICIT type"
- msgstr "%2$L处的符å·â€˜%1$s’没有éšå¼ç±»åž‹"
-
- #: fortran/primary.c:1921
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Unexpected character in variable list at %C"
- msgid "Unexpected '%%' for nonderived-type variable '%s' at %C"
- msgstr "%C处å˜é‡åˆ—表中有éžé¢„期的垃圾字符"
-
-@@ -47906,7 +46471,6 @@
-
- #: fortran/primary.c:2363
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: Structure constructor with missing optional arguments at %C"
- msgid "Structure constructor with missing optional arguments at %C"
- msgstr "Fortran 2003:%C处的结构构造函数丢失å¯é€‰çš„å‚æ•°"
-
-@@ -47917,31 +46481,26 @@
-
- #: fortran/primary.c:2418
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Can't construct ABSTRACT type '%s' at %C"
- msgid "Can't construct ABSTRACT type '%s' at %L"
- msgstr "%2$C处无法构建 ABSTRACT 类型‘%1$s’"
-
- #: fortran/primary.c:2438
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: Structure constructor with named arguments at %C"
- msgid "Structure constructor with named arguments at %C"
- msgstr "Fortran 2003:%C处的结构构造函数有有åçš„å‚æ•°"
-
- #: fortran/primary.c:2453
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Component initializer without name after component named %s at %C!"
- msgid "Component initializer without name after component named %s at %L!"
- msgstr "%2$C处å为 %1$s 的组件之åŽçš„组件åˆå§‹å€¼è®¾å®šæ²¡æœ‰åå­—ï¼"
-
- #: fortran/primary.c:2458
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Too many components in structure constructor at %C!"
- msgid "Too many components in structure constructor at %L!"
- msgstr "%C处结构构造函数中组件太多ï¼"
-
- #: fortran/primary.c:2495
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Component '%s' is initialized twice in the structure constructor at %C!"
- msgid "Component '%s' is initialized twice in the structure constructor at %L!"
- msgstr "%2$C处结构构造函数中组件‘%1$s’被åˆå§‹åŒ–两次ï¼"
-
-@@ -48012,31 +46571,26 @@
-
- #: fortran/resolve.c:145
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Interface '%s', used by procedure '%s' at %L, is declared in a later PROCEDURE statement"
- msgid "Interface '%s' at %L is declared in a later PROCEDURE statement"
- msgstr "为过程‘%2$s’在%3$L处使用的接å£â€˜%1$s’是在之åŽçš„ PROCEDURE 语å¥ä¸­å£°æ˜Žçš„"
-
- #: fortran/resolve.c:158
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Interface '%s' at %C may not be generic"
- msgid "Interface '%s' at %L may not be generic"
- msgstr "%2$C处的接å£â€˜%1$s’ä¸èƒ½æ˜¯æ³›åž‹"
-
- #: fortran/resolve.c:165
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Interface '%s' at %C may not be a statement function"
- msgid "Interface '%s' at %L may not be a statement function"
- msgstr "%2$C处的接å£â€˜%1$s’ä¸èƒ½æ˜¯ä¸ªè¯­å¥å‡½æ•°"
-
- #: fortran/resolve.c:174
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Intrinsic procedure '%s' not allowed in PROCEDURE statement at %C"
- msgid "Intrinsic procedure '%s' not allowed in PROCEDURE statement at %L"
- msgstr "内建过程‘%s’ä¸å…许在 %C çš„ PROCEDURE 语å¥ä¸­"
-
- #: fortran/resolve.c:180
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Interface '%s' of procedure '%s' at %L must be explicit"
- msgid "Interface '%s' at %L must be explicit"
- msgstr "%3$L处过程‘%2$s’的接å£â€˜%1$s’必须是显å¼çš„"
-
-@@ -48057,7 +46611,6 @@
-
- #: fortran/resolve.c:311
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Keyword argument '%s' at %L is not in the procedure"
- msgid "Self-referential argument '%s' at %L is not allowed"
- msgstr "%2$L处关键字实å‚‘%1$s’ä¸åœ¨è¿‡ç¨‹é‡Œ"
-
-@@ -48148,7 +46701,6 @@
-
- #: fortran/resolve.c:788
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Extension: Function %s at %L with entries returning variables of different string lengths"
- msgid "Function %s at %L with entries returning variables of different string lengths"
- msgstr "扩展:%2$L处函数 %1$s 有返回ä¸åŒå­—符串长度的å˜é‡çš„表项"
-
-@@ -48219,7 +46771,6 @@
-
- #: fortran/resolve.c:1001
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "COMMON block '%s' at %L is used as PARAMETER at %L"
- msgid "COMMON block '%s' at %L uses the same global identifier as entity at %L"
- msgstr "%2$L处的 COMMON å—‘%1$s’在%3$L处被用作 PARAMETER"
-
-@@ -48240,7 +46791,6 @@
-
- #: fortran/resolve.c:1056
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Variable '%s' at %L cannot have both the POINTER and BIND(C) attributes"
- msgid "COMMON block '%s' at %L can not have the EXTERNAL attribute"
- msgstr "%2$L处å˜é‡â€˜%1$s’ä¸èƒ½æ—¢æœ‰ POINTER åˆæœ‰ BIND(C) 属性"
-
-@@ -48251,31 +46801,26 @@
-
- #: fortran/resolve.c:1064
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: COMMON block '%s' at %L that is also a function result"
- msgid "COMMON block '%s' at %L that is also a function result"
- msgstr "Fortran 2003:%2$L处的 COMMON å—‘%1$s’也是一个函数返回值"
-
- #: fortran/resolve.c:1069
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: COMMON block '%s' at %L that is also a global procedure"
- msgid "COMMON block '%s' at %L that is also a global procedure"
- msgstr "Fortran 2003:%2$L处的 COMMON å—‘%1$s’也是一个全局过程"
-
- #: fortran/resolve.c:1152
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "The rank of the element in the derived type constructor at %L does not match that of the component (%d/%d)"
- msgid "The rank of the element in the structure constructor at %L does not match that of the component (%d/%d)"
- msgstr "%L处的派生类型构造函数中元素的秩与该组件(%d/%d)çš„ä¸åŒ¹é…"
-
- #: fortran/resolve.c:1173
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "The element in the derived type constructor at %L, for pointer component '%s', is %s but should be %s"
- msgid "The element in the structure constructor at %L, for pointer component '%s', is %s but should be %s"
- msgstr "%L处指针组件‘%s’的派生类型构造函数中的元素是 %s 但应该是 %s"
-
- #: fortran/resolve.c:1258
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "The NULL in the derived type constructor at %L is being applied to component '%s', which is neither a POINTER nor ALLOCATABLE"
- msgid "The NULL in the structure constructor at %L is being applied to component '%s', which is neither a POINTER nor ALLOCATABLE"
- msgstr "%L处派生类型构造函数中的 NULL 被用在既ä¸æ˜¯ä¸€ä¸ªæŒ‡é’ˆä¹Ÿä¸æ˜¯ ALLOCATABLE 的组件‘%s’上"
-
-@@ -48286,7 +46831,6 @@
-
- #: fortran/resolve.c:1308
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "The element in the derived type constructor at %L, for pointer component '%s' should be a POINTER or a TARGET"
- msgid "The element in the structure constructor at %L, for pointer component '%s' should be a POINTER or a TARGET"
- msgstr "%L处指针组件‘%s’的派生类型构造函数中的元素应该是 POINTER 或 TARGET"
-
-@@ -48297,7 +46841,6 @@
-
- #: fortran/resolve.c:1336
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Invalid expression in the derived type constructor for pointer component '%s' at %L in PURE procedure"
- msgid "Invalid expression in the structure constructor for pointer component '%s' at %L in PURE procedure"
- msgstr "%2$L处指针组件‘%1$s’的派生类型构造函数中表达å¼æ— æ•ˆ"
-
-@@ -48418,7 +46961,6 @@
-
- #: fortran/resolve.c:2442
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Interface mismatch in dummy procedure '%s' at %L: %s"
- msgid "Interface mismatch in global procedure '%s' at %L: %s "
- msgstr "哑过程‘%s’接å£åœ¨%L处ä¸åŒ¹é…:%s"
-
-@@ -48470,13 +47012,11 @@
-
- #: fortran/resolve.c:2990
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "reference to non-PURE function '%s' at %L inside a FORALL %s"
- msgid "Reference to non-PURE function '%s' at %L inside a FORALL %s"
- msgstr "%2$Lå¤„å¯¹éž PURE 函数‘%1$s’的引用出现在 FORALL %3$s 中"
-
- #: fortran/resolve.c:2997
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "reference to non-PURE function '%s' at %L inside a FORALL %s"
- msgid "Reference to non-PURE function '%s' at %L inside a DO CONCURRENT %s"
- msgstr "%2$Lå¤„å¯¹éž PURE 函数‘%1$s’的引用出现在 FORALL %3$s 中"
-
-@@ -48502,7 +47042,6 @@
-
- #: fortran/resolve.c:3069
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Subroutine call to '%s' in FORALL block at %L is not PURE"
- msgid "Subroutine call to '%s' in DO CONCURRENT block at %L is not PURE"
- msgstr "%2$L处 FORALL å—内对‘%1$s’å­ä¾‹ç¨‹çš„调用ä¸æ˜¯ PURE"
-
-@@ -48628,7 +47167,6 @@
-
- #: fortran/resolve.c:4129
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Extension: REAL array index at %L"
- msgid "REAL array index at %L"
- msgstr "扩展:%L处的 REAL 数组索引"
-
-@@ -48704,7 +47242,6 @@
-
- #: fortran/resolve.c:4766
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Assumed shape array at %L must be a dummy argument"
- msgid "Assumed-type variable %s at %L may only be used as actual argument"
- msgstr "%L处å‡å®šå¤–形的数组必须是一个虚å‚"
-
-@@ -48719,7 +47256,6 @@
-
- #: fortran/resolve.c:4791
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Assumed shape array at %L must be a dummy argument"
- msgid "Assumed-rank variable %s at %L may only be used as actual argument"
- msgstr "%L处å‡å®šå¤–形的数组必须是一个虚å‚"
-
-@@ -48825,7 +47361,6 @@
-
- #: fortran/resolve.c:6292
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "DO loop at %L will be executed zero times"
- msgid "DO loop at %L will be executed zero times (use -Wno-zerotrip to suppress)"
- msgstr "%L处的 DO 循环会被执行零次"
-
-@@ -49070,7 +47605,6 @@
-
- #: fortran/resolve.c:7966
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Unexpected use of subroutine name '%s' at %C"
- msgid "Unexpected intrinsic type '%s' at %L"
- msgstr "对å­è¿›ç¨‹å‘%s’éžé¢„期的使用,在%C处"
-
-@@ -49086,7 +47620,6 @@
-
- #: fortran/resolve.c:8256
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Invalid context for NULL() pointer at %%L"
- msgid "Invalid context for NULL () intrinsic at %L"
- msgstr "%%L处 NULL() 指针上下文无效"
-
-@@ -49098,7 +47631,6 @@
-
- #: fortran/resolve.c:8296
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Data transfer element at %L cannot have POINTER components"
- msgid "Data transfer element at %L cannot have POINTER components unless it is processed by a defined input/output procedure"
- msgstr "%L处数æ®ä¼ è¾“元素ä¸èƒ½æœ‰ POINTER 组件"
-
-@@ -49109,7 +47641,6 @@
-
- #: fortran/resolve.c:8312
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Data transfer element at %L cannot have ALLOCATABLE components"
- msgid "Data transfer element at %L cannot have ALLOCATABLE components unless it is processed by a defined input/output procedure"
- msgstr "%L处数æ®ä¼ è¾“元素ä¸èƒ½æœ‰ ALLOCATABLE 组件"
-
-@@ -49125,7 +47656,6 @@
-
- #: fortran/resolve.c:8388
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Stat-variable at %L must be a scalar INTEGER variable"
- msgid "Lock variable at %L must be a scalar of type LOCK_TYPE"
- msgstr "%L处 stat å˜é‡å¿…é¡»æ˜¯ä¸€ä¸ªæ ‡é‡ INTEGER å˜é‡"
-
-@@ -49251,7 +47781,6 @@
-
- #: fortran/resolve.c:9196
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Assignment to a FORALL index variable at %L"
- msgid "Assignment to an allocatable polymorphic variable at %L"
- msgstr "%Lå¤„å‘ FORALL 索引å˜é‡èµ‹å€¼"
-
-@@ -49318,7 +47847,6 @@
-
- #: fortran/resolve.c:10180
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Binding label '%s' at %L collides with the global entity '%s' at %L"
- msgid "Variable %s with binding label %s at %L uses the same global identifier as entity at %L"
- msgstr "%2$L处的绑定标å·â€˜%1$s’与 %4$L 处的全局实体‘%3$s’冲çª"
-
-@@ -49334,7 +47862,6 @@
- #. multiple checks for the same procedure.
- #: fortran/resolve.c:10210
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Binding label '%s' at %L collides with the global entity '%s' at %L"
- msgid "Procedure %s with binding label %s at %L uses the same global identifier as entity at %L"
- msgstr "%2$L处的绑定标å·â€˜%1$s’与 %4$L 处的全局实体‘%3$s’冲çª"
-
-@@ -49350,7 +47877,6 @@
-
- #: fortran/resolve.c:10628
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Allocatable array '%s' at %L must have a deferred shape"
- msgid "Allocatable array '%s' at %L must have a deferred shape or assumed rank"
- msgstr "å¯åˆ†é…的数组‘%s’在%L处必须有延迟的外形"
-
-@@ -49361,7 +47887,6 @@
-
- #: fortran/resolve.c:10640
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Array pointer '%s' at %L must have a deferred shape"
- msgid "Array pointer '%s' at %L must have a deferred shape or assumed rank"
- msgstr "数组指针‘%s’在%L处必须有延迟的外形"
-
-@@ -49387,7 +47912,6 @@
-
- #: fortran/resolve.c:10730
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2008: Implied SAVE for module variable '%s' at %L, needed due to the default initialization"
- msgid "Implied SAVE for module variable '%s' at %L, needed due to the default initialization"
- msgstr "Fortran 2008:%2$L处模å—å˜é‡â€˜%1$s’éšå«ä½¿ç”¨äº† SAVE,因为默认åˆå§‹åŒ–有此需求"
-
-@@ -49415,7 +47939,6 @@
-
- #: fortran/resolve.c:10830
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "'%s' at %L must have constant character length in this context"
- msgid "COMMON variable '%s' at %L must have constant character length"
- msgstr "å˜é‡â€˜%s’在%L处上下文中字符长度必须为常é‡"
-
-@@ -49456,13 +47979,11 @@
-
- #: fortran/resolve.c:10958
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: '%s' is of a PRIVATE type and cannot be a dummy argument of '%s', which is PUBLIC at %L"
- msgid "'%s' is of a PRIVATE type and cannot be a dummy argument of '%s', which is PUBLIC at %L"
- msgstr "Fortran 2003:%3$L处‘%1$s’是 PRIVATE 类型因而ä¸èƒ½æ˜¯ PUBLIC 类型‘%2$s’的虚å‚"
-
- #: fortran/resolve.c:10980 fortran/resolve.c:11004
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: Procedure '%s' in PUBLIC interface '%s' at %L takes dummy arguments of '%s' which is PRIVATE"
- msgid "Procedure '%s' in PUBLIC interface '%s' at %L takes dummy arguments of '%s' which is PRIVATE"
- msgstr "Fortran 2003: %3$L处 PUBLIC 接å£â€˜%2$s’中的过程‘%1$s’有 PRIVATE 的虚å‚‘%4$s’"
-
-@@ -49508,19 +48029,16 @@
-
- #: fortran/resolve.c:11093
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "CHARACTER(*) function '%s' at %L cannot be pure"
- msgid "CHARACTER(*) function '%s' at %L"
- msgstr "CHARACTER(*) 函数‘%s’在%L处ä¸èƒ½ä¸ºçº¯å‡½æ•°"
-
- #: fortran/resolve.c:11102
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Procedure pointer component '%s' with PASS at %L must have at least one argument"
- msgid "Procedure pointer '%s' at %L shall not be elemental"
- msgstr "%2$L处的具有 PASS 的过程指针组件‘%1$s’必须至少有一个实å‚"
-
- #: fortran/resolve.c:11108
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Dummy procedure '%s' at %C cannot have a generic interface"
- msgid "Dummy procedure '%s' at %L shall not be elemental"
- msgstr "哑过程‘%s’在%C处ä¸èƒ½æœ‰æ³›åž‹æŽ¥å£"
-
-@@ -49766,7 +48284,6 @@
-
- #: fortran/resolve.c:12356
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: the component '%s' is a PRIVATE type and cannot be a component of '%s', which is PUBLIC at %L"
- msgid "the component '%s' is a PRIVATE type and cannot be a component of '%s', which is PUBLIC at %L"
- msgstr "Fortran 2003:%3$L处组åˆâ€˜%1$s’是一个 PRIVATE 类型,因此ä¸èƒ½æ˜¯ PUBLIC‘%2$s’的组åˆ"
-
-@@ -49792,7 +48309,6 @@
-
- #: fortran/resolve.c:12484
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Component '%s' of '%s' at %L has the same name as an inherited type-bound procedure"
- msgid "Generic name '%s' of function '%s' at %L being the same name as derived type at %L"
- msgstr "%3$L处‘%2$s’的组件‘%1$s’与一个继承的类型é™å®šè¿‡ç¨‹åŒå"
-
-@@ -49895,7 +48411,6 @@
-
- #: fortran/resolve.c:12900
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Assumed shape array at %L must be a dummy argument"
- msgid "Assumed-rank array at %L must be a dummy argument"
- msgstr "%L处å‡å®šå¤–形的数组必须是一个虚å‚"
-
-@@ -49941,13 +48456,11 @@
-
- #: fortran/resolve.c:12990
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Variable '%s' at %L cannot have both the ALLOCATABLE and BIND(C) attributes"
- msgid "Variable %s at %L with NO_ARG_CHECK attribute may not have the ALLOCATABLE, CODIMENSION, POINTER or VALUE attribute"
- msgstr "%2$L处å˜é‡â€˜%1$s’ä¸èƒ½æ—¢æœ‰ ALLOCATABLE åˆæœ‰ BIND(C) 属性"
-
- #: fortran/resolve.c:12998
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Variable '%s' at %L cannot have both the POINTER and BIND(C) attributes"
- msgid "Variable %s at %L with NO_ARG_CHECK attribute may not have the INTENT(OUT) attribute"
- msgstr "%2$L处å˜é‡â€˜%1$s’ä¸èƒ½æ—¢æœ‰ POINTER åˆæœ‰ BIND(C) 属性"
-
-@@ -49958,19 +48471,16 @@
-
- #: fortran/resolve.c:13025
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Assumed shape array '%s' at %L is not permitted in an initialization expression"
- msgid "Assumed type of variable %s at %L is only permitted for dummy variables"
- msgstr "%2$L处å‡å®šå¤–形数组‘%1$s’ä¸èƒ½ç”¨åœ¨åˆå§‹åŒ–表达å¼ä¸­"
-
- #: fortran/resolve.c:13032
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Variable '%s' at %L cannot have both the ALLOCATABLE and BIND(C) attributes"
- msgid "Assumed-type variable %s at %L may not have the ALLOCATABLE, CODIMENSION, POINTER or VALUE attribute"
- msgstr "%2$L处å˜é‡â€˜%1$s’ä¸èƒ½æ—¢æœ‰ ALLOCATABLE åˆæœ‰ BIND(C) 属性"
-
- #: fortran/resolve.c:13039
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Variable '%s' at %L cannot have both the POINTER and BIND(C) attributes"
- msgid "Assumed-type variable %s at %L may not have the INTENT(OUT) attribute"
- msgstr "%2$L处å˜é‡â€˜%1$s’ä¸èƒ½æ—¢æœ‰ POINTER åˆæœ‰ BIND(C) 属性"
-
-@@ -49986,7 +48496,6 @@
-
- #: fortran/resolve.c:13151
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: PUBLIC %s '%s' at %L of PRIVATE derived type '%s'"
- msgid "PUBLIC %s '%s' at %L of PRIVATE derived type '%s'"
- msgstr "Fortran 2003:%3$L处 PUBLIC %1$s‘%2$s’具有 PRIVATE 派生类型‘%4$s’"
-
-@@ -50002,7 +48511,6 @@
-
- #: fortran/resolve.c:13196
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Dummy argument '%s' at %L cannot be INTENT(OUT)"
- msgid "Dummy argument '%s' at %L of LOCK_TYPE shall not be INTENT(OUT)"
- msgstr "%2$L处的‘%1$s’虚å‚ä¸èƒ½æ˜¯ INTENT(OUT)"
-
-@@ -50178,7 +48686,6 @@
-
- #: fortran/resolve.c:14338
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: PUBLIC function '%s' at %L of PRIVATE type '%s'"
- msgid "PUBLIC function '%s' at %L of PRIVATE type '%s'"
- msgstr "Fortran 2003:%2$L处 PRIVATE 类型‘%3$s’的 PUBLIC 函数‘%1$s’"
-
-@@ -50224,19 +48731,16 @@
-
- #: fortran/scanner.c:327
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "ignoring duplicate directory \"%s\"\n"
- msgid "Include directory \"%s\": %s"
- msgstr "忽略é‡å¤çš„目录“%sâ€\n"
-
- #: fortran/scanner.c:333
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "ignoring nonexistent directory \"%s\"\n"
- msgid "Nonexistent include directory \"%s\""
- msgstr "忽略ä¸å­˜åœ¨çš„目录“%sâ€\n"
-
- #: fortran/scanner.c:339
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "%qD is not a type"
- msgid "\"%s\" is not a directory"
- msgstr "%qDä¸æ˜¯ä¸€ä¸ªç±»åž‹"
-
-@@ -50536,7 +49040,6 @@
-
- #: fortran/symbol.c:474
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: Procedure pointer at %C"
- msgid "Procedure pointer at %C"
- msgstr "Fortran 2003:%C处的过程指针"
-
-@@ -50562,13 +49065,11 @@
-
- #: fortran/symbol.c:767
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "%s attribute conflicts with %s attribute at %L"
- msgid "%s attribute with %s attribute at %L"
- msgstr "%s 属性与 %s 属性在%L处冲çª"
-
- #: fortran/symbol.c:773
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "%s attribute conflicts with %s attribute in '%s' at %L"
- msgid "%s attribute with %s attribute in '%s' at %L"
- msgstr "%s 属性与 %s 属性冲çªï¼Œåœ¨â€˜%s’中,ä½äºŽ %L"
-
-@@ -50664,7 +49165,6 @@
-
- #: fortran/symbol.c:1590
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: BIND(C) at %L"
- msgid "BIND(C) at %L"
- msgstr "Fortran 2003:%L处的 BIND(C)"
-
-@@ -50675,7 +49175,6 @@
-
- #: fortran/symbol.c:1610
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Fortran 2003: EXTENDS at %L"
- msgid "EXTENDS at %L"
- msgstr "Fortran 2003:%L处的 EXTENDS"
-
-@@ -50771,7 +49270,6 @@
-
- #: fortran/symbol.c:2270
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Expected terminating name at %C"
- msgid "Shared DO termination label %d at %C"
- msgstr "%C处需è¦ç»“æŸå"
-
-@@ -50868,7 +49366,6 @@
-
- #: fortran/trans-common.c:400
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Named COMMON block '%s' at %L shall be of the same size"
- msgid "Named COMMON block '%s' at %L shall be of the same size as elsewhere (%lu vs %lu bytes)"
- msgstr "%2$L处的 COMMON å—‘%1$s’应该有åŒæ ·çš„大å°"
-
-@@ -50920,13 +49417,11 @@
-
- #: fortran/trans-common.c:1167
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "COMMON '%s' at %L requires %d bytes of padding at start; reorder elements or use -fno-align-commons"
- msgid "COMMON '%s' at %L requires %d bytes of padding; reorder elements or use -fno-align-commons"
- msgstr "%2$L处的 COMMON‘%1$sâ€™éœ€è¦ %3$d 字节填充在开始处;é‡æŽ’åºå…ƒç´ æˆ–使用 -fno-align-commons"
-
- #: fortran/trans-common.c:1171
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "COMMON at %L requires %d bytes of padding at start; reorder elements or use -fno-align-commons"
- msgid "COMMON at %L requires %d bytes of padding; reorder elements or use -fno-align-commons"
- msgstr "%L处的 COMMON éœ€è¦ %d 字节填充在开始处;é‡æŽ’åºå…ƒç´ æˆ–使用 -fno-align-commons"
-
-@@ -50967,7 +49462,6 @@
-
- #: fortran/trans-decl.c:4257
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Unused variable '%s' declared at %L"
- msgid "Unused PRIVATE module variable '%s' declared at %L"
- msgstr "%2$L处声明了未使用的å˜é‡â€˜%1$s’"
-
-@@ -50988,7 +49482,6 @@
-
- #: fortran/trans-decl.c:4837
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Unused variable '%s' declared at %L"
- msgid "Unused module variable '%s' which has been explicitly imported at %L"
- msgstr "%2$L处声明了未使用的å˜é‡â€˜%1$s’"
-
-@@ -51004,7 +49497,6 @@
-
- #: fortran/trans-decl.c:4896
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Unused parameter '%s' declared at %L"
- msgid "Unused parameter '%s' which has been explicitly imported at %L"
- msgstr "%2$L处声明了未使用的å‚数‘%1$s’"
-
-@@ -51066,37 +49558,31 @@
-
- #: fortran/trans-types.c:496
- #, fuzzy, gcc-internal-format
--#| msgid "integer kind=8 not available for -fdefault-integer-8 option"
- msgid "INTEGER(KIND=8) is not available for -fdefault-integer-8 option"
- msgstr "integer kind=8 在指定了 -fdefault-integer-8 选项时ä¸å¯ç”¨"
-
- #: fortran/trans-types.c:504
- #, fuzzy, gcc-internal-format
--#| msgid "integer kind=8 not available for -fdefault-integer-8 option"
- msgid "INTEGER(KIND=8) is not available for -finteger-4-integer-8 option"
- msgstr "integer kind=8 在指定了 -fdefault-integer-8 选项时ä¸å¯ç”¨"
-
- #: fortran/trans-types.c:522
- #, fuzzy, gcc-internal-format
--#| msgid "real kind=8 not available for -fdefault-real-8 option"
- msgid "REAL(KIND=8) is not available for -fdefault-real-8 option"
- msgstr "real kind=8 在指定了 -fdefault-real-8 选项时ä¸å¯ç”¨"
-
- #: fortran/trans-types.c:529
- #, fuzzy, gcc-internal-format
--#| msgid "real kind=8 not available for -fdefault-real-8 option"
- msgid "REAL(KIND=8) is not available for -freal-4-real-8 option"
- msgstr "real kind=8 在指定了 -fdefault-real-8 选项时ä¸å¯ç”¨"
-
- #: fortran/trans-types.c:536
- #, fuzzy, gcc-internal-format
--#| msgid "real kind=8 not available for -fdefault-real-8 option"
- msgid "REAL(KIND=10) is not available for -freal-4-real-10 option"
- msgstr "real kind=8 在指定了 -fdefault-real-8 选项时ä¸å¯ç”¨"
-
- #: fortran/trans-types.c:543
- #, fuzzy, gcc-internal-format
--#| msgid "real kind=8 not available for -fdefault-real-8 option"
- msgid "REAL(KIND=16) is not available for -freal-4-real-16 option"
- msgstr "real kind=8 在指定了 -fdefault-real-8 选项时ä¸å¯ç”¨"
-
-@@ -51107,25 +49593,21 @@
-
- #: fortran/trans-types.c:566
- #, fuzzy, gcc-internal-format
--#| msgid "real kind=8 not available for -fdefault-real-8 option"
- msgid "REAL(KIND=4) is not available for -freal-8-real-4 option"
- msgstr "real kind=8 在指定了 -fdefault-real-8 选项时ä¸å¯ç”¨"
-
- #: fortran/trans-types.c:573
- #, fuzzy, gcc-internal-format
--#| msgid "real kind=8 not available for -fdefault-real-8 option"
- msgid "REAL(KIND=10) is not available for -freal-8-real-10 option"
- msgstr "real kind=8 在指定了 -fdefault-real-8 选项时ä¸å¯ç”¨"
-
- #: fortran/trans-types.c:580
- #, fuzzy, gcc-internal-format
--#| msgid "real kind=8 not available for -fdefault-real-8 option"
- msgid "REAL(KIND=10) is not available for -freal-8-real-16 option"
- msgstr "real kind=8 在指定了 -fdefault-real-8 选项时ä¸å¯ç”¨"
-
- #: fortran/trans-types.c:1458
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "Array element size too big"
- msgid "Array element size too big at %C"
- msgstr "数组元素太大"
-
-@@ -51272,7 +49754,6 @@
- #. duplicate code from LOAD macro
- #: java/expr.c:3549
- #, fuzzy, gcc-internal-format
--#| msgid "unrecogized wide sub-instruction"
- msgid "unrecognized wide sub-instruction"
- msgstr "无法识别的宽å­æŒ‡ä»¤"
-
-@@ -51570,19 +50051,16 @@
-
- #: lto/lto.c:2302
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "cannot open %s"
- msgid "Cannot open %s"
- msgstr "ä¸èƒ½æ‰“å¼€ %s"
-
- #: lto/lto.c:2323
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "cannot open %s"
- msgid "Cannot map %s"
- msgstr "ä¸èƒ½æ‰“å¼€ %s"
-
- #: lto/lto.c:2334
- #, fuzzy, gcc-internal-format, gfc-internal-format
--#| msgid "cannot open %s"
- msgid "Cannot read %s"
- msgstr "ä¸èƒ½æ‰“å¼€ %s"
-
-@@ -52006,7 +50484,6 @@
-
- #: objc/objc-act.c:3964 objc/objc-act.c:3992 objc/objc-act.c:4048
- #, fuzzy, gcc-internal-format
--#| msgid "unused variable %q+D"
- msgid "duplicate instance variable %q+D"
- msgstr "未使用的å˜é‡%q+D"
-
-@@ -52125,7 +50602,6 @@
- #. rtype is an IDENTIFIER_NODE at this point.
- #: objc/objc-act.c:5398 objc/objc-act.c:5532
- #, fuzzy, gcc-internal-format
--#| msgid "definition of protocol %qE not found"
- msgid "@interface of class %qE not found"
- msgstr "找ä¸åˆ°åè®®%qE的方法定义"
-
-Index: gcc/tree-nested.c
-===================================================================
---- a/src/gcc/tree-nested.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/tree-nested.c (.../branches/gcc-4_9-branch)
-@@ -1082,6 +1082,15 @@
- need_stmts = true;
- goto do_decl_clause;
-
-+ case OMP_CLAUSE_LINEAR:
-+ if (OMP_CLAUSE_LINEAR_GIMPLE_SEQ (clause))
-+ need_stmts = true;
-+ wi->val_only = true;
-+ wi->is_lhs = false;
-+ convert_nonlocal_reference_op (&OMP_CLAUSE_LINEAR_STEP (clause),
-+ &dummy, wi);
-+ goto do_decl_clause;
-+
- case OMP_CLAUSE_PRIVATE:
- case OMP_CLAUSE_FIRSTPRIVATE:
- case OMP_CLAUSE_COPYPRIVATE:
-@@ -1107,12 +1116,66 @@
- case OMP_CLAUSE_FINAL:
- case OMP_CLAUSE_IF:
- case OMP_CLAUSE_NUM_THREADS:
-+ case OMP_CLAUSE_DEPEND:
-+ case OMP_CLAUSE_DEVICE:
-+ case OMP_CLAUSE_NUM_TEAMS:
-+ case OMP_CLAUSE_THREAD_LIMIT:
-+ case OMP_CLAUSE_SAFELEN:
- wi->val_only = true;
- wi->is_lhs = false;
- convert_nonlocal_reference_op (&OMP_CLAUSE_OPERAND (clause, 0),
-- &dummy, wi);
-+ &dummy, wi);
- break;
-
-+ case OMP_CLAUSE_DIST_SCHEDULE:
-+ if (OMP_CLAUSE_DIST_SCHEDULE_CHUNK_EXPR (clause) != NULL)
-+ {
-+ wi->val_only = true;
-+ wi->is_lhs = false;
-+ convert_nonlocal_reference_op (&OMP_CLAUSE_OPERAND (clause, 0),
-+ &dummy, wi);
-+ }
-+ break;
-+
-+ case OMP_CLAUSE_MAP:
-+ case OMP_CLAUSE_TO:
-+ case OMP_CLAUSE_FROM:
-+ if (OMP_CLAUSE_SIZE (clause))
-+ {
-+ wi->val_only = true;
-+ wi->is_lhs = false;
-+ convert_nonlocal_reference_op (&OMP_CLAUSE_SIZE (clause),
-+ &dummy, wi);
-+ }
-+ if (DECL_P (OMP_CLAUSE_DECL (clause)))
-+ goto do_decl_clause;
-+ wi->val_only = true;
-+ wi->is_lhs = false;
-+ walk_tree (&OMP_CLAUSE_DECL (clause), convert_nonlocal_reference_op,
-+ wi, NULL);
-+ break;
-+
-+ case OMP_CLAUSE_ALIGNED:
-+ if (OMP_CLAUSE_ALIGNED_ALIGNMENT (clause))
-+ {
-+ wi->val_only = true;
-+ wi->is_lhs = false;
-+ convert_nonlocal_reference_op
-+ (&OMP_CLAUSE_ALIGNED_ALIGNMENT (clause), &dummy, wi);
-+ }
-+ /* Like do_decl_clause, but don't add any suppression. */
-+ decl = OMP_CLAUSE_DECL (clause);
-+ if (TREE_CODE (decl) == VAR_DECL
-+ && (TREE_STATIC (decl) || DECL_EXTERNAL (decl)))
-+ break;
-+ if (decl_function_context (decl) != info->context)
-+ {
-+ OMP_CLAUSE_DECL (clause) = get_nonlocal_debug_decl (info, decl);
-+ if (OMP_CLAUSE_CODE (clause) != OMP_CLAUSE_PRIVATE)
-+ need_chain = true;
-+ }
-+ break;
-+
- case OMP_CLAUSE_NOWAIT:
- case OMP_CLAUSE_ORDERED:
- case OMP_CLAUSE_DEFAULT:
-@@ -1120,6 +1183,7 @@
- case OMP_CLAUSE_COLLAPSE:
- case OMP_CLAUSE_UNTIED:
- case OMP_CLAUSE_MERGEABLE:
-+ case OMP_CLAUSE_PROC_BIND:
- break;
-
- default:
-@@ -1157,6 +1221,12 @@
- &OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (clause));
- break;
-
-+ case OMP_CLAUSE_LINEAR:
-+ walk_body (convert_nonlocal_reference_stmt,
-+ convert_nonlocal_reference_op, info,
-+ &OMP_CLAUSE_LINEAR_GIMPLE_SEQ (clause));
-+ break;
-+
- default:
- break;
- }
-@@ -1304,10 +1374,42 @@
- break;
-
- case GIMPLE_OMP_TARGET:
-+ if (gimple_omp_target_kind (stmt) != GF_OMP_TARGET_KIND_REGION)
-+ {
-+ save_suppress = info->suppress_expansion;
-+ convert_nonlocal_omp_clauses (gimple_omp_target_clauses_ptr (stmt),
-+ wi);
-+ info->suppress_expansion = save_suppress;
-+ walk_body (convert_nonlocal_reference_stmt,
-+ convert_nonlocal_reference_op, info,
-+ gimple_omp_body_ptr (stmt));
-+ break;
-+ }
- save_suppress = info->suppress_expansion;
-- convert_nonlocal_omp_clauses (gimple_omp_target_clauses_ptr (stmt), wi);
-+ if (convert_nonlocal_omp_clauses (gimple_omp_target_clauses_ptr (stmt),
-+ wi))
-+ {
-+ tree c, decl;
-+ decl = get_chain_decl (info);
-+ c = build_omp_clause (gimple_location (stmt), OMP_CLAUSE_MAP);
-+ OMP_CLAUSE_DECL (c) = decl;
-+ OMP_CLAUSE_MAP_KIND (c) = OMP_CLAUSE_MAP_TO;
-+ OMP_CLAUSE_SIZE (c) = DECL_SIZE_UNIT (decl);
-+ OMP_CLAUSE_CHAIN (c) = gimple_omp_target_clauses (stmt);
-+ gimple_omp_target_set_clauses (stmt, c);
-+ }
-+
-+ save_local_var_chain = info->new_local_var_chain;
-+ info->new_local_var_chain = NULL;
-+
- walk_body (convert_nonlocal_reference_stmt, convert_nonlocal_reference_op,
- info, gimple_omp_body_ptr (stmt));
-+
-+ if (info->new_local_var_chain)
-+ declare_vars (info->new_local_var_chain,
-+ gimple_seq_first_stmt (gimple_omp_body (stmt)),
-+ false);
-+ info->new_local_var_chain = save_local_var_chain;
- info->suppress_expansion = save_suppress;
- break;
-
-@@ -1605,6 +1707,15 @@
- need_stmts = true;
- goto do_decl_clause;
-
-+ case OMP_CLAUSE_LINEAR:
-+ if (OMP_CLAUSE_LINEAR_GIMPLE_SEQ (clause))
-+ need_stmts = true;
-+ wi->val_only = true;
-+ wi->is_lhs = false;
-+ convert_local_reference_op (&OMP_CLAUSE_LINEAR_STEP (clause), &dummy,
-+ wi);
-+ goto do_decl_clause;
-+
- case OMP_CLAUSE_PRIVATE:
- case OMP_CLAUSE_FIRSTPRIVATE:
- case OMP_CLAUSE_COPYPRIVATE:
-@@ -1635,6 +1746,11 @@
- case OMP_CLAUSE_FINAL:
- case OMP_CLAUSE_IF:
- case OMP_CLAUSE_NUM_THREADS:
-+ case OMP_CLAUSE_DEPEND:
-+ case OMP_CLAUSE_DEVICE:
-+ case OMP_CLAUSE_NUM_TEAMS:
-+ case OMP_CLAUSE_THREAD_LIMIT:
-+ case OMP_CLAUSE_SAFELEN:
- wi->val_only = true;
- wi->is_lhs = false;
- convert_local_reference_op (&OMP_CLAUSE_OPERAND (clause, 0), &dummy,
-@@ -1641,6 +1757,60 @@
- wi);
- break;
-
-+ case OMP_CLAUSE_DIST_SCHEDULE:
-+ if (OMP_CLAUSE_DIST_SCHEDULE_CHUNK_EXPR (clause) != NULL)
-+ {
-+ wi->val_only = true;
-+ wi->is_lhs = false;
-+ convert_local_reference_op (&OMP_CLAUSE_OPERAND (clause, 0),
-+ &dummy, wi);
-+ }
-+ break;
-+
-+ case OMP_CLAUSE_MAP:
-+ case OMP_CLAUSE_TO:
-+ case OMP_CLAUSE_FROM:
-+ if (OMP_CLAUSE_SIZE (clause))
-+ {
-+ wi->val_only = true;
-+ wi->is_lhs = false;
-+ convert_local_reference_op (&OMP_CLAUSE_SIZE (clause),
-+ &dummy, wi);
-+ }
-+ if (DECL_P (OMP_CLAUSE_DECL (clause)))
-+ goto do_decl_clause;
-+ wi->val_only = true;
-+ wi->is_lhs = false;
-+ walk_tree (&OMP_CLAUSE_DECL (clause), convert_local_reference_op,
-+ wi, NULL);
-+ break;
-+
-+ case OMP_CLAUSE_ALIGNED:
-+ if (OMP_CLAUSE_ALIGNED_ALIGNMENT (clause))
-+ {
-+ wi->val_only = true;
-+ wi->is_lhs = false;
-+ convert_local_reference_op
-+ (&OMP_CLAUSE_ALIGNED_ALIGNMENT (clause), &dummy, wi);
-+ }
-+ /* Like do_decl_clause, but don't add any suppression. */
-+ decl = OMP_CLAUSE_DECL (clause);
-+ if (TREE_CODE (decl) == VAR_DECL
-+ && (TREE_STATIC (decl) || DECL_EXTERNAL (decl)))
-+ break;
-+ if (decl_function_context (decl) == info->context
-+ && !use_pointer_in_frame (decl))
-+ {
-+ tree field = lookup_field_for_decl (info, decl, NO_INSERT);
-+ if (field)
-+ {
-+ OMP_CLAUSE_DECL (clause)
-+ = get_local_debug_decl (info, decl, field);
-+ need_frame = true;
-+ }
-+ }
-+ break;
-+
- case OMP_CLAUSE_NOWAIT:
- case OMP_CLAUSE_ORDERED:
- case OMP_CLAUSE_DEFAULT:
-@@ -1648,6 +1818,7 @@
- case OMP_CLAUSE_COLLAPSE:
- case OMP_CLAUSE_UNTIED:
- case OMP_CLAUSE_MERGEABLE:
-+ case OMP_CLAUSE_PROC_BIND:
- break;
-
- default:
-@@ -1685,6 +1856,12 @@
- &OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (clause));
- break;
-
-+ case OMP_CLAUSE_LINEAR:
-+ walk_body (convert_local_reference_stmt,
-+ convert_local_reference_op, info,
-+ &OMP_CLAUSE_LINEAR_GIMPLE_SEQ (clause));
-+ break;
-+
- default:
- break;
- }
-@@ -1763,10 +1940,38 @@
- break;
-
- case GIMPLE_OMP_TARGET:
-+ if (gimple_omp_target_kind (stmt) != GF_OMP_TARGET_KIND_REGION)
-+ {
-+ save_suppress = info->suppress_expansion;
-+ convert_local_omp_clauses (gimple_omp_target_clauses_ptr (stmt), wi);
-+ info->suppress_expansion = save_suppress;
-+ walk_body (convert_local_reference_stmt, convert_local_reference_op,
-+ info, gimple_omp_body_ptr (stmt));
-+ break;
-+ }
- save_suppress = info->suppress_expansion;
-- convert_local_omp_clauses (gimple_omp_target_clauses_ptr (stmt), wi);
-- walk_body (convert_local_reference_stmt, convert_local_reference_op,
-- info, gimple_omp_body_ptr (stmt));
-+ if (convert_local_omp_clauses (gimple_omp_target_clauses_ptr (stmt), wi))
-+ {
-+ tree c;
-+ (void) get_frame_type (info);
-+ c = build_omp_clause (gimple_location (stmt), OMP_CLAUSE_MAP);
-+ OMP_CLAUSE_DECL (c) = info->frame_decl;
-+ OMP_CLAUSE_MAP_KIND (c) = OMP_CLAUSE_MAP_TOFROM;
-+ OMP_CLAUSE_SIZE (c) = DECL_SIZE_UNIT (info->frame_decl);
-+ OMP_CLAUSE_CHAIN (c) = gimple_omp_target_clauses (stmt);
-+ gimple_omp_target_set_clauses (stmt, c);
-+ }
-+
-+ save_local_var_chain = info->new_local_var_chain;
-+ info->new_local_var_chain = NULL;
-+
-+ walk_body (convert_local_reference_stmt, convert_local_reference_op, info,
-+ gimple_omp_body_ptr (stmt));
-+
-+ if (info->new_local_var_chain)
-+ declare_vars (info->new_local_var_chain,
-+ gimple_seq_first_stmt (gimple_omp_body (stmt)), false);
-+ info->new_local_var_chain = save_local_var_chain;
- info->suppress_expansion = save_suppress;
- break;
-
-@@ -2067,6 +2272,13 @@
- break;
- }
-
-+ case GIMPLE_OMP_TARGET:
-+ if (gimple_omp_target_kind (stmt) != GF_OMP_TARGET_KIND_REGION)
-+ {
-+ *handled_ops_p = false;
-+ return NULL_TREE;
-+ }
-+ /* FALLTHRU */
- case GIMPLE_OMP_PARALLEL:
- case GIMPLE_OMP_TASK:
- {
-@@ -2087,7 +2299,6 @@
- default:
- *handled_ops_p = false;
- return NULL_TREE;
-- break;
- }
-
- *handled_ops_p = true;
-@@ -2159,6 +2370,42 @@
- info->static_chain_added |= save_static_chain_added;
- break;
-
-+ case GIMPLE_OMP_TARGET:
-+ if (gimple_omp_target_kind (stmt) != GF_OMP_TARGET_KIND_REGION)
-+ {
-+ walk_body (convert_gimple_call, NULL, info, gimple_omp_body_ptr (stmt));
-+ break;
-+ }
-+ save_static_chain_added = info->static_chain_added;
-+ info->static_chain_added = 0;
-+ walk_body (convert_gimple_call, NULL, info, gimple_omp_body_ptr (stmt));
-+ for (i = 0; i < 2; i++)
-+ {
-+ tree c, decl;
-+ if ((info->static_chain_added & (1 << i)) == 0)
-+ continue;
-+ decl = i ? get_chain_decl (info) : info->frame_decl;
-+ /* Don't add CHAIN.* or FRAME.* twice. */
-+ for (c = gimple_omp_target_clauses (stmt);
-+ c;
-+ c = OMP_CLAUSE_CHAIN (c))
-+ if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_MAP
-+ && OMP_CLAUSE_DECL (c) == decl)
-+ break;
-+ if (c == NULL)
-+ {
-+ c = build_omp_clause (gimple_location (stmt), OMP_CLAUSE_MAP);
-+ OMP_CLAUSE_DECL (c) = decl;
-+ OMP_CLAUSE_MAP_KIND (c)
-+ = i ? OMP_CLAUSE_MAP_TO : OMP_CLAUSE_MAP_TOFROM;
-+ OMP_CLAUSE_SIZE (c) = DECL_SIZE_UNIT (decl);
-+ OMP_CLAUSE_CHAIN (c) = gimple_omp_target_clauses (stmt);
-+ gimple_omp_target_set_clauses (stmt, c);
-+ }
-+ }
-+ info->static_chain_added |= save_static_chain_added;
-+ break;
-+
- case GIMPLE_OMP_FOR:
- walk_body (convert_gimple_call, NULL, info,
- gimple_omp_for_pre_body_ptr (stmt));
-@@ -2166,7 +2413,6 @@
- case GIMPLE_OMP_SECTIONS:
- case GIMPLE_OMP_SECTION:
- case GIMPLE_OMP_SINGLE:
-- case GIMPLE_OMP_TARGET:
- case GIMPLE_OMP_TEAMS:
- case GIMPLE_OMP_MASTER:
- case GIMPLE_OMP_TASKGROUP:
-Index: gcc/ira-costs.c
-===================================================================
---- a/src/gcc/ira-costs.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ira-costs.c (.../branches/gcc-4_9-branch)
-@@ -407,6 +407,8 @@
- int alt;
- int i, j, k;
- int insn_allows_mem[MAX_RECOG_OPERANDS];
-+ move_table *move_in_cost, *move_out_cost;
-+ short (*mem_cost)[2];
-
- for (i = 0; i < n_ops; i++)
- insn_allows_mem[i] = 0;
-@@ -517,42 +519,79 @@
- bool in_p = recog_data.operand_type[i] != OP_OUT;
- bool out_p = recog_data.operand_type[i] != OP_IN;
- enum reg_class op_class = classes[i];
-- move_table *move_in_cost, *move_out_cost;
-
- ira_init_register_move_cost_if_necessary (mode);
- if (! in_p)
- {
- ira_assert (out_p);
-- move_out_cost = ira_may_move_out_cost[mode];
-- for (k = cost_classes_ptr->num - 1; k >= 0; k--)
-+ if (op_class == NO_REGS)
- {
-- rclass = cost_classes[k];
-- pp_costs[k]
-- = move_out_cost[op_class][rclass] * frequency;
-+ mem_cost = ira_memory_move_cost[mode];
-+ for (k = cost_classes_ptr->num - 1; k >= 0; k--)
-+ {
-+ rclass = cost_classes[k];
-+ pp_costs[k] = mem_cost[rclass][0] * frequency;
-+ }
- }
-+ else
-+ {
-+ move_out_cost = ira_may_move_out_cost[mode];
-+ for (k = cost_classes_ptr->num - 1; k >= 0; k--)
-+ {
-+ rclass = cost_classes[k];
-+ pp_costs[k]
-+ = move_out_cost[op_class][rclass] * frequency;
-+ }
-+ }
- }
- else if (! out_p)
- {
- ira_assert (in_p);
-- move_in_cost = ira_may_move_in_cost[mode];
-- for (k = cost_classes_ptr->num - 1; k >= 0; k--)
-+ if (op_class == NO_REGS)
- {
-- rclass = cost_classes[k];
-- pp_costs[k]
-- = move_in_cost[rclass][op_class] * frequency;
-+ mem_cost = ira_memory_move_cost[mode];
-+ for (k = cost_classes_ptr->num - 1; k >= 0; k--)
-+ {
-+ rclass = cost_classes[k];
-+ pp_costs[k] = mem_cost[rclass][1] * frequency;
-+ }
- }
-+ else
-+ {
-+ move_in_cost = ira_may_move_in_cost[mode];
-+ for (k = cost_classes_ptr->num - 1; k >= 0; k--)
-+ {
-+ rclass = cost_classes[k];
-+ pp_costs[k]
-+ = move_in_cost[rclass][op_class] * frequency;
-+ }
-+ }
- }
- else
- {
-- move_in_cost = ira_may_move_in_cost[mode];
-- move_out_cost = ira_may_move_out_cost[mode];
-- for (k = cost_classes_ptr->num - 1; k >= 0; k--)
-+ if (op_class == NO_REGS)
- {
-- rclass = cost_classes[k];
-- pp_costs[k] = ((move_in_cost[rclass][op_class]
-- + move_out_cost[op_class][rclass])
-- * frequency);
-+ mem_cost = ira_memory_move_cost[mode];
-+ for (k = cost_classes_ptr->num - 1; k >= 0; k--)
-+ {
-+ rclass = cost_classes[k];
-+ pp_costs[k] = ((mem_cost[rclass][0]
-+ + mem_cost[rclass][1])
-+ * frequency);
-+ }
- }
-+ else
-+ {
-+ move_in_cost = ira_may_move_in_cost[mode];
-+ move_out_cost = ira_may_move_out_cost[mode];
-+ for (k = cost_classes_ptr->num - 1; k >= 0; k--)
-+ {
-+ rclass = cost_classes[k];
-+ pp_costs[k] = ((move_in_cost[rclass][op_class]
-+ + move_out_cost[op_class][rclass])
-+ * frequency);
-+ }
-+ }
- }
-
- /* If the alternative actually allows memory, make
-@@ -762,10 +801,11 @@
- into that class. */
- if (REG_P (op) && REGNO (op) >= FIRST_PSEUDO_REGISTER)
- {
-- if (classes[i] == NO_REGS)
-+ if (classes[i] == NO_REGS && ! allows_mem[i])
- {
- /* We must always fail if the operand is a REG, but
-- we did not find a suitable class.
-+ we did not find a suitable class and memory is
-+ not allowed.
-
- Otherwise we may perform an uninitialized read
- from this_op_costs after the `continue' statement
-@@ -782,51 +822,94 @@
- bool in_p = recog_data.operand_type[i] != OP_OUT;
- bool out_p = recog_data.operand_type[i] != OP_IN;
- enum reg_class op_class = classes[i];
-- move_table *move_in_cost, *move_out_cost;
-
- ira_init_register_move_cost_if_necessary (mode);
- if (! in_p)
- {
- ira_assert (out_p);
-- move_out_cost = ira_may_move_out_cost[mode];
-- for (k = cost_classes_ptr->num - 1; k >= 0; k--)
-+ if (op_class == NO_REGS)
- {
-- rclass = cost_classes[k];
-- pp_costs[k]
-- = move_out_cost[op_class][rclass] * frequency;
-+ mem_cost = ira_memory_move_cost[mode];
-+ for (k = cost_classes_ptr->num - 1; k >= 0; k--)
-+ {
-+ rclass = cost_classes[k];
-+ pp_costs[k] = mem_cost[rclass][0] * frequency;
-+ }
- }
-+ else
-+ {
-+ move_out_cost = ira_may_move_out_cost[mode];
-+ for (k = cost_classes_ptr->num - 1; k >= 0; k--)
-+ {
-+ rclass = cost_classes[k];
-+ pp_costs[k]
-+ = move_out_cost[op_class][rclass] * frequency;
-+ }
-+ }
- }
- else if (! out_p)
- {
- ira_assert (in_p);
-- move_in_cost = ira_may_move_in_cost[mode];
-- for (k = cost_classes_ptr->num - 1; k >= 0; k--)
-+ if (op_class == NO_REGS)
- {
-- rclass = cost_classes[k];
-- pp_costs[k]
-- = move_in_cost[rclass][op_class] * frequency;
-+ mem_cost = ira_memory_move_cost[mode];
-+ for (k = cost_classes_ptr->num - 1; k >= 0; k--)
-+ {
-+ rclass = cost_classes[k];
-+ pp_costs[k] = mem_cost[rclass][1] * frequency;
-+ }
- }
-+ else
-+ {
-+ move_in_cost = ira_may_move_in_cost[mode];
-+ for (k = cost_classes_ptr->num - 1; k >= 0; k--)
-+ {
-+ rclass = cost_classes[k];
-+ pp_costs[k]
-+ = move_in_cost[rclass][op_class] * frequency;
-+ }
-+ }
- }
- else
- {
-- move_in_cost = ira_may_move_in_cost[mode];
-- move_out_cost = ira_may_move_out_cost[mode];
-- for (k = cost_classes_ptr->num - 1; k >= 0; k--)
-+ if (op_class == NO_REGS)
- {
-- rclass = cost_classes[k];
-- pp_costs[k] = ((move_in_cost[rclass][op_class]
-- + move_out_cost[op_class][rclass])
-- * frequency);
-+ mem_cost = ira_memory_move_cost[mode];
-+ for (k = cost_classes_ptr->num - 1; k >= 0; k--)
-+ {
-+ rclass = cost_classes[k];
-+ pp_costs[k] = ((mem_cost[rclass][0]
-+ + mem_cost[rclass][1])
-+ * frequency);
-+ }
- }
-+ else
-+ {
-+ move_in_cost = ira_may_move_in_cost[mode];
-+ move_out_cost = ira_may_move_out_cost[mode];
-+ for (k = cost_classes_ptr->num - 1; k >= 0; k--)
-+ {
-+ rclass = cost_classes[k];
-+ pp_costs[k] = ((move_in_cost[rclass][op_class]
-+ + move_out_cost[op_class][rclass])
-+ * frequency);
-+ }
-+ }
- }
-
-- /* If the alternative actually allows memory, make
-- things a bit cheaper since we won't need an extra
-- insn to load it. */
-- pp->mem_cost
-- = ((out_p ? ira_memory_move_cost[mode][op_class][0] : 0)
-- + (in_p ? ira_memory_move_cost[mode][op_class][1] : 0)
-- - allows_mem[i]) * frequency;
-+ if (op_class == NO_REGS)
-+ /* Although we don't need insn to reload from
-+ memory, still accessing memory is usually more
-+ expensive than a register. */
-+ pp->mem_cost = frequency;
-+ else
-+ /* If the alternative actually allows memory, make
-+ things a bit cheaper since we won't need an
-+ extra insn to load it. */
-+ pp->mem_cost
-+ = ((out_p ? ira_memory_move_cost[mode][op_class][0] : 0)
-+ + (in_p ? ira_memory_move_cost[mode][op_class][1] : 0)
-+ - allows_mem[i]) * frequency;
- /* If we have assigned a class to this allocno in
- our first pass, add a cost to this alternative
- corresponding to what we would add if this
-@@ -836,15 +919,28 @@
- enum reg_class pref_class = pref[COST_INDEX (REGNO (op))];
-
- if (pref_class == NO_REGS)
-+ {
-+ if (op_class != NO_REGS)
-+ alt_cost
-+ += ((out_p
-+ ? ira_memory_move_cost[mode][op_class][0]
-+ : 0)
-+ + (in_p
-+ ? ira_memory_move_cost[mode][op_class][1]
-+ : 0));
-+ }
-+ else if (op_class == NO_REGS)
- alt_cost
- += ((out_p
-- ? ira_memory_move_cost[mode][op_class][0] : 0)
-+ ? ira_memory_move_cost[mode][pref_class][1]
-+ : 0)
- + (in_p
-- ? ira_memory_move_cost[mode][op_class][1]
-+ ? ira_memory_move_cost[mode][pref_class][0]
- : 0));
- else if (ira_reg_class_intersect[pref_class][op_class]
- == NO_REGS)
-- alt_cost += ira_register_move_cost[mode][pref_class][op_class];
-+ alt_cost += (ira_register_move_cost
-+ [mode][pref_class][op_class]);
- }
- }
- }
-Index: gcc/tree-inline.c
-===================================================================
---- a/src/gcc/tree-inline.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/tree-inline.c (.../branches/gcc-4_9-branch)
-@@ -1485,6 +1485,11 @@
- /* Create a new deep copy of the statement. */
- copy = gimple_copy (stmt);
-
-+ /* Clear flags that need revisiting. */
-+ if (is_gimple_call (copy)
-+ && gimple_call_tail_p (copy))
-+ gimple_call_set_tail (copy, false);
-+
- /* Remap the region numbers for __builtin_eh_{pointer,filter},
- RESX and EH_DISPATCH. */
- if (id->eh_map)
-@@ -3119,7 +3124,8 @@
- {
- var = return_slot;
- gcc_assert (TREE_CODE (var) != SSA_NAME);
-- TREE_ADDRESSABLE (var) |= TREE_ADDRESSABLE (result);
-+ if (TREE_ADDRESSABLE (result))
-+ mark_addressable (var);
- }
- if ((TREE_CODE (TREE_TYPE (result)) == COMPLEX_TYPE
- || TREE_CODE (TREE_TYPE (result)) == VECTOR_TYPE)
-Index: gcc/tree-streamer-in.c
-===================================================================
---- a/src/gcc/tree-streamer-in.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/tree-streamer-in.c (.../branches/gcc-4_9-branch)
-@@ -167,6 +167,9 @@
- REAL_VALUE_TYPE r;
- REAL_VALUE_TYPE *rp;
-
-+ /* Clear all bits of the real value type so that we can later do
-+ bitwise comparisons to see if two values are the same. */
-+ memset (&r, 0, sizeof r);
- r.cl = (unsigned) bp_unpack_value (bp, 2);
- r.decimal = (unsigned) bp_unpack_value (bp, 1);
- r.sign = (unsigned) bp_unpack_value (bp, 1);
-Index: gcc/symtab.c
-===================================================================
---- a/src/gcc/symtab.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/symtab.c (.../branches/gcc-4_9-branch)
-@@ -323,16 +323,11 @@
- *slot = node;
- }
-
--/* Remove node from symbol table. This function is not used directly, but via
-- cgraph/varpool node removal routines. */
-+/* Remove NODE from same comdat group. */
-
- void
--symtab_unregister_node (symtab_node *node)
-+symtab_remove_from_same_comdat_group (symtab_node *node)
- {
-- void **slot;
-- ipa_remove_all_references (&node->ref_list);
-- ipa_remove_all_referring (&node->ref_list);
--
- if (node->same_comdat_group)
- {
- symtab_node *prev;
-@@ -346,7 +341,20 @@
- prev->same_comdat_group = node->same_comdat_group;
- node->same_comdat_group = NULL;
- }
-+}
-
-+/* Remove node from symbol table. This function is not used directly, but via
-+ cgraph/varpool node removal routines. */
-+
-+void
-+symtab_unregister_node (symtab_node *node)
-+{
-+ void **slot;
-+ ipa_remove_all_references (&node->ref_list);
-+ ipa_remove_all_referring (&node->ref_list);
-+
-+ symtab_remove_from_same_comdat_group (node);
-+
- if (node->previous)
- node->previous->next = node->next;
- else
-@@ -829,6 +837,16 @@
- error ("non-DECL_ONE_ONLY node in a same_comdat_group list");
- error_found = true;
- }
-+ if (DECL_COMDAT_GROUP (n->decl) != DECL_COMDAT_GROUP (node->same_comdat_group->decl))
-+ {
-+ error ("same_comdat_group list across different groups");
-+ error_found = true;
-+ }
-+ if (!n->definition)
-+ {
-+ error ("Node has same_comdat_group but it is not a definition");
-+ error_found = true;
-+ }
- if (n->type != node->type)
- {
- error ("mixing different types of symbol in same comdat groups is not supported");
-Index: gcc/combine.c
-===================================================================
---- a/src/gcc/combine.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/combine.c (.../branches/gcc-4_9-branch)
-@@ -11987,7 +11987,7 @@
- = (unsigned HOST_WIDE_INT) 1 << (GET_MODE_BITSIZE (mode) - 1);
- op0 = simplify_gen_binary (AND, tmode,
- gen_lowpart (tmode, op0),
-- gen_int_mode (sign, mode));
-+ gen_int_mode (sign, tmode));
- code = (code == LT) ? NE : EQ;
- break;
- }
-Index: gcc/tree-vect-generic.c
-===================================================================
---- a/src/gcc/tree-vect-generic.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/tree-vect-generic.c (.../branches/gcc-4_9-branch)
-@@ -971,7 +971,8 @@
-
- if (!optimize
- || !VECTOR_INTEGER_TYPE_P (type)
-- || TREE_CODE (rhs2) != VECTOR_CST)
-+ || TREE_CODE (rhs2) != VECTOR_CST
-+ || !VECTOR_MODE_P (TYPE_MODE (type)))
- break;
-
- ret = expand_vector_divmod (gsi, type, rhs1, rhs2, code);
-@@ -1335,6 +1336,59 @@
- update_stmt (gsi_stmt (*gsi));
- }
-
-+/* Return type in which CODE operation with optab OP can be
-+ computed. */
-+
-+static tree
-+get_compute_type (enum tree_code code, optab op, tree type)
-+{
-+ /* For very wide vectors, try using a smaller vector mode. */
-+ tree compute_type = type;
-+ if (op
-+ && (!VECTOR_MODE_P (TYPE_MODE (type))
-+ || optab_handler (op, TYPE_MODE (type)) == CODE_FOR_nothing))
-+ {
-+ tree vector_compute_type
-+ = type_for_widest_vector_mode (TREE_TYPE (type), op);
-+ if (vector_compute_type != NULL_TREE
-+ && (TYPE_VECTOR_SUBPARTS (vector_compute_type)
-+ < TYPE_VECTOR_SUBPARTS (compute_type))
-+ && (optab_handler (op, TYPE_MODE (vector_compute_type))
-+ != CODE_FOR_nothing))
-+ compute_type = vector_compute_type;
-+ }
-+
-+ /* If we are breaking a BLKmode vector into smaller pieces,
-+ type_for_widest_vector_mode has already looked into the optab,
-+ so skip these checks. */
-+ if (compute_type == type)
-+ {
-+ enum machine_mode compute_mode = TYPE_MODE (compute_type);
-+ if (VECTOR_MODE_P (compute_mode))
-+ {
-+ if (op && optab_handler (op, compute_mode) != CODE_FOR_nothing)
-+ return compute_type;
-+ if (code == MULT_HIGHPART_EXPR
-+ && can_mult_highpart_p (compute_mode,
-+ TYPE_UNSIGNED (compute_type)))
-+ return compute_type;
-+ }
-+ /* There is no operation in hardware, so fall back to scalars. */
-+ compute_type = TREE_TYPE (type);
-+ }
-+
-+ return compute_type;
-+}
-+
-+/* Helper function of expand_vector_operations_1. Return number of
-+ vector elements for vector types or 1 for other types. */
-+
-+static inline int
-+count_type_subparts (tree type)
-+{
-+ return VECTOR_TYPE_P (type) ? TYPE_VECTOR_SUBPARTS (type) : 1;
-+}
-+
- /* Process one statement. If we identify a vector operation, expand it. */
-
- static void
-@@ -1341,9 +1395,8 @@
- expand_vector_operations_1 (gimple_stmt_iterator *gsi)
- {
- gimple stmt = gsi_stmt (*gsi);
-- tree lhs, rhs1, rhs2 = NULL, type, compute_type;
-+ tree lhs, rhs1, rhs2 = NULL, type, compute_type = NULL_TREE;
- enum tree_code code;
-- enum machine_mode compute_mode;
- optab op = unknown_optab;
- enum gimple_rhs_class rhs_class;
- tree new_rhs;
-@@ -1456,11 +1509,76 @@
- {
- op = optab_for_tree_code (code, type, optab_scalar);
-
-+ compute_type = get_compute_type (code, op, type);
-+ if (compute_type == type)
-+ return;
- /* The rtl expander will expand vector/scalar as vector/vector
-- if necessary. Don't bother converting the stmt here. */
-- if (optab_handler (op, TYPE_MODE (type)) == CODE_FOR_nothing
-- && optab_handler (opv, TYPE_MODE (type)) != CODE_FOR_nothing)
-+ if necessary. Pick one with wider vector type. */
-+ tree compute_vtype = get_compute_type (code, opv, type);
-+ if (count_type_subparts (compute_vtype)
-+ > count_type_subparts (compute_type))
-+ {
-+ compute_type = compute_vtype;
-+ op = opv;
-+ }
-+ }
-+
-+ if (code == LROTATE_EXPR || code == RROTATE_EXPR)
-+ {
-+ if (compute_type == NULL_TREE)
-+ compute_type = get_compute_type (code, op, type);
-+ if (compute_type == type)
- return;
-+ /* Before splitting vector rotates into scalar rotates,
-+ see if we can't use vector shifts and BIT_IOR_EXPR
-+ instead. For vector by vector rotates we'd also
-+ need to check BIT_AND_EXPR and NEGATE_EXPR, punt there
-+ for now, fold doesn't seem to create such rotates anyway. */
-+ if (compute_type == TREE_TYPE (type)
-+ && !VECTOR_INTEGER_TYPE_P (TREE_TYPE (rhs2)))
-+ {
-+ optab oplv = vashl_optab, opl = ashl_optab;
-+ optab oprv = vlshr_optab, opr = lshr_optab, opo = ior_optab;
-+ tree compute_lvtype = get_compute_type (LSHIFT_EXPR, oplv, type);
-+ tree compute_rvtype = get_compute_type (RSHIFT_EXPR, oprv, type);
-+ tree compute_otype = get_compute_type (BIT_IOR_EXPR, opo, type);
-+ tree compute_ltype = get_compute_type (LSHIFT_EXPR, opl, type);
-+ tree compute_rtype = get_compute_type (RSHIFT_EXPR, opr, type);
-+ /* The rtl expander will expand vector/scalar as vector/vector
-+ if necessary. Pick one with wider vector type. */
-+ if (count_type_subparts (compute_lvtype)
-+ > count_type_subparts (compute_ltype))
-+ {
-+ compute_ltype = compute_lvtype;
-+ opl = oplv;
-+ }
-+ if (count_type_subparts (compute_rvtype)
-+ > count_type_subparts (compute_rtype))
-+ {
-+ compute_rtype = compute_rvtype;
-+ opr = oprv;
-+ }
-+ /* Pick the narrowest type from LSHIFT_EXPR, RSHIFT_EXPR and
-+ BIT_IOR_EXPR. */
-+ compute_type = compute_ltype;
-+ if (count_type_subparts (compute_type)
-+ > count_type_subparts (compute_rtype))
-+ compute_type = compute_rtype;
-+ if (count_type_subparts (compute_type)
-+ > count_type_subparts (compute_otype))
-+ compute_type = compute_otype;
-+ /* Verify all 3 operations can be performed in that type. */
-+ if (compute_type != TREE_TYPE (type))
-+ {
-+ if (optab_handler (opl, TYPE_MODE (compute_type))
-+ == CODE_FOR_nothing
-+ || optab_handler (opr, TYPE_MODE (compute_type))
-+ == CODE_FOR_nothing
-+ || optab_handler (opo, TYPE_MODE (compute_type))
-+ == CODE_FOR_nothing)
-+ compute_type = TREE_TYPE (type);
-+ }
-+ }
- }
- }
- else
-@@ -1474,38 +1592,10 @@
- && INTEGRAL_TYPE_P (TREE_TYPE (type)))
- op = optab_for_tree_code (MINUS_EXPR, type, optab_default);
-
-- /* For very wide vectors, try using a smaller vector mode. */
-- compute_type = type;
-- if (!VECTOR_MODE_P (TYPE_MODE (type)) && op)
-- {
-- tree vector_compute_type
-- = type_for_widest_vector_mode (TREE_TYPE (type), op);
-- if (vector_compute_type != NULL_TREE
-- && (TYPE_VECTOR_SUBPARTS (vector_compute_type)
-- < TYPE_VECTOR_SUBPARTS (compute_type))
-- && (optab_handler (op, TYPE_MODE (vector_compute_type))
-- != CODE_FOR_nothing))
-- compute_type = vector_compute_type;
-- }
--
-- /* If we are breaking a BLKmode vector into smaller pieces,
-- type_for_widest_vector_mode has already looked into the optab,
-- so skip these checks. */
-+ if (compute_type == NULL_TREE)
-+ compute_type = get_compute_type (code, op, type);
- if (compute_type == type)
-- {
-- compute_mode = TYPE_MODE (compute_type);
-- if (VECTOR_MODE_P (compute_mode))
-- {
-- if (op && optab_handler (op, compute_mode) != CODE_FOR_nothing)
-- return;
-- if (code == MULT_HIGHPART_EXPR
-- && can_mult_highpart_p (compute_mode,
-- TYPE_UNSIGNED (compute_type)))
-- return;
-- }
-- /* There is no operation in hardware, so fall back to scalars. */
-- compute_type = TREE_TYPE (type);
-- }
-+ return;
-
- gcc_assert (code != VEC_LSHIFT_EXPR && code != VEC_RSHIFT_EXPR);
- new_rhs = expand_vector_operation (gsi, type, compute_type, stmt, code);
-Index: gcc/config.gcc
-===================================================================
---- a/src/gcc/config.gcc (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config.gcc (.../branches/gcc-4_9-branch)
-@@ -1021,7 +1021,7 @@
- ;;
- esac
- tmake_file="${tmake_file} arm/t-arm arm/t-arm-elf arm/t-bpabi arm/t-linux-eabi"
-- tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h arm/aout.h arm/arm.h"
-+ tm_file="$tm_file arm/bpabi.h arm/linux-eabi.h arm/aout.h vxworks-dummy.h arm/arm.h"
- # Define multilib configuration for arm-linux-androideabi.
- case ${target} in
- *-androideabi)
-@@ -2131,7 +2131,6 @@
- tm_file="dbxelf.h elfos.h newlib-stdint.h ${tm_file}"
- c_target_objs="msp430-c.o"
- cxx_target_objs="msp430-c.o"
-- target_has_targetm_common=no
- tmake_file="${tmake_file} msp430/t-msp430"
- ;;
- nds32le-*-*)
-Index: gcc/tree-ssa-structalias.c
-===================================================================
---- a/src/gcc/tree-ssa-structalias.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/tree-ssa-structalias.c (.../branches/gcc-4_9-branch)
-@@ -6091,6 +6091,10 @@
- pt->ipa_escaped = 1;
- else
- pt->escaped = 1;
-+ /* Expand some special vars of ESCAPED in-place here. */
-+ varinfo_t evi = get_varinfo (find (escaped_id));
-+ if (bitmap_bit_p (evi->solution, nonlocal_id))
-+ pt->nonlocal = 1;
- }
- else if (vi->id == nonlocal_id)
- pt->nonlocal = 1;
-@@ -7264,10 +7268,7 @@
- tree ptr;
- struct function *fn;
- unsigned i;
-- varinfo_t fi;
- basic_block bb;
-- struct pt_solution uses, clobbers;
-- struct cgraph_edge *e;
-
- /* Nodes without a body are not interesting. */
- if (!cgraph_function_with_gimple_body_p (node) || node->clone_of)
-@@ -7283,21 +7284,6 @@
- find_what_p_points_to (ptr);
- }
-
-- /* Compute the call-use and call-clobber sets for all direct calls. */
-- fi = lookup_vi_for_tree (node->decl);
-- gcc_assert (fi->is_fn_info);
-- clobbers
-- = find_what_var_points_to (first_vi_for_offset (fi, fi_clobbers));
-- uses = find_what_var_points_to (first_vi_for_offset (fi, fi_uses));
-- for (e = node->callers; e; e = e->next_caller)
-- {
-- if (!e->call_stmt)
-- continue;
--
-- *gimple_call_clobber_set (e->call_stmt) = clobbers;
-- *gimple_call_use_set (e->call_stmt) = uses;
-- }
--
- /* Compute the call-use and call-clobber sets for indirect calls
- and calls to external functions. */
- FOR_EACH_BB_FN (bb, fn)
-@@ -7308,18 +7294,28 @@
- {
- gimple stmt = gsi_stmt (gsi);
- struct pt_solution *pt;
-- varinfo_t vi;
-+ varinfo_t vi, fi;
- tree decl;
-
- if (!is_gimple_call (stmt))
- continue;
-
-- /* Handle direct calls to external functions. */
-+ /* Handle direct calls to functions with body. */
- decl = gimple_call_fndecl (stmt);
- if (decl
-- && (!(fi = lookup_vi_for_tree (decl))
-- || !fi->is_fn_info))
-+ && (fi = lookup_vi_for_tree (decl))
-+ && fi->is_fn_info)
- {
-+ *gimple_call_clobber_set (stmt)
-+ = find_what_var_points_to
-+ (first_vi_for_offset (fi, fi_clobbers));
-+ *gimple_call_use_set (stmt)
-+ = find_what_var_points_to
-+ (first_vi_for_offset (fi, fi_uses));
-+ }
-+ /* Handle direct calls to external functions. */
-+ else if (decl)
-+ {
- pt = gimple_call_use_set (stmt);
- if (gimple_call_flags (stmt) & ECF_CONST)
- memset (pt, 0, sizeof (struct pt_solution));
-@@ -7362,10 +7358,9 @@
- pt->nonlocal = 1;
- }
- }
--
- /* Handle indirect calls. */
-- if (!decl
-- && (fi = get_fi_for_callee (stmt)))
-+ else if (!decl
-+ && (fi = get_fi_for_callee (stmt)))
- {
- /* We need to accumulate all clobbers/uses of all possible
- callees. */
-Index: gcc/tree-core.h
-===================================================================
---- a/src/gcc/tree-core.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/tree-core.h (.../branches/gcc-4_9-branch)
-@@ -987,7 +987,7 @@
- SSA_NAME_IN_FREELIST in
- SSA_NAME
-
-- VAR_DECL_NONALIASED in
-+ DECL_NONALIASED in
- VAR_DECL
-
- deprecated_flag:
-@@ -1127,6 +1127,11 @@
- array sections. OMP_CLAUSE_SIZE for these is not the pointer size,
- which is implicitly POINTER_SIZE / BITS_PER_UNIT, but the bias. */
- OMP_CLAUSE_MAP_POINTER,
-+ /* Also internal, behaves like OMP_CLAUS_MAP_TO, but additionally any
-+ OMP_CLAUSE_MAP_POINTER records consecutive after it which have addresses
-+ falling into that range will not be ignored if OMP_CLAUSE_MAP_TO_PSET
-+ wasn't mapped already. */
-+ OMP_CLAUSE_MAP_TO_PSET,
- OMP_CLAUSE_MAP_LAST
- };
-
-Index: gcc/passes.c
-===================================================================
---- a/src/gcc/passes.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/passes.c (.../branches/gcc-4_9-branch)
-@@ -2109,20 +2109,6 @@
- }
- }
-
--/* Callback for do_per_function to apply all IPA transforms. */
--
--static void
--apply_ipa_transforms (void *data)
--{
-- struct cgraph_node *node = cgraph_get_node (current_function_decl);
-- if (!node->global.inlined_to && node->ipa_transforms_to_apply.exists ())
-- {
-- *(bool *)data = true;
-- execute_all_ipa_transforms ();
-- rebuild_cgraph_edges ();
-- }
--}
--
- /* Check if PASS is explicitly disabled or enabled and return
- the gate status. FUNC is the function to be processed, and
- GATE_STATUS is the gate status determined by pass manager by
-@@ -2194,8 +2180,26 @@
- Apply all trnasforms first. */
- if (pass->type == SIMPLE_IPA_PASS)
- {
-+ struct cgraph_node *node;
- bool applied = false;
-- do_per_function (apply_ipa_transforms, (void *)&applied);
-+ FOR_EACH_DEFINED_FUNCTION (node)
-+ if (node->analyzed
-+ && cgraph_function_with_gimple_body_p (node)
-+ && (!node->clone_of || node->decl != node->clone_of->decl))
-+ {
-+ if (!node->global.inlined_to
-+ && node->ipa_transforms_to_apply.exists ())
-+ {
-+ cgraph_get_body (node);
-+ push_cfun (DECL_STRUCT_FUNCTION (node->decl));
-+ execute_all_ipa_transforms ();
-+ rebuild_cgraph_edges ();
-+ free_dominance_info (CDI_DOMINATORS);
-+ free_dominance_info (CDI_POST_DOMINATORS);
-+ pop_cfun ();
-+ applied = true;
-+ }
-+ }
- if (applied)
- symtab_remove_unreachable_nodes (true, dump_file);
- /* Restore current_pass. */
-Index: gcc/ree.c
-===================================================================
---- a/src/gcc/ree.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/ree.c (.../branches/gcc-4_9-branch)
-@@ -507,6 +507,8 @@
- /* Kind of modification of the insn. */
- ENUM_BITFIELD(ext_modified_kind) kind : 2;
-
-+ unsigned int do_not_reextend : 1;
-+
- /* True if the insn is scheduled to be deleted. */
- unsigned int deleted : 1;
- };
-@@ -712,8 +714,10 @@
- register than the source operand, then additional restrictions
- are needed. Note we have to handle cases where we have nested
- extensions in the source operand. */
-- if (REGNO (SET_DEST (PATTERN (cand->insn)))
-- != REGNO (get_extended_src_reg (SET_SRC (PATTERN (cand->insn)))))
-+ bool copy_needed
-+ = (REGNO (SET_DEST (PATTERN (cand->insn)))
-+ != REGNO (get_extended_src_reg (SET_SRC (PATTERN (cand->insn)))));
-+ if (copy_needed)
- {
- /* In theory we could handle more than one reaching def, it
- just makes the code to update the insn stream more complex. */
-@@ -722,7 +726,7 @@
-
- /* We require the candidate not already be modified. It may,
- for example have been changed from a (sign_extend (reg))
-- into (zero_extend (sign_extend (reg)).
-+ into (zero_extend (sign_extend (reg))).
-
- Handling that case shouldn't be terribly difficult, but the code
- here and the code to emit copies would need auditing. Until
-@@ -777,6 +781,34 @@
- || reg_set_between_p (SET_DEST (PATTERN (cand->insn)),
- def_insn, cand->insn))
- return false;
-+
-+ /* We must be able to copy between the two registers. Generate,
-+ recognize and verify constraints of the copy. Also fail if this
-+ generated more than one insn.
-+
-+ This generates garbage since we throw away the insn when we're
-+ done, only to recreate it later if this test was successful.
-+
-+ Make sure to get the mode from the extension (cand->insn). This
-+ is different than in the code to emit the copy as we have not
-+ modified the defining insn yet. */
-+ start_sequence ();
-+ rtx pat = PATTERN (cand->insn);
-+ rtx new_dst = gen_rtx_REG (GET_MODE (SET_DEST (pat)),
-+ REGNO (XEXP (SET_SRC (pat), 0)));
-+ rtx new_src = gen_rtx_REG (GET_MODE (SET_DEST (pat)),
-+ REGNO (SET_DEST (pat)));
-+ emit_move_insn (new_dst, new_src);
-+
-+ rtx insn = get_insns();
-+ end_sequence ();
-+ if (NEXT_INSN (insn))
-+ return false;
-+ if (recog_memoized (insn) == -1)
-+ return false;
-+ extract_insn (insn);
-+ if (!constrain_operands (1))
-+ return false;
- }
-
-
-@@ -843,11 +875,15 @@
- fprintf (dump_file, "All merges were successful.\n");
-
- FOR_EACH_VEC_ELT (state->modified_list, i, def_insn)
-- if (state->modified[INSN_UID (def_insn)].kind == EXT_MODIFIED_NONE)
-- state->modified[INSN_UID (def_insn)].kind
-- = (cand->code == ZERO_EXTEND
-- ? EXT_MODIFIED_ZEXT : EXT_MODIFIED_SEXT);
-+ {
-+ ext_modified *modified = &state->modified[INSN_UID (def_insn)];
-+ if (modified->kind == EXT_MODIFIED_NONE)
-+ modified->kind = (cand->code == ZERO_EXTEND ? EXT_MODIFIED_ZEXT
-+ : EXT_MODIFIED_SEXT);
-
-+ if (copy_needed)
-+ modified->do_not_reextend = 1;
-+ }
- return true;
- }
- else
-Index: gcc/tree-ssa-reassoc.c
-===================================================================
---- a/src/gcc/tree-ssa-reassoc.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/tree-ssa-reassoc.c (.../branches/gcc-4_9-branch)
-@@ -221,7 +221,36 @@
- static long get_rank (tree);
- static bool reassoc_stmt_dominates_stmt_p (gimple, gimple);
-
-+/* Wrapper around gsi_remove, which adjusts gimple_uid of debug stmts
-+ possibly added by gsi_remove. */
-
-+bool
-+reassoc_remove_stmt (gimple_stmt_iterator *gsi)
-+{
-+ gimple stmt = gsi_stmt (*gsi);
-+
-+ if (!MAY_HAVE_DEBUG_STMTS || gimple_code (stmt) == GIMPLE_PHI)
-+ return gsi_remove (gsi, true);
-+
-+ gimple_stmt_iterator prev = *gsi;
-+ gsi_prev (&prev);
-+ unsigned uid = gimple_uid (stmt);
-+ basic_block bb = gimple_bb (stmt);
-+ bool ret = gsi_remove (gsi, true);
-+ if (!gsi_end_p (prev))
-+ gsi_next (&prev);
-+ else
-+ prev = gsi_start_bb (bb);
-+ gimple end_stmt = gsi_stmt (*gsi);
-+ while ((stmt = gsi_stmt (prev)) != end_stmt)
-+ {
-+ gcc_assert (stmt && is_gimple_debug (stmt) && gimple_uid (stmt) == 0);
-+ gimple_set_uid (stmt, uid);
-+ gsi_next (&prev);
-+ }
-+ return ret;
-+}
-+
- /* Bias amount for loop-carried phis. We want this to be larger than
- the depth of any reassociation tree we can see, but not larger than
- the rank difference between two blocks. */
-@@ -1123,7 +1152,7 @@
- update_stmt (use_stmt);
- gsi = gsi_for_stmt (stmt);
- unlink_stmt_vdef (stmt);
-- gsi_remove (&gsi, true);
-+ reassoc_remove_stmt (&gsi);
- release_defs (stmt);
- }
-
-@@ -3072,7 +3101,7 @@
- {
- var = gimple_assign_rhs1 (stmt);
- gsi = gsi_for_stmt (stmt);
-- gsi_remove (&gsi, true);
-+ reassoc_remove_stmt (&gsi);
- release_defs (stmt);
- }
- else
-@@ -3494,7 +3523,7 @@
- update_stmt (stmt);
-
- gsi = gsi_for_stmt (oldbinrhs);
-- gsi_remove (&gsi, true);
-+ reassoc_remove_stmt (&gsi);
- release_defs (oldbinrhs);
-
- gimple_set_visited (stmt, true);
-@@ -3896,7 +3925,7 @@
- gimple_assign_set_rhs_with_ops (&gsi2, NEGATE_EXPR, x, NULL);
- user = gsi_stmt (gsi2);
- update_stmt (user);
-- gsi_remove (&gsi, true);
-+ reassoc_remove_stmt (&gsi);
- release_defs (feed);
- plus_negates.safe_push (gimple_assign_lhs (user));
- }
-@@ -4413,7 +4442,7 @@
- reassociations. */
- if (has_zero_uses (gimple_get_lhs (stmt)))
- {
-- gsi_remove (&gsi, true);
-+ reassoc_remove_stmt (&gsi);
- release_defs (stmt);
- /* We might end up removing the last stmt above which
- places the iterator to the end of the sequence.
-Index: gcc/config/alpha/alpha.c
-===================================================================
---- a/src/gcc/config/alpha/alpha.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/alpha/alpha.c (.../branches/gcc-4_9-branch)
-@@ -62,6 +62,7 @@
- #include "gimple-expr.h"
- #include "is-a.h"
- #include "gimple.h"
-+#include "gimple-iterator.h"
- #include "gimplify.h"
- #include "gimple-ssa.h"
- #include "stringpool.h"
-@@ -7042,9 +7043,6 @@
- case ALPHA_BUILTIN_MSKQH:
- return alpha_fold_builtin_mskxx (op, opint, op_const, 0xff, true);
-
-- case ALPHA_BUILTIN_UMULH:
-- return fold_build2 (MULT_HIGHPART_EXPR, alpha_dimode_u, op[0], op[1]);
--
- case ALPHA_BUILTIN_ZAP:
- opint[1] ^= 0xff;
- /* FALLTHRU */
-@@ -7094,6 +7092,49 @@
- return NULL;
- }
- }
-+
-+bool
-+alpha_gimple_fold_builtin (gimple_stmt_iterator *gsi)
-+{
-+ bool changed = false;
-+ gimple stmt = gsi_stmt (*gsi);
-+ tree call = gimple_call_fn (stmt);
-+ gimple new_stmt = NULL;
-+
-+ if (call)
-+ {
-+ tree fndecl = gimple_call_fndecl (stmt);
-+
-+ if (fndecl)
-+ {
-+ tree arg0, arg1;
-+
-+ switch (DECL_FUNCTION_CODE (fndecl))
-+ {
-+ case ALPHA_BUILTIN_UMULH:
-+ arg0 = gimple_call_arg (stmt, 0);
-+ arg1 = gimple_call_arg (stmt, 1);
-+
-+ new_stmt
-+ = gimple_build_assign_with_ops (MULT_HIGHPART_EXPR,
-+ gimple_call_lhs (stmt),
-+ arg0,
-+ arg1);
-+ break;
-+ default:
-+ break;
-+ }
-+ }
-+ }
-+
-+ if (new_stmt)
-+ {
-+ gsi_replace (gsi, new_stmt, true);
-+ changed = true;
-+ }
-+
-+ return changed;
-+}
-
- /* This page contains routines that are used to determine what the function
- prologue and epilogue code will do and write them out. */
-@@ -8674,6 +8715,11 @@
- }
- break;
-
-+ case BARRIER:
-+ /* __builtin_unreachable can expand to no code at all,
-+ leaving (barrier) RTXes in the instruction stream. */
-+ goto close_shadow_notrapb;
-+
- case JUMP_INSN:
- case CALL_INSN:
- case CODE_LABEL:
-@@ -8689,6 +8735,7 @@
- n = emit_insn_before (gen_trapb (), i);
- PUT_MODE (n, TImode);
- PUT_MODE (i, TImode);
-+ close_shadow_notrapb:
- trap_pending = 0;
- shadow.used.i = 0;
- shadow.used.fp = 0;
-@@ -9790,6 +9837,8 @@
- #define TARGET_EXPAND_BUILTIN alpha_expand_builtin
- #undef TARGET_FOLD_BUILTIN
- #define TARGET_FOLD_BUILTIN alpha_fold_builtin
-+#undef TARGET_GIMPLE_FOLD_BUILTIN
-+#define TARGET_GIMPLE_FOLD_BUILTIN alpha_gimple_fold_builtin
-
- #undef TARGET_FUNCTION_OK_FOR_SIBCALL
- #define TARGET_FUNCTION_OK_FOR_SIBCALL alpha_function_ok_for_sibcall
-Index: gcc/config/sparc/sparc.md
-===================================================================
---- a/src/gcc/config/sparc/sparc.md (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/sparc/sparc.md (.../branches/gcc-4_9-branch)
-@@ -424,6 +424,10 @@
- (define_attr "fptype" "single,double"
- (const_string "single"))
-
-+;; FP precision specific to the UT699.
-+(define_attr "fptype_ut699" "none,single"
-+ (const_string "none"))
-+
- ;; UltraSPARC-III integer load type.
- (define_attr "us3load_type" "2cycle,3cycle"
- (const_string "2cycle"))
-@@ -464,7 +468,8 @@
- (const_string "false")
- (and (eq_attr "fix_ut699" "true")
- (and (eq_attr "type" "fpload,fp,fpmove,fpmul,fpdivs,fpsqrts")
-- (eq_attr "fptype" "single")))
-+ (ior (eq_attr "fptype" "single")
-+ (eq_attr "fptype_ut699" "single"))))
- (const_string "false")
- (eq_attr "length" "1")
- (const_string "true")
-@@ -3455,7 +3460,8 @@
- "TARGET_FPU"
- "fdtos\t%1, %0"
- [(set_attr "type" "fp")
-- (set_attr "fptype" "double")])
-+ (set_attr "fptype" "double")
-+ (set_attr "fptype_ut699" "single")])
-
- (define_expand "trunctfsf2"
- [(set (match_operand:SF 0 "register_operand" "")
-@@ -3496,7 +3502,7 @@
- "TARGET_FPU"
- "fitos\t%1, %0"
- [(set_attr "type" "fp")
-- (set_attr "fptype" "double")])
-+ (set_attr "fptype" "single")])
-
- (define_insn "floatsidf2"
- [(set (match_operand:DF 0 "register_operand" "=e")
-@@ -3583,7 +3589,7 @@
- "TARGET_FPU"
- "fstoi\t%1, %0"
- [(set_attr "type" "fp")
-- (set_attr "fptype" "double")])
-+ (set_attr "fptype" "single")])
-
- (define_insn "fix_truncdfsi2"
- [(set (match_operand:SI 0 "register_operand" "=f")
-@@ -3591,7 +3597,8 @@
- "TARGET_FPU"
- "fdtoi\t%1, %0"
- [(set_attr "type" "fp")
-- (set_attr "fptype" "double")])
-+ (set_attr "fptype" "double")
-+ (set_attr "fptype_ut699" "single")])
-
- (define_expand "fix_trunctfsi2"
- [(set (match_operand:SI 0 "register_operand" "")
-@@ -5554,54 +5561,53 @@
- [(set_attr "type" "fpdivs")])
-
- (define_expand "negtf2"
-- [(set (match_operand:TF 0 "register_operand" "=e,e")
-- (neg:TF (match_operand:TF 1 "register_operand" "0,e")))]
-+ [(set (match_operand:TF 0 "register_operand" "")
-+ (neg:TF (match_operand:TF 1 "register_operand" "")))]
- "TARGET_FPU"
- "")
-
--(define_insn_and_split "*negtf2_notv9"
-- [(set (match_operand:TF 0 "register_operand" "=e,e")
-- (neg:TF (match_operand:TF 1 "register_operand" "0,e")))]
-- ; We don't use quad float insns here so we don't need TARGET_HARD_QUAD.
-- "TARGET_FPU
-- && ! TARGET_V9"
-- "@
-- fnegs\t%0, %0
-- #"
-- "&& reload_completed
-- && sparc_absnegfloat_split_legitimate (operands[0], operands[1])"
-- [(set (match_dup 2) (neg:SF (match_dup 3)))
-- (set (match_dup 4) (match_dup 5))
-- (set (match_dup 6) (match_dup 7))]
-- "operands[2] = gen_rtx_raw_REG (SFmode, REGNO (operands[0]));
-- operands[3] = gen_rtx_raw_REG (SFmode, REGNO (operands[1]));
-- operands[4] = gen_rtx_raw_REG (SFmode, REGNO (operands[0]) + 1);
-- operands[5] = gen_rtx_raw_REG (SFmode, REGNO (operands[1]) + 1);
-- operands[6] = gen_rtx_raw_REG (DFmode, REGNO (operands[0]) + 2);
-- operands[7] = gen_rtx_raw_REG (DFmode, REGNO (operands[1]) + 2);"
-- [(set_attr "type" "fpmove,*")
-- (set_attr "length" "*,2")])
-+(define_insn "*negtf2_hq"
-+ [(set (match_operand:TF 0 "register_operand" "=e")
-+ (neg:TF (match_operand:TF 1 "register_operand" "e")))]
-+ "TARGET_FPU && TARGET_HARD_QUAD"
-+ "fnegq\t%1, %0"
-+ [(set_attr "type" "fpmove")])
-
--(define_insn_and_split "*negtf2_v9"
-- [(set (match_operand:TF 0 "register_operand" "=e,e")
-- (neg:TF (match_operand:TF 1 "register_operand" "0,e")))]
-- ; We don't use quad float insns here so we don't need TARGET_HARD_QUAD.
-- "TARGET_FPU && TARGET_V9"
-- "@
-- fnegd\t%0, %0
-- #"
-- "&& reload_completed
-- && sparc_absnegfloat_split_legitimate (operands[0], operands[1])"
-- [(set (match_dup 2) (neg:DF (match_dup 3)))
-- (set (match_dup 4) (match_dup 5))]
-- "operands[2] = gen_rtx_raw_REG (DFmode, REGNO (operands[0]));
-- operands[3] = gen_rtx_raw_REG (DFmode, REGNO (operands[1]));
-- operands[4] = gen_rtx_raw_REG (DFmode, REGNO (operands[0]) + 2);
-- operands[5] = gen_rtx_raw_REG (DFmode, REGNO (operands[1]) + 2);"
-- [(set_attr "type" "fpmove,*")
-- (set_attr "length" "*,2")
-- (set_attr "fptype" "double")])
-+(define_insn_and_split "*negtf2"
-+ [(set (match_operand:TF 0 "register_operand" "=e")
-+ (neg:TF (match_operand:TF 1 "register_operand" "e")))]
-+ "TARGET_FPU && !TARGET_HARD_QUAD"
-+ "#"
-+ "&& reload_completed"
-+ [(clobber (const_int 0))]
-+{
-+ rtx set_dest = operands[0];
-+ rtx set_src = operands[1];
-+ rtx dest1, dest2;
-+ rtx src1, src2;
-
-+ dest1 = gen_df_reg (set_dest, 0);
-+ dest2 = gen_df_reg (set_dest, 1);
-+ src1 = gen_df_reg (set_src, 0);
-+ src2 = gen_df_reg (set_src, 1);
-+
-+ /* Now emit using the real source and destination we found, swapping
-+ the order if we detect overlap. */
-+ if (reg_overlap_mentioned_p (dest1, src2))
-+ {
-+ emit_insn (gen_movdf (dest2, src2));
-+ emit_insn (gen_negdf2 (dest1, src1));
-+ }
-+ else
-+ {
-+ emit_insn (gen_negdf2 (dest1, src1));
-+ if (REGNO (dest2) != REGNO (src2))
-+ emit_insn (gen_movdf (dest2, src2));
-+ }
-+ DONE;
-+}
-+ [(set_attr "length" "2")])
-+
- (define_expand "negdf2"
- [(set (match_operand:DF 0 "register_operand" "")
- (neg:DF (match_operand:DF 1 "register_operand" "")))]
-@@ -5609,23 +5615,40 @@
- "")
-
- (define_insn_and_split "*negdf2_notv9"
-- [(set (match_operand:DF 0 "register_operand" "=e,e")
-- (neg:DF (match_operand:DF 1 "register_operand" "0,e")))]
-- "TARGET_FPU && ! TARGET_V9"
-- "@
-- fnegs\t%0, %0
-- #"
-- "&& reload_completed
-- && sparc_absnegfloat_split_legitimate (operands[0], operands[1])"
-- [(set (match_dup 2) (neg:SF (match_dup 3)))
-- (set (match_dup 4) (match_dup 5))]
-- "operands[2] = gen_rtx_raw_REG (SFmode, REGNO (operands[0]));
-- operands[3] = gen_rtx_raw_REG (SFmode, REGNO (operands[1]));
-- operands[4] = gen_rtx_raw_REG (SFmode, REGNO (operands[0]) + 1);
-- operands[5] = gen_rtx_raw_REG (SFmode, REGNO (operands[1]) + 1);"
-- [(set_attr "type" "fpmove,*")
-- (set_attr "length" "*,2")])
-+ [(set (match_operand:DF 0 "register_operand" "=e")
-+ (neg:DF (match_operand:DF 1 "register_operand" "e")))]
-+ "TARGET_FPU && !TARGET_V9"
-+ "#"
-+ "&& reload_completed"
-+ [(clobber (const_int 0))]
-+{
-+ rtx set_dest = operands[0];
-+ rtx set_src = operands[1];
-+ rtx dest1, dest2;
-+ rtx src1, src2;
-
-+ dest1 = gen_highpart (SFmode, set_dest);
-+ dest2 = gen_lowpart (SFmode, set_dest);
-+ src1 = gen_highpart (SFmode, set_src);
-+ src2 = gen_lowpart (SFmode, set_src);
-+
-+ /* Now emit using the real source and destination we found, swapping
-+ the order if we detect overlap. */
-+ if (reg_overlap_mentioned_p (dest1, src2))
-+ {
-+ emit_insn (gen_movsf (dest2, src2));
-+ emit_insn (gen_negsf2 (dest1, src1));
-+ }
-+ else
-+ {
-+ emit_insn (gen_negsf2 (dest1, src1));
-+ if (REGNO (dest2) != REGNO (src2))
-+ emit_insn (gen_movsf (dest2, src2));
-+ }
-+ DONE;
-+}
-+ [(set_attr "length" "2")])
-+
- (define_insn "*negdf2_v9"
- [(set (match_operand:DF 0 "register_operand" "=e")
- (neg:DF (match_operand:DF 1 "register_operand" "e")))]
-@@ -5647,57 +5670,48 @@
- "TARGET_FPU"
- "")
-
--(define_insn_and_split "*abstf2_notv9"
-- [(set (match_operand:TF 0 "register_operand" "=e,e")
-- (abs:TF (match_operand:TF 1 "register_operand" "0,e")))]
-- ; We don't use quad float insns here so we don't need TARGET_HARD_QUAD.
-- "TARGET_FPU && ! TARGET_V9"
-- "@
-- fabss\t%0, %0
-- #"
-- "&& reload_completed
-- && sparc_absnegfloat_split_legitimate (operands[0], operands[1])"
-- [(set (match_dup 2) (abs:SF (match_dup 3)))
-- (set (match_dup 4) (match_dup 5))
-- (set (match_dup 6) (match_dup 7))]
-- "operands[2] = gen_rtx_raw_REG (SFmode, REGNO (operands[0]));
-- operands[3] = gen_rtx_raw_REG (SFmode, REGNO (operands[1]));
-- operands[4] = gen_rtx_raw_REG (SFmode, REGNO (operands[0]) + 1);
-- operands[5] = gen_rtx_raw_REG (SFmode, REGNO (operands[1]) + 1);
-- operands[6] = gen_rtx_raw_REG (DFmode, REGNO (operands[0]) + 2);
-- operands[7] = gen_rtx_raw_REG (DFmode, REGNO (operands[1]) + 2);"
-- [(set_attr "type" "fpmove,*")
-- (set_attr "length" "*,2")])
-+(define_insn "*abstf2_hq"
-+ [(set (match_operand:TF 0 "register_operand" "=e")
-+ (abs:TF (match_operand:TF 1 "register_operand" "e")))]
-+ "TARGET_FPU && TARGET_HARD_QUAD"
-+ "fabsq\t%1, %0"
-+ [(set_attr "type" "fpmove")])
-
--(define_insn "*abstf2_hq_v9"
-- [(set (match_operand:TF 0 "register_operand" "=e,e")
-- (abs:TF (match_operand:TF 1 "register_operand" "0,e")))]
-- "TARGET_FPU && TARGET_V9 && TARGET_HARD_QUAD"
-- "@
-- fabsd\t%0, %0
-- fabsq\t%1, %0"
-- [(set_attr "type" "fpmove")
-- (set_attr "fptype" "double,*")])
-+(define_insn_and_split "*abstf2"
-+ [(set (match_operand:TF 0 "register_operand" "=e")
-+ (abs:TF (match_operand:TF 1 "register_operand" "e")))]
-+ "TARGET_FPU && !TARGET_HARD_QUAD"
-+ "#"
-+ "&& reload_completed"
-+ [(clobber (const_int 0))]
-+{
-+ rtx set_dest = operands[0];
-+ rtx set_src = operands[1];
-+ rtx dest1, dest2;
-+ rtx src1, src2;
-
--(define_insn_and_split "*abstf2_v9"
-- [(set (match_operand:TF 0 "register_operand" "=e,e")
-- (abs:TF (match_operand:TF 1 "register_operand" "0,e")))]
-- "TARGET_FPU && TARGET_V9 && !TARGET_HARD_QUAD"
-- "@
-- fabsd\t%0, %0
-- #"
-- "&& reload_completed
-- && sparc_absnegfloat_split_legitimate (operands[0], operands[1])"
-- [(set (match_dup 2) (abs:DF (match_dup 3)))
-- (set (match_dup 4) (match_dup 5))]
-- "operands[2] = gen_rtx_raw_REG (DFmode, REGNO (operands[0]));
-- operands[3] = gen_rtx_raw_REG (DFmode, REGNO (operands[1]));
-- operands[4] = gen_rtx_raw_REG (DFmode, REGNO (operands[0]) + 2);
-- operands[5] = gen_rtx_raw_REG (DFmode, REGNO (operands[1]) + 2);"
-- [(set_attr "type" "fpmove,*")
-- (set_attr "length" "*,2")
-- (set_attr "fptype" "double,*")])
-+ dest1 = gen_df_reg (set_dest, 0);
-+ dest2 = gen_df_reg (set_dest, 1);
-+ src1 = gen_df_reg (set_src, 0);
-+ src2 = gen_df_reg (set_src, 1);
-
-+ /* Now emit using the real source and destination we found, swapping
-+ the order if we detect overlap. */
-+ if (reg_overlap_mentioned_p (dest1, src2))
-+ {
-+ emit_insn (gen_movdf (dest2, src2));
-+ emit_insn (gen_absdf2 (dest1, src1));
-+ }
-+ else
-+ {
-+ emit_insn (gen_absdf2 (dest1, src1));
-+ if (REGNO (dest2) != REGNO (src2))
-+ emit_insn (gen_movdf (dest2, src2));
-+ }
-+ DONE;
-+}
-+ [(set_attr "length" "2")])
-+
- (define_expand "absdf2"
- [(set (match_operand:DF 0 "register_operand" "")
- (abs:DF (match_operand:DF 1 "register_operand" "")))]
-@@ -5705,23 +5719,40 @@
- "")
-
- (define_insn_and_split "*absdf2_notv9"
-- [(set (match_operand:DF 0 "register_operand" "=e,e")
-- (abs:DF (match_operand:DF 1 "register_operand" "0,e")))]
-- "TARGET_FPU && ! TARGET_V9"
-- "@
-- fabss\t%0, %0
-- #"
-- "&& reload_completed
-- && sparc_absnegfloat_split_legitimate (operands[0], operands[1])"
-- [(set (match_dup 2) (abs:SF (match_dup 3)))
-- (set (match_dup 4) (match_dup 5))]
-- "operands[2] = gen_rtx_raw_REG (SFmode, REGNO (operands[0]));
-- operands[3] = gen_rtx_raw_REG (SFmode, REGNO (operands[1]));
-- operands[4] = gen_rtx_raw_REG (SFmode, REGNO (operands[0]) + 1);
-- operands[5] = gen_rtx_raw_REG (SFmode, REGNO (operands[1]) + 1);"
-- [(set_attr "type" "fpmove,*")
-- (set_attr "length" "*,2")])
-+ [(set (match_operand:DF 0 "register_operand" "=e")
-+ (abs:DF (match_operand:DF 1 "register_operand" "e")))]
-+ "TARGET_FPU && !TARGET_V9"
-+ "#"
-+ "&& reload_completed"
-+ [(clobber (const_int 0))]
-+{
-+ rtx set_dest = operands[0];
-+ rtx set_src = operands[1];
-+ rtx dest1, dest2;
-+ rtx src1, src2;
-
-+ dest1 = gen_highpart (SFmode, set_dest);
-+ dest2 = gen_lowpart (SFmode, set_dest);
-+ src1 = gen_highpart (SFmode, set_src);
-+ src2 = gen_lowpart (SFmode, set_src);
-+
-+ /* Now emit using the real source and destination we found, swapping
-+ the order if we detect overlap. */
-+ if (reg_overlap_mentioned_p (dest1, src2))
-+ {
-+ emit_insn (gen_movsf (dest2, src2));
-+ emit_insn (gen_abssf2 (dest1, src1));
-+ }
-+ else
-+ {
-+ emit_insn (gen_abssf2 (dest1, src1));
-+ if (REGNO (dest2) != REGNO (src2))
-+ emit_insn (gen_movsf (dest2, src2));
-+ }
-+ DONE;
-+}
-+ [(set_attr "length" "2")])
-+
- (define_insn "*absdf2_v9"
- [(set (match_operand:DF 0 "register_operand" "=e")
- (abs:DF (match_operand:DF 1 "register_operand" "e")))]
-@@ -5795,19 +5826,6 @@
- }
- [(set_attr "type" "shift")])
-
--(define_insn "*ashlsi3_extend"
-- [(set (match_operand:DI 0 "register_operand" "=r")
-- (zero_extend:DI
-- (ashift:SI (match_operand:SI 1 "register_operand" "r")
-- (match_operand:SI 2 "arith_operand" "rI"))))]
-- "TARGET_ARCH64"
--{
-- if (GET_CODE (operands[2]) == CONST_INT)
-- operands[2] = GEN_INT (INTVAL (operands[2]) & 0x1f);
-- return "sll\t%1, %2, %0";
--}
-- [(set_attr "type" "shift")])
--
- (define_expand "ashldi3"
- [(set (match_operand:DI 0 "register_operand" "=r")
- (ashift:DI (match_operand:DI 1 "register_operand" "r")
-Index: gcc/config/sparc/sparc.opt
-===================================================================
---- a/src/gcc/config/sparc/sparc.opt (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/sparc/sparc.opt (.../branches/gcc-4_9-branch)
-@@ -113,6 +113,10 @@
- Target
- Optimize tail call instructions in assembler and linker
-
-+muser-mode
-+Target Report Mask(USER_MODE)
-+Do not generate code that can only run in supervisor mode
-+
- mcpu=
- Target RejectNegative Joined Var(sparc_cpu_and_features) Enum(sparc_processor_type) Init(PROCESSOR_V7)
- Use features of and schedule code for given CPU
-Index: gcc/config/sparc/sync.md
-===================================================================
---- a/src/gcc/config/sparc/sync.md (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/sparc/sync.md (.../branches/gcc-4_9-branch)
-@@ -200,10 +200,27 @@
- [(match_operand:I48MODE 2 "register_operand" "r")
- (match_operand:I48MODE 3 "register_operand" "0")]
- UNSPECV_CAS))]
-- "(TARGET_V9 || TARGET_LEON3) && (<MODE>mode != DImode || TARGET_ARCH64)"
-+ "TARGET_V9 && (<MODE>mode != DImode || TARGET_ARCH64)"
- "cas<modesuffix>\t%1, %2, %0"
- [(set_attr "type" "multi")])
-
-+(define_insn "*atomic_compare_and_swap_leon3_1"
-+ [(set (match_operand:SI 0 "register_operand" "=r")
-+ (match_operand:SI 1 "mem_noofs_operand" "+w"))
-+ (set (match_dup 1)
-+ (unspec_volatile:SI
-+ [(match_operand:SI 2 "register_operand" "r")
-+ (match_operand:SI 3 "register_operand" "0")]
-+ UNSPECV_CAS))]
-+ "TARGET_LEON3"
-+{
-+ if (TARGET_USER_MODE)
-+ return "casa\t%1 0xa, %2, %0"; /* ASI for user data space. */
-+ else
-+ return "casa\t%1 0xb, %2, %0"; /* ASI for supervisor data space. */
-+}
-+ [(set_attr "type" "multi")])
-+
- (define_insn "*atomic_compare_and_swapdi_v8plus"
- [(set (match_operand:DI 0 "register_operand" "=h")
- (match_operand:DI 1 "mem_noofs_operand" "+w"))
-Index: gcc/config/sparc/sparc-protos.h
-===================================================================
---- a/src/gcc/config/sparc/sparc-protos.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/sparc/sparc-protos.h (.../branches/gcc-4_9-branch)
-@@ -69,7 +69,6 @@
- extern void sparc_emit_set_symbolic_const64 (rtx, rtx, rtx);
- extern int sparc_splitdi_legitimate (rtx, rtx);
- extern int sparc_split_regreg_legitimate (rtx, rtx);
--extern int sparc_absnegfloat_split_legitimate (rtx, rtx);
- extern const char *output_ubranch (rtx, rtx);
- extern const char *output_cbranch (rtx, rtx, int, int, int, rtx);
- extern const char *output_return (rtx);
-Index: gcc/config/sparc/sparc.c
-===================================================================
---- a/src/gcc/config/sparc/sparc.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/sparc/sparc.c (.../branches/gcc-4_9-branch)
-@@ -8539,22 +8539,6 @@
- return 0;
- }
-
--/* Return 1 if x and y are some kind of REG and they refer to
-- different hard registers. This test is guaranteed to be
-- run after reload. */
--
--int
--sparc_absnegfloat_split_legitimate (rtx x, rtx y)
--{
-- if (GET_CODE (x) != REG)
-- return 0;
-- if (GET_CODE (y) != REG)
-- return 0;
-- if (REGNO (x) == REGNO (y))
-- return 0;
-- return 1;
--}
--
- /* Return 1 if REGNO (reg1) is even and REGNO (reg1) == REGNO (reg2) - 1.
- This makes them candidates for using ldd and std insns.
-
-Index: gcc/config/i386/cygwin.h
-===================================================================
---- a/src/gcc/config/i386/cygwin.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/i386/cygwin.h (.../branches/gcc-4_9-branch)
-@@ -45,6 +45,7 @@
- #undef ENDFILE_SPEC
- #define ENDFILE_SPEC \
- "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s}\
-+ %{!shared:%:if-exists(default-manifest.o%s)}\
- crtend.o%s"
-
- /* Normally, -lgcc is not needed since everything in it is in the DLL, but we
-Index: gcc/config/i386/i386.md
-===================================================================
---- a/src/gcc/config/i386/i386.md (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/i386/i386.md (.../branches/gcc-4_9-branch)
-@@ -3201,7 +3201,7 @@
- (const_string "1")
- (const_string "*")))
- (set (attr "mode")
-- (cond [(eq_attr "alternative" "3,4,9,10,13,14,15")
-+ (cond [(eq_attr "alternative" "3,4,9,10,12,13,14,15")
- (const_string "SI")
- (eq_attr "alternative" "11")
- (const_string "DI")
-@@ -4933,66 +4933,37 @@
-
- ;; Avoid store forwarding (partial memory) stall penalty by extending
- ;; SImode value to DImode through XMM register instead of pushing two
--;; SImode values to stack. Note that even !TARGET_INTER_UNIT_MOVES_TO_VEC
--;; targets benefit from this optimization. Also note that fild
--;; loads from memory only.
-+;; SImode values to stack. Also note that fild loads from memory only.
-
--(define_insn "*floatunssi<mode>2_1"
-- [(set (match_operand:X87MODEF 0 "register_operand" "=f,f")
-+(define_insn_and_split "*floatunssi<mode>2_i387_with_xmm"
-+ [(set (match_operand:X87MODEF 0 "register_operand" "=f")
- (unsigned_float:X87MODEF
-- (match_operand:SI 1 "nonimmediate_operand" "x,m")))
-- (clobber (match_operand:DI 2 "memory_operand" "=m,m"))
-- (clobber (match_scratch:SI 3 "=X,x"))]
-+ (match_operand:SI 1 "nonimmediate_operand" "rm")))
-+ (clobber (match_scratch:DI 3 "=x"))
-+ (clobber (match_operand:DI 2 "memory_operand" "=m"))]
- "!TARGET_64BIT
- && TARGET_80387 && X87_ENABLE_FLOAT (<X87MODEF:MODE>mode, DImode)
-- && TARGET_SSE"
-+ && TARGET_SSE2 && TARGET_INTER_UNIT_MOVES_TO_VEC"
- "#"
-+ "&& reload_completed"
-+ [(set (match_dup 3) (zero_extend:DI (match_dup 1)))
-+ (set (match_dup 2) (match_dup 3))
-+ (set (match_dup 0)
-+ (float:X87MODEF (match_dup 2)))]
-+ ""
- [(set_attr "type" "multi")
- (set_attr "mode" "<MODE>")])
-
--(define_split
-- [(set (match_operand:X87MODEF 0 "register_operand")
-- (unsigned_float:X87MODEF
-- (match_operand:SI 1 "register_operand")))
-- (clobber (match_operand:DI 2 "memory_operand"))
-- (clobber (match_scratch:SI 3))]
-- "!TARGET_64BIT
-- && TARGET_80387 && X87_ENABLE_FLOAT (<X87MODEF:MODE>mode, DImode)
-- && TARGET_SSE
-- && reload_completed"
-- [(set (match_dup 2) (match_dup 1))
-- (set (match_dup 0)
-- (float:X87MODEF (match_dup 2)))]
-- "operands[1] = simplify_gen_subreg (DImode, operands[1], SImode, 0);")
--
--(define_split
-- [(set (match_operand:X87MODEF 0 "register_operand")
-- (unsigned_float:X87MODEF
-- (match_operand:SI 1 "memory_operand")))
-- (clobber (match_operand:DI 2 "memory_operand"))
-- (clobber (match_scratch:SI 3))]
-- "!TARGET_64BIT
-- && TARGET_80387 && X87_ENABLE_FLOAT (<X87MODEF:MODE>mode, DImode)
-- && TARGET_SSE
-- && reload_completed"
-- [(set (match_dup 2) (match_dup 3))
-- (set (match_dup 0)
-- (float:X87MODEF (match_dup 2)))]
--{
-- emit_move_insn (operands[3], operands[1]);
-- operands[3] = simplify_gen_subreg (DImode, operands[3], SImode, 0);
--})
--
- (define_expand "floatunssi<mode>2"
- [(parallel
- [(set (match_operand:X87MODEF 0 "register_operand")
- (unsigned_float:X87MODEF
- (match_operand:SI 1 "nonimmediate_operand")))
-- (clobber (match_dup 2))
-- (clobber (match_scratch:SI 3))])]
-+ (clobber (match_scratch:DI 3))
-+ (clobber (match_dup 2))])]
- "!TARGET_64BIT
- && ((TARGET_80387 && X87_ENABLE_FLOAT (<X87MODEF:MODE>mode, DImode)
-- && TARGET_SSE)
-+ && TARGET_SSE2 && TARGET_INTER_UNIT_MOVES_TO_VEC)
- || (SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH))"
- {
- if (SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH)
-@@ -9627,7 +9598,7 @@
-
- (define_insn "x86_64_shrd"
- [(set (match_operand:DI 0 "nonimmediate_operand" "+r*m")
-- (ior:DI (ashiftrt:DI (match_dup 0)
-+ (ior:DI (lshiftrt:DI (match_dup 0)
- (match_operand:QI 2 "nonmemory_operand" "Jc"))
- (ashift:DI (match_operand:DI 1 "register_operand" "r")
- (minus:QI (const_int 64) (match_dup 2)))))
-@@ -9643,7 +9614,7 @@
-
- (define_insn "x86_shrd"
- [(set (match_operand:SI 0 "nonimmediate_operand" "+r*m")
-- (ior:SI (ashiftrt:SI (match_dup 0)
-+ (ior:SI (lshiftrt:SI (match_dup 0)
- (match_operand:QI 2 "nonmemory_operand" "Ic"))
- (ashift:SI (match_operand:SI 1 "register_operand" "r")
- (minus:QI (const_int 32) (match_dup 2)))))
-@@ -10095,13 +10066,13 @@
- [(set (match_dup 3) (match_dup 4))
- (parallel
- [(set (match_dup 4)
-- (ior:DWIH (ashiftrt:DWIH (match_dup 4) (match_dup 2))
-+ (ior:DWIH (lshiftrt:DWIH (match_dup 4) (match_dup 2))
- (ashift:DWIH (match_dup 5)
- (minus:QI (match_dup 6) (match_dup 2)))))
- (clobber (reg:CC FLAGS_REG))])
- (parallel
- [(set (match_dup 5)
-- (ior:DWIH (ashiftrt:DWIH (match_dup 5) (match_dup 2))
-+ (ior:DWIH (lshiftrt:DWIH (match_dup 5) (match_dup 2))
- (ashift:DWIH (match_dup 3)
- (minus:QI (match_dup 6) (match_dup 2)))))
- (clobber (reg:CC FLAGS_REG))])]
-@@ -14427,15 +14398,16 @@
- "TARGET_USE_FANCY_MATH_387
- && flag_unsafe_math_optimizations"
- {
-+ rtx tmp1, tmp2;
- if (optimize_insn_for_size_p ())
- FAIL;
-
-- operands[3] = gen_reg_rtx (XFmode);
-- operands[4] = gen_reg_rtx (XFmode);
-+ tmp1 = gen_reg_rtx (XFmode);
-+ tmp2 = gen_reg_rtx (XFmode);
-
-- emit_insn (gen_floatsixf2 (operands[3], operands[2]));
-- emit_insn (gen_fscalexf4_i387 (operands[0], operands[4],
-- operands[1], operands[3]));
-+ emit_insn (gen_floatsixf2 (tmp1, operands[2]));
-+ emit_insn (gen_fscalexf4_i387 (operands[0], tmp2,
-+ operands[1], tmp1));
- DONE;
- })
-
-Index: gcc/config/i386/mingw32.h
-===================================================================
---- a/src/gcc/config/i386/mingw32.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/i386/mingw32.h (.../branches/gcc-4_9-branch)
-@@ -148,6 +148,7 @@
- #undef ENDFILE_SPEC
- #define ENDFILE_SPEC \
- "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \
-+ %{!shared:%:if-exists(default-manifest.o%s)}\
- crtend.o%s"
-
- /* Override startfile prefix defaults. */
-Index: gcc/config/i386/driver-i386.c
-===================================================================
---- a/src/gcc/config/i386/driver-i386.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/i386/driver-i386.c (.../branches/gcc-4_9-branch)
-@@ -739,6 +739,11 @@
- /* Assume Core 2. */
- cpu = "core2";
- }
-+ else if (has_longmode)
-+ /* Perhaps some emulator? Assume x86-64, otherwise gcc
-+ -march=native would be unusable for 64-bit compilations,
-+ as all the CPUs below are 32-bit only. */
-+ cpu = "x86-64";
- else if (has_sse3)
- /* It is Core Duo. */
- cpu = "pentium-m";
-Index: gcc/config/i386/i386.c
-===================================================================
---- a/src/gcc/config/i386/i386.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/i386/i386.c (.../branches/gcc-4_9-branch)
-@@ -3128,7 +3128,7 @@
- (PTA_SANDYBRIDGE | PTA_FSGSBASE | PTA_RDRND | PTA_F16C)
- #define PTA_HASWELL \
- (PTA_IVYBRIDGE | PTA_AVX2 | PTA_BMI | PTA_BMI2 | PTA_LZCNT \
-- | PTA_FMA | PTA_MOVBE | PTA_RTM | PTA_HLE)
-+ | PTA_FMA | PTA_MOVBE | PTA_HLE)
- #define PTA_BROADWELL \
- (PTA_HASWELL | PTA_ADX | PTA_PRFCHW | PTA_RDSEED)
- #define PTA_BONNELL \
-@@ -21507,7 +21507,7 @@
- t1 = gen_reg_rtx (V32QImode);
- t2 = gen_reg_rtx (V32QImode);
- t3 = gen_reg_rtx (V32QImode);
-- vt2 = GEN_INT (128);
-+ vt2 = GEN_INT (-128);
- for (i = 0; i < 32; i++)
- vec[i] = vt2;
- vt = gen_rtx_CONST_VECTOR (V32QImode, gen_rtvec_v (32, vec));
-@@ -23794,7 +23794,7 @@
- {
- const struct stringop_algs * algs;
- bool optimize_for_speed;
-- int max = -1;
-+ int max = 0;
- const struct processor_costs *cost;
- int i;
- bool any_alg_usable_p = false;
-@@ -23832,7 +23832,7 @@
- /* If expected size is not known but max size is small enough
- so inline version is a win, set expected size into
- the range. */
-- if (max > 1 && (unsigned HOST_WIDE_INT) max >= max_size
-+ if (((max > 1 && (unsigned HOST_WIDE_INT) max >= max_size) || max == -1)
- && expected_size == -1)
- expected_size = min_size / 2 + max_size / 2;
-
-@@ -23921,7 +23921,7 @@
- *dynamic_check = 128;
- return loop_1_byte;
- }
-- if (max == -1)
-+ if (max <= 0)
- max = 4096;
- alg = decide_alg (count, max / 2, min_size, max_size, memset,
- zero_memset, dynamic_check, noalign);
-@@ -24151,8 +24151,13 @@
- align = MEM_ALIGN (dst) / BITS_PER_UNIT;
-
- if (CONST_INT_P (count_exp))
-- min_size = max_size = probable_max_size = count = expected_size
-- = INTVAL (count_exp);
-+ {
-+ min_size = max_size = probable_max_size = count = expected_size
-+ = INTVAL (count_exp);
-+ /* When COUNT is 0, there is nothing to do. */
-+ if (!count)
-+ return true;
-+ }
- else
- {
- if (min_size_exp)
-@@ -24161,7 +24166,7 @@
- max_size = INTVAL (max_size_exp);
- if (probable_max_size_exp)
- probable_max_size = INTVAL (probable_max_size_exp);
-- if (CONST_INT_P (expected_size_exp) && count == 0)
-+ if (CONST_INT_P (expected_size_exp))
- expected_size = INTVAL (expected_size_exp);
- }
-
-@@ -24390,7 +24395,8 @@
- if (jump_around_label == NULL_RTX)
- jump_around_label = gen_label_rtx ();
- emit_cmp_and_jump_insns (count_exp, GEN_INT (dynamic_check - 1),
-- LEU, 0, GET_MODE (count_exp), 1, hot_label);
-+ LEU, 0, counter_mode (count_exp),
-+ 1, hot_label);
- predict_jump (REG_BR_PROB_BASE * 90 / 100);
- if (issetmem)
- set_storage_via_libcall (dst, count_exp, val_exp, false);
-@@ -26232,13 +26238,17 @@
- {
- edge e;
- edge_iterator ei;
-- /* Assume that region is SCC, i.e. all immediate predecessors
-- of non-head block are in the same region. */
-+
-+ /* Regions are SCCs with the exception of selective
-+ scheduling with pipelining of outer blocks enabled.
-+ So also check that immediate predecessors of a non-head
-+ block are in the same region. */
- FOR_EACH_EDGE (e, ei, bb->preds)
- {
- /* Avoid creating of loop-carried dependencies through
-- using topological odering in region. */
-- if (BLOCK_TO_BB (bb->index) > BLOCK_TO_BB (e->src->index))
-+ using topological ordering in the region. */
-+ if (rgn == CONTAINING_RGN (e->src->index)
-+ && BLOCK_TO_BB (bb->index) > BLOCK_TO_BB (e->src->index))
- add_dependee_for_func_arg (first_arg, e->src);
- }
- }
-@@ -35406,7 +35416,8 @@
- else
- op2 = gen_rtx_SUBREG (SImode, op0, 0);
-
-- if (target == 0)
-+ if (target == 0
-+ || !register_operand (target, SImode))
- target = gen_reg_rtx (SImode);
-
- pat = gen_rtx_GEU (VOIDmode, gen_rtx_REG (CCCmode, FLAGS_REG),
-@@ -35448,7 +35459,8 @@
- const0_rtx);
- emit_insn (gen_rtx_SET (VOIDmode, op2, pat));
-
-- if (target == 0)
-+ if (target == 0
-+ || !register_operand (target, SImode))
- target = gen_reg_rtx (SImode);
-
- emit_insn (gen_zero_extendqisi2 (target, op2));
-@@ -37794,10 +37806,10 @@
- else if (TARGET_64BIT && !x86_64_zext_immediate_operand (x, VOIDmode))
- *total = 2;
- else if (flag_pic && SYMBOLIC_CONST (x)
-- && (!TARGET_64BIT
-- || (!GET_CODE (x) != LABEL_REF
-- && (GET_CODE (x) != SYMBOL_REF
-- || !SYMBOL_REF_LOCAL_P (x)))))
-+ && !(TARGET_64BIT
-+ && (GET_CODE (x) == LABEL_REF
-+ || (GET_CODE (x) == SYMBOL_REF
-+ && SYMBOL_REF_LOCAL_P (x)))))
- *total = 1;
- else
- *total = 0;
-Index: gcc/config/sol2-clearcap.map
-===================================================================
---- a/src/gcc/config/sol2-clearcap.map (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/sol2-clearcap.map (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,2 @@
-+# Clear all hardware capabilities emitted by Sun as.
-+hwcap_1 = V0x0 OVERRIDE;
-Index: gcc/config/sol2.h
-===================================================================
---- a/src/gcc/config/sol2.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/sol2.h (.../branches/gcc-4_9-branch)
-@@ -183,12 +183,21 @@
- #define LINK_LIBGCC_MAPFILE_SPEC ""
- #endif
-
-+/* Clear hardware capabilities, either explicitly or with OpenMP:
-+ #pragma openmp declare simd creates clones for SSE2, AVX, and AVX2. */
-+#ifdef HAVE_LD_CLEARCAP
-+#define LINK_CLEARCAP_SPEC " %{mclear-hwcap|fopenmp*:-M %sclearcap.map}"
-+#else
-+#define LINK_CLEARCAP_SPEC ""
-+#endif
-+
- #undef LINK_SPEC
- #define LINK_SPEC \
- "%{h*} %{v:-V} \
- %{!shared:%{!static:%{rdynamic: " RDYNAMIC_SPEC "}}} \
- %{static:-dn -Bstatic} \
-- %{shared:-G -dy %{!mimpure-text:-z text}} " LINK_LIBGCC_MAPFILE_SPEC " \
-+ %{shared:-G -dy %{!mimpure-text:-z text}} " \
-+ LINK_LIBGCC_MAPFILE_SPEC LINK_CLEARCAP_SPEC " \
- %{symbolic:-Bsymbolic -G -dy -z text} \
- %(link_arch) \
- %{Qy:} %{!Qn:-Qy}"
-Index: gcc/config/sh/sh.c
-===================================================================
---- a/src/gcc/config/sh/sh.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/sh/sh.c (.../branches/gcc-4_9-branch)
-@@ -19,6 +19,10 @@
- along with GCC; see the file COPYING3. If not see
- <http://www.gnu.org/licenses/>. */
-
-+#include <sstream>
-+#include <vector>
-+#include <algorithm>
-+
- #include "config.h"
- #include "system.h"
- #include "coretypes.h"
-@@ -70,10 +74,6 @@
- #include "pass_manager.h"
- #include "context.h"
-
--#include <sstream>
--#include <vector>
--#include <algorithm>
--
- int code_for_indirect_jump_scratch = CODE_FOR_indirect_jump_scratch;
-
- /* These are some macros to abstract register modes. */
-Index: gcc/config/initfini-array.h
-===================================================================
---- a/src/gcc/config/initfini-array.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/initfini-array.h (.../branches/gcc-4_9-branch)
-@@ -14,8 +14,13 @@
- 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 GCC; see the file COPYING3. If not see
-+ Under Section 7 of GPL version 3, you are granted additional
-+ permissions described in the GCC Runtime Library Exception, version
-+ 3.1, as published by the Free Software Foundation.
-+
-+ You should have received a copy of the GNU General Public License and
-+ a copy of the GCC Runtime Library Exception along with this program;
-+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
- #ifdef HAVE_INITFINI_ARRAY_SUPPORT
-Index: gcc/config/avr/avr-fixed.md
-===================================================================
---- a/src/gcc/config/avr/avr-fixed.md (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/avr/avr-fixed.md (.../branches/gcc-4_9-branch)
-@@ -430,8 +430,8 @@
- }
-
- // Input and output of the libgcc function
-- const unsigned int regno_in[] = { -1, 22, 22, -1, 18 };
-- const unsigned int regno_out[] = { -1, 24, 24, -1, 22 };
-+ const unsigned int regno_in[] = { -1U, 22, 22, -1U, 18 };
-+ const unsigned int regno_out[] = { -1U, 24, 24, -1U, 22 };
-
- operands[3] = gen_rtx_REG (<MODE>mode, regno_out[(size_t) GET_MODE_SIZE (<MODE>mode)]);
- operands[4] = gen_rtx_REG (<MODE>mode, regno_in[(size_t) GET_MODE_SIZE (<MODE>mode)]);
-Index: gcc/config/avr/avr.md
-===================================================================
---- a/src/gcc/config/avr/avr.md (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/avr/avr.md (.../branches/gcc-4_9-branch)
-@@ -90,7 +90,7 @@
- (include "constraints.md")
-
- ;; Condition code settings.
--(define_attr "cc" "none,set_czn,set_zn,set_n,compare,clobber,
-+(define_attr "cc" "none,set_czn,set_zn,set_vzn,set_n,compare,clobber,
- plus,ldi"
- (const_string "none"))
-
-@@ -368,6 +368,15 @@
- ""
- {
- int i;
-+
-+ // Avoid (subreg (mem)) for non-generic address spaces below. Because
-+ // of the poor addressing capabilities of these spaces it's better to
-+ // load them in one chunk. And it avoids PR61443.
-+
-+ if (MEM_P (operands[0])
-+ && !ADDR_SPACE_GENERIC_P (MEM_ADDR_SPACE (operands[0])))
-+ operands[0] = copy_to_mode_reg (<MODE>mode, operands[0]);
-+
- for (i = GET_MODE_SIZE (<MODE>mode) - 1; i >= 0; --i)
- {
- rtx part = simplify_gen_subreg (QImode, operands[0], <MODE>mode, i);
-@@ -1098,7 +1107,7 @@
- inc %0\;inc %0
- dec %0\;dec %0"
- [(set_attr "length" "1,1,1,1,2,2")
-- (set_attr "cc" "set_czn,set_czn,set_zn,set_zn,set_zn,set_zn")])
-+ (set_attr "cc" "set_czn,set_czn,set_vzn,set_vzn,set_vzn,set_vzn")])
-
- ;; "addhi3"
- ;; "addhq3" "adduhq3"
-@@ -1369,7 +1378,7 @@
- dec %0\;dec %0
- inc %0\;inc %0"
- [(set_attr "length" "1,1,1,1,2,2")
-- (set_attr "cc" "set_czn,set_czn,set_zn,set_zn,set_zn,set_zn")])
-+ (set_attr "cc" "set_czn,set_czn,set_vzn,set_vzn,set_vzn,set_vzn")])
-
- ;; "subhi3"
- ;; "subhq3" "subuhq3"
-@@ -3992,7 +4001,7 @@
- ""
- "neg %0"
- [(set_attr "length" "1")
-- (set_attr "cc" "set_zn")])
-+ (set_attr "cc" "set_vzn")])
-
- (define_insn "*negqihi2"
- [(set (match_operand:HI 0 "register_operand" "=r")
-Index: gcc/config/avr/avr-mcus.def
-===================================================================
---- a/src/gcc/config/avr/avr-mcus.def (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/avr/avr-mcus.def (.../branches/gcc-4_9-branch)
-@@ -291,7 +291,7 @@
- AVR_MCU ("atxmega192d3", ARCH_AVRXMEGA6, AVR_ISA_NONE, "__AVR_ATxmega192D3__", 0x2000, 4, "x192d3")
- AVR_MCU ("atxmega256a3", ARCH_AVRXMEGA6, AVR_ISA_NONE, "__AVR_ATxmega256A3__", 0x2000, 5, "x256a3")
- AVR_MCU ("atxmega256a3b", ARCH_AVRXMEGA6, AVR_ISA_NONE, "__AVR_ATxmega256A3B__", 0x2000, 5, "x256a3b")
--AVR_MCU ("atxmega256a3bu", ARCH_AVRXMEGA6, AVR_ISA_NONE, "__AVR_ATxmega258A3BU__", 0x2000, 5, "x256a3bu")
-+AVR_MCU ("atxmega256a3bu", ARCH_AVRXMEGA6, AVR_ISA_NONE, "__AVR_ATxmega256A3BU__", 0x2000, 5, "x256a3bu")
- AVR_MCU ("atxmega256d3", ARCH_AVRXMEGA6, AVR_ISA_NONE, "__AVR_ATxmega256D3__", 0x2000, 5, "x256d3")
- AVR_MCU ("atxmega128a3u", ARCH_AVRXMEGA6, AVR_ISA_RMW, "__AVR_ATxmega128A3U__", 0x2000, 3, "x128a3u")
- AVR_MCU ("atxmega128b1", ARCH_AVRXMEGA6, AVR_ISA_RMW, "__AVR_ATxmega128B1__", 0x2000, 3, "x128b1")
-Index: gcc/config/avr/avr.c
-===================================================================
---- a/src/gcc/config/avr/avr.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/avr/avr.c (.../branches/gcc-4_9-branch)
-@@ -2353,6 +2353,12 @@
- }
- break;
-
-+ case CC_SET_VZN:
-+ /* Insn like INC, DEC, NEG that set Z,N,V. We currently don't make use
-+ of this combination, cf. also PR61055. */
-+ CC_STATUS_INIT;
-+ break;
-+
- case CC_SET_CZN:
- /* Insn sets the Z,N,C flags of CC to recog_operand[0].
- The V flag may or may not be known but that's ok because
-@@ -3987,7 +3993,7 @@
- "std Y+61,%A1" CR_TAB
- "std Y+62,%B1" CR_TAB
- "std Y+63,%C1" CR_TAB
-- "sbiw r28,%o0-60", op, plen, -5);
-+ "sbiw r28,%o0-61", op, plen, -5);
-
- return avr_asm_len ("subi r28,lo8(-%o0)" CR_TAB
- "sbci r29,hi8(-%o0)" CR_TAB
-@@ -6284,7 +6290,7 @@
-
- if (REG_P (xop[2]))
- {
-- *pcc = MINUS == code ? (int) CC_SET_CZN : (int) CC_SET_N;
-+ *pcc = MINUS == code ? (int) CC_SET_CZN : (int) CC_CLOBBER;
-
- for (i = 0; i < n_bytes; i++)
- {
-@@ -6393,7 +6399,7 @@
- op, plen, 1);
-
- if (n_bytes == 2 && PLUS == code)
-- *pcc = CC_SET_ZN;
-+ *pcc = CC_SET_CZN;
- }
-
- i++;
-@@ -6416,6 +6422,7 @@
- {
- avr_asm_len ((code == PLUS) ^ (val8 == 1) ? "dec %0" : "inc %0",
- op, plen, 1);
-+ *pcc = CC_CLOBBER;
- break;
- }
-
-Index: gcc/config/avr/avr.h
-===================================================================
---- a/src/gcc/config/avr/avr.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/avr/avr.h (.../branches/gcc-4_9-branch)
-@@ -251,18 +251,18 @@
- #define REG_CLASS_CONTENTS { \
- {0x00000000,0x00000000}, /* NO_REGS */ \
- {0x00000001,0x00000000}, /* R0_REG */ \
-- {3 << REG_X,0x00000000}, /* POINTER_X_REGS, r26 - r27 */ \
-- {3 << REG_Y,0x00000000}, /* POINTER_Y_REGS, r28 - r29 */ \
-- {3 << REG_Z,0x00000000}, /* POINTER_Z_REGS, r30 - r31 */ \
-+ {3u << REG_X,0x00000000}, /* POINTER_X_REGS, r26 - r27 */ \
-+ {3u << REG_Y,0x00000000}, /* POINTER_Y_REGS, r28 - r29 */ \
-+ {3u << REG_Z,0x00000000}, /* POINTER_Z_REGS, r30 - r31 */ \
- {0x00000000,0x00000003}, /* STACK_REG, STACK */ \
-- {(3 << REG_Y) | (3 << REG_Z), \
-+ {(3u << REG_Y) | (3u << REG_Z), \
- 0x00000000}, /* BASE_POINTER_REGS, r28 - r31 */ \
-- {(3 << REG_X) | (3 << REG_Y) | (3 << REG_Z), \
-+ {(3u << REG_X) | (3u << REG_Y) | (3u << REG_Z), \
- 0x00000000}, /* POINTER_REGS, r26 - r31 */ \
-- {(3 << REG_X) | (3 << REG_Y) | (3 << REG_Z) | (3 << REG_W), \
-+ {(3u << REG_X) | (3u << REG_Y) | (3u << REG_Z) | (3u << REG_W), \
- 0x00000000}, /* ADDW_REGS, r24 - r31 */ \
- {0x00ff0000,0x00000000}, /* SIMPLE_LD_REGS r16 - r23 */ \
-- {(3 << REG_X)|(3 << REG_Y)|(3 << REG_Z)|(3 << REG_W)|(0xff << 16), \
-+ {(3u << REG_X)|(3u << REG_Y)|(3u << REG_Z)|(3u << REG_W)|(0xffu << 16),\
- 0x00000000}, /* LD_REGS, r16 - r31 */ \
- {0x0000ffff,0x00000000}, /* NO_LD_REGS r0 - r15 */ \
- {0xffffffff,0x00000000}, /* GENERAL_REGS, r0 - r31 */ \
-Index: gcc/config/dbx.h
-===================================================================
---- a/src/gcc/config/dbx.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/dbx.h (.../branches/gcc-4_9-branch)
-@@ -13,8 +13,13 @@
- 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 GCC; see the file COPYING3. If not see
-+Under Section 7 of GPL version 3, you are granted additional
-+permissions described in the GCC Runtime Library Exception, version
-+3.1, as published by the Free Software Foundation.
-+
-+You should have received a copy of the GNU General Public License and
-+a copy of the GCC Runtime Library Exception along with this program;
-+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
- /* This file causes gcc to prefer using DBX (stabs) debugging
-Index: gcc/config/sol2.opt
-===================================================================
---- a/src/gcc/config/sol2.opt (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/sol2.opt (.../branches/gcc-4_9-branch)
-@@ -27,6 +27,10 @@
- Ym,
- Driver Joined
-
-+mclear-hwcap
-+Target Report
-+Clear hardware capabilities when linking
-+
- mimpure-text
- Target Report
- Pass -z text to linker
-Index: gcc/config/t-sol2
-===================================================================
---- a/src/gcc/config/t-sol2 (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/t-sol2 (.../branches/gcc-4_9-branch)
-@@ -35,3 +35,10 @@
- sol2.o: $(srcdir)/config/sol2.c
- $(COMPILE) $<
- $(POSTCOMPILE)
-+
-+# Install clearcap.map if present.
-+install: install-clearcap-map
-+
-+# Ignore failures: file only exists if linker supports it.
-+install-clearcap-map:
-+ -$(INSTALL_DATA) clearcap.map $(DESTDIR)$(libdir)
-Index: gcc/config/newlib-stdint.h
-===================================================================
---- a/src/gcc/config/newlib-stdint.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/newlib-stdint.h (.../branches/gcc-4_9-branch)
-@@ -13,8 +13,13 @@
- 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 GCC; see the file COPYING3. If not see
-+Under Section 7 of GPL version 3, you are granted additional
-+permissions described in the GCC Runtime Library Exception, version
-+3.1, as published by the Free Software Foundation.
-+
-+You should have received a copy of the GNU General Public License and
-+a copy of the GCC Runtime Library Exception along with this program;
-+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
- /* newlib uses 32-bit long in certain cases for all non-SPU
-Index: gcc/config/sol2-clearcapv2.map
-===================================================================
---- a/src/gcc/config/sol2-clearcapv2.map (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/sol2-clearcapv2.map (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,7 @@
-+# Clear all hardware capabilities emitted by Sun as.
-+#
-+# Uses mapfile v2 syntax which is the only way to clear AT_SUN_CAP_HW2 flags.
-+$mapfile_version 2
-+CAPABILITY {
-+ HW = ;
-+};
-Index: gcc/config/rtems.h
-===================================================================
---- a/src/gcc/config/rtems.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/rtems.h (.../branches/gcc-4_9-branch)
-@@ -13,8 +13,13 @@
- 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 GCC; see the file COPYING3. If not see
-+Under Section 7 of GPL version 3, you are granted additional
-+permissions described in the GCC Runtime Library Exception, version
-+3.1, as published by the Free Software Foundation.
-+
-+You should have received a copy of the GNU General Public License and
-+a copy of the GCC Runtime Library Exception along with this program;
-+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
- /* The system headers under RTEMS are C++-aware. */
-Index: gcc/config/aarch64/aarch64-simd.md
-===================================================================
---- a/src/gcc/config/aarch64/aarch64-simd.md (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/aarch64/aarch64-simd.md (.../branches/gcc-4_9-branch)
-@@ -934,14 +934,22 @@
- [(set_attr "type" "neon_minmax<q>")]
- )
-
--;; Move into low-half clearing high half to 0.
-+;; vec_concat gives a new vector with the low elements from operand 1, and
-+;; the high elements from operand 2. That is to say, given op1 = { a, b }
-+;; op2 = { c, d }, vec_concat (op1, op2) = { a, b, c, d }.
-+;; What that means, is that the RTL descriptions of the below patterns
-+;; need to change depending on endianness.
-
--(define_insn "move_lo_quad_<mode>"
-+;; Move to the low architectural bits of the register.
-+;; On little-endian this is { operand, zeroes }
-+;; On big-endian this is { zeroes, operand }
-+
-+(define_insn "move_lo_quad_internal_<mode>"
- [(set (match_operand:VQ 0 "register_operand" "=w,w,w")
- (vec_concat:VQ
- (match_operand:<VHALF> 1 "register_operand" "w,r,r")
- (vec_duplicate:<VHALF> (const_int 0))))]
-- "TARGET_SIMD"
-+ "TARGET_SIMD && !BYTES_BIG_ENDIAN"
- "@
- dup\\t%d0, %1.d[0]
- fmov\\t%d0, %1
-@@ -952,8 +960,40 @@
- (set_attr "length" "4")]
- )
-
--;; Move into high-half.
-+(define_insn "move_lo_quad_internal_be_<mode>"
-+ [(set (match_operand:VQ 0 "register_operand" "=w,w,w")
-+ (vec_concat:VQ
-+ (vec_duplicate:<VHALF> (const_int 0))
-+ (match_operand:<VHALF> 1 "register_operand" "w,r,r")))]
-+ "TARGET_SIMD && BYTES_BIG_ENDIAN"
-+ "@
-+ dup\\t%d0, %1.d[0]
-+ fmov\\t%d0, %1
-+ dup\\t%d0, %1"
-+ [(set_attr "type" "neon_dup<q>,f_mcr,neon_dup<q>")
-+ (set_attr "simd" "yes,*,yes")
-+ (set_attr "fp" "*,yes,*")
-+ (set_attr "length" "4")]
-+)
-
-+(define_expand "move_lo_quad_<mode>"
-+ [(match_operand:VQ 0 "register_operand")
-+ (match_operand:VQ 1 "register_operand")]
-+ "TARGET_SIMD"
-+{
-+ if (BYTES_BIG_ENDIAN)
-+ emit_insn (gen_move_lo_quad_internal_be_<mode> (operands[0], operands[1]));
-+ else
-+ emit_insn (gen_move_lo_quad_internal_<mode> (operands[0], operands[1]));
-+ DONE;
-+}
-+)
-+
-+;; Move operand1 to the high architectural bits of the register, keeping
-+;; the low architectural bits of operand2.
-+;; For little-endian this is { operand2, operand1 }
-+;; For big-endian this is { operand1, operand2 }
-+
- (define_insn "aarch64_simd_move_hi_quad_<mode>"
- [(set (match_operand:VQ 0 "register_operand" "+w,w")
- (vec_concat:VQ
-@@ -961,22 +1001,39 @@
- (match_dup 0)
- (match_operand:VQ 2 "vect_par_cnst_lo_half" ""))
- (match_operand:<VHALF> 1 "register_operand" "w,r")))]
-- "TARGET_SIMD"
-+ "TARGET_SIMD && !BYTES_BIG_ENDIAN"
- "@
- ins\\t%0.d[1], %1.d[0]
- ins\\t%0.d[1], %1"
-- [(set_attr "type" "neon_ins")
-- (set_attr "length" "4")]
-+ [(set_attr "type" "neon_ins")]
- )
-
-+(define_insn "aarch64_simd_move_hi_quad_be_<mode>"
-+ [(set (match_operand:VQ 0 "register_operand" "+w,w")
-+ (vec_concat:VQ
-+ (match_operand:<VHALF> 1 "register_operand" "w,r")
-+ (vec_select:<VHALF>
-+ (match_dup 0)
-+ (match_operand:VQ 2 "vect_par_cnst_hi_half" ""))))]
-+ "TARGET_SIMD && BYTES_BIG_ENDIAN"
-+ "@
-+ ins\\t%0.d[1], %1.d[0]
-+ ins\\t%0.d[1], %1"
-+ [(set_attr "type" "neon_ins")]
-+)
-+
- (define_expand "move_hi_quad_<mode>"
- [(match_operand:VQ 0 "register_operand" "")
- (match_operand:<VHALF> 1 "register_operand" "")]
- "TARGET_SIMD"
- {
-- rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, false);
-- emit_insn (gen_aarch64_simd_move_hi_quad_<mode> (operands[0],
-- operands[1], p));
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, BYTES_BIG_ENDIAN);
-+ if (BYTES_BIG_ENDIAN)
-+ emit_insn (gen_aarch64_simd_move_hi_quad_be_<mode> (operands[0],
-+ operands[1], p));
-+ else
-+ emit_insn (gen_aarch64_simd_move_hi_quad_<mode> (operands[0],
-+ operands[1], p));
- DONE;
- })
-
-@@ -2321,13 +2378,45 @@
- (vec_concat:<VDBL>
- (match_operand:VDIC 1 "register_operand" "w")
- (match_operand:VDIC 2 "aarch64_simd_imm_zero" "Dz")))]
-- "TARGET_SIMD"
-+ "TARGET_SIMD && !BYTES_BIG_ENDIAN"
- "mov\\t%0.8b, %1.8b"
- [(set_attr "type" "neon_move<q>")]
- )
-
--(define_insn_and_split "aarch64_combine<mode>"
-+(define_insn "*aarch64_combinez_be<mode>"
- [(set (match_operand:<VDBL> 0 "register_operand" "=&w")
-+ (vec_concat:<VDBL>
-+ (match_operand:VDIC 2 "aarch64_simd_imm_zero" "Dz")
-+ (match_operand:VDIC 1 "register_operand" "w")))]
-+ "TARGET_SIMD && BYTES_BIG_ENDIAN"
-+ "mov\\t%0.8b, %1.8b"
-+ [(set_attr "type" "neon_move<q>")]
-+)
-+
-+(define_expand "aarch64_combine<mode>"
-+ [(match_operand:<VDBL> 0 "register_operand")
-+ (match_operand:VDC 1 "register_operand")
-+ (match_operand:VDC 2 "register_operand")]
-+ "TARGET_SIMD"
-+{
-+ rtx op1, op2;
-+ if (BYTES_BIG_ENDIAN)
-+ {
-+ op1 = operands[2];
-+ op2 = operands[1];
-+ }
-+ else
-+ {
-+ op1 = operands[1];
-+ op2 = operands[2];
-+ }
-+ emit_insn (gen_aarch64_combine_internal<mode> (operands[0], op1, op2));
-+ DONE;
-+}
-+)
-+
-+(define_insn_and_split "aarch64_combine_internal<mode>"
-+ [(set (match_operand:<VDBL> 0 "register_operand" "=&w")
- (vec_concat:<VDBL> (match_operand:VDC 1 "register_operand" "w")
- (match_operand:VDC 2 "register_operand" "w")))]
- "TARGET_SIMD"
-@@ -2335,7 +2424,10 @@
- "&& reload_completed"
- [(const_int 0)]
- {
-- aarch64_split_simd_combine (operands[0], operands[1], operands[2]);
-+ if (BYTES_BIG_ENDIAN)
-+ aarch64_split_simd_combine (operands[0], operands[2], operands[1]);
-+ else
-+ aarch64_split_simd_combine (operands[0], operands[1], operands[2]);
- DONE;
- }
- [(set_attr "type" "multiple")]
-@@ -2342,9 +2434,9 @@
- )
-
- (define_expand "aarch64_simd_combine<mode>"
-- [(set (match_operand:<VDBL> 0 "register_operand" "=&w")
-- (vec_concat:<VDBL> (match_operand:VDC 1 "register_operand" "w")
-- (match_operand:VDC 2 "register_operand" "w")))]
-+ [(match_operand:<VDBL> 0 "register_operand")
-+ (match_operand:VDC 1 "register_operand")
-+ (match_operand:VDC 2 "register_operand")]
- "TARGET_SIMD"
- {
- emit_insn (gen_move_lo_quad_<Vdbl> (operands[0], operands[1]));
-@@ -2633,7 +2725,41 @@
-
- ;; sq<r>dmulh_lane
-
--(define_insn "aarch64_sq<r>dmulh_lane<mode>"
-+(define_expand "aarch64_sqdmulh_lane<mode>"
-+ [(match_operand:VDQHS 0 "register_operand" "")
-+ (match_operand:VDQHS 1 "register_operand" "")
-+ (match_operand:<VCOND> 2 "register_operand" "")
-+ (match_operand:SI 3 "immediate_operand" "")]
-+ "TARGET_SIMD"
-+ {
-+ aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCOND>mode));
-+ operands[3] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[3])));
-+ emit_insn (gen_aarch64_sqdmulh_lane<mode>_internal (operands[0],
-+ operands[1],
-+ operands[2],
-+ operands[3]));
-+ DONE;
-+ }
-+)
-+
-+(define_expand "aarch64_sqrdmulh_lane<mode>"
-+ [(match_operand:VDQHS 0 "register_operand" "")
-+ (match_operand:VDQHS 1 "register_operand" "")
-+ (match_operand:<VCOND> 2 "register_operand" "")
-+ (match_operand:SI 3 "immediate_operand" "")]
-+ "TARGET_SIMD"
-+ {
-+ aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCOND>mode));
-+ operands[3] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[3])));
-+ emit_insn (gen_aarch64_sqrdmulh_lane<mode>_internal (operands[0],
-+ operands[1],
-+ operands[2],
-+ operands[3]));
-+ DONE;
-+ }
-+)
-+
-+(define_insn "aarch64_sq<r>dmulh_lane<mode>_internal"
- [(set (match_operand:VDQHS 0 "register_operand" "=w")
- (unspec:VDQHS
- [(match_operand:VDQHS 1 "register_operand" "w")
-@@ -2649,7 +2775,41 @@
- [(set_attr "type" "neon_sat_mul_<Vetype>_scalar<q>")]
- )
-
--(define_insn "aarch64_sq<r>dmulh_laneq<mode>"
-+(define_expand "aarch64_sqdmulh_laneq<mode>"
-+ [(match_operand:VDQHS 0 "register_operand" "")
-+ (match_operand:VDQHS 1 "register_operand" "")
-+ (match_operand:<VCONQ> 2 "register_operand" "")
-+ (match_operand:SI 3 "immediate_operand" "")]
-+ "TARGET_SIMD"
-+ {
-+ aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCONQ>mode));
-+ operands[3] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[3])));
-+ emit_insn (gen_aarch64_sqdmulh_laneq<mode>_internal (operands[0],
-+ operands[1],
-+ operands[2],
-+ operands[3]));
-+ DONE;
-+ }
-+)
-+
-+(define_expand "aarch64_sqrdmulh_laneq<mode>"
-+ [(match_operand:VDQHS 0 "register_operand" "")
-+ (match_operand:VDQHS 1 "register_operand" "")
-+ (match_operand:<VCONQ> 2 "register_operand" "")
-+ (match_operand:SI 3 "immediate_operand" "")]
-+ "TARGET_SIMD"
-+ {
-+ aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCONQ>mode));
-+ operands[3] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[3])));
-+ emit_insn (gen_aarch64_sqrdmulh_laneq<mode>_internal (operands[0],
-+ operands[1],
-+ operands[2],
-+ operands[3]));
-+ DONE;
-+ }
-+)
-+
-+(define_insn "aarch64_sq<r>dmulh_laneq<mode>_internal"
- [(set (match_operand:VDQHS 0 "register_operand" "=w")
- (unspec:VDQHS
- [(match_operand:VDQHS 1 "register_operand" "w")
-@@ -2659,24 +2819,56 @@
- VQDMULH))]
- "TARGET_SIMD"
- "*
-- aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCONQ>mode));
- operands[3] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[3])));
- return \"sq<r>dmulh\\t%0.<Vtype>, %1.<Vtype>, %2.<Vetype>[%3]\";"
- [(set_attr "type" "neon_sat_mul_<Vetype>_scalar<q>")]
- )
-
--(define_insn "aarch64_sq<r>dmulh_lane<mode>"
-+(define_expand "aarch64_sqdmulh_lane<mode>"
-+ [(match_operand:SD_HSI 0 "register_operand" "")
-+ (match_operand:SD_HSI 1 "register_operand" "")
-+ (match_operand:<VCOND> 2 "register_operand" "")
-+ (match_operand:SI 3 "immediate_operand" "")]
-+ "TARGET_SIMD"
-+ {
-+ aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCOND>mode));
-+ operands[3] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[3])));
-+ emit_insn (gen_aarch64_sqdmulh_lane<mode>_internal (operands[0],
-+ operands[1],
-+ operands[2],
-+ operands[3]));
-+ DONE;
-+ }
-+)
-+
-+(define_expand "aarch64_sqrdmulh_lane<mode>"
-+ [(match_operand:SD_HSI 0 "register_operand" "")
-+ (match_operand:SD_HSI 1 "register_operand" "")
-+ (match_operand:<VCOND> 2 "register_operand" "")
-+ (match_operand:SI 3 "immediate_operand" "")]
-+ "TARGET_SIMD"
-+ {
-+ aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCOND>mode));
-+ operands[3] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[3])));
-+ emit_insn (gen_aarch64_sqrdmulh_lane<mode>_internal (operands[0],
-+ operands[1],
-+ operands[2],
-+ operands[3]));
-+ DONE;
-+ }
-+)
-+
-+(define_insn "aarch64_sq<r>dmulh_lane<mode>_internal"
- [(set (match_operand:SD_HSI 0 "register_operand" "=w")
- (unspec:SD_HSI
- [(match_operand:SD_HSI 1 "register_operand" "w")
- (vec_select:<VEL>
-- (match_operand:<VCONQ> 2 "register_operand" "<vwx>")
-+ (match_operand:<VCOND> 2 "register_operand" "<vwx>")
- (parallel [(match_operand:SI 3 "immediate_operand" "i")]))]
- VQDMULH))]
- "TARGET_SIMD"
- "*
-- aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCONQ>mode));
-- operands[3] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[3])));
-+ operands[3] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[3])));
- return \"sq<r>dmulh\\t%<v>0, %<v>1, %2.<v>[%3]\";"
- [(set_attr "type" "neon_sat_mul_<Vetype>_scalar<q>")]
- )
-@@ -2712,12 +2904,36 @@
- (sign_extend:<VWIDE>
- (vec_duplicate:VD_HSI
- (vec_select:<VEL>
-- (match_operand:<VCON> 3 "register_operand" "<vwx>")
-+ (match_operand:<VCOND> 3 "register_operand" "<vwx>")
- (parallel [(match_operand:SI 4 "immediate_operand" "i")])))
- ))
- (const_int 1))))]
- "TARGET_SIMD"
- {
-+ operands[4] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[4])));
-+ return
-+ "sqdml<SBINQOPS:as>l\\t%<vw2>0<Vmwtype>, %<v>2<Vmtype>, %3.<Vetype>[%4]";
-+ }
-+ [(set_attr "type" "neon_sat_mla_<Vetype>_scalar_long")]
-+)
-+
-+(define_insn "aarch64_sqdml<SBINQOPS:as>l_laneq<mode>_internal"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (SBINQOPS:<VWIDE>
-+ (match_operand:<VWIDE> 1 "register_operand" "0")
-+ (ss_ashift:<VWIDE>
-+ (mult:<VWIDE>
-+ (sign_extend:<VWIDE>
-+ (match_operand:VD_HSI 2 "register_operand" "w"))
-+ (sign_extend:<VWIDE>
-+ (vec_duplicate:VD_HSI
-+ (vec_select:<VEL>
-+ (match_operand:<VCONQ> 3 "register_operand" "<vwx>")
-+ (parallel [(match_operand:SI 4 "immediate_operand" "i")])))
-+ ))
-+ (const_int 1))))]
-+ "TARGET_SIMD"
-+ {
- operands[4] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[4])));
- return
- "sqdml<SBINQOPS:as>l\\t%<vw2>0<Vmwtype>, %<v>2<Vmtype>, %3.<Vetype>[%4]";
-@@ -2735,12 +2951,35 @@
- (match_operand:SD_HSI 2 "register_operand" "w"))
- (sign_extend:<VWIDE>
- (vec_select:<VEL>
-- (match_operand:<VCON> 3 "register_operand" "<vwx>")
-+ (match_operand:<VCOND> 3 "register_operand" "<vwx>")
- (parallel [(match_operand:SI 4 "immediate_operand" "i")])))
- )
- (const_int 1))))]
- "TARGET_SIMD"
- {
-+ operands[4] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[4])));
-+ return
-+ "sqdml<SBINQOPS:as>l\\t%<vw2>0<Vmwtype>, %<v>2<Vmtype>, %3.<Vetype>[%4]";
-+ }
-+ [(set_attr "type" "neon_sat_mla_<Vetype>_scalar_long")]
-+)
-+
-+(define_insn "aarch64_sqdml<SBINQOPS:as>l_laneq<mode>_internal"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (SBINQOPS:<VWIDE>
-+ (match_operand:<VWIDE> 1 "register_operand" "0")
-+ (ss_ashift:<VWIDE>
-+ (mult:<VWIDE>
-+ (sign_extend:<VWIDE>
-+ (match_operand:SD_HSI 2 "register_operand" "w"))
-+ (sign_extend:<VWIDE>
-+ (vec_select:<VEL>
-+ (match_operand:<VCONQ> 3 "register_operand" "<vwx>")
-+ (parallel [(match_operand:SI 4 "immediate_operand" "i")])))
-+ )
-+ (const_int 1))))]
-+ "TARGET_SIMD"
-+ {
- operands[4] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[4])));
- return
- "sqdml<SBINQOPS:as>l\\t%<vw2>0<Vmwtype>, %<v>2<Vmtype>, %3.<Vetype>[%4]";
-@@ -2752,11 +2991,12 @@
- [(match_operand:<VWIDE> 0 "register_operand" "=w")
- (match_operand:<VWIDE> 1 "register_operand" "0")
- (match_operand:VSD_HSI 2 "register_operand" "w")
-- (match_operand:<VCON> 3 "register_operand" "<vwx>")
-+ (match_operand:<VCOND> 3 "register_operand" "<vwx>")
- (match_operand:SI 4 "immediate_operand" "i")]
- "TARGET_SIMD"
- {
-- aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCON>mode) / 2);
-+ aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCOND>mode));
-+ operands[4] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[4])));
- emit_insn (gen_aarch64_sqdmlal_lane<mode>_internal (operands[0], operands[1],
- operands[2], operands[3],
- operands[4]));
-@@ -2767,12 +3007,13 @@
- [(match_operand:<VWIDE> 0 "register_operand" "=w")
- (match_operand:<VWIDE> 1 "register_operand" "0")
- (match_operand:VSD_HSI 2 "register_operand" "w")
-- (match_operand:<VCON> 3 "register_operand" "<vwx>")
-+ (match_operand:<VCONQ> 3 "register_operand" "<vwx>")
- (match_operand:SI 4 "immediate_operand" "i")]
- "TARGET_SIMD"
- {
-- aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCON>mode));
-- emit_insn (gen_aarch64_sqdmlal_lane<mode>_internal (operands[0], operands[1],
-+ aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCONQ>mode));
-+ operands[4] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[4])));
-+ emit_insn (gen_aarch64_sqdmlal_laneq<mode>_internal (operands[0], operands[1],
- operands[2], operands[3],
- operands[4]));
- DONE;
-@@ -2782,11 +3023,12 @@
- [(match_operand:<VWIDE> 0 "register_operand" "=w")
- (match_operand:<VWIDE> 1 "register_operand" "0")
- (match_operand:VSD_HSI 2 "register_operand" "w")
-- (match_operand:<VCON> 3 "register_operand" "<vwx>")
-+ (match_operand:<VCOND> 3 "register_operand" "<vwx>")
- (match_operand:SI 4 "immediate_operand" "i")]
- "TARGET_SIMD"
- {
-- aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCON>mode) / 2);
-+ aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCOND>mode));
-+ operands[4] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[4])));
- emit_insn (gen_aarch64_sqdmlsl_lane<mode>_internal (operands[0], operands[1],
- operands[2], operands[3],
- operands[4]));
-@@ -2797,12 +3039,13 @@
- [(match_operand:<VWIDE> 0 "register_operand" "=w")
- (match_operand:<VWIDE> 1 "register_operand" "0")
- (match_operand:VSD_HSI 2 "register_operand" "w")
-- (match_operand:<VCON> 3 "register_operand" "<vwx>")
-+ (match_operand:<VCONQ> 3 "register_operand" "<vwx>")
- (match_operand:SI 4 "immediate_operand" "i")]
- "TARGET_SIMD"
- {
-- aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCON>mode));
-- emit_insn (gen_aarch64_sqdmlsl_lane<mode>_internal (operands[0], operands[1],
-+ aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCONQ>mode));
-+ operands[4] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[4])));
-+ emit_insn (gen_aarch64_sqdmlsl_laneq<mode>_internal (operands[0], operands[1],
- operands[2], operands[3],
- operands[4]));
- DONE;
-@@ -2890,12 +3133,38 @@
- (sign_extend:<VWIDE>
- (vec_duplicate:<VHALF>
- (vec_select:<VEL>
-- (match_operand:<VCON> 3 "register_operand" "<vwx>")
-+ (match_operand:<VCOND> 3 "register_operand" "<vwx>")
- (parallel [(match_operand:SI 4 "immediate_operand" "i")])
- ))))
- (const_int 1))))]
- "TARGET_SIMD"
- {
-+ operands[4] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[4])));
-+ return
-+ "sqdml<SBINQOPS:as>l2\\t%<vw2>0<Vmwtype>, %<v>2<Vmtype>, %3.<Vetype>[%4]";
-+ }
-+ [(set_attr "type" "neon_sat_mla_<Vetype>_scalar_long")]
-+)
-+
-+(define_insn "aarch64_sqdml<SBINQOPS:as>l2_laneq<mode>_internal"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (SBINQOPS:<VWIDE>
-+ (match_operand:<VWIDE> 1 "register_operand" "0")
-+ (ss_ashift:<VWIDE>
-+ (mult:<VWIDE>
-+ (sign_extend:<VWIDE>
-+ (vec_select:<VHALF>
-+ (match_operand:VQ_HSI 2 "register_operand" "w")
-+ (match_operand:VQ_HSI 5 "vect_par_cnst_hi_half" "")))
-+ (sign_extend:<VWIDE>
-+ (vec_duplicate:<VHALF>
-+ (vec_select:<VEL>
-+ (match_operand:<VCONQ> 3 "register_operand" "<vwx>")
-+ (parallel [(match_operand:SI 4 "immediate_operand" "i")])
-+ ))))
-+ (const_int 1))))]
-+ "TARGET_SIMD"
-+ {
- operands[4] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[4])));
- return
- "sqdml<SBINQOPS:as>l2\\t%<vw2>0<Vmwtype>, %<v>2<Vmtype>, %3.<Vetype>[%4]";
-@@ -2907,12 +3176,13 @@
- [(match_operand:<VWIDE> 0 "register_operand" "=w")
- (match_operand:<VWIDE> 1 "register_operand" "w")
- (match_operand:VQ_HSI 2 "register_operand" "w")
-- (match_operand:<VCON> 3 "register_operand" "<vwx>")
-+ (match_operand:<VCOND> 3 "register_operand" "<vwx>")
- (match_operand:SI 4 "immediate_operand" "i")]
- "TARGET_SIMD"
- {
- rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-- aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<MODE>mode) / 2);
-+ aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCOND>mode));
-+ operands[4] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[4])));
- emit_insn (gen_aarch64_sqdmlal2_lane<mode>_internal (operands[0], operands[1],
- operands[2], operands[3],
- operands[4], p));
-@@ -2923,13 +3193,14 @@
- [(match_operand:<VWIDE> 0 "register_operand" "=w")
- (match_operand:<VWIDE> 1 "register_operand" "w")
- (match_operand:VQ_HSI 2 "register_operand" "w")
-- (match_operand:<VCON> 3 "register_operand" "<vwx>")
-+ (match_operand:<VCONQ> 3 "register_operand" "<vwx>")
- (match_operand:SI 4 "immediate_operand" "i")]
- "TARGET_SIMD"
- {
- rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-- aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<MODE>mode));
-- emit_insn (gen_aarch64_sqdmlal2_lane<mode>_internal (operands[0], operands[1],
-+ aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCONQ>mode));
-+ operands[4] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[4])));
-+ emit_insn (gen_aarch64_sqdmlal2_laneq<mode>_internal (operands[0], operands[1],
- operands[2], operands[3],
- operands[4], p));
- DONE;
-@@ -2939,12 +3210,13 @@
- [(match_operand:<VWIDE> 0 "register_operand" "=w")
- (match_operand:<VWIDE> 1 "register_operand" "w")
- (match_operand:VQ_HSI 2 "register_operand" "w")
-- (match_operand:<VCON> 3 "register_operand" "<vwx>")
-+ (match_operand:<VCOND> 3 "register_operand" "<vwx>")
- (match_operand:SI 4 "immediate_operand" "i")]
- "TARGET_SIMD"
- {
- rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-- aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<MODE>mode) / 2);
-+ aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCOND>mode));
-+ operands[4] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[4])));
- emit_insn (gen_aarch64_sqdmlsl2_lane<mode>_internal (operands[0], operands[1],
- operands[2], operands[3],
- operands[4], p));
-@@ -2955,13 +3227,14 @@
- [(match_operand:<VWIDE> 0 "register_operand" "=w")
- (match_operand:<VWIDE> 1 "register_operand" "w")
- (match_operand:VQ_HSI 2 "register_operand" "w")
-- (match_operand:<VCON> 3 "register_operand" "<vwx>")
-+ (match_operand:<VCONQ> 3 "register_operand" "<vwx>")
- (match_operand:SI 4 "immediate_operand" "i")]
- "TARGET_SIMD"
- {
- rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-- aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<MODE>mode));
-- emit_insn (gen_aarch64_sqdmlsl2_lane<mode>_internal (operands[0], operands[1],
-+ aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCONQ>mode));
-+ operands[4] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[4])));
-+ emit_insn (gen_aarch64_sqdmlsl2_laneq<mode>_internal (operands[0], operands[1],
- operands[2], operands[3],
- operands[4], p));
- DONE;
-@@ -3041,12 +3314,33 @@
- (sign_extend:<VWIDE>
- (vec_duplicate:VD_HSI
- (vec_select:<VEL>
-- (match_operand:<VCON> 2 "register_operand" "<vwx>")
-+ (match_operand:<VCOND> 2 "register_operand" "<vwx>")
- (parallel [(match_operand:SI 3 "immediate_operand" "i")])))
- ))
- (const_int 1)))]
- "TARGET_SIMD"
- {
-+ operands[3] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[3])));
-+ return "sqdmull\\t%<vw2>0<Vmwtype>, %<v>1<Vmtype>, %2.<Vetype>[%3]";
-+ }
-+ [(set_attr "type" "neon_sat_mul_<Vetype>_scalar_long")]
-+)
-+
-+(define_insn "aarch64_sqdmull_laneq<mode>_internal"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (ss_ashift:<VWIDE>
-+ (mult:<VWIDE>
-+ (sign_extend:<VWIDE>
-+ (match_operand:VD_HSI 1 "register_operand" "w"))
-+ (sign_extend:<VWIDE>
-+ (vec_duplicate:VD_HSI
-+ (vec_select:<VEL>
-+ (match_operand:<VCONQ> 2 "register_operand" "<vwx>")
-+ (parallel [(match_operand:SI 3 "immediate_operand" "i")])))
-+ ))
-+ (const_int 1)))]
-+ "TARGET_SIMD"
-+ {
- operands[3] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[3])));
- return "sqdmull\\t%<vw2>0<Vmwtype>, %<v>1<Vmtype>, %2.<Vetype>[%3]";
- }
-@@ -3061,12 +3355,32 @@
- (match_operand:SD_HSI 1 "register_operand" "w"))
- (sign_extend:<VWIDE>
- (vec_select:<VEL>
-- (match_operand:<VCON> 2 "register_operand" "<vwx>")
-+ (match_operand:<VCOND> 2 "register_operand" "<vwx>")
- (parallel [(match_operand:SI 3 "immediate_operand" "i")]))
- ))
- (const_int 1)))]
- "TARGET_SIMD"
- {
-+ operands[3] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[3])));
-+ return "sqdmull\\t%<vw2>0<Vmwtype>, %<v>1<Vmtype>, %2.<Vetype>[%3]";
-+ }
-+ [(set_attr "type" "neon_sat_mul_<Vetype>_scalar_long")]
-+)
-+
-+(define_insn "aarch64_sqdmull_laneq<mode>_internal"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (ss_ashift:<VWIDE>
-+ (mult:<VWIDE>
-+ (sign_extend:<VWIDE>
-+ (match_operand:SD_HSI 1 "register_operand" "w"))
-+ (sign_extend:<VWIDE>
-+ (vec_select:<VEL>
-+ (match_operand:<VCONQ> 2 "register_operand" "<vwx>")
-+ (parallel [(match_operand:SI 3 "immediate_operand" "i")]))
-+ ))
-+ (const_int 1)))]
-+ "TARGET_SIMD"
-+ {
- operands[3] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[3])));
- return "sqdmull\\t%<vw2>0<Vmwtype>, %<v>1<Vmtype>, %2.<Vetype>[%3]";
- }
-@@ -3076,11 +3390,12 @@
- (define_expand "aarch64_sqdmull_lane<mode>"
- [(match_operand:<VWIDE> 0 "register_operand" "=w")
- (match_operand:VSD_HSI 1 "register_operand" "w")
-- (match_operand:<VCON> 2 "register_operand" "<vwx>")
-+ (match_operand:<VCOND> 2 "register_operand" "<vwx>")
- (match_operand:SI 3 "immediate_operand" "i")]
- "TARGET_SIMD"
- {
-- aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCON>mode) / 2);
-+ aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCOND>mode));
-+ operands[3] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[3])));
- emit_insn (gen_aarch64_sqdmull_lane<mode>_internal (operands[0], operands[1],
- operands[2], operands[3]));
- DONE;
-@@ -3089,12 +3404,13 @@
- (define_expand "aarch64_sqdmull_laneq<mode>"
- [(match_operand:<VWIDE> 0 "register_operand" "=w")
- (match_operand:VD_HSI 1 "register_operand" "w")
-- (match_operand:<VCON> 2 "register_operand" "<vwx>")
-+ (match_operand:<VCONQ> 2 "register_operand" "<vwx>")
- (match_operand:SI 3 "immediate_operand" "i")]
- "TARGET_SIMD"
- {
-- aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCON>mode));
-- emit_insn (gen_aarch64_sqdmull_lane<mode>_internal
-+ aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCONQ>mode));
-+ operands[3] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[3])));
-+ emit_insn (gen_aarch64_sqdmull_laneq<mode>_internal
- (operands[0], operands[1], operands[2], operands[3]));
- DONE;
- })
-@@ -3143,7 +3459,7 @@
- (define_expand "aarch64_sqdmull2<mode>"
- [(match_operand:<VWIDE> 0 "register_operand" "=w")
- (match_operand:VQ_HSI 1 "register_operand" "w")
-- (match_operand:<VCON> 2 "register_operand" "w")]
-+ (match_operand:VQ_HSI 2 "register_operand" "w")]
- "TARGET_SIMD"
- {
- rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-@@ -3165,12 +3481,35 @@
- (sign_extend:<VWIDE>
- (vec_duplicate:<VHALF>
- (vec_select:<VEL>
-- (match_operand:<VCON> 2 "register_operand" "<vwx>")
-+ (match_operand:<VCOND> 2 "register_operand" "<vwx>")
- (parallel [(match_operand:SI 3 "immediate_operand" "i")])))
- ))
- (const_int 1)))]
- "TARGET_SIMD"
- {
-+ operands[3] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[3])));
-+ return "sqdmull2\\t%<vw2>0<Vmwtype>, %<v>1<Vmtype>, %2.<Vetype>[%3]";
-+ }
-+ [(set_attr "type" "neon_sat_mul_<Vetype>_scalar_long")]
-+)
-+
-+(define_insn "aarch64_sqdmull2_laneq<mode>_internal"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (ss_ashift:<VWIDE>
-+ (mult:<VWIDE>
-+ (sign_extend:<VWIDE>
-+ (vec_select:<VHALF>
-+ (match_operand:VQ_HSI 1 "register_operand" "w")
-+ (match_operand:VQ_HSI 4 "vect_par_cnst_hi_half" "")))
-+ (sign_extend:<VWIDE>
-+ (vec_duplicate:<VHALF>
-+ (vec_select:<VEL>
-+ (match_operand:<VCONQ> 2 "register_operand" "<vwx>")
-+ (parallel [(match_operand:SI 3 "immediate_operand" "i")])))
-+ ))
-+ (const_int 1)))]
-+ "TARGET_SIMD"
-+ {
- operands[3] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[3])));
- return "sqdmull2\\t%<vw2>0<Vmwtype>, %<v>1<Vmtype>, %2.<Vetype>[%3]";
- }
-@@ -3180,12 +3519,13 @@
- (define_expand "aarch64_sqdmull2_lane<mode>"
- [(match_operand:<VWIDE> 0 "register_operand" "=w")
- (match_operand:VQ_HSI 1 "register_operand" "w")
-- (match_operand:<VCON> 2 "register_operand" "<vwx>")
-+ (match_operand:<VCOND> 2 "register_operand" "<vwx>")
- (match_operand:SI 3 "immediate_operand" "i")]
- "TARGET_SIMD"
- {
- rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-- aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<MODE>mode) / 2);
-+ aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCOND>mode));
-+ operands[3] = GEN_INT (ENDIAN_LANE_N (<VCOND>mode, INTVAL (operands[3])));
- emit_insn (gen_aarch64_sqdmull2_lane<mode>_internal (operands[0], operands[1],
- operands[2], operands[3],
- p));
-@@ -3195,13 +3535,14 @@
- (define_expand "aarch64_sqdmull2_laneq<mode>"
- [(match_operand:<VWIDE> 0 "register_operand" "=w")
- (match_operand:VQ_HSI 1 "register_operand" "w")
-- (match_operand:<VCON> 2 "register_operand" "<vwx>")
-+ (match_operand:<VCONQ> 2 "register_operand" "<vwx>")
- (match_operand:SI 3 "immediate_operand" "i")]
- "TARGET_SIMD"
- {
- rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-- aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<MODE>mode));
-- emit_insn (gen_aarch64_sqdmull2_lane<mode>_internal (operands[0], operands[1],
-+ aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCONQ>mode));
-+ operands[3] = GEN_INT (ENDIAN_LANE_N (<VCONQ>mode, INTVAL (operands[3])));
-+ emit_insn (gen_aarch64_sqdmull2_laneq<mode>_internal (operands[0], operands[1],
- operands[2], operands[3],
- p));
- DONE;
-Index: gcc/config/aarch64/arm_neon.h
-===================================================================
---- a/src/gcc/config/aarch64/arm_neon.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/aarch64/arm_neon.h (.../branches/gcc-4_9-branch)
-@@ -10111,7 +10111,7 @@
- int16x4_t result;
- __asm__ ("sqdmulh %0.4h,%1.4h,%2.h[0]"
- : "=w"(result)
-- : "w"(a), "w"(b)
-+ : "w"(a), "x"(b)
- : /* No clobbers */);
- return result;
- }
-@@ -10133,7 +10133,7 @@
- int16x8_t result;
- __asm__ ("sqdmulh %0.8h,%1.8h,%2.h[0]"
- : "=w"(result)
-- : "w"(a), "w"(b)
-+ : "w"(a), "x"(b)
- : /* No clobbers */);
- return result;
- }
-@@ -21008,7 +21008,7 @@
- }
-
- __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
--vqdmlal_high_lane_s16 (int32x4_t __a, int16x8_t __b, int16x8_t __c,
-+vqdmlal_high_lane_s16 (int32x4_t __a, int16x8_t __b, int16x4_t __c,
- int const __d)
- {
- return __builtin_aarch64_sqdmlal2_lanev8hi (__a, __b, __c, __d);
-@@ -21030,8 +21030,7 @@
- __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
- vqdmlal_lane_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c, int const __d)
- {
-- int16x8_t __tmp = vcombine_s16 (__c, vcreate_s16 (__AARCH64_INT64_C (0)));
-- return __builtin_aarch64_sqdmlal_lanev4hi (__a, __b, __tmp, __d);
-+ return __builtin_aarch64_sqdmlal_lanev4hi (__a, __b, __c, __d);
- }
-
- __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
-@@ -21059,7 +21058,7 @@
- }
-
- __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
--vqdmlal_high_lane_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c,
-+vqdmlal_high_lane_s32 (int64x2_t __a, int32x4_t __b, int32x2_t __c,
- int const __d)
- {
- return __builtin_aarch64_sqdmlal2_lanev4si (__a, __b, __c, __d);
-@@ -21081,8 +21080,7 @@
- __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
- vqdmlal_lane_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c, int const __d)
- {
-- int32x4_t __tmp = vcombine_s32 (__c, vcreate_s32 (__AARCH64_INT64_C (0)));
-- return __builtin_aarch64_sqdmlal_lanev2si (__a, __b, __tmp, __d);
-+ return __builtin_aarch64_sqdmlal_lanev2si (__a, __b, __c, __d);
- }
-
- __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
-@@ -21104,7 +21102,7 @@
- }
-
- __extension__ static __inline int32x1_t __attribute__ ((__always_inline__))
--vqdmlalh_lane_s16 (int32x1_t __a, int16x1_t __b, int16x8_t __c, const int __d)
-+vqdmlalh_lane_s16 (int32x1_t __a, int16x1_t __b, int16x4_t __c, const int __d)
- {
- return __builtin_aarch64_sqdmlal_lanehi (__a, __b, __c, __d);
- }
-@@ -21116,7 +21114,7 @@
- }
-
- __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
--vqdmlals_lane_s32 (int64x1_t __a, int32x1_t __b, int32x4_t __c, const int __d)
-+vqdmlals_lane_s32 (int64x1_t __a, int32x1_t __b, int32x2_t __c, const int __d)
- {
- return __builtin_aarch64_sqdmlal_lanesi (__a, __b, __c, __d);
- }
-@@ -21136,7 +21134,7 @@
- }
-
- __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
--vqdmlsl_high_lane_s16 (int32x4_t __a, int16x8_t __b, int16x8_t __c,
-+vqdmlsl_high_lane_s16 (int32x4_t __a, int16x8_t __b, int16x4_t __c,
- int const __d)
- {
- return __builtin_aarch64_sqdmlsl2_lanev8hi (__a, __b, __c, __d);
-@@ -21158,8 +21156,7 @@
- __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
- vqdmlsl_lane_s16 (int32x4_t __a, int16x4_t __b, int16x4_t __c, int const __d)
- {
-- int16x8_t __tmp = vcombine_s16 (__c, vcreate_s16 (__AARCH64_INT64_C (0)));
-- return __builtin_aarch64_sqdmlsl_lanev4hi (__a, __b, __tmp, __d);
-+ return __builtin_aarch64_sqdmlsl_lanev4hi (__a, __b, __c, __d);
- }
-
- __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
-@@ -21187,7 +21184,7 @@
- }
-
- __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
--vqdmlsl_high_lane_s32 (int64x2_t __a, int32x4_t __b, int32x4_t __c,
-+vqdmlsl_high_lane_s32 (int64x2_t __a, int32x4_t __b, int32x2_t __c,
- int const __d)
- {
- return __builtin_aarch64_sqdmlsl2_lanev4si (__a, __b, __c, __d);
-@@ -21209,8 +21206,7 @@
- __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
- vqdmlsl_lane_s32 (int64x2_t __a, int32x2_t __b, int32x2_t __c, int const __d)
- {
-- int32x4_t __tmp = vcombine_s32 (__c, vcreate_s32 (__AARCH64_INT64_C (0)));
-- return __builtin_aarch64_sqdmlsl_lanev2si (__a, __b, __tmp, __d);
-+ return __builtin_aarch64_sqdmlsl_lanev2si (__a, __b, __c, __d);
- }
-
- __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
-@@ -21232,7 +21228,7 @@
- }
-
- __extension__ static __inline int32x1_t __attribute__ ((__always_inline__))
--vqdmlslh_lane_s16 (int32x1_t __a, int16x1_t __b, int16x8_t __c, const int __d)
-+vqdmlslh_lane_s16 (int32x1_t __a, int16x1_t __b, int16x4_t __c, const int __d)
- {
- return __builtin_aarch64_sqdmlsl_lanehi (__a, __b, __c, __d);
- }
-@@ -21244,7 +21240,7 @@
- }
-
- __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
--vqdmlsls_lane_s32 (int64x1_t __a, int32x1_t __b, int32x4_t __c, const int __d)
-+vqdmlsls_lane_s32 (int64x1_t __a, int32x1_t __b, int32x2_t __c, const int __d)
- {
- return __builtin_aarch64_sqdmlsl_lanesi (__a, __b, __c, __d);
- }
-@@ -21282,7 +21278,7 @@
- }
-
- __extension__ static __inline int16x1_t __attribute__ ((__always_inline__))
--vqdmulhh_lane_s16 (int16x1_t __a, int16x8_t __b, const int __c)
-+vqdmulhh_lane_s16 (int16x1_t __a, int16x4_t __b, const int __c)
- {
- return __builtin_aarch64_sqdmulh_lanehi (__a, __b, __c);
- }
-@@ -21294,7 +21290,7 @@
- }
-
- __extension__ static __inline int32x1_t __attribute__ ((__always_inline__))
--vqdmulhs_lane_s32 (int32x1_t __a, int32x4_t __b, const int __c)
-+vqdmulhs_lane_s32 (int32x1_t __a, int32x2_t __b, const int __c)
- {
- return __builtin_aarch64_sqdmulh_lanesi (__a, __b, __c);
- }
-@@ -21314,7 +21310,7 @@
- }
-
- __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
--vqdmull_high_lane_s16 (int16x8_t __a, int16x8_t __b, int const __c)
-+vqdmull_high_lane_s16 (int16x8_t __a, int16x4_t __b, int const __c)
- {
- return __builtin_aarch64_sqdmull2_lanev8hi (__a, __b,__c);
- }
-@@ -21334,8 +21330,7 @@
- __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
- vqdmull_lane_s16 (int16x4_t __a, int16x4_t __b, int const __c)
- {
-- int16x8_t __tmp = vcombine_s16 (__b, vcreate_s16 (__AARCH64_INT64_C (0)));
-- return __builtin_aarch64_sqdmull_lanev4hi (__a, __tmp, __c);
-+ return __builtin_aarch64_sqdmull_lanev4hi (__a, __b, __c);
- }
-
- __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
-@@ -21363,7 +21358,7 @@
- }
-
- __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
--vqdmull_high_lane_s32 (int32x4_t __a, int32x4_t __b, int const __c)
-+vqdmull_high_lane_s32 (int32x4_t __a, int32x2_t __b, int const __c)
- {
- return __builtin_aarch64_sqdmull2_lanev4si (__a, __b, __c);
- }
-@@ -21383,8 +21378,7 @@
- __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
- vqdmull_lane_s32 (int32x2_t __a, int32x2_t __b, int const __c)
- {
-- int32x4_t __tmp = vcombine_s32 (__b, vcreate_s32 (__AARCH64_INT64_C (0)));
-- return __builtin_aarch64_sqdmull_lanev2si (__a, __tmp, __c);
-+ return __builtin_aarch64_sqdmull_lanev2si (__a, __b, __c);
- }
-
- __extension__ static __inline int64x2_t __attribute__ ((__always_inline__))
-@@ -21406,7 +21400,7 @@
- }
-
- __extension__ static __inline int32x1_t __attribute__ ((__always_inline__))
--vqdmullh_lane_s16 (int16x1_t __a, int16x8_t __b, const int __c)
-+vqdmullh_lane_s16 (int16x1_t __a, int16x4_t __b, const int __c)
- {
- return __builtin_aarch64_sqdmull_lanehi (__a, __b, __c);
- }
-@@ -21418,7 +21412,7 @@
- }
-
- __extension__ static __inline int64x1_t __attribute__ ((__always_inline__))
--vqdmulls_lane_s32 (int32x1_t __a, int32x4_t __b, const int __c)
-+vqdmulls_lane_s32 (int32x1_t __a, int32x2_t __b, const int __c)
- {
- return __builtin_aarch64_sqdmull_lanesi (__a, __b, __c);
- }
-@@ -21594,7 +21588,7 @@
- }
-
- __extension__ static __inline int16x1_t __attribute__ ((__always_inline__))
--vqrdmulhh_lane_s16 (int16x1_t __a, int16x8_t __b, const int __c)
-+vqrdmulhh_lane_s16 (int16x1_t __a, int16x4_t __b, const int __c)
- {
- return __builtin_aarch64_sqrdmulh_lanehi (__a, __b, __c);
- }
-@@ -21606,7 +21600,7 @@
- }
-
- __extension__ static __inline int32x1_t __attribute__ ((__always_inline__))
--vqrdmulhs_lane_s32 (int32x1_t __a, int32x4_t __b, const int __c)
-+vqrdmulhs_lane_s32 (int32x1_t __a, int32x2_t __b, const int __c)
- {
- return __builtin_aarch64_sqrdmulh_lanesi (__a, __b, __c);
- }
-Index: gcc/config/aarch64/aarch64.md
-===================================================================
---- a/src/gcc/config/aarch64/aarch64.md (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/aarch64/aarch64.md (.../branches/gcc-4_9-branch)
-@@ -2823,17 +2823,18 @@
-
- ;; Arithmetic right shift using SISD or Integer instruction
- (define_insn "*aarch64_ashr_sisd_or_int_<mode>3"
-- [(set (match_operand:GPI 0 "register_operand" "=w,w,r")
-+ [(set (match_operand:GPI 0 "register_operand" "=w,&w,&w,r")
- (ashiftrt:GPI
-- (match_operand:GPI 1 "register_operand" "w,w,r")
-- (match_operand:QI 2 "aarch64_reg_or_shift_imm_di" "Us<cmode>,w,rUs<cmode>")))]
-+ (match_operand:GPI 1 "register_operand" "w,w,w,r")
-+ (match_operand:QI 2 "aarch64_reg_or_shift_imm_di" "Us<cmode>,w,0,rUs<cmode>")))]
- ""
- "@
- sshr\t%<rtn>0<vas>, %<rtn>1<vas>, %2
- #
-+ #
- asr\t%<w>0, %<w>1, %<w>2"
-- [(set_attr "simd" "yes,yes,no")
-- (set_attr "type" "neon_shift_imm<q>,neon_shift_reg<q>,shift_reg")]
-+ [(set_attr "simd" "yes,yes,yes,no")
-+ (set_attr "type" "neon_shift_imm<q>,neon_shift_reg<q>,neon_shift_reg<q>,shift_reg")]
- )
-
- (define_split
-@@ -2842,11 +2843,13 @@
- (match_operand:DI 1 "aarch64_simd_register")
- (match_operand:QI 2 "aarch64_simd_register")))]
- "TARGET_SIMD && reload_completed"
-- [(set (match_dup 2)
-+ [(set (match_dup 3)
- (unspec:QI [(match_dup 2)] UNSPEC_SISD_NEG))
- (set (match_dup 0)
-- (unspec:DI [(match_dup 1) (match_dup 2)] UNSPEC_SISD_SSHL))]
-- ""
-+ (unspec:DI [(match_dup 1) (match_dup 3)] UNSPEC_SISD_SSHL))]
-+{
-+ operands[3] = gen_lowpart (QImode, operands[0]);
-+}
- )
-
- (define_split
-@@ -2855,11 +2858,13 @@
- (match_operand:SI 1 "aarch64_simd_register")
- (match_operand:QI 2 "aarch64_simd_register")))]
- "TARGET_SIMD && reload_completed"
-- [(set (match_dup 2)
-+ [(set (match_dup 3)
- (unspec:QI [(match_dup 2)] UNSPEC_SISD_NEG))
- (set (match_dup 0)
-- (unspec:SI [(match_dup 1) (match_dup 2)] UNSPEC_SSHL_2S))]
-- ""
-+ (unspec:SI [(match_dup 1) (match_dup 3)] UNSPEC_SSHL_2S))]
-+{
-+ operands[3] = gen_lowpart (QImode, operands[0]);
-+}
- )
-
- (define_insn "*aarch64_sisd_ushl"
-@@ -3608,6 +3613,7 @@
- (unspec:DI [(match_operand:DI 0 "aarch64_valid_symref" "S")]
- UNSPEC_TLSDESC))
- (clobber (reg:DI LR_REGNUM))
-+ (clobber (reg:CC CC_REGNUM))
- (clobber (match_scratch:DI 1 "=r"))]
- "TARGET_TLS_DESC"
- "adrp\\tx0, %A0\;ldr\\t%1, [x0, #%L0]\;add\\tx0, x0, %L0\;.tlsdesccall\\t%0\;blr\\t%1"
-Index: gcc/config/aarch64/aarch64-modes.def
-===================================================================
---- a/src/gcc/config/aarch64/aarch64-modes.def (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/aarch64/aarch64-modes.def (.../branches/gcc-4_9-branch)
-@@ -31,6 +31,7 @@
- VECTOR_MODES (INT, 16); /* V16QI V8HI V4SI V2DI. */
- VECTOR_MODES (FLOAT, 8); /* V2SF. */
- VECTOR_MODES (FLOAT, 16); /* V4SF V2DF. */
-+VECTOR_MODE (FLOAT, DF, 1); /* V1DF. */
-
- /* Oct Int: 256-bit integer mode needed for 32-byte vector arguments. */
- INT_MODE (OI, 32);
-Index: gcc/config/aarch64/aarch64.c
-===================================================================
---- a/src/gcc/config/aarch64/aarch64.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/aarch64/aarch64.c (.../branches/gcc-4_9-branch)
-@@ -1405,6 +1405,7 @@
- CUMULATIVE_ARGS *pcum = get_cumulative_args (pcum_v);
- int ncrn, nvrn, nregs;
- bool allocate_ncrn, allocate_nvrn;
-+ HOST_WIDE_INT size;
-
- /* We need to do this once per argument. */
- if (pcum->aapcs_arg_processed)
-@@ -1412,6 +1413,11 @@
-
- pcum->aapcs_arg_processed = true;
-
-+ /* Size in bytes, rounded to the nearest multiple of 8 bytes. */
-+ size
-+ = AARCH64_ROUND_UP (type ? int_size_in_bytes (type) : GET_MODE_SIZE (mode),
-+ UNITS_PER_WORD);
-+
- allocate_ncrn = (type) ? !(FLOAT_TYPE_P (type)) : !FLOAT_MODE_P (mode);
- allocate_nvrn = aarch64_vfp_is_call_candidate (pcum_v,
- mode,
-@@ -1462,10 +1468,8 @@
- }
-
- ncrn = pcum->aapcs_ncrn;
-- nregs = ((type ? int_size_in_bytes (type) : GET_MODE_SIZE (mode))
-- + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
-+ nregs = size / UNITS_PER_WORD;
-
--
- /* C6 - C9. though the sign and zero extension semantics are
- handled elsewhere. This is the case where the argument fits
- entirely general registers. */
-@@ -1513,13 +1517,12 @@
- pcum->aapcs_nextncrn = NUM_ARG_REGS;
-
- /* The argument is passed on stack; record the needed number of words for
-- this argument (we can re-use NREGS) and align the total size if
-- necessary. */
-+ this argument and align the total size if necessary. */
- on_stack:
-- pcum->aapcs_stack_words = nregs;
-+ pcum->aapcs_stack_words = size / UNITS_PER_WORD;
- if (aarch64_function_arg_alignment (mode, type) == 16 * BITS_PER_UNIT)
- pcum->aapcs_stack_size = AARCH64_ROUND_UP (pcum->aapcs_stack_size,
-- 16 / UNITS_PER_WORD) + 1;
-+ 16 / UNITS_PER_WORD);
- return;
- }
-
-@@ -6304,7 +6307,8 @@
- || mode == V16QImode || mode == V2DImode
- || mode == V2SImode || mode == V4HImode
- || mode == V8QImode || mode == V2SFmode
-- || mode == V4SFmode || mode == V2DFmode))
-+ || mode == V4SFmode || mode == V2DFmode
-+ || mode == V1DFmode))
- return true;
-
- return false;
-Index: gcc/config/aarch64/iterators.md
-===================================================================
---- a/src/gcc/config/aarch64/iterators.md (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/aarch64/iterators.md (.../branches/gcc-4_9-branch)
-@@ -396,14 +396,15 @@
- (SI "SI") (HI "HI")
- (QI "QI")])
-
--;; Define container mode for lane selection.
--(define_mode_attr VCOND [(V4HI "V4HI") (V8HI "V4HI")
-+;; 64-bit container modes the inner or scalar source mode.
-+(define_mode_attr VCOND [(HI "V4HI") (SI "V2SI")
-+ (V4HI "V4HI") (V8HI "V4HI")
- (V2SI "V2SI") (V4SI "V2SI")
- (DI "DI") (V2DI "DI")
- (V2SF "V2SF") (V4SF "V2SF")
- (V2DF "DF")])
-
--;; Define container mode for lane selection.
-+;; 128-bit container modes the inner or scalar source mode.
- (define_mode_attr VCONQ [(V8QI "V16QI") (V16QI "V16QI")
- (V4HI "V8HI") (V8HI "V8HI")
- (V2SI "V4SI") (V4SI "V4SI")
-@@ -412,15 +413,6 @@
- (V2DF "V2DF") (SI "V4SI")
- (HI "V8HI") (QI "V16QI")])
-
--;; Define container mode for lane selection.
--(define_mode_attr VCON [(V8QI "V16QI") (V16QI "V16QI")
-- (V4HI "V8HI") (V8HI "V8HI")
-- (V2SI "V4SI") (V4SI "V4SI")
-- (DI "V2DI") (V2DI "V2DI")
-- (V2SF "V4SF") (V4SF "V4SF")
-- (V2DF "V2DF") (SI "V4SI")
-- (HI "V8HI") (QI "V16QI")])
--
- ;; Half modes of all vector modes.
- (define_mode_attr VHALF [(V8QI "V4QI") (V16QI "V8QI")
- (V4HI "V2HI") (V8HI "V4HI")
-Index: gcc/config/aarch64/aarch64.h
-===================================================================
---- a/src/gcc/config/aarch64/aarch64.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/aarch64/aarch64.h (.../branches/gcc-4_9-branch)
-@@ -32,7 +32,7 @@
- else \
- builtin_define ("__AARCH64EL__"); \
- \
-- if (!TARGET_GENERAL_REGS_ONLY) \
-+ if (TARGET_SIMD) \
- builtin_define ("__ARM_NEON"); \
- \
- switch (aarch64_cmodel) \
-@@ -83,9 +83,9 @@
- #define WORDS_BIG_ENDIAN (BYTES_BIG_ENDIAN)
-
- /* AdvSIMD is supported in the default configuration, unless disabled by
-- -mgeneral-regs-only. */
--#define TARGET_SIMD !TARGET_GENERAL_REGS_ONLY
--#define TARGET_FLOAT !TARGET_GENERAL_REGS_ONLY
-+ -mgeneral-regs-only or by the +nosimd extension. */
-+#define TARGET_SIMD (!TARGET_GENERAL_REGS_ONLY && AARCH64_ISA_SIMD)
-+#define TARGET_FLOAT (!TARGET_GENERAL_REGS_ONLY && AARCH64_ISA_FP)
-
- #define UNITS_PER_WORD 8
-
-@@ -185,8 +185,8 @@
- extern unsigned long aarch64_tune_flags;
- #define AARCH64_TUNE_SLOWMUL (aarch64_tune_flags & AARCH64_FL_SLOWMUL)
-
--/* Crypto is an optional feature. */
--#define TARGET_CRYPTO AARCH64_ISA_CRYPTO
-+/* Crypto is an optional extension to AdvSIMD. */
-+#define TARGET_CRYPTO (TARGET_SIMD && AARCH64_ISA_CRYPTO)
-
- /* Standard register usage. */
-
-Index: gcc/config/rs6000/predicates.md
-===================================================================
---- a/src/gcc/config/rs6000/predicates.md (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/rs6000/predicates.md (.../branches/gcc-4_9-branch)
-@@ -171,6 +171,11 @@
- (and (match_code "const_int")
- (match_test "IN_RANGE (INTVAL (op), 0, 1)")))
-
-+;; Match op = 0..3.
-+(define_predicate "const_0_to_3_operand"
-+ (and (match_code "const_int")
-+ (match_test "IN_RANGE (INTVAL (op), 0, 3)")))
-+
- ;; Match op = 2 or op = 3.
- (define_predicate "const_2_to_3_operand"
- (and (match_code "const_int")
-@@ -624,7 +629,7 @@
- (match_test "offsettable_nonstrict_memref_p (op)")))
-
- ;; Return 1 if the operand is suitable for load/store quad memory.
--;; This predicate only checks for non-atomic loads/stores.
-+;; This predicate only checks for non-atomic loads/stores (not lqarx/stqcx).
- (define_predicate "quad_memory_operand"
- (match_code "mem")
- {
-@@ -631,7 +636,7 @@
- rtx addr, op0, op1;
- int ret;
-
-- if (!TARGET_QUAD_MEMORY)
-+ if (!TARGET_QUAD_MEMORY && !TARGET_SYNC_TI)
- ret = 0;
-
- else if (!memory_operand (op, mode))
-Index: gcc/config/rs6000/htm.md
-===================================================================
---- a/src/gcc/config/rs6000/htm.md (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/rs6000/htm.md (.../branches/gcc-4_9-branch)
-@@ -179,7 +179,7 @@
- (const_int 0)]
- UNSPECV_HTM_TABORTWCI))
- (set (subreg:CC (match_dup 2) 0) (match_dup 1))
-- (set (match_dup 3) (lshiftrt:SI (match_dup 2) (const_int 24)))
-+ (set (match_dup 3) (lshiftrt:SI (match_dup 2) (const_int 28)))
- (parallel [(set (match_operand:SI 0 "int_reg_operand" "")
- (and:SI (match_dup 3) (const_int 15)))
- (clobber (scratch:CC))])]
-Index: gcc/config/rs6000/rs6000-protos.h
-===================================================================
---- a/src/gcc/config/rs6000/rs6000-protos.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/rs6000/rs6000-protos.h (.../branches/gcc-4_9-branch)
-@@ -163,7 +163,7 @@
- extern rtx rs6000_libcall_value (enum machine_mode);
- extern rtx rs6000_va_arg (tree, tree);
- extern int function_ok_for_sibcall (tree);
--extern int rs6000_reg_parm_stack_space (tree);
-+extern int rs6000_reg_parm_stack_space (tree, bool);
- extern void rs6000_elf_declare_function_name (FILE *, const char *, tree);
- extern bool rs6000_elf_in_small_data_p (const_tree);
- #ifdef ARGS_SIZE_RTX
-Index: gcc/config/rs6000/htmxlintrin.h
-===================================================================
---- a/src/gcc/config/rs6000/htmxlintrin.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/rs6000/htmxlintrin.h (.../branches/gcc-4_9-branch)
-@@ -46,12 +46,17 @@
-
- typedef char TM_buff_type[16];
-
-+/* Compatibility macro with s390. This macro can be used to determine
-+ whether a transaction was successfully started from the __TM_begin()
-+ and __TM_simple_begin() intrinsic functions below. */
-+#define _HTM_TBEGIN_STARTED 1
-+
- extern __inline long
- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__))
- __TM_simple_begin (void)
- {
- if (__builtin_expect (__builtin_tbegin (0), 1))
-- return 1;
-+ return _HTM_TBEGIN_STARTED;
- return 0;
- }
-
-@@ -61,7 +66,7 @@
- {
- *_TEXASRL_PTR (TM_buff) = 0;
- if (__builtin_expect (__builtin_tbegin (0), 1))
-- return 1;
-+ return _HTM_TBEGIN_STARTED;
- #ifdef __powerpc64__
- *_TEXASR_PTR (TM_buff) = __builtin_get_texasr ();
- #else
-Index: gcc/config/rs6000/rs6000-builtin.def
-===================================================================
---- a/src/gcc/config/rs6000/rs6000-builtin.def (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/rs6000/rs6000-builtin.def (.../branches/gcc-4_9-branch)
-@@ -570,6 +570,68 @@
- MASK, /* MASK */ \
- (ATTR | RS6000_BTC_SPECIAL), /* ATTR */ \
- CODE_FOR_nothing) /* ICODE */
-+
-+
-+/* Decimal floating point builtins for instructions. */
-+#define BU_DFP_MISC_1(ENUM, NAME, ATTR, ICODE) \
-+ RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
-+ "__builtin_" NAME, /* NAME */ \
-+ RS6000_BTM_DFP, /* MASK */ \
-+ (RS6000_BTC_ ## ATTR /* ATTR */ \
-+ | RS6000_BTC_UNARY), \
-+ CODE_FOR_ ## ICODE) /* ICODE */
-+
-+#define BU_DFP_MISC_2(ENUM, NAME, ATTR, ICODE) \
-+ RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
-+ "__builtin_" NAME, /* NAME */ \
-+ RS6000_BTM_DFP, /* MASK */ \
-+ (RS6000_BTC_ ## ATTR /* ATTR */ \
-+ | RS6000_BTC_BINARY), \
-+ CODE_FOR_ ## ICODE) /* ICODE */
-+
-+
-+/* Miscellaneous builtins for instructions added in ISA 2.06. These
-+ instructions don't require either the DFP or VSX options, just the basic ISA
-+ 2.06 (popcntd) enablement since they operate on general purpose
-+ registers. */
-+#define BU_P7_MISC_1(ENUM, NAME, ATTR, ICODE) \
-+ RS6000_BUILTIN_1 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
-+ "__builtin_" NAME, /* NAME */ \
-+ RS6000_BTM_POPCNTD, /* MASK */ \
-+ (RS6000_BTC_ ## ATTR /* ATTR */ \
-+ | RS6000_BTC_UNARY), \
-+ CODE_FOR_ ## ICODE) /* ICODE */
-+
-+#define BU_P7_MISC_2(ENUM, NAME, ATTR, ICODE) \
-+ RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
-+ "__builtin_" NAME, /* NAME */ \
-+ RS6000_BTM_POPCNTD, /* MASK */ \
-+ (RS6000_BTC_ ## ATTR /* ATTR */ \
-+ | RS6000_BTC_BINARY), \
-+ CODE_FOR_ ## ICODE) /* ICODE */
-+
-+
-+/* Miscellaneous builtins for instructions added in ISA 2.07. These
-+ instructions do require the ISA 2.07 vector support, but they aren't vector
-+ instructions. */
-+#define BU_P8V_MISC_3(ENUM, NAME, ATTR, ICODE) \
-+ RS6000_BUILTIN_3 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
-+ "__builtin_" NAME, /* NAME */ \
-+ RS6000_BTM_P8_VECTOR, /* MASK */ \
-+ (RS6000_BTC_ ## ATTR /* ATTR */ \
-+ | RS6000_BTC_TERNARY), \
-+ CODE_FOR_ ## ICODE) /* ICODE */
-+
-+/* 128-bit long double floating point builtins. */
-+#define BU_LDBL128_2(ENUM, NAME, ATTR, ICODE) \
-+ RS6000_BUILTIN_2 (MISC_BUILTIN_ ## ENUM, /* ENUM */ \
-+ "__builtin_" NAME, /* NAME */ \
-+ (RS6000_BTM_HARD_FLOAT /* MASK */ \
-+ | RS6000_BTM_LDBL128), \
-+ (RS6000_BTC_ ## ATTR /* ATTR */ \
-+ | RS6000_BTC_BINARY), \
-+ CODE_FOR_ ## ICODE) /* ICODE */
-+
- #endif
-
- /* Insure 0 is not a legitimate index. */
-@@ -1412,10 +1474,10 @@
- BU_P8V_AV_2 (ORC_V2DF, "orc_v2df", CONST, orcv2df3)
-
- /* 3 argument altivec instructions added in ISA 2.07. */
--BU_P8V_AV_3 (VADDEUQM, "vaddeuqm", CONST, altivec_vaddeuqm)
--BU_P8V_AV_3 (VADDECUQ, "vaddecuq", CONST, altivec_vaddecuq)
--BU_P8V_AV_3 (VSUBEUQM, "vsubeuqm", CONST, altivec_vsubeuqm)
--BU_P8V_AV_3 (VSUBECUQ, "vsubecuq", CONST, altivec_vsubecuq)
-+BU_P8V_AV_3 (VADDEUQM, "vaddeuqm", CONST, altivec_vaddeuqm)
-+BU_P8V_AV_3 (VADDECUQ, "vaddecuq", CONST, altivec_vaddecuq)
-+BU_P8V_AV_3 (VSUBEUQM, "vsubeuqm", CONST, altivec_vsubeuqm)
-+BU_P8V_AV_3 (VSUBECUQ, "vsubecuq", CONST, altivec_vsubecuq)
-
- /* Vector comparison instructions added in ISA 2.07. */
- BU_P8V_AV_2 (VCMPEQUD, "vcmpequd", CONST, vector_eqv2di)
-@@ -1475,6 +1537,62 @@
- BU_P8V_OVERLOAD_3 (VSUBEUQM, "vsubeuqm")
-
-
-+/* 2 argument extended divide functions added in ISA 2.06. */
-+BU_P7_MISC_2 (DIVWE, "divwe", CONST, dive_si)
-+BU_P7_MISC_2 (DIVWEO, "divweo", CONST, diveo_si)
-+BU_P7_MISC_2 (DIVWEU, "divweu", CONST, diveu_si)
-+BU_P7_MISC_2 (DIVWEUO, "divweuo", CONST, diveuo_si)
-+BU_P7_MISC_2 (DIVDE, "divde", CONST, dive_di)
-+BU_P7_MISC_2 (DIVDEO, "divdeo", CONST, diveo_di)
-+BU_P7_MISC_2 (DIVDEU, "divdeu", CONST, diveu_di)
-+BU_P7_MISC_2 (DIVDEUO, "divdeuo", CONST, diveuo_di)
-+
-+/* 1 argument DFP (decimal floating point) functions added in ISA 2.05. */
-+BU_DFP_MISC_1 (DXEX, "dxex", CONST, dfp_dxex_dd)
-+BU_DFP_MISC_1 (DXEXQ, "dxexq", CONST, dfp_dxex_td)
-+
-+/* 2 argument DFP (decimal floating point) functions added in ISA 2.05. */
-+BU_DFP_MISC_2 (DDEDPD, "ddedpd", CONST, dfp_ddedpd_dd)
-+BU_DFP_MISC_2 (DDEDPDQ, "ddedpdq", CONST, dfp_ddedpd_td)
-+BU_DFP_MISC_2 (DENBCD, "denbcd", CONST, dfp_denbcd_dd)
-+BU_DFP_MISC_2 (DENBCDQ, "denbcdq", CONST, dfp_denbcd_td)
-+BU_DFP_MISC_2 (DIEX, "diex", CONST, dfp_diex_dd)
-+BU_DFP_MISC_2 (DIEXQ, "diexq", CONST, dfp_diex_td)
-+BU_DFP_MISC_2 (DSCLI, "dscli", CONST, dfp_dscli_dd)
-+BU_DFP_MISC_2 (DSCLIQ, "dscliq", CONST, dfp_dscli_td)
-+BU_DFP_MISC_2 (DSCRI, "dscri", CONST, dfp_dscri_dd)
-+BU_DFP_MISC_2 (DSCRIQ, "dscriq", CONST, dfp_dscri_td)
-+
-+/* 1 argument BCD functions added in ISA 2.06. */
-+BU_P7_MISC_1 (CDTBCD, "cdtbcd", CONST, cdtbcd)
-+BU_P7_MISC_1 (CBCDTD, "cbcdtd", CONST, cbcdtd)
-+
-+/* 2 argument BCD functions added in ISA 2.06. */
-+BU_P7_MISC_2 (ADDG6S, "addg6s", CONST, addg6s)
-+
-+/* 3 argument BCD functions added in ISA 2.07. */
-+BU_P8V_MISC_3 (BCDADD, "bcdadd", CONST, bcdadd)
-+BU_P8V_MISC_3 (BCDADD_LT, "bcdadd_lt", CONST, bcdadd_lt)
-+BU_P8V_MISC_3 (BCDADD_EQ, "bcdadd_eq", CONST, bcdadd_eq)
-+BU_P8V_MISC_3 (BCDADD_GT, "bcdadd_gt", CONST, bcdadd_gt)
-+BU_P8V_MISC_3 (BCDADD_OV, "bcdadd_ov", CONST, bcdadd_unordered)
-+BU_P8V_MISC_3 (BCDSUB, "bcdsub", CONST, bcdsub)
-+BU_P8V_MISC_3 (BCDSUB_LT, "bcdsub_lt", CONST, bcdsub_lt)
-+BU_P8V_MISC_3 (BCDSUB_EQ, "bcdsub_eq", CONST, bcdsub_eq)
-+BU_P8V_MISC_3 (BCDSUB_GT, "bcdsub_gt", CONST, bcdsub_gt)
-+BU_P8V_MISC_3 (BCDSUB_OV, "bcdsub_ov", CONST, bcdsub_unordered)
-+
-+/* 2 argument pack/unpack 128-bit floating point types. */
-+BU_DFP_MISC_2 (PACK_TD, "pack_dec128", CONST, packtd)
-+BU_DFP_MISC_2 (UNPACK_TD, "unpack_dec128", CONST, unpacktd)
-+
-+BU_LDBL128_2 (PACK_TF, "pack_longdouble", CONST, packtf)
-+BU_LDBL128_2 (UNPACK_TF, "unpack_longdouble", CONST, unpacktf)
-+
-+BU_P7_MISC_2 (PACK_V1TI, "pack_vector_int128", CONST, packv1ti)
-+BU_P7_MISC_2 (UNPACK_V1TI, "unpack_vector_int128", CONST, unpackv1ti)
-+
-+
- /* 1 argument crypto functions. */
- BU_CRYPTO_1 (VSBOX, "vsbox", CONST, crypto_vsbox)
-
-Index: gcc/config/rs6000/rs6000.c
-===================================================================
---- a/src/gcc/config/rs6000/rs6000.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/rs6000/rs6000.c (.../branches/gcc-4_9-branch)
-@@ -2283,6 +2283,24 @@
- if (rs6000_float_gprs)
- fprintf (stderr, DEBUG_FMT_S, "float_gprs", "true");
-
-+ fprintf (stderr, DEBUG_FMT_S, "fprs",
-+ (TARGET_FPRS ? "true" : "false"));
-+
-+ fprintf (stderr, DEBUG_FMT_S, "single_float",
-+ (TARGET_SINGLE_FLOAT ? "true" : "false"));
-+
-+ fprintf (stderr, DEBUG_FMT_S, "double_float",
-+ (TARGET_DOUBLE_FLOAT ? "true" : "false"));
-+
-+ fprintf (stderr, DEBUG_FMT_S, "soft_float",
-+ (TARGET_SOFT_FLOAT ? "true" : "false"));
-+
-+ fprintf (stderr, DEBUG_FMT_S, "e500_single",
-+ (TARGET_E500_SINGLE ? "true" : "false"));
-+
-+ fprintf (stderr, DEBUG_FMT_S, "e500_double",
-+ (TARGET_E500_DOUBLE ? "true" : "false"));
-+
- if (TARGET_LINK_STACK)
- fprintf (stderr, DEBUG_FMT_S, "link_stack", "true");
-
-@@ -3017,7 +3035,10 @@
- | ((rs6000_cpu == PROCESSOR_CELL) ? RS6000_BTM_CELL : 0)
- | ((TARGET_P8_VECTOR) ? RS6000_BTM_P8_VECTOR : 0)
- | ((TARGET_CRYPTO) ? RS6000_BTM_CRYPTO : 0)
-- | ((TARGET_HTM) ? RS6000_BTM_HTM : 0));
-+ | ((TARGET_HTM) ? RS6000_BTM_HTM : 0)
-+ | ((TARGET_DFP) ? RS6000_BTM_DFP : 0)
-+ | ((TARGET_HARD_FLOAT) ? RS6000_BTM_HARD_FLOAT : 0)
-+ | ((TARGET_LONG_DOUBLE_128) ? RS6000_BTM_LDBL128 : 0));
- }
-
- /* Override command line options. Mostly we process the processor type and
-@@ -3374,6 +3395,13 @@
- rs6000_isa_flags &= ~OPTION_MASK_VSX_TIMODE;
- }
-
-+ if (TARGET_DFP && !TARGET_HARD_FLOAT)
-+ {
-+ if (rs6000_isa_flags_explicit & OPTION_MASK_DFP)
-+ error ("-mhard-dfp requires -mhard-float");
-+ rs6000_isa_flags &= ~OPTION_MASK_DFP;
-+ }
-+
- /* The quad memory instructions only works in 64-bit mode. In 32-bit mode,
- silently turn off quad memory mode. */
- if ((TARGET_QUAD_MEMORY || TARGET_QUAD_MEMORY_ATOMIC) && !TARGET_POWERPC64)
-@@ -6091,7 +6119,8 @@
- return false;
-
- extra = GET_MODE_SIZE (mode) - UNITS_PER_WORD;
-- gcc_assert (extra >= 0);
-+ if (extra < 0)
-+ extra = 0;
-
- if (GET_CODE (addr) == LO_SUM)
- /* For lo_sum addresses, we must allow any offset except one that
-@@ -10450,10 +10479,9 @@
- list, or passes any parameter in memory. */
-
- static bool
--rs6000_function_parms_need_stack (tree fun)
-+rs6000_function_parms_need_stack (tree fun, bool incoming)
- {
-- function_args_iterator args_iter;
-- tree arg_type;
-+ tree fntype, result;
- CUMULATIVE_ARGS args_so_far_v;
- cumulative_args_t args_so_far;
-
-@@ -10460,26 +10488,57 @@
- if (!fun)
- /* Must be a libcall, all of which only use reg parms. */
- return false;
-+
-+ fntype = fun;
- if (!TYPE_P (fun))
-- fun = TREE_TYPE (fun);
-+ fntype = TREE_TYPE (fun);
-
- /* Varargs functions need the parameter save area. */
-- if (!prototype_p (fun) || stdarg_p (fun))
-+ if ((!incoming && !prototype_p (fntype)) || stdarg_p (fntype))
- return true;
-
-- INIT_CUMULATIVE_INCOMING_ARGS (args_so_far_v, fun, NULL_RTX);
-+ INIT_CUMULATIVE_INCOMING_ARGS (args_so_far_v, fntype, NULL_RTX);
- args_so_far = pack_cumulative_args (&args_so_far_v);
-
-- if (aggregate_value_p (TREE_TYPE (fun), fun))
-+ /* When incoming, we will have been passed the function decl.
-+ It is necessary to use the decl to handle K&R style functions,
-+ where TYPE_ARG_TYPES may not be available. */
-+ if (incoming)
- {
-- tree type = build_pointer_type (TREE_TYPE (fun));
-- rs6000_parm_needs_stack (args_so_far, type);
-+ gcc_assert (DECL_P (fun));
-+ result = DECL_RESULT (fun);
- }
-+ else
-+ result = TREE_TYPE (fntype);
-
-- FOREACH_FUNCTION_ARGS (fun, arg_type, args_iter)
-- if (rs6000_parm_needs_stack (args_so_far, arg_type))
-- return true;
-+ if (result && aggregate_value_p (result, fntype))
-+ {
-+ if (!TYPE_P (result))
-+ result = TREE_TYPE (result);
-+ result = build_pointer_type (result);
-+ rs6000_parm_needs_stack (args_so_far, result);
-+ }
-
-+ if (incoming)
-+ {
-+ tree parm;
-+
-+ for (parm = DECL_ARGUMENTS (fun);
-+ parm && parm != void_list_node;
-+ parm = TREE_CHAIN (parm))
-+ if (rs6000_parm_needs_stack (args_so_far, TREE_TYPE (parm)))
-+ return true;
-+ }
-+ else
-+ {
-+ function_args_iterator args_iter;
-+ tree arg_type;
-+
-+ FOREACH_FUNCTION_ARGS (fntype, arg_type, args_iter)
-+ if (rs6000_parm_needs_stack (args_so_far, arg_type))
-+ return true;
-+ }
-+
- return false;
- }
-
-@@ -10490,7 +10549,7 @@
- all parameters in registers. */
-
- int
--rs6000_reg_parm_stack_space (tree fun)
-+rs6000_reg_parm_stack_space (tree fun, bool incoming)
- {
- int reg_parm_stack_space;
-
-@@ -10508,7 +10567,7 @@
- case ABI_ELFv2:
- /* ??? Recomputing this every time is a bit expensive. Is there
- a place to cache this information? */
-- if (rs6000_function_parms_need_stack (fun))
-+ if (rs6000_function_parms_need_stack (fun, incoming))
- reg_parm_stack_space = TARGET_64BIT ? 64 : 32;
- else
- reg_parm_stack_space = 0;
-@@ -12381,7 +12440,15 @@
- }
- }
- else if (icode == CODE_FOR_vsx_set_v2df
-- || icode == CODE_FOR_vsx_set_v2di)
-+ || icode == CODE_FOR_vsx_set_v2di
-+ || icode == CODE_FOR_bcdadd
-+ || icode == CODE_FOR_bcdadd_lt
-+ || icode == CODE_FOR_bcdadd_eq
-+ || icode == CODE_FOR_bcdadd_gt
-+ || icode == CODE_FOR_bcdsub
-+ || icode == CODE_FOR_bcdsub_lt
-+ || icode == CODE_FOR_bcdsub_eq
-+ || icode == CODE_FOR_bcdsub_gt)
- {
- /* Only allow 1-bit unsigned literals. */
- STRIP_NOPS (arg2);
-@@ -12392,6 +12459,44 @@
- return const0_rtx;
- }
- }
-+ else if (icode == CODE_FOR_dfp_ddedpd_dd
-+ || icode == CODE_FOR_dfp_ddedpd_td)
-+ {
-+ /* Only allow 2-bit unsigned literals where the value is 0 or 2. */
-+ STRIP_NOPS (arg0);
-+ if (TREE_CODE (arg0) != INTEGER_CST
-+ || TREE_INT_CST_LOW (arg2) & ~0x3)
-+ {
-+ error ("argument 1 must be 0 or 2");
-+ return const0_rtx;
-+ }
-+ }
-+ else if (icode == CODE_FOR_dfp_denbcd_dd
-+ || icode == CODE_FOR_dfp_denbcd_td)
-+ {
-+ /* Only allow 1-bit unsigned literals. */
-+ STRIP_NOPS (arg0);
-+ if (TREE_CODE (arg0) != INTEGER_CST
-+ || TREE_INT_CST_LOW (arg0) & ~0x1)
-+ {
-+ error ("argument 1 must be a 1-bit unsigned literal");
-+ return const0_rtx;
-+ }
-+ }
-+ else if (icode == CODE_FOR_dfp_dscli_dd
-+ || icode == CODE_FOR_dfp_dscli_td
-+ || icode == CODE_FOR_dfp_dscri_dd
-+ || icode == CODE_FOR_dfp_dscri_td)
-+ {
-+ /* Only allow 6-bit unsigned literals. */
-+ STRIP_NOPS (arg1);
-+ if (TREE_CODE (arg1) != INTEGER_CST
-+ || TREE_INT_CST_LOW (arg1) & ~0x3f)
-+ {
-+ error ("argument 2 must be a 6-bit unsigned literal");
-+ return const0_rtx;
-+ }
-+ }
- else if (icode == CODE_FOR_crypto_vshasigmaw
- || icode == CODE_FOR_crypto_vshasigmad)
- {
-@@ -13483,6 +13588,20 @@
- error ("Builtin function %s requires the -mpaired option", name);
- else if ((fnmask & RS6000_BTM_SPE) != 0)
- error ("Builtin function %s requires the -mspe option", name);
-+ else if ((fnmask & (RS6000_BTM_DFP | RS6000_BTM_P8_VECTOR))
-+ == (RS6000_BTM_DFP | RS6000_BTM_P8_VECTOR))
-+ error ("Builtin function %s requires the -mhard-dfp and"
-+ " -mpower8-vector options", name);
-+ else if ((fnmask & RS6000_BTM_DFP) != 0)
-+ error ("Builtin function %s requires the -mhard-dfp option", name);
-+ else if ((fnmask & RS6000_BTM_P8_VECTOR) != 0)
-+ error ("Builtin function %s requires the -mpower8-vector option", name);
-+ else if ((fnmask & (RS6000_BTM_HARD_FLOAT | RS6000_BTM_LDBL128))
-+ == (RS6000_BTM_HARD_FLOAT | RS6000_BTM_LDBL128))
-+ error ("Builtin function %s requires the -mhard-float and"
-+ " -mlong-double-128 options", name);
-+ else if ((fnmask & RS6000_BTM_HARD_FLOAT) != 0)
-+ error ("Builtin function %s requires the -mhard-float option", name);
- else
- error ("Builtin function %s is not supported with the current options",
- name);
-@@ -13671,7 +13790,10 @@
- return ret;
- }
-
-- gcc_assert (TARGET_ALTIVEC || TARGET_VSX || TARGET_SPE || TARGET_PAIRED_FLOAT);
-+ unsigned attr = rs6000_builtin_info[uns_fcode].attr & RS6000_BTC_TYPE_MASK;
-+ gcc_assert (attr == RS6000_BTC_UNARY
-+ || attr == RS6000_BTC_BINARY
-+ || attr == RS6000_BTC_TERNARY);
-
- /* Handle simple unary operations. */
- d = bdesc_1arg;
-@@ -13762,6 +13884,9 @@
- uintTI_type_internal_node = unsigned_intTI_type_node;
- float_type_internal_node = float_type_node;
- double_type_internal_node = double_type_node;
-+ long_double_type_internal_node = long_double_type_node;
-+ dfloat64_type_internal_node = dfloat64_type_node;
-+ dfloat128_type_internal_node = dfloat128_type_node;
- void_type_internal_node = void_type_node;
-
- /* Initialize the modes for builtin_function_type, mapping a machine mode to
-@@ -13776,6 +13901,9 @@
- builtin_mode_to_type[TImode][1] = unsigned_intTI_type_node;
- builtin_mode_to_type[SFmode][0] = float_type_node;
- builtin_mode_to_type[DFmode][0] = double_type_node;
-+ builtin_mode_to_type[TFmode][0] = long_double_type_node;
-+ builtin_mode_to_type[DDmode][0] = dfloat64_type_node;
-+ builtin_mode_to_type[TDmode][0] = dfloat128_type_node;
- builtin_mode_to_type[V1TImode][0] = V1TI_type_node;
- builtin_mode_to_type[V1TImode][1] = unsigned_V1TI_type_node;
- builtin_mode_to_type[V2SImode][0] = V2SI_type_node;
-@@ -14868,6 +14996,8 @@
- /* unsigned 1 argument functions. */
- case CRYPTO_BUILTIN_VSBOX:
- case P8V_BUILTIN_VGBBD:
-+ case MISC_BUILTIN_CDTBCD:
-+ case MISC_BUILTIN_CBCDTD:
- h.uns_p[0] = 1;
- h.uns_p[1] = 1;
- break;
-@@ -14886,6 +15016,11 @@
- case CRYPTO_BUILTIN_VPMSUMW:
- case CRYPTO_BUILTIN_VPMSUMD:
- case CRYPTO_BUILTIN_VPMSUM:
-+ case MISC_BUILTIN_ADDG6S:
-+ case MISC_BUILTIN_DIVWEU:
-+ case MISC_BUILTIN_DIVWEUO:
-+ case MISC_BUILTIN_DIVDEU:
-+ case MISC_BUILTIN_DIVDEUO:
- h.uns_p[0] = 1;
- h.uns_p[1] = 1;
- h.uns_p[2] = 1;
-@@ -14947,9 +15082,18 @@
- /* signed args, unsigned return. */
- case VSX_BUILTIN_XVCVDPUXDS_UNS:
- case ALTIVEC_BUILTIN_FIXUNS_V4SF_V4SI:
-+ case MISC_BUILTIN_UNPACK_TD:
-+ case MISC_BUILTIN_UNPACK_V1TI:
- h.uns_p[0] = 1;
- break;
-
-+ /* unsigned arguments for 128-bit pack instructions. */
-+ case MISC_BUILTIN_PACK_TD:
-+ case MISC_BUILTIN_PACK_V1TI:
-+ h.uns_p[1] = 1;
-+ h.uns_p[2] = 1;
-+ break;
-+
- default:
- break;
- }
-@@ -31203,6 +31347,9 @@
- { "power8-vector", RS6000_BTM_P8_VECTOR, false, false },
- { "crypto", RS6000_BTM_CRYPTO, false, false },
- { "htm", RS6000_BTM_HTM, false, false },
-+ { "hard-dfp", RS6000_BTM_DFP, false, false },
-+ { "hard-float", RS6000_BTM_HARD_FLOAT, false, false },
-+ { "long-double-128", RS6000_BTM_LDBL128, false, false },
- };
-
- /* Option variables that we want to support inside attribute((target)) and
-Index: gcc/config/rs6000/vsx.md
-===================================================================
---- a/src/gcc/config/rs6000/vsx.md (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/rs6000/vsx.md (.../branches/gcc-4_9-branch)
-@@ -24,6 +24,13 @@
- ;; Iterator for the 2 64-bit vector types
- (define_mode_iterator VSX_D [V2DF V2DI])
-
-+;; Iterator for the 2 64-bit vector types + 128-bit types that are loaded with
-+;; lxvd2x to properly handle swapping words on little endian
-+(define_mode_iterator VSX_LE [V2DF
-+ V2DI
-+ V1TI
-+ (TI "VECTOR_MEM_VSX_P (TImode)")])
-+
- ;; Iterator for the 2 32-bit vector types
- (define_mode_iterator VSX_W [V4SF V4SI])
-
-@@ -228,8 +235,8 @@
- ;; The patterns for LE permuted loads and stores come before the general
- ;; VSX moves so they match first.
- (define_insn_and_split "*vsx_le_perm_load_<mode>"
-- [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa")
-- (match_operand:VSX_D 1 "memory_operand" "Z"))]
-+ [(set (match_operand:VSX_LE 0 "vsx_register_operand" "=wa")
-+ (match_operand:VSX_LE 1 "memory_operand" "Z"))]
- "!BYTES_BIG_ENDIAN && TARGET_VSX"
- "#"
- "!BYTES_BIG_ENDIAN && TARGET_VSX"
-@@ -342,8 +349,8 @@
- (set_attr "length" "8")])
-
- (define_insn "*vsx_le_perm_store_<mode>"
-- [(set (match_operand:VSX_D 0 "memory_operand" "=Z")
-- (match_operand:VSX_D 1 "vsx_register_operand" "+wa"))]
-+ [(set (match_operand:VSX_LE 0 "memory_operand" "=Z")
-+ (match_operand:VSX_LE 1 "vsx_register_operand" "+wa"))]
- "!BYTES_BIG_ENDIAN && TARGET_VSX"
- "#"
- [(set_attr "type" "vecstore")
-@@ -350,8 +357,8 @@
- (set_attr "length" "12")])
-
- (define_split
-- [(set (match_operand:VSX_D 0 "memory_operand" "")
-- (match_operand:VSX_D 1 "vsx_register_operand" ""))]
-+ [(set (match_operand:VSX_LE 0 "memory_operand" "")
-+ (match_operand:VSX_LE 1 "vsx_register_operand" ""))]
- "!BYTES_BIG_ENDIAN && TARGET_VSX && !reload_completed"
- [(set (match_dup 2)
- (vec_select:<MODE>
-@@ -369,8 +376,8 @@
- ;; The post-reload split requires that we re-permute the source
- ;; register in case it is still live.
- (define_split
-- [(set (match_operand:VSX_D 0 "memory_operand" "")
-- (match_operand:VSX_D 1 "vsx_register_operand" ""))]
-+ [(set (match_operand:VSX_LE 0 "memory_operand" "")
-+ (match_operand:VSX_LE 1 "vsx_register_operand" ""))]
- "!BYTES_BIG_ENDIAN && TARGET_VSX && reload_completed"
- [(set (match_dup 1)
- (vec_select:<MODE>
-@@ -1352,9 +1359,9 @@
- ;; xxpermdi for little endian loads and stores. We need several of
- ;; these since the form of the PARALLEL differs by mode.
- (define_insn "*vsx_xxpermdi2_le_<mode>"
-- [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa")
-- (vec_select:VSX_D
-- (match_operand:VSX_D 1 "vsx_register_operand" "wa")
-+ [(set (match_operand:VSX_LE 0 "vsx_register_operand" "=wa")
-+ (vec_select:VSX_LE
-+ (match_operand:VSX_LE 1 "vsx_register_operand" "wa")
- (parallel [(const_int 1) (const_int 0)])))]
- "!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (<MODE>mode)"
- "xxpermdi %x0,%x1,%x1,2"
-@@ -1401,9 +1408,9 @@
- ;; lxvd2x for little endian loads. We need several of
- ;; these since the form of the PARALLEL differs by mode.
- (define_insn "*vsx_lxvd2x2_le_<mode>"
-- [(set (match_operand:VSX_D 0 "vsx_register_operand" "=wa")
-- (vec_select:VSX_D
-- (match_operand:VSX_D 1 "memory_operand" "Z")
-+ [(set (match_operand:VSX_LE 0 "vsx_register_operand" "=wa")
-+ (vec_select:VSX_LE
-+ (match_operand:VSX_LE 1 "memory_operand" "Z")
- (parallel [(const_int 1) (const_int 0)])))]
- "!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (<MODE>mode)"
- "lxvd2x %x0,%y1"
-@@ -1450,9 +1457,9 @@
- ;; stxvd2x for little endian stores. We need several of
- ;; these since the form of the PARALLEL differs by mode.
- (define_insn "*vsx_stxvd2x2_le_<mode>"
-- [(set (match_operand:VSX_D 0 "memory_operand" "=Z")
-- (vec_select:VSX_D
-- (match_operand:VSX_D 1 "vsx_register_operand" "wa")
-+ [(set (match_operand:VSX_LE 0 "memory_operand" "=Z")
-+ (vec_select:VSX_LE
-+ (match_operand:VSX_LE 1 "vsx_register_operand" "wa")
- (parallel [(const_int 1) (const_int 0)])))]
- "!BYTES_BIG_ENDIAN && VECTOR_MEM_VSX_P (<MODE>mode)"
- "stxvd2x %x1,%y0"
-@@ -1683,7 +1690,7 @@
- {
- if (GET_CODE (op3) == SCRATCH)
- op3 = gen_reg_rtx (V4SFmode);
-- emit_insn (gen_vsx_xxsldwi_v4sf (op3, op1, op1, op2));
-+ emit_insn (gen_vsx_xxsldwi_v4sf (op3, op1, op1, GEN_INT (ele)));
- tmp = op3;
- }
- emit_insn (gen_vsx_xscvspdp_scalar2 (op0, tmp));
-@@ -1891,7 +1898,12 @@
- (parallel [(const_int 0) (const_int 4)
- (const_int 1) (const_int 5)])))]
- "VECTOR_MEM_VSX_P (<MODE>mode)"
-- "xxmrghw %x0,%x1,%x2"
-+{
-+ if (BYTES_BIG_ENDIAN)
-+ return "xxmrghw %x0,%x1,%x2";
-+ else
-+ return "xxmrglw %x0,%x2,%x1";
-+}
- [(set_attr "type" "vecperm")])
-
- (define_insn "vsx_xxmrglw_<mode>"
-@@ -1903,7 +1915,12 @@
- (parallel [(const_int 2) (const_int 6)
- (const_int 3) (const_int 7)])))]
- "VECTOR_MEM_VSX_P (<MODE>mode)"
-- "xxmrglw %x0,%x1,%x2"
-+{
-+ if (BYTES_BIG_ENDIAN)
-+ return "xxmrglw %x0,%x1,%x2";
-+ else
-+ return "xxmrghw %x0,%x2,%x1";
-+}
- [(set_attr "type" "vecperm")])
-
- ;; Shift left double by word immediate
-Index: gcc/config/rs6000/rs6000.h
-===================================================================
---- a/src/gcc/config/rs6000/rs6000.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/rs6000/rs6000.h (.../branches/gcc-4_9-branch)
-@@ -624,7 +624,8 @@
- || TARGET_CMPB /* ISA 2.05 */ \
- || TARGET_POPCNTD /* ISA 2.06 */ \
- || TARGET_ALTIVEC \
-- || TARGET_VSX)))
-+ || TARGET_VSX \
-+ || TARGET_HARD_FLOAT)))
-
- /* E500 cores only support plain "sync", not lwsync. */
- #define TARGET_NO_LWSYNC (rs6000_cpu == PROCESSOR_PPC8540 \
-@@ -1601,8 +1602,15 @@
- /* Define this if stack space is still allocated for a parameter passed
- in a register. The value is the number of bytes allocated to this
- area. */
--#define REG_PARM_STACK_SPACE(FNDECL) rs6000_reg_parm_stack_space((FNDECL))
-+#define REG_PARM_STACK_SPACE(FNDECL) \
-+ rs6000_reg_parm_stack_space ((FNDECL), false)
-
-+/* Define this macro if space guaranteed when compiling a function body
-+ is different to space required when making a call, a situation that
-+ can arise with K&R style function definitions. */
-+#define INCOMING_REG_PARM_STACK_SPACE(FNDECL) \
-+ rs6000_reg_parm_stack_space ((FNDECL), true)
-+
- /* Define this if the above stack space is to be considered part of the
- space allocated by the caller. */
- #define OUTGOING_REG_PARM_STACK_SPACE(FNTYPE) 1
-@@ -2500,8 +2508,8 @@
- #define RS6000_BTC_SAT RS6000_BTC_MISC /* saturate sets VSCR. */
-
- /* Builtin targets. For now, we reuse the masks for those options that are in
-- target flags, and pick two random bits for SPE and paired which aren't in
-- target_flags. */
-+ target flags, and pick three random bits for SPE, paired and ldbl128 which
-+ aren't in target_flags. */
- #define RS6000_BTM_ALWAYS 0 /* Always enabled. */
- #define RS6000_BTM_ALTIVEC MASK_ALTIVEC /* VMX/altivec vectors. */
- #define RS6000_BTM_VSX MASK_VSX /* VSX (vector/scalar). */
-@@ -2516,6 +2524,9 @@
- #define RS6000_BTM_FRSQRTES MASK_POPCNTB /* FRSQRTES instruction. */
- #define RS6000_BTM_POPCNTD MASK_POPCNTD /* Target supports ISA 2.06. */
- #define RS6000_BTM_CELL MASK_FPRND /* Target is cell powerpc. */
-+#define RS6000_BTM_DFP MASK_DFP /* Decimal floating point. */
-+#define RS6000_BTM_HARD_FLOAT MASK_SOFT_FLOAT /* Hardware floating point. */
-+#define RS6000_BTM_LDBL128 MASK_MULTIPLE /* 128-bit long double. */
-
- #define RS6000_BTM_COMMON (RS6000_BTM_ALTIVEC \
- | RS6000_BTM_VSX \
-@@ -2527,7 +2538,10 @@
- | RS6000_BTM_FRSQRTES \
- | RS6000_BTM_HTM \
- | RS6000_BTM_POPCNTD \
-- | RS6000_BTM_CELL)
-+ | RS6000_BTM_CELL \
-+ | RS6000_BTM_DFP \
-+ | RS6000_BTM_HARD_FLOAT \
-+ | RS6000_BTM_LDBL128)
-
- /* Define builtin enum index. */
-
-@@ -2622,6 +2636,9 @@
- RS6000_BTI_UINTTI, /* unsigned_intTI_type_node */
- RS6000_BTI_float, /* float_type_node */
- RS6000_BTI_double, /* double_type_node */
-+ RS6000_BTI_long_double, /* long_double_type_node */
-+ RS6000_BTI_dfloat64, /* dfloat64_type_node */
-+ RS6000_BTI_dfloat128, /* dfloat128_type_node */
- RS6000_BTI_void, /* void_type_node */
- RS6000_BTI_MAX
- };
-@@ -2673,6 +2690,9 @@
- #define uintTI_type_internal_node (rs6000_builtin_types[RS6000_BTI_UINTTI])
- #define float_type_internal_node (rs6000_builtin_types[RS6000_BTI_float])
- #define double_type_internal_node (rs6000_builtin_types[RS6000_BTI_double])
-+#define long_double_type_internal_node (rs6000_builtin_types[RS6000_BTI_long_double])
-+#define dfloat64_type_internal_node (rs6000_builtin_types[RS6000_BTI_dfloat64])
-+#define dfloat128_type_internal_node (rs6000_builtin_types[RS6000_BTI_dfloat128])
- #define void_type_internal_node (rs6000_builtin_types[RS6000_BTI_void])
-
- extern GTY(()) tree rs6000_builtin_types[RS6000_BTI_MAX];
-Index: gcc/config/rs6000/altivec.md
-===================================================================
---- a/src/gcc/config/rs6000/altivec.md (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/rs6000/altivec.md (.../branches/gcc-4_9-branch)
-@@ -143,6 +143,9 @@
- UNSPEC_VSUBEUQM
- UNSPEC_VSUBECUQ
- UNSPEC_VBPERMQ
-+ UNSPEC_BCDADD
-+ UNSPEC_BCDSUB
-+ UNSPEC_BCD_OVERFLOW
- ])
-
- (define_c_enum "unspecv"
-@@ -3334,3 +3337,112 @@
- "vbpermq %0,%1,%2"
- [(set_attr "length" "4")
- (set_attr "type" "vecsimple")])
-+
-+;; Decimal Integer operations
-+(define_int_iterator UNSPEC_BCD_ADD_SUB [UNSPEC_BCDADD UNSPEC_BCDSUB])
-+
-+(define_int_attr bcd_add_sub [(UNSPEC_BCDADD "add")
-+ (UNSPEC_BCDSUB "sub")])
-+
-+(define_code_iterator BCD_TEST [eq lt gt unordered])
-+
-+(define_insn "bcd<bcd_add_sub>"
-+ [(set (match_operand:V1TI 0 "register_operand" "")
-+ (unspec:V1TI [(match_operand:V1TI 1 "register_operand" "")
-+ (match_operand:V1TI 2 "register_operand" "")
-+ (match_operand:QI 3 "const_0_to_1_operand" "")]
-+ UNSPEC_BCD_ADD_SUB))
-+ (clobber (reg:CCFP 74))]
-+ "TARGET_P8_VECTOR"
-+ "bcd<bcd_add_sub>. %0,%1,%2,%3"
-+ [(set_attr "length" "4")
-+ (set_attr "type" "vecsimple")])
-+
-+;; Use a floating point type (V2DFmode) for the compare to set CR6 so that we
-+;; can use the unordered test for BCD nans and add/subtracts that overflow. An
-+;; UNORDERED test on an integer type (like V1TImode) is not defined. The type
-+;; probably should be one that can go in the VMX (Altivec) registers, so we
-+;; can't use DDmode or DFmode.
-+(define_insn "*bcd<bcd_add_sub>_test"
-+ [(set (reg:CCFP 74)
-+ (compare:CCFP
-+ (unspec:V2DF [(match_operand:V1TI 1 "register_operand" "v")
-+ (match_operand:V1TI 2 "register_operand" "v")
-+ (match_operand:QI 3 "const_0_to_1_operand" "i")]
-+ UNSPEC_BCD_ADD_SUB)
-+ (match_operand:V2DF 4 "zero_constant" "j")))
-+ (clobber (match_scratch:V1TI 0 "=v"))]
-+ "TARGET_P8_VECTOR"
-+ "bcd<bcd_add_sub>. %0,%1,%2,%3"
-+ [(set_attr "length" "4")
-+ (set_attr "type" "vecsimple")])
-+
-+(define_insn "*bcd<bcd_add_sub>_test2"
-+ [(set (match_operand:V1TI 0 "register_operand" "=v")
-+ (unspec:V1TI [(match_operand:V1TI 1 "register_operand" "v")
-+ (match_operand:V1TI 2 "register_operand" "v")
-+ (match_operand:QI 3 "const_0_to_1_operand" "i")]
-+ UNSPEC_BCD_ADD_SUB))
-+ (set (reg:CCFP 74)
-+ (compare:CCFP
-+ (unspec:V2DF [(match_dup 1)
-+ (match_dup 2)
-+ (match_dup 3)]
-+ UNSPEC_BCD_ADD_SUB)
-+ (match_operand:V2DF 4 "zero_constant" "j")))]
-+ "TARGET_P8_VECTOR"
-+ "bcd<bcd_add_sub>. %0,%1,%2,%3"
-+ [(set_attr "length" "4")
-+ (set_attr "type" "vecsimple")])
-+
-+(define_expand "bcd<bcd_add_sub>_<code>"
-+ [(parallel [(set (reg:CCFP 74)
-+ (compare:CCFP
-+ (unspec:V2DF [(match_operand:V1TI 1 "register_operand" "")
-+ (match_operand:V1TI 2 "register_operand" "")
-+ (match_operand:QI 3 "const_0_to_1_operand" "")]
-+ UNSPEC_BCD_ADD_SUB)
-+ (match_dup 4)))
-+ (clobber (match_scratch:V1TI 5 ""))])
-+ (set (match_operand:SI 0 "register_operand" "")
-+ (BCD_TEST:SI (reg:CCFP 74)
-+ (const_int 0)))]
-+ "TARGET_P8_VECTOR"
-+{
-+ operands[4] = CONST0_RTX (V2DFmode);
-+})
-+
-+;; Peephole2 pattern to combine a bcdadd/bcdsub that calculates the value and
-+;; the bcdadd/bcdsub that tests the value. The combiner won't work since
-+;; CR6 is a hard coded register. Unfortunately, all of the Altivec predicate
-+;; support is hard coded to use the fixed register CR6 instead of creating
-+;; a register class for CR6.
-+
-+(define_peephole2
-+ [(parallel [(set (match_operand:V1TI 0 "register_operand" "")
-+ (unspec:V1TI [(match_operand:V1TI 1 "register_operand" "")
-+ (match_operand:V1TI 2 "register_operand" "")
-+ (match_operand:QI 3 "const_0_to_1_operand" "")]
-+ UNSPEC_BCD_ADD_SUB))
-+ (clobber (reg:CCFP 74))])
-+ (parallel [(set (reg:CCFP 74)
-+ (compare:CCFP
-+ (unspec:V2DF [(match_dup 1)
-+ (match_dup 2)
-+ (match_dup 3)]
-+ UNSPEC_BCD_ADD_SUB)
-+ (match_operand:V2DF 4 "zero_constant" "")))
-+ (clobber (match_operand:V1TI 5 "register_operand" ""))])]
-+ "TARGET_P8_VECTOR"
-+ [(parallel [(set (match_dup 0)
-+ (unspec:V1TI [(match_dup 1)
-+ (match_dup 2)
-+ (match_dup 3)]
-+ UNSPEC_BCD_ADD_SUB))
-+ (set (reg:CCFP 74)
-+ (compare:CCFP
-+ (unspec:V2DF [(match_dup 1)
-+ (match_dup 2)
-+ (match_dup 3)]
-+ UNSPEC_BCD_ADD_SUB)
-+ (match_dup 4)))])])
-Index: gcc/config/rs6000/dfp.md
-===================================================================
---- a/src/gcc/config/rs6000/dfp.md (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/rs6000/dfp.md (.../branches/gcc-4_9-branch)
-@@ -322,3 +322,72 @@
- "TARGET_DFP"
- "dctfixq %0,%1"
- [(set_attr "type" "fp")])
-+
-+
-+;; Decimal builtin support
-+
-+(define_c_enum "unspec"
-+ [UNSPEC_DDEDPD
-+ UNSPEC_DENBCD
-+ UNSPEC_DXEX
-+ UNSPEC_DIEX
-+ UNSPEC_DSCLI
-+ UNSPEC_DSCRI])
-+
-+(define_mode_iterator D64_D128 [DD TD])
-+
-+(define_mode_attr dfp_suffix [(DD "")
-+ (TD "q")])
-+
-+(define_insn "dfp_ddedpd_<mode>"
-+ [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
-+ (unspec:D64_D128 [(match_operand:QI 1 "const_0_to_3_operand" "i")
-+ (match_operand:D64_D128 2 "gpc_reg_operand" "d")]
-+ UNSPEC_DDEDPD))]
-+ "TARGET_DFP"
-+ "ddedpd<dfp_suffix> %1,%0,%2"
-+ [(set_attr "type" "fp")])
-+
-+(define_insn "dfp_denbcd_<mode>"
-+ [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
-+ (unspec:D64_D128 [(match_operand:QI 1 "const_0_to_1_operand" "i")
-+ (match_operand:D64_D128 2 "gpc_reg_operand" "d")]
-+ UNSPEC_DENBCD))]
-+ "TARGET_DFP"
-+ "denbcd<dfp_suffix> %1,%0,%2"
-+ [(set_attr "type" "fp")])
-+
-+(define_insn "dfp_dxex_<mode>"
-+ [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
-+ (unspec:D64_D128 [(match_operand:D64_D128 1 "gpc_reg_operand" "d")]
-+ UNSPEC_DXEX))]
-+ "TARGET_DFP"
-+ "dxex<dfp_suffix> %0,%1"
-+ [(set_attr "type" "fp")])
-+
-+(define_insn "dfp_diex_<mode>"
-+ [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
-+ (unspec:D64_D128 [(match_operand:D64_D128 1 "gpc_reg_operand" "d")
-+ (match_operand:D64_D128 2 "gpc_reg_operand" "d")]
-+ UNSPEC_DXEX))]
-+ "TARGET_DFP"
-+ "diex<dfp_suffix> %0,%1,%2"
-+ [(set_attr "type" "fp")])
-+
-+(define_insn "dfp_dscli_<mode>"
-+ [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
-+ (unspec:D64_D128 [(match_operand:D64_D128 1 "gpc_reg_operand" "d")
-+ (match_operand:QI 2 "immediate_operand" "i")]
-+ UNSPEC_DSCLI))]
-+ "TARGET_DFP"
-+ "dscli<dfp_suffix> %0,%1,%2"
-+ [(set_attr "type" "fp")])
-+
-+(define_insn "dfp_dscri_<mode>"
-+ [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
-+ (unspec:D64_D128 [(match_operand:D64_D128 1 "gpc_reg_operand" "d")
-+ (match_operand:QI 2 "immediate_operand" "i")]
-+ UNSPEC_DSCRI))]
-+ "TARGET_DFP"
-+ "dscri<dfp_suffix> %0,%1,%2"
-+ [(set_attr "type" "fp")])
-Index: gcc/config/rs6000/sync.md
-===================================================================
---- a/src/gcc/config/rs6000/sync.md (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/rs6000/sync.md (.../branches/gcc-4_9-branch)
-@@ -107,10 +107,17 @@
- "isync"
- [(set_attr "type" "isync")])
-
-+;; Types that we should provide atomic instructions for.
-+(define_mode_iterator AINT [QI
-+ HI
-+ SI
-+ (DI "TARGET_POWERPC64")
-+ (TI "TARGET_SYNC_TI")])
-+
- ;; The control dependency used for load dependency described
- ;; in B.2.3 of the Power ISA 2.06B.
- (define_insn "loadsync_<mode>"
-- [(unspec_volatile:BLK [(match_operand:INT1 0 "register_operand" "r")]
-+ [(unspec_volatile:BLK [(match_operand:AINT 0 "register_operand" "r")]
- UNSPECV_ISYNC)
- (clobber (match_scratch:CC 1 "=y"))]
- ""
-@@ -118,19 +125,57 @@
- [(set_attr "type" "isync")
- (set_attr "length" "12")])
-
-+(define_insn "load_quadpti"
-+ [(set (match_operand:PTI 0 "quad_int_reg_operand" "=&r")
-+ (unspec:PTI
-+ [(match_operand:TI 1 "quad_memory_operand" "wQ")] UNSPEC_LSQ))]
-+ "TARGET_SYNC_TI
-+ && !reg_mentioned_p (operands[0], operands[1])"
-+ "lq %0,%1"
-+ [(set_attr "type" "load")
-+ (set_attr "length" "4")])
-+
- (define_expand "atomic_load<mode>"
-- [(set (match_operand:INT1 0 "register_operand" "") ;; output
-- (match_operand:INT1 1 "memory_operand" "")) ;; memory
-+ [(set (match_operand:AINT 0 "register_operand" "") ;; output
-+ (match_operand:AINT 1 "memory_operand" "")) ;; memory
- (use (match_operand:SI 2 "const_int_operand" ""))] ;; model
- ""
- {
-+ if (<MODE>mode == TImode && !TARGET_SYNC_TI)
-+ FAIL;
-+
- enum memmodel model = (enum memmodel) INTVAL (operands[2]);
-
- if (model == MEMMODEL_SEQ_CST)
- emit_insn (gen_hwsync ());
-
-- emit_move_insn (operands[0], operands[1]);
-+ if (<MODE>mode != TImode)
-+ emit_move_insn (operands[0], operands[1]);
-+ else
-+ {
-+ rtx op0 = operands[0];
-+ rtx op1 = operands[1];
-+ rtx pti_reg = gen_reg_rtx (PTImode);
-
-+ // Can't have indexed address for 'lq'
-+ if (indexed_address (XEXP (op1, 0), TImode))
-+ {
-+ rtx old_addr = XEXP (op1, 0);
-+ rtx new_addr = force_reg (Pmode, old_addr);
-+ operands[1] = op1 = replace_equiv_address (op1, new_addr);
-+ }
-+
-+ emit_insn (gen_load_quadpti (pti_reg, op1));
-+
-+ if (WORDS_BIG_ENDIAN)
-+ emit_move_insn (op0, gen_lowpart (TImode, pti_reg));
-+ else
-+ {
-+ emit_move_insn (gen_lowpart (DImode, op0), gen_highpart (DImode, pti_reg));
-+ emit_move_insn (gen_highpart (DImode, op0), gen_lowpart (DImode, pti_reg));
-+ }
-+ }
-+
- switch (model)
- {
- case MEMMODEL_RELAXED:
-@@ -146,12 +191,24 @@
- DONE;
- })
-
-+(define_insn "store_quadpti"
-+ [(set (match_operand:PTI 0 "quad_memory_operand" "=wQ")
-+ (unspec:PTI
-+ [(match_operand:PTI 1 "quad_int_reg_operand" "r")] UNSPEC_LSQ))]
-+ "TARGET_SYNC_TI"
-+ "stq %1,%0"
-+ [(set_attr "type" "store")
-+ (set_attr "length" "4")])
-+
- (define_expand "atomic_store<mode>"
-- [(set (match_operand:INT1 0 "memory_operand" "") ;; memory
-- (match_operand:INT1 1 "register_operand" "")) ;; input
-+ [(set (match_operand:AINT 0 "memory_operand" "") ;; memory
-+ (match_operand:AINT 1 "register_operand" "")) ;; input
- (use (match_operand:SI 2 "const_int_operand" ""))] ;; model
- ""
- {
-+ if (<MODE>mode == TImode && !TARGET_SYNC_TI)
-+ FAIL;
-+
- enum memmodel model = (enum memmodel) INTVAL (operands[2]);
- switch (model)
- {
-@@ -166,7 +223,33 @@
- default:
- gcc_unreachable ();
- }
-- emit_move_insn (operands[0], operands[1]);
-+ if (<MODE>mode != TImode)
-+ emit_move_insn (operands[0], operands[1]);
-+ else
-+ {
-+ rtx op0 = operands[0];
-+ rtx op1 = operands[1];
-+ rtx pti_reg = gen_reg_rtx (PTImode);
-+
-+ // Can't have indexed address for 'stq'
-+ if (indexed_address (XEXP (op0, 0), TImode))
-+ {
-+ rtx old_addr = XEXP (op0, 0);
-+ rtx new_addr = force_reg (Pmode, old_addr);
-+ operands[0] = op0 = replace_equiv_address (op0, new_addr);
-+ }
-+
-+ if (WORDS_BIG_ENDIAN)
-+ emit_move_insn (pti_reg, gen_lowpart (PTImode, op1));
-+ else
-+ {
-+ emit_move_insn (gen_lowpart (DImode, pti_reg), gen_highpart (DImode, op1));
-+ emit_move_insn (gen_highpart (DImode, pti_reg), gen_lowpart (DImode, op1));
-+ }
-+
-+ emit_insn (gen_store_quadpti (gen_lowpart (PTImode, op0), pti_reg));
-+ }
-+
- DONE;
- })
-
-@@ -180,14 +263,6 @@
- SI
- (DI "TARGET_POWERPC64")])
-
--;; Types that we should provide atomic instructions for.
--
--(define_mode_iterator AINT [QI
-- HI
-- SI
-- (DI "TARGET_POWERPC64")
-- (TI "TARGET_SYNC_TI")])
--
- (define_insn "load_locked<mode>"
- [(set (match_operand:ATOMIC 0 "int_reg_operand" "=r")
- (unspec_volatile:ATOMIC
-Index: gcc/config/rs6000/rs6000.md
-===================================================================
---- a/src/gcc/config/rs6000/rs6000.md (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/rs6000/rs6000.md (.../branches/gcc-4_9-branch)
-@@ -125,6 +125,16 @@
- UNSPEC_P8V_MTVSRD
- UNSPEC_P8V_XXPERMDI
- UNSPEC_P8V_RELOAD_FROM_VSX
-+ UNSPEC_ADDG6S
-+ UNSPEC_CDTBCD
-+ UNSPEC_CBCDTD
-+ UNSPEC_DIVE
-+ UNSPEC_DIVEO
-+ UNSPEC_DIVEU
-+ UNSPEC_DIVEUO
-+ UNSPEC_UNPACK_128BIT
-+ UNSPEC_PACK_128BIT
-+ UNSPEC_LSQ
- ])
-
- ;;
-@@ -481,6 +491,10 @@
- (V2DF "X,X,X,X,X")
- (V1TI "X,X,X,X,X")])
-
-+;; Mode attribute to give the correct type for integer divides
-+(define_mode_attr idiv_ldiv [(SI "idiv")
-+ (DI "ldiv")])
-+
-
- ;; Start with fixed-point load and store insns. Here we put only the more
- ;; complex forms. Basic data transfer is done later.
-@@ -732,7 +746,7 @@
-
- (define_insn "*extendsidi2_lfiwax"
- [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r,??wm,!wl,!wu")
-- (sign_extend:DI (match_operand:SI 1 "lwa_operand" "m,r,r,Z,Z")))]
-+ (sign_extend:DI (match_operand:SI 1 "lwa_operand" "Y,r,r,Z,Z")))]
- "TARGET_POWERPC64 && TARGET_LFIWAX"
- "@
- lwa%U1%X1 %0,%1
-@@ -755,7 +769,7 @@
-
- (define_insn "*extendsidi2_nocell"
- [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r")
-- (sign_extend:DI (match_operand:SI 1 "lwa_operand" "m,r")))]
-+ (sign_extend:DI (match_operand:SI 1 "lwa_operand" "Y,r")))]
- "TARGET_POWERPC64 && rs6000_gen_cell_microcode && !TARGET_LFIWAX"
- "@
- lwa%U1%X1 %0,%1
-@@ -2755,10 +2769,7 @@
- (match_operand:GPR 2 "gpc_reg_operand" "r")))]
- ""
- "div<wd>u %0,%1,%2"
-- [(set (attr "type")
-- (cond [(match_operand:SI 0 "" "")
-- (const_string "idiv")]
-- (const_string "ldiv")))])
-+ [(set_attr "type" "<idiv_ldiv>")])
-
-
- ;; For powers of two we can do srai/aze for divide and then adjust for
-@@ -2782,10 +2793,7 @@
- (match_operand:GPR 2 "gpc_reg_operand" "r")))]
- ""
- "div<wd> %0,%1,%2"
-- [(set (attr "type")
-- (cond [(match_operand:SI 0 "" "")
-- (const_string "idiv")]
-- (const_string "ldiv")))])
-+ [(set_attr "type" "<idiv_ldiv>")])
-
- (define_expand "mod<mode>3"
- [(use (match_operand:GPR 0 "gpc_reg_operand" ""))
-@@ -6534,6 +6542,49 @@
- [(set_attr "length" "8")
- (set_attr "type" "fpload")])
-
-+;; Define the TImode operations that can be done in a small number
-+;; of instructions. The & constraints are to prevent the register
-+;; allocator from allocating registers that overlap with the inputs
-+;; (for example, having an input in 7,8 and an output in 6,7). We
-+;; also allow for the output being the same as one of the inputs.
-+
-+(define_insn "addti3"
-+ [(set (match_operand:TI 0 "gpc_reg_operand" "=&r,&r,r,r")
-+ (plus:TI (match_operand:TI 1 "gpc_reg_operand" "%r,r,0,0")
-+ (match_operand:TI 2 "reg_or_short_operand" "r,I,r,I")))]
-+ "TARGET_64BIT"
-+{
-+ if (WORDS_BIG_ENDIAN)
-+ return (GET_CODE (operands[2])) != CONST_INT
-+ ? \"addc %L0,%L1,%L2\;adde %0,%1,%2\"
-+ : \"addic %L0,%L1,%2\;add%G2e %0,%1\";
-+ else
-+ return (GET_CODE (operands[2])) != CONST_INT
-+ ? \"addc %0,%1,%2\;adde %L0,%L1,%L2\"
-+ : \"addic %0,%1,%2\;add%G2e %L0,%L1\";
-+}
-+ [(set_attr "type" "two")
-+ (set_attr "length" "8")])
-+
-+(define_insn "subti3"
-+ [(set (match_operand:TI 0 "gpc_reg_operand" "=&r,&r,r,r,r")
-+ (minus:TI (match_operand:TI 1 "reg_or_short_operand" "r,I,0,r,I")
-+ (match_operand:TI 2 "gpc_reg_operand" "r,r,r,0,0")))]
-+ "TARGET_64BIT"
-+{
-+ if (WORDS_BIG_ENDIAN)
-+ return (GET_CODE (operands[1]) != CONST_INT)
-+ ? \"subfc %L0,%L2,%L1\;subfe %0,%2,%1\"
-+ : \"subfic %L0,%L2,%1\;subf%G1e %0,%2\";
-+ else
-+ return (GET_CODE (operands[1]) != CONST_INT)
-+ ? \"subfc %0,%2,%1\;subfe %L0,%L2,%L1\"
-+ : \"subfic %0,%2,%1\;subf%G1e %L0,%L2\";
-+}
-+ [(set_attr "type" "two")
-+ (set_attr "length" "8")])
-+
-+
- ;; Define the DImode operations that can be done in a small number
- ;; of instructions. The & constraints are to prevent the register
- ;; allocator from allocating registers that overlap with the inputs
-@@ -9395,7 +9446,8 @@
- (match_operand:FMOVE64 1 "input_operand" "r,Y,r,G,H,F"))]
- "! TARGET_POWERPC64
- && ((TARGET_FPRS && TARGET_SINGLE_FLOAT)
-- || TARGET_SOFT_FLOAT || TARGET_E500_SINGLE)
-+ || TARGET_SOFT_FLOAT || TARGET_E500_SINGLE
-+ || (<MODE>mode == DDmode && TARGET_E500_DOUBLE))
- && (gpc_reg_operand (operands[0], <MODE>mode)
- || gpc_reg_operand (operands[1], <MODE>mode))"
- "#"
-@@ -15691,7 +15743,172 @@
- })
-
-
-+;; Miscellaneous ISA 2.06 (power7) instructions
-+(define_insn "addg6s"
-+ [(set (match_operand:SI 0 "register_operand" "=r")
-+ (unspec:SI [(match_operand:SI 1 "register_operand" "r")
-+ (match_operand:SI 2 "register_operand" "r")]
-+ UNSPEC_ADDG6S))]
-+ "TARGET_POPCNTD"
-+ "addg6s %0,%1,%2"
-+ [(set_attr "type" "integer")
-+ (set_attr "length" "4")])
-
-+(define_insn "cdtbcd"
-+ [(set (match_operand:SI 0 "register_operand" "=r")
-+ (unspec:SI [(match_operand:SI 1 "register_operand" "r")]
-+ UNSPEC_CDTBCD))]
-+ "TARGET_POPCNTD"
-+ "cdtbcd %0,%1"
-+ [(set_attr "type" "integer")
-+ (set_attr "length" "4")])
-+
-+(define_insn "cbcdtd"
-+ [(set (match_operand:SI 0 "register_operand" "=r")
-+ (unspec:SI [(match_operand:SI 1 "register_operand" "r")]
-+ UNSPEC_CBCDTD))]
-+ "TARGET_POPCNTD"
-+ "cbcdtd %0,%1"
-+ [(set_attr "type" "integer")
-+ (set_attr "length" "4")])
-+
-+(define_int_iterator UNSPEC_DIV_EXTEND [UNSPEC_DIVE
-+ UNSPEC_DIVEO
-+ UNSPEC_DIVEU
-+ UNSPEC_DIVEUO])
-+
-+(define_int_attr div_extend [(UNSPEC_DIVE "e")
-+ (UNSPEC_DIVEO "eo")
-+ (UNSPEC_DIVEU "eu")
-+ (UNSPEC_DIVEUO "euo")])
-+
-+(define_insn "div<div_extend>_<mode>"
-+ [(set (match_operand:GPR 0 "register_operand" "=r")
-+ (unspec:GPR [(match_operand:GPR 1 "register_operand" "r")
-+ (match_operand:GPR 2 "register_operand" "r")]
-+ UNSPEC_DIV_EXTEND))]
-+ "TARGET_POPCNTD"
-+ "div<wd><div_extend> %0,%1,%2"
-+ [(set_attr "type" "<idiv_ldiv>")])
-+
-+
-+;; Pack/unpack 128-bit floating point types that take 2 scalar registers
-+
-+; Type of the 64-bit part when packing/unpacking 128-bit floating point types
-+(define_mode_attr FP128_64 [(TF "DF") (TD "DI")])
-+
-+(define_expand "unpack<mode>"
-+ [(set (match_operand:<FP128_64> 0 "nonimmediate_operand" "")
-+ (unspec:<FP128_64>
-+ [(match_operand:FMOVE128 1 "register_operand" "")
-+ (match_operand:QI 2 "const_0_to_1_operand" "")]
-+ UNSPEC_UNPACK_128BIT))]
-+ ""
-+ "")
-+
-+(define_insn_and_split "unpack<mode>_dm"
-+ [(set (match_operand:<FP128_64> 0 "nonimmediate_operand" "=d,m,d,r,m")
-+ (unspec:<FP128_64>
-+ [(match_operand:FMOVE128 1 "register_operand" "d,d,r,d,r")
-+ (match_operand:QI 2 "const_0_to_1_operand" "i,i,i,i,i")]
-+ UNSPEC_UNPACK_128BIT))]
-+ "TARGET_POWERPC64 && TARGET_DIRECT_MOVE"
-+ "#"
-+ "&& reload_completed"
-+ [(set (match_dup 0) (match_dup 3))]
-+{
-+ unsigned fp_regno = REGNO (operands[1]) + UINTVAL (operands[2]);
-+
-+ if (REG_P (operands[0]) && REGNO (operands[0]) == fp_regno)
-+ {
-+ emit_note (NOTE_INSN_DELETED);
-+ DONE;
-+ }
-+
-+ operands[3] = gen_rtx_REG (<FP128_64>mode, fp_regno);
-+}
-+ [(set_attr "type" "fp,fpstore,mffgpr,mftgpr,store")
-+ (set_attr "length" "4")])
-+
-+(define_insn_and_split "unpack<mode>_nodm"
-+ [(set (match_operand:<FP128_64> 0 "nonimmediate_operand" "=d,m")
-+ (unspec:<FP128_64>
-+ [(match_operand:FMOVE128 1 "register_operand" "d,d")
-+ (match_operand:QI 2 "const_0_to_1_operand" "i,i")]
-+ UNSPEC_UNPACK_128BIT))]
-+ "!TARGET_POWERPC64 || !TARGET_DIRECT_MOVE"
-+ "#"
-+ "&& reload_completed"
-+ [(set (match_dup 0) (match_dup 3))]
-+{
-+ unsigned fp_regno = REGNO (operands[1]) + UINTVAL (operands[2]);
-+
-+ if (REG_P (operands[0]) && REGNO (operands[0]) == fp_regno)
-+ {
-+ emit_note (NOTE_INSN_DELETED);
-+ DONE;
-+ }
-+
-+ operands[3] = gen_rtx_REG (<FP128_64>mode, fp_regno);
-+}
-+ [(set_attr "type" "fp,fpstore")
-+ (set_attr "length" "4")])
-+
-+(define_insn_and_split "pack<mode>"
-+ [(set (match_operand:FMOVE128 0 "register_operand" "=d,&d")
-+ (unspec:FMOVE128
-+ [(match_operand:<FP128_64> 1 "register_operand" "0,d")
-+ (match_operand:<FP128_64> 2 "register_operand" "d,d")]
-+ UNSPEC_PACK_128BIT))]
-+ ""
-+ "@
-+ fmr %L0,%2
-+ #"
-+ "&& reload_completed && REGNO (operands[0]) != REGNO (operands[1])"
-+ [(set (match_dup 3) (match_dup 1))
-+ (set (match_dup 4) (match_dup 2))]
-+{
-+ unsigned dest_hi = REGNO (operands[0]);
-+ unsigned dest_lo = dest_hi + 1;
-+
-+ gcc_assert (!IN_RANGE (REGNO (operands[1]), dest_hi, dest_lo));
-+ gcc_assert (!IN_RANGE (REGNO (operands[2]), dest_hi, dest_lo));
-+
-+ operands[3] = gen_rtx_REG (<FP128_64>mode, dest_hi);
-+ operands[4] = gen_rtx_REG (<FP128_64>mode, dest_lo);
-+}
-+ [(set_attr "type" "fp,fp")
-+ (set_attr "length" "4,8")])
-+
-+(define_insn "unpackv1ti"
-+ [(set (match_operand:DI 0 "register_operand" "=d,d")
-+ (unspec:DI [(match_operand:V1TI 1 "register_operand" "0,wa")
-+ (match_operand:QI 2 "const_0_to_1_operand" "O,i")]
-+ UNSPEC_UNPACK_128BIT))]
-+ "TARGET_VSX"
-+{
-+ if (REGNO (operands[0]) == REGNO (operands[1]) && INTVAL (operands[2]) == 0)
-+ return ASM_COMMENT_START " xxpermdi to same register";
-+
-+ operands[3] = GEN_INT (INTVAL (operands[2]) == 0 ? 0 : 3);
-+ return "xxpermdi %x0,%x1,%x1,%3";
-+}
-+ [(set_attr "type" "vecperm")
-+ (set_attr "length" "4")])
-+
-+(define_insn "packv1ti"
-+ [(set (match_operand:V1TI 0 "register_operand" "=wa")
-+ (unspec:V1TI
-+ [(match_operand:DI 1 "register_operand" "d")
-+ (match_operand:DI 2 "register_operand" "d")]
-+ UNSPEC_PACK_128BIT))]
-+ "TARGET_VSX"
-+ "xxpermdi %x0,%x1,%x2,0"
-+ [(set_attr "type" "vecperm")
-+ (set_attr "length" "4")])
-+
-+
-+
- (include "sync.md")
- (include "vector.md")
- (include "vsx.md")
-Index: gcc/config/arm/neon-docgen.ml
-===================================================================
---- a/src/gcc/config/arm/neon-docgen.ml (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/arm/neon-docgen.ml (.../branches/gcc-4_9-branch)
-@@ -1,424 +0,0 @@
--(* ARM NEON documentation generator.
--
-- Copyright (C) 2006-2014 Free Software Foundation, Inc.
-- Contributed by CodeSourcery.
--
-- This file is part of GCC.
--
-- GCC 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.
--
-- GCC 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 GCC; see the file COPYING3. If not see
-- <http://www.gnu.org/licenses/>.
--
-- This is an O'Caml program. The O'Caml compiler is available from:
--
-- http://caml.inria.fr/
--
-- Or from your favourite OS's friendly packaging system. Tested with version
-- 3.09.2, though other versions will probably work too.
--
-- Compile with:
-- ocamlc -c neon.ml
-- ocamlc -o neon-docgen neon.cmo neon-docgen.ml
--
-- Run with:
-- /path/to/neon-docgen /path/to/gcc/doc/arm-neon-intrinsics.texi
--*)
--
--open Neon
--
--(* The combined "ops" and "reinterp" table. *)
--let ops_reinterp = reinterp @ ops
--
--(* Helper functions for extracting things from the "ops" table. *)
--let single_opcode desired_opcode () =
-- List.fold_left (fun got_so_far ->
-- fun row ->
-- match row with
-- (opcode, _, _, _, _, _) ->
-- if opcode = desired_opcode then row :: got_so_far
-- else got_so_far
-- ) [] ops_reinterp
--
--let multiple_opcodes desired_opcodes () =
-- List.fold_left (fun got_so_far ->
-- fun desired_opcode ->
-- (single_opcode desired_opcode ()) @ got_so_far)
-- [] desired_opcodes
--
--let ldx_opcode number () =
-- List.fold_left (fun got_so_far ->
-- fun row ->
-- match row with
-- (opcode, _, _, _, _, _) ->
-- match opcode with
-- Vldx n | Vldx_lane n | Vldx_dup n when n = number ->
-- row :: got_so_far
-- | _ -> got_so_far
-- ) [] ops_reinterp
--
--let stx_opcode number () =
-- List.fold_left (fun got_so_far ->
-- fun row ->
-- match row with
-- (opcode, _, _, _, _, _) ->
-- match opcode with
-- Vstx n | Vstx_lane n when n = number ->
-- row :: got_so_far
-- | _ -> got_so_far
-- ) [] ops_reinterp
--
--let tbl_opcode () =
-- List.fold_left (fun got_so_far ->
-- fun row ->
-- match row with
-- (opcode, _, _, _, _, _) ->
-- match opcode with
-- Vtbl _ -> row :: got_so_far
-- | _ -> got_so_far
-- ) [] ops_reinterp
--
--let tbx_opcode () =
-- List.fold_left (fun got_so_far ->
-- fun row ->
-- match row with
-- (opcode, _, _, _, _, _) ->
-- match opcode with
-- Vtbx _ -> row :: got_so_far
-- | _ -> got_so_far
-- ) [] ops_reinterp
--
--(* The groups of intrinsics. *)
--let intrinsic_groups =
-- [ "Addition", single_opcode Vadd;
-- "Multiplication", single_opcode Vmul;
-- "Multiply-accumulate", single_opcode Vmla;
-- "Multiply-subtract", single_opcode Vmls;
-- "Fused-multiply-accumulate", single_opcode Vfma;
-- "Fused-multiply-subtract", single_opcode Vfms;
-- "Round to integral (to nearest, ties to even)", single_opcode Vrintn;
-- "Round to integral (to nearest, ties away from zero)", single_opcode Vrinta;
-- "Round to integral (towards +Inf)", single_opcode Vrintp;
-- "Round to integral (towards -Inf)", single_opcode Vrintm;
-- "Round to integral (towards 0)", single_opcode Vrintz;
-- "Subtraction", single_opcode Vsub;
-- "Comparison (equal-to)", single_opcode Vceq;
-- "Comparison (greater-than-or-equal-to)", single_opcode Vcge;
-- "Comparison (less-than-or-equal-to)", single_opcode Vcle;
-- "Comparison (greater-than)", single_opcode Vcgt;
-- "Comparison (less-than)", single_opcode Vclt;
-- "Comparison (absolute greater-than-or-equal-to)", single_opcode Vcage;
-- "Comparison (absolute less-than-or-equal-to)", single_opcode Vcale;
-- "Comparison (absolute greater-than)", single_opcode Vcagt;
-- "Comparison (absolute less-than)", single_opcode Vcalt;
-- "Test bits", single_opcode Vtst;
-- "Absolute difference", single_opcode Vabd;
-- "Absolute difference and accumulate", single_opcode Vaba;
-- "Maximum", single_opcode Vmax;
-- "Minimum", single_opcode Vmin;
-- "Pairwise add", single_opcode Vpadd;
-- "Pairwise add, single_opcode widen and accumulate", single_opcode Vpada;
-- "Folding maximum", single_opcode Vpmax;
-- "Folding minimum", single_opcode Vpmin;
-- "Reciprocal step", multiple_opcodes [Vrecps; Vrsqrts];
-- "Vector shift left", single_opcode Vshl;
-- "Vector shift left by constant", single_opcode Vshl_n;
-- "Vector shift right by constant", single_opcode Vshr_n;
-- "Vector shift right by constant and accumulate", single_opcode Vsra_n;
-- "Vector shift right and insert", single_opcode Vsri;
-- "Vector shift left and insert", single_opcode Vsli;
-- "Absolute value", single_opcode Vabs;
-- "Negation", single_opcode Vneg;
-- "Bitwise not", single_opcode Vmvn;
-- "Count leading sign bits", single_opcode Vcls;
-- "Count leading zeros", single_opcode Vclz;
-- "Count number of set bits", single_opcode Vcnt;
-- "Reciprocal estimate", single_opcode Vrecpe;
-- "Reciprocal square-root estimate", single_opcode Vrsqrte;
-- "Get lanes from a vector", single_opcode Vget_lane;
-- "Set lanes in a vector", single_opcode Vset_lane;
-- "Create vector from literal bit pattern", single_opcode Vcreate;
-- "Set all lanes to the same value",
-- multiple_opcodes [Vdup_n; Vmov_n; Vdup_lane];
-- "Combining vectors", single_opcode Vcombine;
-- "Splitting vectors", multiple_opcodes [Vget_high; Vget_low];
-- "Conversions", multiple_opcodes [Vcvt; Vcvt_n];
-- "Move, single_opcode narrowing", single_opcode Vmovn;
-- "Move, single_opcode long", single_opcode Vmovl;
-- "Table lookup", tbl_opcode;
-- "Extended table lookup", tbx_opcode;
-- "Multiply, lane", single_opcode Vmul_lane;
-- "Long multiply, lane", single_opcode Vmull_lane;
-- "Saturating doubling long multiply, lane", single_opcode Vqdmull_lane;
-- "Saturating doubling multiply high, lane", single_opcode Vqdmulh_lane;
-- "Multiply-accumulate, lane", single_opcode Vmla_lane;
-- "Multiply-subtract, lane", single_opcode Vmls_lane;
-- "Vector multiply by scalar", single_opcode Vmul_n;
-- "Vector long multiply by scalar", single_opcode Vmull_n;
-- "Vector saturating doubling long multiply by scalar",
-- single_opcode Vqdmull_n;
-- "Vector saturating doubling multiply high by scalar",
-- single_opcode Vqdmulh_n;
-- "Vector multiply-accumulate by scalar", single_opcode Vmla_n;
-- "Vector multiply-subtract by scalar", single_opcode Vmls_n;
-- "Vector extract", single_opcode Vext;
-- "Reverse elements", multiple_opcodes [Vrev64; Vrev32; Vrev16];
-- "Bit selection", single_opcode Vbsl;
-- "Transpose elements", single_opcode Vtrn;
-- "Zip elements", single_opcode Vzip;
-- "Unzip elements", single_opcode Vuzp;
-- "Element/structure loads, VLD1 variants", ldx_opcode 1;
-- "Element/structure stores, VST1 variants", stx_opcode 1;
-- "Element/structure loads, VLD2 variants", ldx_opcode 2;
-- "Element/structure stores, VST2 variants", stx_opcode 2;
-- "Element/structure loads, VLD3 variants", ldx_opcode 3;
-- "Element/structure stores, VST3 variants", stx_opcode 3;
-- "Element/structure loads, VLD4 variants", ldx_opcode 4;
-- "Element/structure stores, VST4 variants", stx_opcode 4;
-- "Logical operations (AND)", single_opcode Vand;
-- "Logical operations (OR)", single_opcode Vorr;
-- "Logical operations (exclusive OR)", single_opcode Veor;
-- "Logical operations (AND-NOT)", single_opcode Vbic;
-- "Logical operations (OR-NOT)", single_opcode Vorn;
-- "Reinterpret casts", single_opcode Vreinterp ]
--
--(* Given an intrinsic shape, produce a string to document the corresponding
-- operand shapes. *)
--let rec analyze_shape shape =
-- let rec n_things n thing =
-- match n with
-- 0 -> []
-- | n -> thing :: (n_things (n - 1) thing)
-- in
-- let rec analyze_shape_elt reg_no elt =
-- match elt with
-- Dreg -> "@var{d" ^ (string_of_int reg_no) ^ "}"
-- | Qreg -> "@var{q" ^ (string_of_int reg_no) ^ "}"
-- | Corereg -> "@var{r" ^ (string_of_int reg_no) ^ "}"
-- | Immed -> "#@var{0}"
-- | VecArray (1, elt) ->
-- let elt_regexp = analyze_shape_elt 0 elt in
-- "@{" ^ elt_regexp ^ "@}"
-- | VecArray (n, elt) ->
-- let rec f m =
-- match m with
-- 0 -> []
-- | m -> (analyze_shape_elt (m - 1) elt) :: (f (m - 1))
-- in
-- let ops = List.rev (f n) in
-- "@{" ^ (commas (fun x -> x) ops "") ^ "@}"
-- | (PtrTo elt | CstPtrTo elt) ->
-- "[" ^ (analyze_shape_elt reg_no elt) ^ "]"
-- | Element_of_dreg -> (analyze_shape_elt reg_no Dreg) ^ "[@var{0}]"
-- | Element_of_qreg -> (analyze_shape_elt reg_no Qreg) ^ "[@var{0}]"
-- | All_elements_of_dreg -> (analyze_shape_elt reg_no Dreg) ^ "[]"
-- | Alternatives alts -> (analyze_shape_elt reg_no (List.hd alts))
-- in
-- match shape with
-- All (n, elt) -> commas (analyze_shape_elt 0) (n_things n elt) ""
-- | Long -> (analyze_shape_elt 0 Qreg) ^ ", " ^ (analyze_shape_elt 0 Dreg) ^
-- ", " ^ (analyze_shape_elt 0 Dreg)
-- | Long_noreg elt -> (analyze_shape_elt 0 elt) ^ ", " ^
-- (analyze_shape_elt 0 elt)
-- | Wide -> (analyze_shape_elt 0 Qreg) ^ ", " ^ (analyze_shape_elt 0 Qreg) ^
-- ", " ^ (analyze_shape_elt 0 Dreg)
-- | Wide_noreg elt -> analyze_shape (Long_noreg elt)
-- | Narrow -> (analyze_shape_elt 0 Dreg) ^ ", " ^ (analyze_shape_elt 0 Qreg) ^
-- ", " ^ (analyze_shape_elt 0 Qreg)
-- | Use_operands elts -> commas (analyze_shape_elt 0) (Array.to_list elts) ""
-- | By_scalar Dreg ->
-- analyze_shape (Use_operands [| Dreg; Dreg; Element_of_dreg |])
-- | By_scalar Qreg ->
-- analyze_shape (Use_operands [| Qreg; Qreg; Element_of_dreg |])
-- | By_scalar _ -> assert false
-- | Wide_lane ->
-- analyze_shape (Use_operands [| Qreg; Dreg; Element_of_dreg |])
-- | Wide_scalar ->
-- analyze_shape (Use_operands [| Qreg; Dreg; Element_of_dreg |])
-- | Pair_result elt ->
-- let elt_regexp = analyze_shape_elt 0 elt in
-- let elt_regexp' = analyze_shape_elt 1 elt in
-- elt_regexp ^ ", " ^ elt_regexp'
-- | Unary_scalar _ -> "FIXME Unary_scalar"
-- | Binary_imm elt -> analyze_shape (Use_operands [| elt; elt; Immed |])
-- | Narrow_imm -> analyze_shape (Use_operands [| Dreg; Qreg; Immed |])
-- | Long_imm -> analyze_shape (Use_operands [| Qreg; Dreg; Immed |])
--
--(* Document a single intrinsic. *)
--let describe_intrinsic first chan
-- (elt_ty, (_, features, shape, name, munge, _)) =
-- let c_arity, new_elt_ty = munge shape elt_ty in
-- let c_types = strings_of_arity c_arity in
-- Printf.fprintf chan "@itemize @bullet\n";
-- let item_code = if first then "@item" else "@itemx" in
-- Printf.fprintf chan "%s %s %s_%s (" item_code (List.hd c_types)
-- (intrinsic_name name) (string_of_elt elt_ty);
-- Printf.fprintf chan "%s)\n" (commas (fun ty -> ty) (List.tl c_types) "");
-- if not (List.exists (fun feature -> feature = No_op) features) then
-- begin
-- let print_one_insn name =
-- Printf.fprintf chan "@code{";
-- let no_suffix = (new_elt_ty = NoElts) in
-- let name_with_suffix =
-- if no_suffix then name
-- else name ^ "." ^ (string_of_elt_dots new_elt_ty)
-- in
-- let possible_operands = analyze_all_shapes features shape
-- analyze_shape
-- in
-- let rec print_one_possible_operand op =
-- Printf.fprintf chan "%s %s}" name_with_suffix op
-- in
-- (* If the intrinsic expands to multiple instructions, we assume
-- they are all of the same form. *)
-- print_one_possible_operand (List.hd possible_operands)
-- in
-- let rec print_insns names =
-- match names with
-- [] -> ()
-- | [name] -> print_one_insn name
-- | name::names -> (print_one_insn name;
-- Printf.fprintf chan " @emph{or} ";
-- print_insns names)
-- in
-- let insn_names = get_insn_names features name in
-- Printf.fprintf chan "@*@emph{Form of expected instruction(s):} ";
-- print_insns insn_names;
-- Printf.fprintf chan "\n"
-- end;
-- Printf.fprintf chan "@end itemize\n";
-- Printf.fprintf chan "\n\n"
--
--(* Document a group of intrinsics. *)
--let document_group chan (group_title, group_extractor) =
-- (* Extract the rows in question from the ops table and then turn them
-- into a list of intrinsics. *)
-- let intrinsics =
-- List.fold_left (fun got_so_far ->
-- fun row ->
-- match row with
-- (_, _, _, _, _, elt_tys) ->
-- List.fold_left (fun got_so_far' ->
-- fun elt_ty ->
-- (elt_ty, row) :: got_so_far')
-- got_so_far elt_tys
-- ) [] (group_extractor ())
-- in
-- (* Emit the title for this group. *)
-- Printf.fprintf chan "@subsubsection %s\n\n" group_title;
-- (* Emit a description of each intrinsic. *)
-- List.iter (describe_intrinsic true chan) intrinsics;
-- (* Close this group. *)
-- Printf.fprintf chan "\n\n"
--
--let gnu_header chan =
-- List.iter (fun s -> Printf.fprintf chan "%s\n" s) [
-- "@c Copyright (C) 2006-2014 Free Software Foundation, Inc.";
-- "@c This is part of the GCC manual.";
-- "@c For copying conditions, see the file gcc.texi.";
-- "";
-- "@c This file is generated automatically using gcc/config/arm/neon-docgen.ml";
-- "@c Please do not edit manually."]
--
--let crypto_doc =
--"
--@itemize @bullet
--@item poly128_t vldrq_p128(poly128_t const *)
--@end itemize
--
--@itemize @bullet
--@item void vstrq_p128(poly128_t *, poly128_t)
--@end itemize
--
--@itemize @bullet
--@item uint64x1_t vceq_p64 (poly64x1_t, poly64x1_t)
--@end itemize
--
--@itemize @bullet
--@item uint64x1_t vtst_p64 (poly64x1_t, poly64x1_t)
--@end itemize
--
--@itemize @bullet
--@item uint32_t vsha1h_u32 (uint32_t)
--@*@emph{Form of expected instruction(s):} @code{sha1h.32 @var{q0}, @var{q1}}
--@end itemize
--
--@itemize @bullet
--@item uint32x4_t vsha1cq_u32 (uint32x4_t, uint32_t, uint32x4_t)
--@*@emph{Form of expected instruction(s):} @code{sha1c.32 @var{q0}, @var{q1}, @var{q2}}
--@end itemize
--
--@itemize @bullet
--@item uint32x4_t vsha1pq_u32 (uint32x4_t, uint32_t, uint32x4_t)
--@*@emph{Form of expected instruction(s):} @code{sha1p.32 @var{q0}, @var{q1}, @var{q2}}
--@end itemize
--
--@itemize @bullet
--@item uint32x4_t vsha1mq_u32 (uint32x4_t, uint32_t, uint32x4_t)
--@*@emph{Form of expected instruction(s):} @code{sha1m.32 @var{q0}, @var{q1}, @var{q2}}
--@end itemize
--
--@itemize @bullet
--@item uint32x4_t vsha1su0q_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
--@*@emph{Form of expected instruction(s):} @code{sha1su0.32 @var{q0}, @var{q1}, @var{q2}}
--@end itemize
--
--@itemize @bullet
--@item uint32x4_t vsha1su1q_u32 (uint32x4_t, uint32x4_t)
--@*@emph{Form of expected instruction(s):} @code{sha1su1.32 @var{q0}, @var{q1}, @var{q2}}
--@end itemize
--
--@itemize @bullet
--@item uint32x4_t vsha256hq_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
--@*@emph{Form of expected instruction(s):} @code{sha256h.32 @var{q0}, @var{q1}, @var{q2}}
--@end itemize
--
--@itemize @bullet
--@item uint32x4_t vsha256h2q_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
--@*@emph{Form of expected instruction(s):} @code{sha256h2.32 @var{q0}, @var{q1}, @var{q2}}
--@end itemize
--
--@itemize @bullet
--@item uint32x4_t vsha256su0q_u32 (uint32x4_t, uint32x4_t)
--@*@emph{Form of expected instruction(s):} @code{sha256su0.32 @var{q0}, @var{q1}}
--@end itemize
--
--@itemize @bullet
--@item uint32x4_t vsha256su1q_u32 (uint32x4_t, uint32x4_t, uint32x4_t)
--@*@emph{Form of expected instruction(s):} @code{sha256su1.32 @var{q0}, @var{q1}, @var{q2}}
--@end itemize
--
--@itemize @bullet
--@item poly128_t vmull_p64 (poly64_t a, poly64_t b)
--@*@emph{Form of expected instruction(s):} @code{vmull.p64 @var{q0}, @var{d1}, @var{d2}}
--@end itemize
--
--@itemize @bullet
--@item poly128_t vmull_high_p64 (poly64x2_t a, poly64x2_t b)
--@*@emph{Form of expected instruction(s):} @code{vmull.p64 @var{q0}, @var{d1}, @var{d2}}
--@end itemize
--"
--
--(* Program entry point. *)
--let _ =
-- if Array.length Sys.argv <> 2 then
-- failwith "Usage: neon-docgen <output filename>"
-- else
-- let file = Sys.argv.(1) in
-- try
-- let chan = open_out file in
-- gnu_header chan;
-- List.iter (document_group chan) intrinsic_groups;
-- Printf.fprintf chan "%s\n" crypto_doc;
-- close_out chan
-- with Sys_error sys ->
-- failwith ("Could not create output file " ^ file ^ ": " ^ sys)
-Index: gcc/config/arm/neon-gen.ml
-===================================================================
---- a/src/gcc/config/arm/neon-gen.ml (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/arm/neon-gen.ml (.../branches/gcc-4_9-branch)
-@@ -1,520 +0,0 @@
--(* Auto-generate ARM Neon intrinsics header file.
-- Copyright (C) 2006-2014 Free Software Foundation, Inc.
-- Contributed by CodeSourcery.
--
-- This file is part of GCC.
--
-- GCC 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.
--
-- GCC 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 GCC; see the file COPYING3. If not see
-- <http://www.gnu.org/licenses/>.
--
-- This is an O'Caml program. The O'Caml compiler is available from:
--
-- http://caml.inria.fr/
--
-- Or from your favourite OS's friendly packaging system. Tested with version
-- 3.09.2, though other versions will probably work too.
--
-- Compile with:
-- ocamlc -c neon.ml
-- ocamlc -o neon-gen neon.cmo neon-gen.ml
--
-- Run with:
-- ./neon-gen > arm_neon.h
--*)
--
--open Neon
--
--(* The format codes used in the following functions are documented at:
-- http://caml.inria.fr/pub/docs/manual-ocaml/libref/Format.html\
-- #6_printflikefunctionsforprettyprinting
-- (one line, remove the backslash.)
--*)
--
--(* Following functions can be used to approximate GNU indentation style. *)
--let start_function () =
-- Format.printf "@[<v 0>";
-- ref 0
--
--let end_function nesting =
-- match !nesting with
-- 0 -> Format.printf "@;@;@]"
-- | _ -> failwith ("Bad nesting (ending function at level "
-- ^ (string_of_int !nesting) ^ ")")
--
--let open_braceblock nesting =
-- begin match !nesting with
-- 0 -> Format.printf "@,@<0>{@[<v 2>@,"
-- | _ -> Format.printf "@,@[<v 2> @<0>{@[<v 2>@,"
-- end;
-- incr nesting
--
--let close_braceblock nesting =
-- decr nesting;
-- match !nesting with
-- 0 -> Format.printf "@]@,@<0>}"
-- | _ -> Format.printf "@]@,@<0>}@]"
--
--let print_function arity fnname body =
-- let ffmt = start_function () in
-- Format.printf "__extension__ static __inline ";
-- let inl = "__attribute__ ((__always_inline__))" in
-- begin match arity with
-- Arity0 ret ->
-- Format.printf "%s %s@,%s (void)" (string_of_vectype ret) inl fnname
-- | Arity1 (ret, arg0) ->
-- Format.printf "%s %s@,%s (%s __a)" (string_of_vectype ret) inl fnname
-- (string_of_vectype arg0)
-- | Arity2 (ret, arg0, arg1) ->
-- Format.printf "%s %s@,%s (%s __a, %s __b)"
-- (string_of_vectype ret) inl fnname (string_of_vectype arg0)
-- (string_of_vectype arg1)
-- | Arity3 (ret, arg0, arg1, arg2) ->
-- Format.printf "%s %s@,%s (%s __a, %s __b, %s __c)"
-- (string_of_vectype ret) inl fnname (string_of_vectype arg0)
-- (string_of_vectype arg1) (string_of_vectype arg2)
-- | Arity4 (ret, arg0, arg1, arg2, arg3) ->
-- Format.printf "%s %s@,%s (%s __a, %s __b, %s __c, %s __d)"
-- (string_of_vectype ret) inl fnname (string_of_vectype arg0)
-- (string_of_vectype arg1) (string_of_vectype arg2)
-- (string_of_vectype arg3)
-- end;
-- open_braceblock ffmt;
-- let rec print_lines = function
-- [] -> ()
-- | "" :: lines -> print_lines lines
-- | [line] -> Format.printf "%s" line
-- | line::lines -> Format.printf "%s@," line ; print_lines lines in
-- print_lines body;
-- close_braceblock ffmt;
-- end_function ffmt
--
--let union_string num elts base =
-- let itype = inttype_for_array num elts in
-- let iname = string_of_inttype itype
-- and sname = string_of_vectype (T_arrayof (num, elts)) in
-- Printf.sprintf "union { %s __i; %s __o; } %s" sname iname base
--
--let rec signed_ctype = function
-- T_uint8x8 | T_poly8x8 -> T_int8x8
-- | T_uint8x16 | T_poly8x16 -> T_int8x16
-- | T_uint16x4 | T_poly16x4 -> T_int16x4
-- | T_uint16x8 | T_poly16x8 -> T_int16x8
-- | T_uint32x2 -> T_int32x2
-- | T_uint32x4 -> T_int32x4
-- | T_uint64x1 -> T_int64x1
-- | T_uint64x2 -> T_int64x2
-- | T_poly64x2 -> T_int64x2
-- (* Cast to types defined by mode in arm.c, not random types pulled in from
-- the <stdint.h> header in use. This fixes incompatible pointer errors when
-- compiling with C++. *)
-- | T_uint8 | T_int8 -> T_intQI
-- | T_uint16 | T_int16 -> T_intHI
-- | T_uint32 | T_int32 -> T_intSI
-- | T_uint64 | T_int64 -> T_intDI
-- | T_float16 -> T_floatHF
-- | T_float32 -> T_floatSF
-- | T_poly8 -> T_intQI
-- | T_poly16 -> T_intHI
-- | T_poly64 -> T_intDI
-- | T_poly128 -> T_intTI
-- | T_arrayof (n, elt) -> T_arrayof (n, signed_ctype elt)
-- | T_ptrto elt -> T_ptrto (signed_ctype elt)
-- | T_const elt -> T_const (signed_ctype elt)
-- | x -> x
--
--let add_cast ctype cval =
-- let stype = signed_ctype ctype in
-- if ctype <> stype then
-- Printf.sprintf "(%s) %s" (string_of_vectype stype) cval
-- else
-- cval
--
--let cast_for_return to_ty = "(" ^ (string_of_vectype to_ty) ^ ")"
--
--(* Return a tuple of a list of declarations to go at the start of the function,
-- and a list of statements needed to return THING. *)
--let return arity thing =
-- match arity with
-- Arity0 (ret) | Arity1 (ret, _) | Arity2 (ret, _, _) | Arity3 (ret, _, _, _)
-- | Arity4 (ret, _, _, _, _) ->
-- begin match ret with
-- T_arrayof (num, vec) ->
-- let uname = union_string num vec "__rv" in
-- [uname ^ ";"], ["__rv.__o = " ^ thing ^ ";"; "return __rv.__i;"]
-- | T_void ->
-- [], [thing ^ ";"]
-- | _ ->
-- [], ["return " ^ (cast_for_return ret) ^ thing ^ ";"]
-- end
--
--let mask_shape_for_shuffle = function
-- All (num, reg) -> All (num, reg)
-- | Pair_result reg -> All (2, reg)
-- | _ -> failwith "mask_for_shuffle"
--
--let mask_elems shuffle shape elttype part =
-- let elem_size = elt_width elttype in
-- let num_elems =
-- match regmap shape 0 with
-- Dreg -> 64 / elem_size
-- | Qreg -> 128 / elem_size
-- | _ -> failwith "mask_elems" in
-- shuffle elem_size num_elems part
--
--(* Return a tuple of a list of declarations 0and a list of statements needed
-- to implement an intrinsic using __builtin_shuffle. SHUFFLE is a function
-- which returns a list of elements suitable for using as a mask. *)
--
--let shuffle_fn shuffle shape arity elttype =
-- let mshape = mask_shape_for_shuffle shape in
-- let masktype = type_for_elt mshape (unsigned_of_elt elttype) 0 in
-- let masktype_str = string_of_vectype masktype in
-- let shuffle_res = type_for_elt mshape elttype 0 in
-- let shuffle_res_str = string_of_vectype shuffle_res in
-- match arity with
-- Arity0 (ret) | Arity1 (ret, _) | Arity2 (ret, _, _) | Arity3 (ret, _, _, _)
-- | Arity4 (ret, _, _, _, _) ->
-- begin match ret with
-- T_arrayof (num, vec) ->
-- let elems1 = mask_elems shuffle mshape elttype `lo
-- and elems2 = mask_elems shuffle mshape elttype `hi in
-- let mask1 = (String.concat ", " (List.map string_of_int elems1))
-- and mask2 = (String.concat ", " (List.map string_of_int elems2)) in
-- let shuf1 = Printf.sprintf
-- "__rv.val[0] = (%s) __builtin_shuffle (__a, __b, (%s) { %s });"
-- shuffle_res_str masktype_str mask1
-- and shuf2 = Printf.sprintf
-- "__rv.val[1] = (%s) __builtin_shuffle (__a, __b, (%s) { %s });"
-- shuffle_res_str masktype_str mask2 in
-- [Printf.sprintf "%s __rv;" (string_of_vectype ret);],
-- [shuf1; shuf2; "return __rv;"]
-- | _ ->
-- let elems = mask_elems shuffle mshape elttype `lo in
-- let mask = (String.concat ", " (List.map string_of_int elems)) in
-- let shuf = Printf.sprintf
-- "return (%s) __builtin_shuffle (__a, (%s) { %s });" shuffle_res_str masktype_str mask in
-- [""],
-- [shuf]
-- end
--
--let rec element_type ctype =
-- match ctype with
-- T_arrayof (_, v) -> element_type v
-- | _ -> ctype
--
--let params ps =
-- let pdecls = ref [] in
-- let ptype t p =
-- match t with
-- T_arrayof (num, elts) ->
-- let uname = union_string num elts (p ^ "u") in
-- let decl = Printf.sprintf "%s = { %s };" uname p in
-- pdecls := decl :: !pdecls;
-- p ^ "u.__o"
-- | _ -> add_cast t p in
-- let plist = match ps with
-- Arity0 _ -> []
-- | Arity1 (_, t1) -> [ptype t1 "__a"]
-- | Arity2 (_, t1, t2) -> [ptype t1 "__a"; ptype t2 "__b"]
-- | Arity3 (_, t1, t2, t3) -> [ptype t1 "__a"; ptype t2 "__b"; ptype t3 "__c"]
-- | Arity4 (_, t1, t2, t3, t4) ->
-- [ptype t1 "__a"; ptype t2 "__b"; ptype t3 "__c"; ptype t4 "__d"] in
-- !pdecls, plist
--
--let modify_params features plist =
-- let is_flipped =
-- List.exists (function Flipped _ -> true | _ -> false) features in
-- if is_flipped then
-- match plist with
-- [ a; b ] -> [ b; a ]
-- | _ ->
-- failwith ("Don't know how to flip args " ^ (String.concat ", " plist))
-- else
-- plist
--
--(* !!! Decide whether to add an extra information word based on the shape
-- form. *)
--let extra_word shape features paramlist bits =
-- let use_word =
-- match shape with
-- All _ | Long | Long_noreg _ | Wide | Wide_noreg _ | Narrow
-- | By_scalar _ | Wide_scalar | Wide_lane | Binary_imm _ | Long_imm
-- | Narrow_imm -> true
-- | _ -> List.mem InfoWord features
-- in
-- if use_word then
-- paramlist @ [string_of_int bits]
-- else
-- paramlist
--
--(* Bit 0 represents signed (1) vs unsigned (0), or float (1) vs poly (0).
-- Bit 1 represents floats & polynomials (1), or ordinary integers (0).
-- Bit 2 represents rounding (1) vs none (0). *)
--let infoword_value elttype features =
-- let bits01 =
-- match elt_class elttype with
-- Signed | ConvClass (Signed, _) | ConvClass (_, Signed) -> 0b001
-- | Poly -> 0b010
-- | Float -> 0b011
-- | _ -> 0b000
-- and rounding_bit = if List.mem Rounding features then 0b100 else 0b000 in
-- bits01 lor rounding_bit
--
--(* "Cast" type operations will throw an exception in mode_of_elt (actually in
-- elt_width, called from there). Deal with that here, and generate a suffix
-- with multiple modes (<to><from>). *)
--let rec mode_suffix elttype shape =
-- try
-- let mode = mode_of_elt elttype shape in
-- string_of_mode mode
-- with MixedMode (dst, src) ->
-- let dstmode = mode_of_elt ~argpos:0 dst shape
-- and srcmode = mode_of_elt ~argpos:1 src shape in
-- string_of_mode dstmode ^ string_of_mode srcmode
--
--let get_shuffle features =
-- try
-- match List.find (function Use_shuffle _ -> true | _ -> false) features with
-- Use_shuffle fn -> Some fn
-- | _ -> None
-- with Not_found -> None
--
--let print_feature_test_start features =
-- try
-- match List.find (fun feature ->
-- match feature with Requires_feature _ -> true
-- | Requires_arch _ -> true
-- | Requires_FP_bit _ -> true
-- | _ -> false)
-- features with
-- Requires_feature feature ->
-- Format.printf "#ifdef __ARM_FEATURE_%s@\n" feature
-- | Requires_arch arch ->
-- Format.printf "#if __ARM_ARCH >= %d@\n" arch
-- | Requires_FP_bit bit ->
-- Format.printf "#if ((__ARM_FP & 0x%X) != 0)@\n"
-- (1 lsl bit)
-- | _ -> assert false
-- with Not_found -> assert true
--
--let print_feature_test_end features =
-- let feature =
-- List.exists (function Requires_feature _ -> true
-- | Requires_arch _ -> true
-- | Requires_FP_bit _ -> true
-- | _ -> false) features in
-- if feature then Format.printf "#endif@\n"
--
--
--let print_variant opcode features shape name (ctype, asmtype, elttype) =
-- let bits = infoword_value elttype features in
-- let modesuf = mode_suffix elttype shape in
-- let pdecls, paramlist = params ctype in
-- let rdecls, stmts =
-- match get_shuffle features with
-- Some shuffle -> shuffle_fn shuffle shape ctype elttype
-- | None ->
-- let paramlist' = modify_params features paramlist in
-- let paramlist'' = extra_word shape features paramlist' bits in
-- let parstr = String.concat ", " paramlist'' in
-- let builtin = Printf.sprintf "__builtin_neon_%s%s (%s)"
-- (builtin_name features name) modesuf parstr in
-- return ctype builtin in
-- let body = pdecls @ rdecls @ stmts
-- and fnname = (intrinsic_name name) ^ "_" ^ (string_of_elt elttype) in
-- begin
-- print_feature_test_start features;
-- print_function ctype fnname body;
-- print_feature_test_end features;
-- end
--
--(* When this function processes the element types in the ops table, it rewrites
-- them in a list of tuples (a,b,c):
-- a : C type as an "arity", e.g. Arity1 (T_poly8x8, T_poly8x8)
-- b : Asm type : a single, processed element type, e.g. P16. This is the
-- type which should be attached to the asm opcode.
-- c : Variant type : the unprocessed type for this variant (e.g. in add
-- instructions which don't care about the sign, b might be i16 and c
-- might be s16.)
--*)
--
--let print_op (opcode, features, shape, name, munge, types) =
-- let sorted_types = List.sort compare types in
-- let munged_types = List.map
-- (fun elt -> let c, asm = munge shape elt in c, asm, elt) sorted_types in
-- List.iter
-- (fun variant -> print_variant opcode features shape name variant)
-- munged_types
--
--let print_ops ops =
-- List.iter print_op ops
--
--(* Output type definitions. Table entries are:
-- cbase : "C" name for the type.
-- abase : "ARM" base name for the type (i.e. int in int8x8_t).
-- esize : element size.
-- enum : element count.
-- alevel: architecture level at which available.
--*)
--
--type fpulevel = CRYPTO | ALL
--
--let deftypes () =
-- let typeinfo = [
-- (* Doubleword vector types. *)
-- "__builtin_neon_qi", "int", 8, 8, ALL;
-- "__builtin_neon_hi", "int", 16, 4, ALL;
-- "__builtin_neon_si", "int", 32, 2, ALL;
-- "__builtin_neon_di", "int", 64, 1, ALL;
-- "__builtin_neon_hf", "float", 16, 4, ALL;
-- "__builtin_neon_sf", "float", 32, 2, ALL;
-- "__builtin_neon_poly8", "poly", 8, 8, ALL;
-- "__builtin_neon_poly16", "poly", 16, 4, ALL;
-- "__builtin_neon_poly64", "poly", 64, 1, CRYPTO;
-- "__builtin_neon_uqi", "uint", 8, 8, ALL;
-- "__builtin_neon_uhi", "uint", 16, 4, ALL;
-- "__builtin_neon_usi", "uint", 32, 2, ALL;
-- "__builtin_neon_udi", "uint", 64, 1, ALL;
--
-- (* Quadword vector types. *)
-- "__builtin_neon_qi", "int", 8, 16, ALL;
-- "__builtin_neon_hi", "int", 16, 8, ALL;
-- "__builtin_neon_si", "int", 32, 4, ALL;
-- "__builtin_neon_di", "int", 64, 2, ALL;
-- "__builtin_neon_sf", "float", 32, 4, ALL;
-- "__builtin_neon_poly8", "poly", 8, 16, ALL;
-- "__builtin_neon_poly16", "poly", 16, 8, ALL;
-- "__builtin_neon_poly64", "poly", 64, 2, CRYPTO;
-- "__builtin_neon_uqi", "uint", 8, 16, ALL;
-- "__builtin_neon_uhi", "uint", 16, 8, ALL;
-- "__builtin_neon_usi", "uint", 32, 4, ALL;
-- "__builtin_neon_udi", "uint", 64, 2, ALL
-- ] in
-- List.iter
-- (fun (cbase, abase, esize, enum, fpulevel) ->
-- let attr =
-- match enum with
-- 1 -> ""
-- | _ -> Printf.sprintf "\t__attribute__ ((__vector_size__ (%d)))"
-- (esize * enum / 8) in
-- if fpulevel == CRYPTO then
-- Format.printf "#ifdef __ARM_FEATURE_CRYPTO\n";
-- Format.printf "typedef %s %s%dx%d_t%s;@\n" cbase abase esize enum attr;
-- if fpulevel == CRYPTO then
-- Format.printf "#endif\n";)
-- typeinfo;
-- Format.print_newline ();
-- (* Extra types not in <stdint.h>. *)
-- Format.printf "typedef float float32_t;\n";
-- Format.printf "typedef __builtin_neon_poly8 poly8_t;\n";
-- Format.printf "typedef __builtin_neon_poly16 poly16_t;\n";
-- Format.printf "#ifdef __ARM_FEATURE_CRYPTO\n";
-- Format.printf "typedef __builtin_neon_poly64 poly64_t;\n";
-- Format.printf "typedef __builtin_neon_poly128 poly128_t;\n";
-- Format.printf "#endif\n"
--
--(* Output structs containing arrays, for load & store instructions etc.
-- poly128_t is deliberately not included here because it has no array types
-- defined for it. *)
--
--let arrtypes () =
-- let typeinfo = [
-- "int", 8, ALL; "int", 16, ALL;
-- "int", 32, ALL; "int", 64, ALL;
-- "uint", 8, ALL; "uint", 16, ALL;
-- "uint", 32, ALL; "uint", 64, ALL;
-- "float", 32, ALL; "poly", 8, ALL;
-- "poly", 16, ALL; "poly", 64, CRYPTO
-- ] in
-- let writestruct elname elsize regsize arrsize fpulevel =
-- let elnum = regsize / elsize in
-- let structname =
-- Printf.sprintf "%s%dx%dx%d_t" elname elsize elnum arrsize in
-- let sfmt = start_function () in
-- Format.printf "%stypedef struct %s"
-- (if fpulevel == CRYPTO then "#ifdef __ARM_FEATURE_CRYPTO\n" else "") structname;
-- open_braceblock sfmt;
-- Format.printf "%s%dx%d_t val[%d];" elname elsize elnum arrsize;
-- close_braceblock sfmt;
-- Format.printf " %s;%s" structname (if fpulevel == CRYPTO then "\n#endif\n" else "");
-- end_function sfmt;
-- in
-- for n = 2 to 4 do
-- List.iter
-- (fun (elname, elsize, alevel) ->
-- writestruct elname elsize 64 n alevel;
-- writestruct elname elsize 128 n alevel)
-- typeinfo
-- done
--
--let print_lines = List.iter (fun s -> Format.printf "%s@\n" s)
--
--(* Do it. *)
--
--let _ =
-- print_lines [
--"/* ARM NEON intrinsics include file. This file is generated automatically";
--" using neon-gen.ml. Please do not edit manually.";
--"";
--" Copyright (C) 2006-2014 Free Software Foundation, Inc.";
--" Contributed by CodeSourcery.";
--"";
--" This file is part of GCC.";
--"";
--" GCC 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.";
--"";
--" GCC 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.";
--"";
--" Under Section 7 of GPL version 3, you are granted additional";
--" permissions described in the GCC Runtime Library Exception, version";
--" 3.1, as published by the Free Software Foundation.";
--"";
--" You should have received a copy of the GNU General Public License and";
--" a copy of the GCC Runtime Library Exception along with this program;";
--" see the files COPYING3 and COPYING.RUNTIME respectively. If not, see";
--" <http://www.gnu.org/licenses/>. */";
--"";
--"#ifndef _GCC_ARM_NEON_H";
--"#define _GCC_ARM_NEON_H 1";
--"";
--"#ifndef __ARM_NEON__";
--"#error You must enable NEON instructions (e.g. -mfloat-abi=softfp -mfpu=neon) to use arm_neon.h";
--"#else";
--"";
--"#ifdef __cplusplus";
--"extern \"C\" {";
--"#endif";
--"";
--"#include <stdint.h>";
--""];
-- deftypes ();
-- arrtypes ();
-- Format.print_newline ();
-- print_ops ops;
-- Format.print_newline ();
-- print_ops reinterp;
-- print_ops reinterpq;
-- Format.printf "%s" crypto_intrinsics;
-- print_lines [
--"#ifdef __cplusplus";
--"}";
--"#endif";
--"#endif";
--"#endif"]
-Index: gcc/config/arm/uclinux-elf.h
-===================================================================
---- a/src/gcc/config/arm/uclinux-elf.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/arm/uclinux-elf.h (.../branches/gcc-4_9-branch)
-@@ -14,8 +14,13 @@
- 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 GCC; see the file COPYING3. If not see
-+ Under Section 7 of GPL version 3, you are granted additional
-+ permissions described in the GCC Runtime Library Exception, version
-+ 3.1, as published by the Free Software Foundation.
-+
-+ You should have received a copy of the GNU General Public License and
-+ a copy of the GCC Runtime Library Exception along with this program;
-+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
- /* We don't want a PLT. */
-Index: gcc/config/arm/linux-elf.h
-===================================================================
---- a/src/gcc/config/arm/linux-elf.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/arm/linux-elf.h (.../branches/gcc-4_9-branch)
-@@ -14,8 +14,13 @@
- 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 GCC; see the file COPYING3. If not see
-+ Under Section 7 of GPL version 3, you are granted additional
-+ permissions described in the GCC Runtime Library Exception, version
-+ 3.1, as published by the Free Software Foundation.
-+
-+ You should have received a copy of the GNU General Public License and
-+ a copy of the GCC Runtime Library Exception along with this program;
-+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
- /* elfos.h should have already been included. Now just override
-Index: gcc/config/arm/elf.h
-===================================================================
---- a/src/gcc/config/arm/elf.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/arm/elf.h (.../branches/gcc-4_9-branch)
-@@ -16,8 +16,13 @@
- 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 GCC; see the file COPYING3. If not see
-+ Under Section 7 of GPL version 3, you are granted additional
-+ permissions described in the GCC Runtime Library Exception, version
-+ 3.1, as published by the Free Software Foundation.
-+
-+ You should have received a copy of the GNU General Public License and
-+ a copy of the GCC Runtime Library Exception along with this program;
-+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
- #ifndef OBJECT_FORMAT_ELF
-Index: gcc/config/arm/aout.h
-===================================================================
---- a/src/gcc/config/arm/aout.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/arm/aout.h (.../branches/gcc-4_9-branch)
-@@ -14,8 +14,13 @@
- 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 GCC; see the file COPYING3. If not see
-+ Under Section 7 of GPL version 3, you are granted additional
-+ permissions described in the GCC Runtime Library Exception, version
-+ 3.1, as published by the Free Software Foundation.
-+
-+ You should have received a copy of the GNU General Public License and
-+ a copy of the GCC Runtime Library Exception along with this program;
-+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
- #ifndef ASM_APP_ON
-Index: gcc/config/arm/arm.c
-===================================================================
---- a/src/gcc/config/arm/arm.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/arm/arm.c (.../branches/gcc-4_9-branch)
-@@ -16716,11 +16716,12 @@
- rtx prev, insn = BB_END (bb);
- bool insn_clobbered = false;
-
-- while (insn != BB_HEAD (bb) && DEBUG_INSN_P (insn))
-+ while (insn != BB_HEAD (bb) && !NONDEBUG_INSN_P (insn))
- insn = PREV_INSN (insn);
-
- /* Find the last cbranchsi4_insn in basic block BB. */
-- if (INSN_CODE (insn) != CODE_FOR_cbranchsi4_insn)
-+ if (insn == BB_HEAD (bb)
-+ || INSN_CODE (insn) != CODE_FOR_cbranchsi4_insn)
- continue;
-
- /* Get the register with which we are comparing. */
-@@ -28183,9 +28184,13 @@
- fputs (":\n", file);
- if (flag_pic)
- {
-- /* Output ".word .LTHUNKn-7-.LTHUNKPCn". */
-+ /* Output ".word .LTHUNKn-[3,7]-.LTHUNKPCn". */
- rtx tem = XEXP (DECL_RTL (function), 0);
-- tem = plus_constant (GET_MODE (tem), tem, -7);
-+ /* For TARGET_THUMB1_ONLY the thunk is in Thumb mode, so the PC
-+ pipeline offset is four rather than eight. Adjust the offset
-+ accordingly. */
-+ tem = plus_constant (GET_MODE (tem), tem,
-+ TARGET_THUMB1_ONLY ? -3 : -7);
- tem = gen_rtx_MINUS (GET_MODE (tem),
- tem,
- gen_rtx_SYMBOL_REF (Pmode,
-Index: gcc/config/arm/arm.h
-===================================================================
---- a/src/gcc/config/arm/arm.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/arm/arm.h (.../branches/gcc-4_9-branch)
-@@ -17,8 +17,13 @@
- 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 GCC; see the file COPYING3. If not see
-+ Under Section 7 of GPL version 3, you are granted additional
-+ permissions described in the GCC Runtime Library Exception, version
-+ 3.1, as published by the Free Software Foundation.
-+
-+ You should have received a copy of the GNU General Public License and
-+ a copy of the GCC Runtime Library Exception along with this program;
-+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
- #ifndef GCC_ARM_H
-Index: gcc/config/arm/uclinux-eabi.h
-===================================================================
---- a/src/gcc/config/arm/uclinux-eabi.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/arm/uclinux-eabi.h (.../branches/gcc-4_9-branch)
-@@ -14,8 +14,13 @@
- 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 GCC; see the file COPYING3. If not see
-+ Under Section 7 of GPL version 3, you are granted additional
-+ permissions described in the GCC Runtime Library Exception, version
-+ 3.1, as published by the Free Software Foundation.
-+
-+ You should have received a copy of the GNU General Public License and
-+ a copy of the GCC Runtime Library Exception along with this program;
-+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
- /* Override settings that are different to the uclinux-elf or
-Index: gcc/config/arm/arm-cores.def
-===================================================================
---- a/src/gcc/config/arm/arm-cores.def (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/arm/arm-cores.def (.../branches/gcc-4_9-branch)
-@@ -14,8 +14,13 @@
- 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 GCC; see the file COPYING3. If not see
-+ Under Section 7 of GPL version 3, you are granted additional
-+ permissions described in the GCC Runtime Library Exception, version
-+ 3.1, as published by the Free Software Foundation.
-+
-+ You should have received a copy of the GNU General Public License and
-+ a copy of the GCC Runtime Library Exception along with this program;
-+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
- /* Before using #include to read this file, define a macro:
-Index: gcc/config/arm/linux-gas.h
-===================================================================
---- a/src/gcc/config/arm/linux-gas.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/arm/linux-gas.h (.../branches/gcc-4_9-branch)
-@@ -15,8 +15,13 @@
- 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 GCC; see the file COPYING3. If not see
-+ Under Section 7 of GPL version 3, you are granted additional
-+ permissions described in the GCC Runtime Library Exception, version
-+ 3.1, as published by the Free Software Foundation.
-+
-+ You should have received a copy of the GNU General Public License and
-+ a copy of the GCC Runtime Library Exception along with this program;
-+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
- /* This is how we tell the assembler that a symbol is weak.
-Index: gcc/config/arm/arm_neon.h
-===================================================================
---- a/src/gcc/config/arm/arm_neon.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/arm/arm_neon.h (.../branches/gcc-4_9-branch)
-@@ -1,5 +1,4 @@
--/* ARM NEON intrinsics include file. This file is generated automatically
-- using neon-gen.ml. Please do not edit manually.
-+/* ARM NEON intrinsics include file.
-
- Copyright (C) 2006-2014 Free Software Foundation, Inc.
- Contributed by CodeSourcery.
-@@ -7707,12 +7706,32 @@
- return (poly16x8_t)__builtin_neon_vbslv8hi ((int16x8_t) __a, (int16x8_t) __b, (int16x8_t) __c);
- }
-
-+/* For big-endian, the shuffle masks for ZIP, UZP and TRN must be changed as
-+ follows. (nelt = the number of elements within a vector.)
-+
-+ Firstly, a value of N within a mask, becomes (N ^ (nelt - 1)), as gcc vector
-+ extension's indexing scheme is reversed *within each vector* (relative to the
-+ neon intrinsics view), but without changing which of the two vectors.
-+
-+ Secondly, the elements within each mask are reversed, as the mask is itself a
-+ vector, and will itself be loaded in reverse order (again, relative to the
-+ neon intrinsics view, i.e. that would result from a "vld1" instruction). */
-+
- __extension__ static __inline int8x8x2_t __attribute__ ((__always_inline__))
- vtrn_s8 (int8x8_t __a, int8x8_t __b)
- {
- int8x8x2_t __rv;
-- __rv.val[0] = (int8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 0, 8, 2, 10, 4, 12, 6, 14 });
-- __rv.val[1] = (int8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 1, 9, 3, 11, 5, 13, 7, 15 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 9, 1, 11, 3, 13, 5, 15, 7 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 8, 0, 10, 2, 12, 4, 14, 6 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 0, 8, 2, 10, 4, 12, 6, 14 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 1, 9, 3, 11, 5, 13, 7, 15 });
-+#endif
- return __rv;
- }
-
-@@ -7720,8 +7739,13 @@
- vtrn_s16 (int16x4_t __a, int16x4_t __b)
- {
- int16x4x2_t __rv;
-- __rv.val[0] = (int16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 4, 2, 6 });
-- __rv.val[1] = (int16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 1, 5, 3, 7 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 5, 1, 7, 3 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 4, 0, 6, 2 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 4, 2, 6 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 1, 5, 3, 7 });
-+#endif
- return __rv;
- }
-
-@@ -7729,8 +7753,17 @@
- vtrn_u8 (uint8x8_t __a, uint8x8_t __b)
- {
- uint8x8x2_t __rv;
-- __rv.val[0] = (uint8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 0, 8, 2, 10, 4, 12, 6, 14 });
-- __rv.val[1] = (uint8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 1, 9, 3, 11, 5, 13, 7, 15 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 9, 1, 11, 3, 13, 5, 15, 7 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 8, 0, 10, 2, 12, 4, 14, 6 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 0, 8, 2, 10, 4, 12, 6, 14 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 1, 9, 3, 11, 5, 13, 7, 15 });
-+#endif
- return __rv;
- }
-
-@@ -7738,8 +7771,13 @@
- vtrn_u16 (uint16x4_t __a, uint16x4_t __b)
- {
- uint16x4x2_t __rv;
-- __rv.val[0] = (uint16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 4, 2, 6 });
-- __rv.val[1] = (uint16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 1, 5, 3, 7 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 5, 1, 7, 3 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 4, 0, 6, 2 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 4, 2, 6 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 1, 5, 3, 7 });
-+#endif
- return __rv;
- }
-
-@@ -7747,8 +7785,17 @@
- vtrn_p8 (poly8x8_t __a, poly8x8_t __b)
- {
- poly8x8x2_t __rv;
-- __rv.val[0] = (poly8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 0, 8, 2, 10, 4, 12, 6, 14 });
-- __rv.val[1] = (poly8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 1, 9, 3, 11, 5, 13, 7, 15 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 9, 1, 11, 3, 13, 5, 15, 7 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 8, 0, 10, 2, 12, 4, 14, 6 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 0, 8, 2, 10, 4, 12, 6, 14 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 1, 9, 3, 11, 5, 13, 7, 15 });
-+#endif
- return __rv;
- }
-
-@@ -7756,8 +7803,13 @@
- vtrn_p16 (poly16x4_t __a, poly16x4_t __b)
- {
- poly16x4x2_t __rv;
-- __rv.val[0] = (poly16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 4, 2, 6 });
-- __rv.val[1] = (poly16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 1, 5, 3, 7 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 5, 1, 7, 3 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 4, 0, 6, 2 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 4, 2, 6 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 1, 5, 3, 7 });
-+#endif
- return __rv;
- }
-
-@@ -7765,8 +7817,13 @@
- vtrn_s32 (int32x2_t __a, int32x2_t __b)
- {
- int32x2x2_t __rv;
-- __rv.val[0] = (int32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-- __rv.val[1] = (int32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 3, 1 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 2, 0 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
-+#endif
- return __rv;
- }
-
-@@ -7774,8 +7831,13 @@
- vtrn_f32 (float32x2_t __a, float32x2_t __b)
- {
- float32x2x2_t __rv;
-- __rv.val[0] = (float32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-- __rv.val[1] = (float32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 3, 1 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 2, 0 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
-+#endif
- return __rv;
- }
-
-@@ -7783,8 +7845,13 @@
- vtrn_u32 (uint32x2_t __a, uint32x2_t __b)
- {
- uint32x2x2_t __rv;
-- __rv.val[0] = (uint32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-- __rv.val[1] = (uint32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 3, 1 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 2, 0 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
-+#endif
- return __rv;
- }
-
-@@ -7792,8 +7859,17 @@
- vtrnq_s8 (int8x16_t __a, int8x16_t __b)
- {
- int8x16x2_t __rv;
-- __rv.val[0] = (int8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30 });
-- __rv.val[1] = (int8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 17, 1, 19, 3, 21, 5, 23, 7, 25, 9, 27, 11, 29, 13, 31, 15 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 16, 0, 18, 2, 20, 4, 22, 6, 24, 8, 26, 10, 28, 12, 30, 14 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31 });
-+#endif
- return __rv;
- }
-
-@@ -7801,8 +7877,17 @@
- vtrnq_s16 (int16x8_t __a, int16x8_t __b)
- {
- int16x8x2_t __rv;
-- __rv.val[0] = (int16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 0, 8, 2, 10, 4, 12, 6, 14 });
-- __rv.val[1] = (int16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 1, 9, 3, 11, 5, 13, 7, 15 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 9, 1, 11, 3, 13, 5, 15, 7 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 8, 0, 10, 2, 12, 4, 14, 6 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 0, 8, 2, 10, 4, 12, 6, 14 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 1, 9, 3, 11, 5, 13, 7, 15 });
-+#endif
- return __rv;
- }
-
-@@ -7810,8 +7895,13 @@
- vtrnq_s32 (int32x4_t __a, int32x4_t __b)
- {
- int32x4x2_t __rv;
-- __rv.val[0] = (int32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 4, 2, 6 });
-- __rv.val[1] = (int32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 1, 5, 3, 7 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 5, 1, 7, 3 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 4, 0, 6, 2 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 4, 2, 6 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 1, 5, 3, 7 });
-+#endif
- return __rv;
- }
-
-@@ -7819,8 +7909,13 @@
- vtrnq_f32 (float32x4_t __a, float32x4_t __b)
- {
- float32x4x2_t __rv;
-- __rv.val[0] = (float32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 4, 2, 6 });
-- __rv.val[1] = (float32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 1, 5, 3, 7 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 5, 1, 7, 3 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 4, 0, 6, 2 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 4, 2, 6 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 1, 5, 3, 7 });
-+#endif
- return __rv;
- }
-
-@@ -7828,8 +7923,17 @@
- vtrnq_u8 (uint8x16_t __a, uint8x16_t __b)
- {
- uint8x16x2_t __rv;
-- __rv.val[0] = (uint8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30 });
-- __rv.val[1] = (uint8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 17, 1, 19, 3, 21, 5, 23, 7, 25, 9, 27, 11, 29, 13, 31, 15 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 16, 0, 18, 2, 20, 4, 22, 6, 24, 8, 26, 10, 28, 12, 30, 14 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31 });
-+#endif
- return __rv;
- }
-
-@@ -7837,8 +7941,17 @@
- vtrnq_u16 (uint16x8_t __a, uint16x8_t __b)
- {
- uint16x8x2_t __rv;
-- __rv.val[0] = (uint16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 0, 8, 2, 10, 4, 12, 6, 14 });
-- __rv.val[1] = (uint16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 1, 9, 3, 11, 5, 13, 7, 15 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 9, 1, 11, 3, 13, 5, 15, 7 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 8, 0, 10, 2, 12, 4, 14, 6 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 0, 8, 2, 10, 4, 12, 6, 14 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 1, 9, 3, 11, 5, 13, 7, 15 });
-+#endif
- return __rv;
- }
-
-@@ -7846,8 +7959,13 @@
- vtrnq_u32 (uint32x4_t __a, uint32x4_t __b)
- {
- uint32x4x2_t __rv;
-- __rv.val[0] = (uint32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 4, 2, 6 });
-- __rv.val[1] = (uint32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 1, 5, 3, 7 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 5, 1, 7, 3 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 4, 0, 6, 2 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 4, 2, 6 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 1, 5, 3, 7 });
-+#endif
- return __rv;
- }
-
-@@ -7855,8 +7973,17 @@
- vtrnq_p8 (poly8x16_t __a, poly8x16_t __b)
- {
- poly8x16x2_t __rv;
-- __rv.val[0] = (poly8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30 });
-- __rv.val[1] = (poly8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 17, 1, 19, 3, 21, 5, 23, 7, 25, 9, 27, 11, 29, 13, 31, 15 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 16, 0, 18, 2, 20, 4, 22, 6, 24, 8, 26, 10, 28, 12, 30, 14 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31 });
-+#endif
- return __rv;
- }
-
-@@ -7864,8 +7991,17 @@
- vtrnq_p16 (poly16x8_t __a, poly16x8_t __b)
- {
- poly16x8x2_t __rv;
-- __rv.val[0] = (poly16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 0, 8, 2, 10, 4, 12, 6, 14 });
-- __rv.val[1] = (poly16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 1, 9, 3, 11, 5, 13, 7, 15 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 9, 1, 11, 3, 13, 5, 15, 7 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 8, 0, 10, 2, 12, 4, 14, 6 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 0, 8, 2, 10, 4, 12, 6, 14 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 1, 9, 3, 11, 5, 13, 7, 15 });
-+#endif
- return __rv;
- }
-
-@@ -7873,8 +8009,17 @@
- vzip_s8 (int8x8_t __a, int8x8_t __b)
- {
- int8x8x2_t __rv;
-- __rv.val[0] = (int8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 0, 8, 1, 9, 2, 10, 3, 11 });
-- __rv.val[1] = (int8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 4, 12, 5, 13, 6, 14, 7, 15 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 12, 4, 13, 5, 14, 6, 15, 7 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 8, 0, 9, 1, 10, 2, 11, 3 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 0, 8, 1, 9, 2, 10, 3, 11 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 4, 12, 5, 13, 6, 14, 7, 15 });
-+#endif
- return __rv;
- }
-
-@@ -7882,8 +8027,13 @@
- vzip_s16 (int16x4_t __a, int16x4_t __b)
- {
- int16x4x2_t __rv;
-- __rv.val[0] = (int16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 4, 1, 5 });
-- __rv.val[1] = (int16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 2, 6, 3, 7 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 6, 2, 7, 3 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 4, 0, 5, 1 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 4, 1, 5 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 2, 6, 3, 7 });
-+#endif
- return __rv;
- }
-
-@@ -7891,8 +8041,17 @@
- vzip_u8 (uint8x8_t __a, uint8x8_t __b)
- {
- uint8x8x2_t __rv;
-- __rv.val[0] = (uint8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 0, 8, 1, 9, 2, 10, 3, 11 });
-- __rv.val[1] = (uint8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 4, 12, 5, 13, 6, 14, 7, 15 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 12, 4, 13, 5, 14, 6, 15, 7 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 8, 0, 9, 1, 10, 2, 11, 3 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 0, 8, 1, 9, 2, 10, 3, 11 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 4, 12, 5, 13, 6, 14, 7, 15 });
-+#endif
- return __rv;
- }
-
-@@ -7900,8 +8059,13 @@
- vzip_u16 (uint16x4_t __a, uint16x4_t __b)
- {
- uint16x4x2_t __rv;
-- __rv.val[0] = (uint16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 4, 1, 5 });
-- __rv.val[1] = (uint16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 2, 6, 3, 7 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 6, 2, 7, 3 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 4, 0, 5, 1 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 4, 1, 5 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 2, 6, 3, 7 });
-+#endif
- return __rv;
- }
-
-@@ -7909,8 +8073,17 @@
- vzip_p8 (poly8x8_t __a, poly8x8_t __b)
- {
- poly8x8x2_t __rv;
-- __rv.val[0] = (poly8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 0, 8, 1, 9, 2, 10, 3, 11 });
-- __rv.val[1] = (poly8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 4, 12, 5, 13, 6, 14, 7, 15 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 12, 4, 13, 5, 14, 6, 15, 7 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 8, 0, 9, 1, 10, 2, 11, 3 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 0, 8, 1, 9, 2, 10, 3, 11 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 4, 12, 5, 13, 6, 14, 7, 15 });
-+#endif
- return __rv;
- }
-
-@@ -7918,8 +8091,13 @@
- vzip_p16 (poly16x4_t __a, poly16x4_t __b)
- {
- poly16x4x2_t __rv;
-- __rv.val[0] = (poly16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 4, 1, 5 });
-- __rv.val[1] = (poly16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 2, 6, 3, 7 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 6, 2, 7, 3 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 4, 0, 5, 1 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 4, 1, 5 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 2, 6, 3, 7 });
-+#endif
- return __rv;
- }
-
-@@ -7927,8 +8105,13 @@
- vzip_s32 (int32x2_t __a, int32x2_t __b)
- {
- int32x2x2_t __rv;
-- __rv.val[0] = (int32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-- __rv.val[1] = (int32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 3, 1 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 2, 0 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
-+#endif
- return __rv;
- }
-
-@@ -7936,8 +8119,13 @@
- vzip_f32 (float32x2_t __a, float32x2_t __b)
- {
- float32x2x2_t __rv;
-- __rv.val[0] = (float32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-- __rv.val[1] = (float32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 3, 1 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 2, 0 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
-+#endif
- return __rv;
- }
-
-@@ -7945,8 +8133,13 @@
- vzip_u32 (uint32x2_t __a, uint32x2_t __b)
- {
- uint32x2x2_t __rv;
-- __rv.val[0] = (uint32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-- __rv.val[1] = (uint32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 3, 1 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 2, 0 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
-+#endif
- return __rv;
- }
-
-@@ -7954,8 +8147,17 @@
- vzipq_s8 (int8x16_t __a, int8x16_t __b)
- {
- int8x16x2_t __rv;
-- __rv.val[0] = (int8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23 });
-- __rv.val[1] = (int8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 24, 8, 25, 9, 26, 10, 27, 11, 28, 12, 29, 13, 30, 14, 31, 15 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 16, 0, 17, 1, 18, 2, 19, 3, 20, 4, 21, 5, 22, 6, 23, 7 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31 });
-+#endif
- return __rv;
- }
-
-@@ -7963,8 +8165,17 @@
- vzipq_s16 (int16x8_t __a, int16x8_t __b)
- {
- int16x8x2_t __rv;
-- __rv.val[0] = (int16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 0, 8, 1, 9, 2, 10, 3, 11 });
-- __rv.val[1] = (int16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 4, 12, 5, 13, 6, 14, 7, 15 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 12, 4, 13, 5, 14, 6, 15, 7 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 8, 0, 9, 1, 10, 2, 11, 3 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 0, 8, 1, 9, 2, 10, 3, 11 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 4, 12, 5, 13, 6, 14, 7, 15 });
-+#endif
- return __rv;
- }
-
-@@ -7972,8 +8183,13 @@
- vzipq_s32 (int32x4_t __a, int32x4_t __b)
- {
- int32x4x2_t __rv;
-- __rv.val[0] = (int32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 4, 1, 5 });
-- __rv.val[1] = (int32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 2, 6, 3, 7 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 6, 2, 7, 3 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 4, 0, 5, 1 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 4, 1, 5 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 2, 6, 3, 7 });
-+#endif
- return __rv;
- }
-
-@@ -7981,8 +8197,13 @@
- vzipq_f32 (float32x4_t __a, float32x4_t __b)
- {
- float32x4x2_t __rv;
-- __rv.val[0] = (float32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 4, 1, 5 });
-- __rv.val[1] = (float32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 2, 6, 3, 7 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 6, 2, 7, 3 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 4, 0, 5, 1 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 4, 1, 5 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 2, 6, 3, 7 });
-+#endif
- return __rv;
- }
-
-@@ -7990,8 +8211,17 @@
- vzipq_u8 (uint8x16_t __a, uint8x16_t __b)
- {
- uint8x16x2_t __rv;
-- __rv.val[0] = (uint8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23 });
-- __rv.val[1] = (uint8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 24, 8, 25, 9, 26, 10, 27, 11, 28, 12, 29, 13, 30, 14, 31, 15 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 16, 0, 17, 1, 18, 2, 19, 3, 20, 4, 21, 5, 22, 6, 23, 7 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31 });
-+#endif
- return __rv;
- }
-
-@@ -7999,8 +8229,17 @@
- vzipq_u16 (uint16x8_t __a, uint16x8_t __b)
- {
- uint16x8x2_t __rv;
-- __rv.val[0] = (uint16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 0, 8, 1, 9, 2, 10, 3, 11 });
-- __rv.val[1] = (uint16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 4, 12, 5, 13, 6, 14, 7, 15 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 12, 4, 13, 5, 14, 6, 15, 7 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 8, 0, 9, 1, 10, 2, 11, 3 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 0, 8, 1, 9, 2, 10, 3, 11 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 4, 12, 5, 13, 6, 14, 7, 15 });
-+#endif
- return __rv;
- }
-
-@@ -8008,8 +8247,13 @@
- vzipq_u32 (uint32x4_t __a, uint32x4_t __b)
- {
- uint32x4x2_t __rv;
-- __rv.val[0] = (uint32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 4, 1, 5 });
-- __rv.val[1] = (uint32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 2, 6, 3, 7 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 6, 2, 7, 3 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 4, 0, 5, 1 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 4, 1, 5 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 2, 6, 3, 7 });
-+#endif
- return __rv;
- }
-
-@@ -8017,8 +8261,17 @@
- vzipq_p8 (poly8x16_t __a, poly8x16_t __b)
- {
- poly8x16x2_t __rv;
-- __rv.val[0] = (poly8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23 });
-- __rv.val[1] = (poly8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 24, 8, 25, 9, 26, 10, 27, 11, 28, 12, 29, 13, 30, 14, 31, 15 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 16, 0, 17, 1, 18, 2, 19, 3, 20, 4, 21, 5, 22, 6, 23, 7 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31 });
-+#endif
- return __rv;
- }
-
-@@ -8026,8 +8279,17 @@
- vzipq_p16 (poly16x8_t __a, poly16x8_t __b)
- {
- poly16x8x2_t __rv;
-- __rv.val[0] = (poly16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 0, 8, 1, 9, 2, 10, 3, 11 });
-- __rv.val[1] = (poly16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 4, 12, 5, 13, 6, 14, 7, 15 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 12, 4, 13, 5, 14, 6, 15, 7 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 8, 0, 9, 1, 10, 2, 11, 3 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 0, 8, 1, 9, 2, 10, 3, 11 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 4, 12, 5, 13, 6, 14, 7, 15 });
-+#endif
- return __rv;
- }
-
-@@ -8035,8 +8297,17 @@
- vuzp_s8 (int8x8_t __a, int8x8_t __b)
- {
- int8x8x2_t __rv;
-- __rv.val[0] = (int8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 0, 2, 4, 6, 8, 10, 12, 14 });
-- __rv.val[1] = (int8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 1, 3, 5, 7, 9, 11, 13, 15 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 9, 11, 13, 15, 1, 3, 5, 7 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 8, 10, 12, 14, 0, 2, 4, 6 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 0, 2, 4, 6, 8, 10, 12, 14 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 1, 3, 5, 7, 9, 11, 13, 15 });
-+#endif
- return __rv;
- }
-
-@@ -8044,8 +8315,13 @@
- vuzp_s16 (int16x4_t __a, int16x4_t __b)
- {
- int16x4x2_t __rv;
-- __rv.val[0] = (int16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 2, 4, 6 });
-- __rv.val[1] = (int16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 1, 3, 5, 7 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 5, 7, 1, 3 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 4, 6, 0, 2 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 2, 4, 6 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 1, 3, 5, 7 });
-+#endif
- return __rv;
- }
-
-@@ -8053,8 +8329,13 @@
- vuzp_s32 (int32x2_t __a, int32x2_t __b)
- {
- int32x2x2_t __rv;
-- __rv.val[0] = (int32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-- __rv.val[1] = (int32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 3, 1 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 2, 0 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
-+#endif
- return __rv;
- }
-
-@@ -8062,8 +8343,13 @@
- vuzp_f32 (float32x2_t __a, float32x2_t __b)
- {
- float32x2x2_t __rv;
-- __rv.val[0] = (float32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-- __rv.val[1] = (float32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 3, 1 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 2, 0 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
-+#endif
- return __rv;
- }
-
-@@ -8071,8 +8357,17 @@
- vuzp_u8 (uint8x8_t __a, uint8x8_t __b)
- {
- uint8x8x2_t __rv;
-- __rv.val[0] = (uint8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 0, 2, 4, 6, 8, 10, 12, 14 });
-- __rv.val[1] = (uint8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 1, 3, 5, 7, 9, 11, 13, 15 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 9, 11, 13, 15, 1, 3, 5, 7 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 8, 10, 12, 14, 0, 2, 4, 6 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 0, 2, 4, 6, 8, 10, 12, 14 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 1, 3, 5, 7, 9, 11, 13, 15 });
-+#endif
- return __rv;
- }
-
-@@ -8080,8 +8375,13 @@
- vuzp_u16 (uint16x4_t __a, uint16x4_t __b)
- {
- uint16x4x2_t __rv;
-- __rv.val[0] = (uint16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 2, 4, 6 });
-- __rv.val[1] = (uint16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 1, 3, 5, 7 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 5, 7, 1, 3 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 4, 6, 0, 2 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 2, 4, 6 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 1, 3, 5, 7 });
-+#endif
- return __rv;
- }
-
-@@ -8089,8 +8389,13 @@
- vuzp_u32 (uint32x2_t __a, uint32x2_t __b)
- {
- uint32x2x2_t __rv;
-- __rv.val[0] = (uint32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-- __rv.val[1] = (uint32x2_t) __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 3, 1 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 2, 0 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x2_t) { 0, 2 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x2_t) { 1, 3 });
-+#endif
- return __rv;
- }
-
-@@ -8098,8 +8403,17 @@
- vuzp_p8 (poly8x8_t __a, poly8x8_t __b)
- {
- poly8x8x2_t __rv;
-- __rv.val[0] = (poly8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 0, 2, 4, 6, 8, 10, 12, 14 });
-- __rv.val[1] = (poly8x8_t) __builtin_shuffle (__a, __b, (uint8x8_t) { 1, 3, 5, 7, 9, 11, 13, 15 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 9, 11, 13, 15, 1, 3, 5, 7 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 8, 10, 12, 14, 0, 2, 4, 6 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 0, 2, 4, 6, 8, 10, 12, 14 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x8_t)
-+ { 1, 3, 5, 7, 9, 11, 13, 15 });
-+#endif
- return __rv;
- }
-
-@@ -8107,8 +8421,13 @@
- vuzp_p16 (poly16x4_t __a, poly16x4_t __b)
- {
- poly16x4x2_t __rv;
-- __rv.val[0] = (poly16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 2, 4, 6 });
-- __rv.val[1] = (poly16x4_t) __builtin_shuffle (__a, __b, (uint16x4_t) { 1, 3, 5, 7 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 5, 7, 1, 3 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 4, 6, 0, 2 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x4_t) { 0, 2, 4, 6 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x4_t) { 1, 3, 5, 7 });
-+#endif
- return __rv;
- }
-
-@@ -8116,8 +8435,17 @@
- vuzpq_s8 (int8x16_t __a, int8x16_t __b)
- {
- int8x16x2_t __rv;
-- __rv.val[0] = (int8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30 });
-- __rv.val[1] = (int8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 17, 19, 21, 23, 25, 27, 29, 31, 1, 3, 5, 7, 9, 11, 13, 15 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 16, 18, 20, 22, 24, 26, 28, 30, 0, 2, 4, 6, 8, 10, 12, 14 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31 });
-+#endif
- return __rv;
- }
-
-@@ -8125,8 +8453,17 @@
- vuzpq_s16 (int16x8_t __a, int16x8_t __b)
- {
- int16x8x2_t __rv;
-- __rv.val[0] = (int16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 0, 2, 4, 6, 8, 10, 12, 14 });
-- __rv.val[1] = (int16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 1, 3, 5, 7, 9, 11, 13, 15 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 9, 11, 13, 15, 1, 3, 5, 7 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 8, 10, 12, 14, 0, 2, 4, 6 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 0, 2, 4, 6, 8, 10, 12, 14 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 1, 3, 5, 7, 9, 11, 13, 15 });
-+#endif
- return __rv;
- }
-
-@@ -8134,8 +8471,13 @@
- vuzpq_s32 (int32x4_t __a, int32x4_t __b)
- {
- int32x4x2_t __rv;
-- __rv.val[0] = (int32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 2, 4, 6 });
-- __rv.val[1] = (int32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 1, 3, 5, 7 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 5, 7, 1, 3 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 4, 6, 0, 2 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 2, 4, 6 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 1, 3, 5, 7 });
-+#endif
- return __rv;
- }
-
-@@ -8143,8 +8485,13 @@
- vuzpq_f32 (float32x4_t __a, float32x4_t __b)
- {
- float32x4x2_t __rv;
-- __rv.val[0] = (float32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 2, 4, 6 });
-- __rv.val[1] = (float32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 1, 3, 5, 7 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 5, 7, 1, 3 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 4, 6, 0, 2 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 2, 4, 6 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 1, 3, 5, 7 });
-+#endif
- return __rv;
- }
-
-@@ -8152,8 +8499,17 @@
- vuzpq_u8 (uint8x16_t __a, uint8x16_t __b)
- {
- uint8x16x2_t __rv;
-- __rv.val[0] = (uint8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30 });
-- __rv.val[1] = (uint8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 17, 19, 21, 23, 25, 27, 29, 31, 1, 3, 5, 7, 9, 11, 13, 15 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 16, 18, 20, 22, 24, 26, 28, 30, 0, 2, 4, 6, 8, 10, 12, 14 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31 });
-+#endif
- return __rv;
- }
-
-@@ -8161,8 +8517,17 @@
- vuzpq_u16 (uint16x8_t __a, uint16x8_t __b)
- {
- uint16x8x2_t __rv;
-- __rv.val[0] = (uint16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 0, 2, 4, 6, 8, 10, 12, 14 });
-- __rv.val[1] = (uint16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 1, 3, 5, 7, 9, 11, 13, 15 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 9, 11, 13, 15, 1, 3, 5, 7 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 8, 10, 12, 14, 0, 2, 4, 6 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 0, 2, 4, 6, 8, 10, 12, 14 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 1, 3, 5, 7, 9, 11, 13, 15 });
-+#endif
- return __rv;
- }
-
-@@ -8170,8 +8535,13 @@
- vuzpq_u32 (uint32x4_t __a, uint32x4_t __b)
- {
- uint32x4x2_t __rv;
-- __rv.val[0] = (uint32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 2, 4, 6 });
-- __rv.val[1] = (uint32x4_t) __builtin_shuffle (__a, __b, (uint32x4_t) { 1, 3, 5, 7 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 5, 7, 1, 3 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 4, 6, 0, 2 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint32x4_t) { 0, 2, 4, 6 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint32x4_t) { 1, 3, 5, 7 });
-+#endif
- return __rv;
- }
-
-@@ -8179,8 +8549,17 @@
- vuzpq_p8 (poly8x16_t __a, poly8x16_t __b)
- {
- poly8x16x2_t __rv;
-- __rv.val[0] = (poly8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30 });
-- __rv.val[1] = (poly8x16_t) __builtin_shuffle (__a, __b, (uint8x16_t) { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 17, 19, 21, 23, 25, 27, 29, 31, 1, 3, 5, 7, 9, 11, 13, 15 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 16, 18, 20, 22, 24, 26, 28, 30, 0, 2, 4, 6, 8, 10, 12, 14 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint8x16_t)
-+ { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31 });
-+#endif
- return __rv;
- }
-
-@@ -8188,8 +8567,17 @@
- vuzpq_p16 (poly16x8_t __a, poly16x8_t __b)
- {
- poly16x8x2_t __rv;
-- __rv.val[0] = (poly16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 0, 2, 4, 6, 8, 10, 12, 14 });
-- __rv.val[1] = (poly16x8_t) __builtin_shuffle (__a, __b, (uint16x8_t) { 1, 3, 5, 7, 9, 11, 13, 15 });
-+#ifdef __ARM_BIG_ENDIAN
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 9, 11, 13, 15, 1, 3, 5, 7 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 8, 10, 12, 14, 0, 2, 4, 6 });
-+#else
-+ __rv.val[0] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 0, 2, 4, 6, 8, 10, 12, 14 });
-+ __rv.val[1] = __builtin_shuffle (__a, __b, (uint16x8_t)
-+ { 1, 3, 5, 7, 9, 11, 13, 15 });
-+#endif
- return __rv;
- }
-
-Index: gcc/config/arm/bpabi.h
-===================================================================
---- a/src/gcc/config/arm/bpabi.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/arm/bpabi.h (.../branches/gcc-4_9-branch)
-@@ -14,8 +14,13 @@
- 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 GCC; see the file COPYING3. If not see
-+ Under Section 7 of GPL version 3, you are granted additional
-+ permissions described in the GCC Runtime Library Exception, version
-+ 3.1, as published by the Free Software Foundation.
-+
-+ You should have received a copy of the GNU General Public License and
-+ a copy of the GCC Runtime Library Exception along with this program;
-+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
- /* Use the AAPCS ABI by default. */
-Index: gcc/config/arm/arm.md
-===================================================================
---- a/src/gcc/config/arm/arm.md (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/arm/arm.md (.../branches/gcc-4_9-branch)
-@@ -8349,8 +8349,8 @@
-
- (define_insn_and_split "*arm_cmpdi_unsigned"
- [(set (reg:CC_CZ CC_REGNUM)
-- (compare:CC_CZ (match_operand:DI 0 "s_register_operand" "l,r,r")
-- (match_operand:DI 1 "arm_di_operand" "Py,r,rDi")))]
-+ (compare:CC_CZ (match_operand:DI 0 "s_register_operand" "l,r,r,r")
-+ (match_operand:DI 1 "arm_di_operand" "Py,r,Di,rDi")))]
-
- "TARGET_32BIT"
- "#" ; "cmp\\t%R0, %R1\;it eq\;cmpeq\\t%Q0, %Q1"
-@@ -8370,9 +8370,9 @@
- operands[1] = gen_lowpart (SImode, operands[1]);
- }
- [(set_attr "conds" "set")
-- (set_attr "enabled_for_depr_it" "yes,yes,no")
-- (set_attr "arch" "t2,t2,*")
-- (set_attr "length" "6,6,8")
-+ (set_attr "enabled_for_depr_it" "yes,yes,no,*")
-+ (set_attr "arch" "t2,t2,t2,a")
-+ (set_attr "length" "6,6,10,8")
- (set_attr "type" "multiple")]
- )
-
-@@ -9860,6 +9860,7 @@
- "TARGET_32BIT"
- "%i1%?\\t%0, %2, %4%S3"
- [(set_attr "predicable" "yes")
-+ (set_attr "predicable_short_it" "no")
- (set_attr "shift" "4")
- (set_attr "arch" "a,t2,t2,a")
- ;; Thumb2 doesn't allow the stack pointer to be used for
-Index: gcc/config/arm/arm-opts.h
-===================================================================
---- a/src/gcc/config/arm/arm-opts.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/arm/arm-opts.h (.../branches/gcc-4_9-branch)
-@@ -13,8 +13,13 @@
- 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 GCC; see the file COPYING3. If not see
-+ Under Section 7 of GPL version 3, you are granted additional
-+ permissions described in the GCC Runtime Library Exception, version
-+ 3.1, as published by the Free Software Foundation.
-+
-+ You should have received a copy of the GNU General Public License and
-+ a copy of the GCC Runtime Library Exception along with this program;
-+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
- #ifndef ARM_OPTS_H
-Index: gcc/config/arm/netbsd-elf.h
-===================================================================
---- a/src/gcc/config/arm/netbsd-elf.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/arm/netbsd-elf.h (.../branches/gcc-4_9-branch)
-@@ -14,8 +14,13 @@
- 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 GCC; see the file COPYING3. If not see
-+ Under Section 7 of GPL version 3, you are granted additional
-+ permissions described in the GCC Runtime Library Exception, version
-+ 3.1, as published by the Free Software Foundation.
-+
-+ You should have received a copy of the GNU General Public License and
-+ a copy of the GCC Runtime Library Exception along with this program;
-+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
- /* Run-time Target Specification. */
-Index: gcc/config/arm/vxworks.h
-===================================================================
---- a/src/gcc/config/arm/vxworks.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/arm/vxworks.h (.../branches/gcc-4_9-branch)
-@@ -17,8 +17,13 @@
- 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 GCC; see the file COPYING3. If not see
-+Under Section 7 of GPL version 3, you are granted additional
-+permissions described in the GCC Runtime Library Exception, version
-+3.1, as published by the Free Software Foundation.
-+
-+You should have received a copy of the GNU General Public License and
-+a copy of the GCC Runtime Library Exception along with this program;
-+see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
-
-Index: gcc/config/msp430/msp430-opts.h
-===================================================================
---- a/src/gcc/config/msp430/msp430-opts.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/msp430/msp430-opts.h (.../branches/gcc-4_9-branch)
-@@ -0,0 +1,32 @@
-+/* GCC option-handling definitions for the TI MSP430
-+ Copyright (C) 2014 Free Software Foundation, Inc.
-+
-+ This file is part of GCC.
-+
-+ GCC 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.
-+
-+ GCC 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 GCC; see the file COPYING3. If not see
-+ <http://www.gnu.org/licenses/>. */
-+
-+#ifndef MSP430_OPTS_H
-+#define MSP430_OPTS_H
-+
-+enum msp430_hwmult_types
-+{
-+ NONE,
-+ AUTO,
-+ SMALL,
-+ LARGE,
-+ F5SERIES
-+};
-+
-+#endif
-Index: gcc/config/msp430/msp430-protos.h
-===================================================================
---- a/src/gcc/config/msp430/msp430-protos.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/msp430/msp430-protos.h (.../branches/gcc-4_9-branch)
-@@ -30,11 +30,9 @@
- void msp430_fixup_compare_operands (enum machine_mode, rtx *);
- int msp430_hard_regno_mode_ok (int, enum machine_mode);
- int msp430_hard_regno_nregs (int, enum machine_mode);
--bool msp430_hwmult_enabled (void);
- rtx msp430_incoming_return_addr_rtx (void);
- void msp430_init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, tree, int);
- int msp430_initial_elimination_offset (int, int);
--bool msp430_is_f5_mcu (void);
- bool msp430_is_interrupt_func (void);
- const char * msp430x_logical_shift_right (rtx);
- const char * msp430_mcu_name (void);
-@@ -45,5 +43,6 @@
- void msp430_split_movsi (rtx *);
- void msp430_start_function (FILE *, const char *, tree);
- rtx msp430_subreg (enum machine_mode, rtx, enum machine_mode, int);
-+bool msp430_use_f5_series_hwmult (void);
-
- #endif /* GCC_MSP430_PROTOS_H */
-Index: gcc/config/msp430/predicates.md
-===================================================================
---- a/src/gcc/config/msp430/predicates.md (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/msp430/predicates.md (.../branches/gcc-4_9-branch)
-@@ -73,6 +73,10 @@
- (define_predicate "msp430_nonsubreg_operand"
- (match_code "reg,mem"))
-
-+(define_predicate "msp430_nonsubreg_or_imm_operand"
-+ (ior (match_operand 0 "msp430_nonsubreg_operand")
-+ (match_operand 0 "immediate_operand")))
-+
- ; TRUE for constants which are bit positions for zero_extract
- (define_predicate "msp430_bitpos"
- (and (match_code "const_int")
-Index: gcc/config/msp430/msp430.md
-===================================================================
---- a/src/gcc/config/msp430/msp430.md (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/msp430/msp430.md (.../branches/gcc-4_9-branch)
-@@ -362,8 +362,8 @@
- ; halves.
- (define_split
- [(set (match_operand:SI 0 "msp430_nonsubreg_operand")
-- (plus:SI (match_operand:SI 1 "nonimmediate_operand")
-- (match_operand:SI 2 "general_operand")))
-+ (plus:SI (match_operand:SI 1 "msp430_nonsubreg_operand")
-+ (match_operand:SI 2 "msp430_nonsubreg_or_imm_operand")))
- ]
- ""
- [(parallel [(set (match_operand:HI 3 "nonimmediate_operand" "=&rm")
-@@ -609,9 +609,15 @@
- ; when the PSI value is negative..
- ;
- ; Note: using PUSHM.A #1 is two bytes smaller than using PUSHX.A....
-+;
-+; Note: We use a + constraint on operand 0 as otherwise GCC gets confused
-+; about extending a single PSI mode register into a pair of SImode registers
-+; with the same starting register. It thinks that the upper register of
-+; the pair is unused and so it can clobber it. Try compiling 20050826-2.c
-+; at -O2 to see this.
-
- (define_insn "zero_extendpsisi2"
-- [(set (match_operand:SI 0 "register_operand" "=r")
-+ [(set (match_operand:SI 0 "register_operand" "+r")
- (zero_extend:SI (match_operand:PSI 1 "register_operand" "r")))]
- ""
- "*
-@@ -1311,9 +1317,9 @@
- ""
- "*
- if (REGNO (operands[0]) != REGNO (operands[1]))
-- return \"MOV.W\t%1, %0 { SUB.W\t#0, %0 { AND.W\t%2, %0\";
-+ return \"MOV.W\t%1, %0 { INV.W\t%0 { INC.W\t%0 { AND.W\t%2, %0\";
- else
-- return \"SUB.W\t#0, %0 { AND.W\t%2, %0\";
-+ return \"INV.W\t%0 { INC.W\t%0 { AND.W\t%2, %0\";
- "
- )
-
-@@ -1321,12 +1327,12 @@
- [(set (match_operand:SI 0 "register_operand" "=r")
- (mult:SI (sign_extend:SI (match_operand:HI 1 "register_operand" "%0"))
- (sign_extend:SI (match_operand:HI 2 "register_operand" "r"))))]
-- "optimize > 2 && msp430_hwmult_enabled ()"
-+ "optimize > 2 && msp430_hwmult_type != NONE"
- "*
-- if (msp430_is_f5_mcu ())
-- return \"MOV.W %1, &0x04C2 { MOV.W %2, &0x04C8 { MOV.W &0x04CA, %L0 { MOV.W &0x04CC, %H0\";
-+ if (msp430_use_f5_series_hwmult ())
-+ return \"PUSH.W sr { DINT { NOP { MOV.W %1, &0x04C2 { MOV.W %2, &0x04C8 { MOV.W &0x04CA, %L0 { MOV.W &0x04CC, %H0 { POP.W sr\";
- else
-- return \"MOV.W %1, &0x0132 { MOV.W %2, &0x0138 { MOV.W &0x013A, %L0 { MOV.W &0x013C, %H0\";
-+ return \"PUSH.W sr { DINT { NOP { MOV.W %1, &0x0132 { MOV.W %2, &0x0138 { MOV.W &0x013A, %L0 { MOV.W &0x013C, %H0 { POP.W sr\";
- "
- )
-
-@@ -1334,12 +1340,12 @@
- [(set (match_operand:SI 0 "register_operand" "=r")
- (mult:SI (zero_extend:SI (match_operand:HI 1 "register_operand" "%0"))
- (zero_extend:SI (match_operand:HI 2 "register_operand" "r"))))]
-- "optimize > 2 && msp430_hwmult_enabled ()"
-+ "optimize > 2 && msp430_hwmult_type != NONE"
- "*
-- if (msp430_is_f5_mcu ())
-- return \"MOV.W %1, &0x04C0 { MOV.W %2, &0x04C8 { MOV.W &0x04CA, %L0 { MOV.W &0x04CC, %H0\";
-+ if (msp430_use_f5_series_hwmult ())
-+ return \"PUSH.W sr { DINT { NOP { MOV.W %1, &0x04C0 { MOV.W %2, &0x04C8 { MOV.W &0x04CA, %L0 { MOV.W &0x04CC, %H0 { POP.W sr\";
- else
-- return \"MOV.W %1, &0x0130 { MOV.W %2, &0x0138 { MOV.W &0x013A, %L0 { MOV.W &0x013C, %H0\";
-+ return \"PUSH.W sr { DINT { NOP { MOV.W %1, &0x0130 { MOV.W %2, &0x0138 { MOV.W &0x013A, %L0 { MOV.W &0x013C, %H0 { POP.W sr\";
- "
- )
-
-@@ -1347,12 +1353,12 @@
- [(set (match_operand:DI 0 "register_operand" "=r")
- (mult:DI (sign_extend:DI (match_operand:SI 1 "register_operand" "%0"))
- (sign_extend:DI (match_operand:SI 2 "register_operand" "r"))))]
-- "optimize > 2 && msp430_hwmult_enabled ()"
-+ "optimize > 2 && msp430_hwmult_type != NONE"
- "*
-- if (msp430_is_f5_mcu ())
-- return \"MOV.W %L1, &0x04D4 { MOV.W %H1, &0x04D6 { MOV.W %L2, &0x04E0 { MOV.W %H2, &0x04E2 { MOV.W &0x04E4, %A0 { MOV.W &0x04E6, %B0 { MOV.W &0x04E8, %C0 { MOV.W &0x04EA, %D0\";
-+ if (msp430_use_f5_series_hwmult ())
-+ return \"PUSH.W sr { DINT { NOP { MOV.W %L1, &0x04D4 { MOV.W %H1, &0x04D6 { MOV.W %L2, &0x04E0 { MOV.W %H2, &0x04E2 { MOV.W &0x04E4, %A0 { MOV.W &0x04E6, %B0 { MOV.W &0x04E8, %C0 { MOV.W &0x04EA, %D0 { POP.W sr\";
- else
-- return \"MOV.W %L1, &0x0144 { MOV.W %H1, &0x0146 { MOV.W %L2, &0x0150 { MOV.W %H2, &0x0152 { MOV.W &0x0154, %A0 { MOV.W &0x0156, %B0 { MOV.W &0x0158, %C0 { MOV.W &0x015A, %D0\";
-+ return \"PUSH.W sr { DINT { NOP { MOV.W %L1, &0x0144 { MOV.W %H1, &0x0146 { MOV.W %L2, &0x0150 { MOV.W %H2, &0x0152 { MOV.W &0x0154, %A0 { MOV.W &0x0156, %B0 { MOV.W &0x0158, %C0 { MOV.W &0x015A, %D0 { POP.W sr\";
- "
- )
-
-@@ -1360,11 +1366,11 @@
- [(set (match_operand:DI 0 "register_operand" "=r")
- (mult:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "%0"))
- (zero_extend:DI (match_operand:SI 2 "register_operand" "r"))))]
-- "optimize > 2 && msp430_hwmult_enabled ()"
-+ "optimize > 2 && msp430_hwmult_type != NONE"
- "*
-- if (msp430_is_f5_mcu ())
-- return \"MOV.W %L1, &0x04D0 { MOV.W %H1, &0x04D2 { MOV.W %L2, &0x04E0 { MOV.W %H2, &0x04E2 { MOV.W &0x04E4, %A0 { MOV.W &0x04E6, %B0 { MOV.W &0x04E8, %C0 { MOV.W &0x04EA, %D0\";
-+ if (msp430_use_f5_series_hwmult ())
-+ return \"PUSH.W sr { DINT { NOP { MOV.W %L1, &0x04D0 { MOV.W %H1, &0x04D2 { MOV.W %L2, &0x04E0 { MOV.W %H2, &0x04E2 { MOV.W &0x04E4, %A0 { MOV.W &0x04E6, %B0 { MOV.W &0x04E8, %C0 { MOV.W &0x04EA, %D0 { POP.W sr\";
- else
-- return \"MOV.W %L1, &0x0140 { MOV.W %H1, &0x0141 { MOV.W %L2, &0x0150 { MOV.W %H2, &0x0152 { MOV.W &0x0154, %A0 { MOV.W &0x0156, %B0 { MOV.W &0x0158, %C0 { MOV.W &0x015A, %D0\";
-+ return \"PUSH.W sr { DINT { NOP { MOV.W %L1, &0x0140 { MOV.W %H1, &0x0142 { MOV.W %L2, &0x0150 { MOV.W %H2, &0x0152 { MOV.W &0x0154, %A0 { MOV.W &0x0156, %B0 { MOV.W &0x0158, %C0 { MOV.W &0x015A, %D0 { POP.W sr\";
- "
- )
-Index: gcc/config/msp430/msp430.c
-===================================================================
---- a/src/gcc/config/msp430/msp430.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/msp430/msp430.c (.../branches/gcc-4_9-branch)
-@@ -95,18 +95,6 @@
- return m;
- }
-
--#undef TARGET_HANDLE_OPTION
--#define TARGET_HANDLE_OPTION msp430_handle_option
--
--bool
--msp430_handle_option (struct gcc_options *opts ATTRIBUTE_UNUSED,
-- struct gcc_options *opts_set ATTRIBUTE_UNUSED,
-- const struct cl_decoded_option *decoded ATTRIBUTE_UNUSED,
-- location_t loc ATTRIBUTE_UNUSED)
--{
-- return true;
--}
--
- #undef TARGET_OPTION_OVERRIDE
- #define TARGET_OPTION_OVERRIDE msp430_option_override
-
-@@ -196,19 +184,14 @@
-
- if (target_cpu)
- {
-- if (strcasecmp (target_cpu, "msp430x") == 0
-- || strcasecmp (target_cpu, "msp430xv2") == 0
-- || strcasecmp (target_cpu, "430x") == 0
-- || strcasecmp (target_cpu, "430xv2") == 0)
-+ if (strcasecmp (target_cpu, "msp430x") == 0)
- msp430x = true;
-- else if (strcasecmp (target_cpu, "msp430") == 0
-- || strcasecmp (target_cpu, "430") == 0)
-+ else /* target_cpu == "msp430" - already handled by the front end. */
- msp430x = false;
-- else
-- error ("unrecognised argument of -mcpu: %s", target_cpu);
- }
--
-- if (target_mcu)
-+ /* Note - the front end has already ensured at most
-+ one of target_cpu and target_mcu will be set. */
-+ else if (target_mcu)
- {
- int i;
-
-@@ -217,25 +200,12 @@
- supports 430. */
- msp430x = true;
-
-- /* For backwards compatibility we recognise two generic MCU
-- 430X names. However we want to be able to generate special C
-- preprocessor defines for them, which is why we set target_mcu
-- to NULL. */
-- if (strcasecmp (target_mcu, "msp430") == 0)
-- {
-- msp430x = false;
-- target_mcu = NULL;
-- }
-- else if (strcasecmp (target_mcu, "msp430x") == 0
-- || strcasecmp (target_mcu, "msp430xv2") == 0)
-- target_mcu = NULL;
-- else
-- for (i = ARRAY_SIZE (msp430_mcu_names); i--;)
-- if (strcasecmp (msp430_mcu_names[i], target_mcu) == 0)
-- {
-- msp430x = false;
-- break;
-- }
-+ for (i = ARRAY_SIZE (msp430_mcu_names); i--;)
-+ if (strcasecmp (msp430_mcu_names[i], target_mcu) == 0)
-+ {
-+ msp430x = false;
-+ break;
-+ }
- /* It is not an error if we do not match the MCU name. There are
- hundreds of them. */
- }
-@@ -760,6 +730,97 @@
- {
- return Pmode;
- }
-+
-+#undef TARGET_GIMPLIFY_VA_ARG_EXPR
-+#define TARGET_GIMPLIFY_VA_ARG_EXPR msp430_gimplify_va_arg_expr
-+
-+#include "gimplify.h"
-+#include "gimple-expr.h"
-+
-+static tree
-+msp430_gimplify_va_arg_expr (tree valist, tree type, gimple_seq *pre_p,
-+ gimple_seq *post_p)
-+{
-+ tree addr, t, type_size, rounded_size, valist_tmp;
-+ unsigned HOST_WIDE_INT align, boundary;
-+ bool indirect;
-+
-+ indirect = pass_by_reference (NULL, TYPE_MODE (type), type, false);
-+ if (indirect)
-+ type = build_pointer_type (type);
-+
-+ align = PARM_BOUNDARY / BITS_PER_UNIT;
-+ boundary = targetm.calls.function_arg_boundary (TYPE_MODE (type), type);
-+
-+ /* When we align parameter on stack for caller, if the parameter
-+ alignment is beyond MAX_SUPPORTED_STACK_ALIGNMENT, it will be
-+ aligned at MAX_SUPPORTED_STACK_ALIGNMENT. We will match callee
-+ here with caller. */
-+ if (boundary > MAX_SUPPORTED_STACK_ALIGNMENT)
-+ boundary = MAX_SUPPORTED_STACK_ALIGNMENT;
-+
-+ boundary /= BITS_PER_UNIT;
-+
-+ /* Hoist the valist value into a temporary for the moment. */
-+ valist_tmp = get_initialized_tmp_var (valist, pre_p, NULL);
-+
-+ /* va_list pointer is aligned to PARM_BOUNDARY. If argument actually
-+ requires greater alignment, we must perform dynamic alignment. */
-+ if (boundary > align
-+ && !integer_zerop (TYPE_SIZE (type)))
-+ {
-+ /* FIXME: This is where this function diverts from targhooks.c:
-+ std_gimplify_va_arg_expr(). It works, but I do not know why... */
-+ if (! POINTER_TYPE_P (type))
-+ {
-+ t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist_tmp,
-+ fold_build_pointer_plus_hwi (valist_tmp, boundary - 1));
-+ gimplify_and_add (t, pre_p);
-+
-+ t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist_tmp,
-+ fold_build2 (BIT_AND_EXPR, TREE_TYPE (valist),
-+ valist_tmp,
-+ build_int_cst (TREE_TYPE (valist), -boundary)));
-+ gimplify_and_add (t, pre_p);
-+ }
-+ }
-+ else
-+ boundary = align;
-+
-+ /* If the actual alignment is less than the alignment of the type,
-+ adjust the type accordingly so that we don't assume strict alignment
-+ when dereferencing the pointer. */
-+ boundary *= BITS_PER_UNIT;
-+ if (boundary < TYPE_ALIGN (type))
-+ {
-+ type = build_variant_type_copy (type);
-+ TYPE_ALIGN (type) = boundary;
-+ }
-+
-+ /* Compute the rounded size of the type. */
-+ type_size = size_in_bytes (type);
-+ rounded_size = round_up (type_size, align);
-+
-+ /* Reduce rounded_size so it's sharable with the postqueue. */
-+ gimplify_expr (&rounded_size, pre_p, post_p, is_gimple_val, fb_rvalue);
-+
-+ /* Get AP. */
-+ addr = valist_tmp;
-+
-+ /* Compute new value for AP. */
-+ t = fold_build_pointer_plus (valist_tmp, rounded_size);
-+ t = build2 (MODIFY_EXPR, TREE_TYPE (valist), valist, t);
-+ gimplify_and_add (t, pre_p);
-+
-+ addr = fold_convert (build_pointer_type (type), addr);
-+
-+ if (indirect)
-+ addr = build_va_arg_indirect_ref (addr);
-+
-+ addr = build_va_arg_indirect_ref (addr);
-+
-+ return addr;
-+}
-
- /* Addressing Modes */
-
-@@ -1847,16 +1908,20 @@
-
- /* Returns true if the current MCU is an F5xxx series. */
- bool
--msp430_is_f5_mcu (void)
-+msp430_use_f5_series_hwmult (void)
- {
-- if (target_mcu == NULL)
-+ if (msp430_hwmult_type == F5SERIES)
-+ return true;
-+
-+ if (target_mcu == NULL || msp430_hwmult_type != AUTO)
- return false;
-+
- return strncasecmp (target_mcu, "msp430f5", 8) == 0;
- }
-
- /* Returns true id the current MCU has a second generation 32-bit hardware multiplier. */
- static bool
--has_32bit_hw_mult (void)
-+use_32bit_hwmult (void)
- {
- static const char * known_32bit_mult_mcus [] =
- {
-@@ -1868,7 +1933,11 @@
- "msp430f47177", "msp430f47187", "msp430f47197"
- };
- int i;
-- if (target_mcu == NULL)
-+
-+ if (msp430_hwmult_type == LARGE)
-+ return true;
-+
-+ if (target_mcu == NULL || msp430_hwmult_type != AUTO)
- return false;
-
- for (i = ARRAY_SIZE (known_32bit_mult_mcus); i--;)
-@@ -1878,25 +1947,6 @@
- return false;
- }
-
--/* Returns true if hardware multiply is supported by the chosen MCU. */
--bool
--msp430_hwmult_enabled (void)
--{
-- if (target_mcu == NULL)
-- return false;
--
-- if (!ENABLE_HWMULT)
-- return false;
--
-- if (msp430_is_interrupt_func ())
-- return false;
--
-- if (msp430_is_f5_mcu () || has_32bit_hw_mult ())
-- return true;
--
-- return false;
--}
--
- /* This function does the same as the default, but it will replace GCC
- function names with the MSPABI-specified ones. */
- void
-@@ -1913,11 +1963,11 @@
-
- /* If we have been given a specific MCU name then we may be
- able to make use of its hardware multiply capabilities. */
-- if (msp430_hwmult_enabled ())
-+ if (msp430_hwmult_type != NONE)
- {
- if (strcmp ("__mspabi_mpyi", name) == 0)
- {
-- if (msp430_is_f5_mcu ())
-+ if (msp430_use_f5_series_hwmult ())
- name = "__mulhi2_f5";
- else
- name = "__mulhi2";
-@@ -1924,9 +1974,9 @@
- }
- else if (strcmp ("__mspabi_mpyl", name) == 0)
- {
-- if (msp430_is_f5_mcu ())
-+ if (msp430_use_f5_series_hwmult ())
- name = "__mulsi2_f5";
-- else if (has_32bit_hw_mult ())
-+ else if (use_32bit_hwmult ())
- name = "__mulsi2_hw32";
- else
- name = "__mulsi2";
-@@ -2203,7 +2253,7 @@
- because builtins are expanded before the frame layout is determined. */
- fprintf (file, "%d",
- msp430_initial_elimination_offset (ARG_POINTER_REGNUM, STACK_POINTER_REGNUM)
-- - 2);
-+ - (TARGET_LARGE ? 4 : 2));
- return;
-
- case 'J':
-@@ -2226,8 +2276,32 @@
- msp430_print_operand_addr (file, addr);
- break;
-
-+ case CONST:
-+ if (GET_CODE (XEXP (op, 0)) == ZERO_EXTRACT)
-+ {
-+ op = XEXP (op, 0);
-+ switch (INTVAL (XEXP (op, 2)))
-+ {
-+ case 0:
-+ fprintf (file, "#lo (");
-+ msp430_print_operand_raw (file, XEXP (op, 0));
-+ fprintf (file, ")");
-+ break;
-+
-+ case 16:
-+ fprintf (file, "#hi (");
-+ msp430_print_operand_raw (file, XEXP (op, 0));
-+ fprintf (file, ")");
-+ break;
-+
-+ default:
-+ output_operand_lossage ("invalid zero extract");
-+ break;
-+ }
-+ break;
-+ }
-+ /* Fall through. */
- case CONST_INT:
-- case CONST:
- case SYMBOL_REF:
- case LABEL_REF:
- if (letter == 0)
-Index: gcc/config/msp430/msp430.opt
-===================================================================
---- a/src/gcc/config/msp430/msp430.opt (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/msp430/msp430.opt (.../branches/gcc-4_9-branch)
-@@ -7,19 +7,19 @@
- Force assembly output to always use hex constants
-
- mmcu=
--Target ToLower Joined RejectNegative Var(target_mcu)
-+Target Report ToLower Joined RejectNegative Var(target_mcu)
- Specify the MCU to build for.
-
- mcpu=
--Target Joined RejectNegative Var(target_cpu)
-+Target Report Joined RejectNegative Var(target_cpu)
- Specify the ISA to build for: msp430, mdsp430x, msp430xv2
-
- mlarge
--Target Mask(LARGE) RejectNegative
-+Target Report Mask(LARGE) RejectNegative
- Select large model - 20-bit addresses/pointers
-
- msmall
--Target InverseMask(LARGE) RejectNegative
-+Target Report InverseMask(LARGE) RejectNegative
- Select small model - 16-bit addresses/pointers (default)
-
- mrelax
-@@ -33,6 +33,27 @@
- Target Report Mask(MINRT) RejectNegative
- Use a minimum runtime (no static initializers or ctors) for memory-constrained devices.
-
--mhwmult
--Target Report Var(ENABLE_HWMULT, 1) Init(1)
--Enable hardware multiply (except in interrupt routines)
-+HeaderInclude
-+config/msp430/msp430-opts.h
-+
-+mhwmult=
-+Target Joined RejectNegative Report ToLower Var(msp430_hwmult_type) Enum(msp430_hwmult_types) Init(AUTO)
-+Specify the type of hardware multiply to support
-+
-+Enum
-+Name(msp430_hwmult_types) Type(enum msp430_hwmult_types)
-+
-+EnumValue
-+Enum(msp430_hwmult_types) String(none) Value(NONE)
-+
-+EnumValue
-+Enum(msp430_hwmult_types) String(auto) Value(AUTO)
-+
-+EnumValue
-+Enum(msp430_hwmult_types) String(16bit) Value(SMALL)
-+
-+EnumValue
-+Enum(msp430_hwmult_types) String(32bit) Value(LARGE)
-+
-+EnumValue
-+Enum(msp430_hwmult_types) String(f5series) Value(F5SERIES)
-Index: gcc/config/msp430/msp430.h
-===================================================================
---- a/src/gcc/config/msp430/msp430.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/msp430/msp430.h (.../branches/gcc-4_9-branch)
-@@ -55,8 +55,8 @@
- "%{mcpu=*:-mcpu=%*}%{!mcpu=*:%{mmcu=*:-mmcu=%*}} " /* Pass the CPU type on to the assembler. */ \
- "%{mrelax=-mQ} " /* Pass the relax option on to the assembler. */ \
- "%{mlarge:-ml} " /* Tell the assembler if we are building for the LARGE pointer model. */ \
-- "%{!msim:-md} %{msim:%{mlarge:-md}}" /* Copy data from ROM to RAM if necessary. */ \
-- "%{ffunction-sections:-gdwarf-sections}" /* If function sections are being created then create DWARF line number sections as well. */
-+ "%{!msim:-md} %{msim:%{mlarge:-md}} " /* Copy data from ROM to RAM if necessary. */ \
-+ "%{ffunction-sections:-gdwarf-sections} " /* If function sections are being created then create DWARF line number sections as well. */
-
- /* Enable linker section garbage collection by default, unless we
- are creating a relocatable binary (gc does not work) or debugging
-Index: gcc/config/v850/rtems.h
-===================================================================
---- a/src/gcc/config/v850/rtems.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/v850/rtems.h (.../branches/gcc-4_9-branch)
-@@ -13,8 +13,13 @@
- 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 GCC; see the file COPYING3. If not see
-+ Under Section 7 of GPL version 3, you are granted additional
-+ permissions described in the GCC Runtime Library Exception, version
-+ 3.1, as published by the Free Software Foundation.
-+
-+ You should have received a copy of the GNU General Public License and
-+ a copy of the GCC Runtime Library Exception along with this program;
-+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
- /* Specify predefined symbols in preprocessor. */
-Index: gcc/config/v850/v850.h
-===================================================================
---- a/src/gcc/config/v850/v850.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/v850/v850.h (.../branches/gcc-4_9-branch)
-@@ -14,8 +14,13 @@
- 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 GCC; see the file COPYING3. If not see
-+ Under Section 7 of GPL version 3, you are granted additional
-+ permissions described in the GCC Runtime Library Exception, version
-+ 3.1, as published by the Free Software Foundation.
-+
-+ You should have received a copy of the GNU General Public License and
-+ a copy of the GCC Runtime Library Exception along with this program;
-+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
- #ifndef GCC_V850_H
-Index: gcc/config/v850/v850-opts.h
-===================================================================
---- a/src/gcc/config/v850/v850-opts.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/config/v850/v850-opts.h (.../branches/gcc-4_9-branch)
-@@ -13,8 +13,13 @@
- 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 GCC; see the file COPYING3. If not see
-+ Under Section 7 of GPL version 3, you are granted additional
-+ permissions described in the GCC Runtime Library Exception, version
-+ 3.1, as published by the Free Software Foundation.
-+
-+ You should have received a copy of the GNU General Public License and
-+ a copy of the GCC Runtime Library Exception along with this program;
-+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
- #ifndef V850_OPTS_H
-Index: gcc/tree-vect-slp.c
-===================================================================
---- a/src/gcc/tree-vect-slp.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/tree-vect-slp.c (.../branches/gcc-4_9-branch)
-@@ -849,9 +849,10 @@
- unsigned int *max_nunits,
- vec<slp_tree> *loads,
- unsigned int vectorization_factor,
-- bool *matches, unsigned *npermutes)
-+ bool *matches, unsigned *npermutes, unsigned *tree_size,
-+ unsigned max_tree_size)
- {
-- unsigned nops, i, this_npermutes = 0;
-+ unsigned nops, i, this_npermutes = 0, this_tree_size = 0;
- gimple stmt;
-
- if (!matches)
-@@ -911,6 +912,12 @@
- if (oprnd_info->first_dt != vect_internal_def)
- continue;
-
-+ if (++this_tree_size > max_tree_size)
-+ {
-+ vect_free_oprnd_info (oprnds_info);
-+ return false;
-+ }
-+
- child = vect_create_new_slp_node (oprnd_info->def_stmts);
- if (!child)
- {
-@@ -921,7 +928,8 @@
- bool *matches = XALLOCAVEC (bool, group_size);
- if (vect_build_slp_tree (loop_vinfo, bb_vinfo, &child,
- group_size, max_nunits, loads,
-- vectorization_factor, matches, npermutes))
-+ vectorization_factor, matches,
-+ npermutes, &this_tree_size, max_tree_size))
- {
- oprnd_info->def_stmts = vNULL;
- SLP_TREE_CHILDREN (*node).quick_push (child);
-@@ -961,7 +969,8 @@
- if (vect_build_slp_tree (loop_vinfo, bb_vinfo, &child,
- group_size, max_nunits, loads,
- vectorization_factor,
-- matches, npermutes))
-+ matches, npermutes, &this_tree_size,
-+ max_tree_size))
- {
- oprnd_info->def_stmts = vNULL;
- SLP_TREE_CHILDREN (*node).quick_push (child);
-@@ -977,6 +986,9 @@
- return false;
- }
-
-+ if (tree_size)
-+ *tree_size += this_tree_size;
-+
- vect_free_oprnd_info (oprnds_info);
- return true;
- }
-@@ -1436,7 +1448,7 @@
-
- static bool
- vect_analyze_slp_instance (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo,
-- gimple stmt)
-+ gimple stmt, unsigned max_tree_size)
- {
- slp_instance new_instance;
- slp_tree node;
-@@ -1536,7 +1548,8 @@
- /* Build the tree for the SLP instance. */
- if (vect_build_slp_tree (loop_vinfo, bb_vinfo, &node, group_size,
- &max_nunits, &loads,
-- vectorization_factor, NULL, NULL))
-+ vectorization_factor, NULL, NULL, NULL,
-+ max_tree_size))
- {
- /* Calculate the unrolling factor based on the smallest type. */
- if (max_nunits > nunits)
-@@ -1641,7 +1654,8 @@
- trees of packed scalar stmts if SLP is possible. */
-
- bool
--vect_analyze_slp (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo)
-+vect_analyze_slp (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo,
-+ unsigned max_tree_size)
- {
- unsigned int i;
- vec<gimple> grouped_stores;
-@@ -1664,7 +1678,8 @@
-
- /* Find SLP sequences starting from groups of grouped stores. */
- FOR_EACH_VEC_ELT (grouped_stores, i, first_element)
-- if (vect_analyze_slp_instance (loop_vinfo, bb_vinfo, first_element))
-+ if (vect_analyze_slp_instance (loop_vinfo, bb_vinfo, first_element,
-+ max_tree_size))
- ok = true;
-
- if (bb_vinfo && !ok)
-@@ -1681,7 +1696,8 @@
- {
- /* Find SLP sequences starting from reduction chains. */
- FOR_EACH_VEC_ELT (reduc_chains, i, first_element)
-- if (vect_analyze_slp_instance (loop_vinfo, bb_vinfo, first_element))
-+ if (vect_analyze_slp_instance (loop_vinfo, bb_vinfo, first_element,
-+ max_tree_size))
- ok = true;
- else
- return false;
-@@ -1693,7 +1709,8 @@
-
- /* Find SLP sequences starting from groups of reductions. */
- if (loop_vinfo && LOOP_VINFO_REDUCTIONS (loop_vinfo).length () > 1
-- && vect_analyze_slp_instance (loop_vinfo, bb_vinfo, reductions[0]))
-+ && vect_analyze_slp_instance (loop_vinfo, bb_vinfo, reductions[0],
-+ max_tree_size))
- ok = true;
-
- return true;
-@@ -2071,12 +2088,13 @@
- slp_instance instance;
- int i;
- int min_vf = 2;
-+ unsigned n_stmts = 0;
-
- bb_vinfo = new_bb_vec_info (bb);
- if (!bb_vinfo)
- return NULL;
-
-- if (!vect_analyze_data_refs (NULL, bb_vinfo, &min_vf))
-+ if (!vect_analyze_data_refs (NULL, bb_vinfo, &min_vf, &n_stmts))
- {
- if (dump_enabled_p ())
- dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
-@@ -2124,7 +2142,7 @@
-
- /* Check the SLP opportunities in the basic block, analyze and build SLP
- trees. */
-- if (!vect_analyze_slp (NULL, bb_vinfo))
-+ if (!vect_analyze_slp (NULL, bb_vinfo, n_stmts))
- {
- if (dump_enabled_p ())
- dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
-Index: gcc/varpool.c
-===================================================================
---- a/src/gcc/varpool.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/varpool.c (.../branches/gcc-4_9-branch)
-@@ -166,7 +166,9 @@
- /* Because we remove references from external functions before final compilation,
- we may end up removing useful constructors.
- FIXME: We probably want to trace boundaries better. */
-- if ((init = ctor_for_folding (node->decl)) == error_mark_node)
-+ if (cgraph_state == CGRAPH_LTO_STREAMING)
-+ ;
-+ else if ((init = ctor_for_folding (node->decl)) == error_mark_node)
- varpool_remove_initializer (node);
- else
- DECL_INITIAL (node->decl) = init;
-@@ -302,7 +304,16 @@
- if (DECL_VIRTUAL_P (real_decl))
- {
- gcc_checking_assert (TREE_READONLY (real_decl));
-- return DECL_INITIAL (real_decl);
-+ if (DECL_INITIAL (real_decl))
-+ return DECL_INITIAL (real_decl);
-+ else
-+ {
-+ /* The C++ front end creates VAR_DECLs for vtables of typeinfo
-+ classes not defined in the current TU so that it can refer
-+ to them from typeinfo objects. Avoid returning NULL_TREE. */
-+ gcc_checking_assert (!COMPLETE_TYPE_P (DECL_CONTEXT (real_decl)));
-+ return error_mark_node;
-+ }
- }
-
- /* If there is no constructor, we have nothing to do. */
-Index: gcc/tree-ssa-threadedge.c
-===================================================================
---- a/src/gcc/tree-ssa-threadedge.c (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/tree-ssa-threadedge.c (.../branches/gcc-4_9-branch)
-@@ -199,9 +199,7 @@
- traversing back edges less painful. */
-
- static bool
--record_temporary_equivalences_from_phis (edge e, vec<tree> *stack,
-- bool backedge_seen,
-- bitmap src_map, bitmap dst_map)
-+record_temporary_equivalences_from_phis (edge e, vec<tree> *stack)
- {
- gimple_stmt_iterator gsi;
-
-@@ -229,14 +227,6 @@
- stmt_count++;
-
- record_temporary_equivalence (dst, src, stack);
--
-- /* If we have crossed a backedge, then start recording equivalences
-- we might need to invalidate. */
-- if (backedge_seen && TREE_CODE (src) == SSA_NAME)
-- {
-- bitmap_set_bit (src_map, SSA_NAME_VERSION (src));
-- bitmap_set_bit (dst_map, SSA_NAME_VERSION (dst));
-- }
- }
- return true;
- }
-@@ -294,29 +284,15 @@
- /* A new value has been assigned to LHS. If necessary, invalidate any
- equivalences that are no longer valid. */
- static void
--invalidate_equivalences (tree lhs, vec<tree> *stack,
-- bitmap src_map, bitmap dst_map)
-+invalidate_equivalences (tree lhs, vec<tree> *stack)
- {
-- /* SRC_MAP contains the source SSA_NAMEs for equivalences created by PHI
-- nodes. If an entry in SRC_MAP changes, there's some destination that
-- has been recorded as equivalent to the source and that equivalency
-- needs to be eliminated. */
-- if (bitmap_bit_p (src_map, SSA_NAME_VERSION (lhs)))
-- {
-- unsigned int i;
-- bitmap_iterator bi;
-
-- /* We know that the LHS of STMT was used as the RHS in an equivalency
-- created by a PHI. All the LHS of such PHIs were recorded into DST_MAP.
-- So we can iterate over them to see if any have the LHS of STMT as
-- an equivalence, and if so, remove the equivalence as it is no longer
-- valid. */
-- EXECUTE_IF_SET_IN_BITMAP (dst_map, 0, i, bi)
-- {
-- if (SSA_NAME_VALUE (ssa_name (i)) == lhs)
-- record_temporary_equivalence (ssa_name (i), NULL_TREE, stack);
-- }
-- }
-+ for (unsigned int i = 1; i < num_ssa_names; i++)
-+ if (ssa_name (i) && SSA_NAME_VALUE (ssa_name (i)) == lhs)
-+ record_temporary_equivalence (ssa_name (i), NULL_TREE, stack);
-+
-+ if (SSA_NAME_VALUE (lhs))
-+ record_temporary_equivalence (lhs, NULL_TREE, stack);
- }
-
- /* Try to simplify each statement in E->dest, ultimately leading to
-@@ -341,9 +317,7 @@
- vec<tree> *stack,
- tree (*simplify) (gimple,
- gimple),
-- bool backedge_seen,
-- bitmap src_map,
-- bitmap dst_map)
-+ bool backedge_seen)
- {
- gimple stmt = NULL;
- gimple_stmt_iterator gsi;
-@@ -387,8 +361,23 @@
- && (gimple_code (stmt) != GIMPLE_CALL
- || gimple_call_lhs (stmt) == NULL_TREE
- || TREE_CODE (gimple_call_lhs (stmt)) != SSA_NAME))
-- continue;
-+ {
-+ /* STMT might still have DEFS and we need to invalidate any known
-+ equivalences for them.
-
-+ Consider if STMT is a GIMPLE_ASM with one or more outputs that
-+ feeds a conditional inside a loop. We might derive an equivalence
-+ due to the conditional. */
-+ tree op;
-+ ssa_op_iter iter;
-+
-+ if (backedge_seen)
-+ FOR_EACH_SSA_TREE_OPERAND (op, stmt, iter, SSA_OP_DEF)
-+ invalidate_equivalences (op, stack);
-+
-+ continue;
-+ }
-+
- /* The result of __builtin_object_size depends on all the arguments
- of a phi node. Temporarily using only one edge produces invalid
- results. For example
-@@ -424,8 +413,7 @@
- if (backedge_seen)
- {
- tree lhs = gimple_get_lhs (stmt);
-- record_temporary_equivalence (lhs, NULL_TREE, stack);
-- invalidate_equivalences (lhs, stack, src_map, dst_map);
-+ invalidate_equivalences (lhs, stack);
- }
- continue;
- }
-@@ -503,11 +491,7 @@
- || is_gimple_min_invariant (cached_lhs)))
- record_temporary_equivalence (gimple_get_lhs (stmt), cached_lhs, stack);
- else if (backedge_seen)
-- record_temporary_equivalence (gimple_get_lhs (stmt), NULL_TREE, stack);
--
-- if (backedge_seen)
-- invalidate_equivalences (gimple_get_lhs (stmt), stack,
-- src_map, dst_map);
-+ invalidate_equivalences (gimple_get_lhs (stmt), stack);
- }
- return stmt;
- }
-@@ -939,9 +923,14 @@
- SIMPLIFY is a pass-specific function used to simplify statements.
-
- Our caller is responsible for restoring the state of the expression
-- and const_and_copies stacks. */
-+ and const_and_copies stacks.
-
--static bool
-+ Positive return value is success. Zero return value is failure, but
-+ the block can still be duplicated as a joiner in a jump thread path,
-+ negative indicates the block should not be duplicated and thus is not
-+ suitable for a joiner in a jump threading path. */
-+
-+static int
- thread_through_normal_block (edge e,
- gimple dummy_cond,
- bool handle_dominating_asserts,
-@@ -949,9 +938,7 @@
- tree (*simplify) (gimple, gimple),
- vec<jump_thread_edge *> *path,
- bitmap visited,
-- bool *backedge_seen_p,
-- bitmap src_map,
-- bitmap dst_map)
-+ bool *backedge_seen_p)
- {
- /* If we have traversed a backedge, then we do not want to look
- at certain expressions in the table that can not be relied upon.
-@@ -960,19 +947,28 @@
- if (*backedge_seen_p)
- simplify = dummy_simplify;
-
-- /* PHIs create temporary equivalences. */
-- if (!record_temporary_equivalences_from_phis (e, stack, *backedge_seen_p,
-- src_map, dst_map))
-- return false;
-+ /* PHIs create temporary equivalences.
-+ Note that if we found a PHI that made the block non-threadable, then
-+ we need to bubble that up to our caller in the same manner we do
-+ when we prematurely stop processing statements below. */
-+ if (!record_temporary_equivalences_from_phis (e, stack))
-+ return -1;
-
- /* Now walk each statement recording any context sensitive
- temporary equivalences we can detect. */
- gimple stmt
- = record_temporary_equivalences_from_stmts_at_dest (e, stack, simplify,
-- *backedge_seen_p,
-- src_map, dst_map);
-+ *backedge_seen_p);
-+
-+ /* If we didn't look at all the statements, the most likely reason is
-+ there were too many and thus duplicating this block is not profitable.
-+
-+ Also note if we do not look at all the statements, then we may not
-+ have invalidated equivalences that are no longer valid if we threaded
-+ around a loop. Thus we must signal to our caller that this block
-+ is not suitable for use as a joiner in a threading path. */
- if (!stmt)
-- return false;
-+ return -1;
-
- /* If we stopped at a COND_EXPR or SWITCH_EXPR, see if we know which arm
- will be taken. */
-@@ -996,7 +992,7 @@
- if (dest == NULL
- || dest == e->dest
- || bitmap_bit_p (visited, dest->index))
-- return false;
-+ return 0;
-
- /* Only push the EDGE_START_JUMP_THREAD marker if this is
- first edge on the path. */
-@@ -1030,10 +1026,10 @@
- visited,
- path,
- backedge_seen_p);
-- return true;
-+ return 1;
- }
- }
-- return false;
-+ return 0;
- }
-
- /* We are exiting E->src, see if E->dest ends with a conditional
-@@ -1071,8 +1067,6 @@
- tree (*simplify) (gimple, gimple))
- {
- bitmap visited = BITMAP_ALLOC (NULL);
-- bitmap src_map = BITMAP_ALLOC (NULL);
-- bitmap dst_map = BITMAP_ALLOC (NULL);
- bool backedge_seen;
-
- stmt_count = 0;
-@@ -1085,25 +1079,40 @@
- if (backedge_seen)
- simplify = dummy_simplify;
-
-- if (thread_through_normal_block (e, dummy_cond, handle_dominating_asserts,
-- stack, simplify, path, visited,
-- &backedge_seen, src_map, dst_map))
-+ int threaded = thread_through_normal_block (e, dummy_cond,
-+ handle_dominating_asserts,
-+ stack, simplify, path,
-+ visited, &backedge_seen);
-+ if (threaded > 0)
- {
- propagate_threaded_block_debug_into (path->last ()->e->dest,
- e->dest);
- remove_temporary_equivalences (stack);
- BITMAP_FREE (visited);
-- BITMAP_FREE (src_map);
-- BITMAP_FREE (dst_map);
- register_jump_thread (path);
- return;
- }
- else
- {
-- /* There should be no edges on the path, so no need to walk through
-- the vector entries. */
-+ /* Negative and zero return values indicate no threading was possible,
-+ thus there should be no edges on the thread path and no need to walk
-+ through the vector entries. */
- gcc_assert (path->length () == 0);
- path->release ();
-+
-+ /* A negative status indicates the target block was deemed too big to
-+ duplicate. Just quit now rather than trying to use the block as
-+ a joiner in a jump threading path.
-+
-+ This prevents unnecessary code growth, but more importantly if we
-+ do not look at all the statements in the block, then we may have
-+ missed some invalidations if we had traversed a backedge! */
-+ if (threaded < 0)
-+ {
-+ BITMAP_FREE (visited);
-+ remove_temporary_equivalences (stack);
-+ return;
-+ }
- }
-
- /* We were unable to determine what out edge from E->dest is taken. However,
-@@ -1129,18 +1138,9 @@
- {
- remove_temporary_equivalences (stack);
- BITMAP_FREE (visited);
-- BITMAP_FREE (src_map);
-- BITMAP_FREE (dst_map);
- return;
- }
-
-- /* We need to restore the state of the maps to this point each loop
-- iteration. */
-- bitmap src_map_copy = BITMAP_ALLOC (NULL);
-- bitmap dst_map_copy = BITMAP_ALLOC (NULL);
-- bitmap_copy (src_map_copy, src_map);
-- bitmap_copy (dst_map_copy, dst_map);
--
- /* Look at each successor of E->dest to see if we can thread through it. */
- FOR_EACH_EDGE (taken_edge, ei, e->dest->succs)
- {
-@@ -1147,8 +1147,6 @@
- /* Push a fresh marker so we can unwind the equivalences created
- for each of E->dest's successors. */
- stack->safe_push (NULL_TREE);
-- bitmap_copy (src_map, src_map_copy);
-- bitmap_copy (dst_map, dst_map_copy);
-
- /* Avoid threading to any block we have already visited. */
- bitmap_clear (visited);
-@@ -1184,8 +1182,7 @@
- found = thread_through_normal_block (path->last ()->e, dummy_cond,
- handle_dominating_asserts,
- stack, simplify, path, visited,
-- &backedge_seen,
-- src_map, dst_map);
-+ &backedge_seen) > 0;
-
- /* If we were able to thread through a successor of E->dest, then
- record the jump threading opportunity. */
-@@ -1204,10 +1201,6 @@
- remove_temporary_equivalences (stack);
- }
- BITMAP_FREE (visited);
-- BITMAP_FREE (src_map);
-- BITMAP_FREE (dst_map);
-- BITMAP_FREE (src_map_copy);
-- BITMAP_FREE (dst_map_copy);
- }
-
- remove_temporary_equivalences (stack);
-Index: gcc/langhooks-def.h
-===================================================================
---- a/src/gcc/langhooks-def.h (.../tags/gcc_4_9_0_release)
-+++ b/src/gcc/langhooks-def.h (.../branches/gcc-4_9-branch)
-@@ -74,6 +74,7 @@
- extern int lhd_gimplify_expr (tree *, gimple_seq *, gimple_seq *);
- extern enum omp_clause_default_kind lhd_omp_predetermined_sharing (tree);
- extern tree lhd_omp_assignment (tree, tree, tree);
-+extern void lhd_omp_finish_clause (tree, gimple_seq *);
- struct gimplify_omp_ctx;
- extern void lhd_omp_firstprivatize_type_sizes (struct gimplify_omp_ctx *,
- tree);
-@@ -211,8 +212,9 @@
- #define LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR hook_tree_tree_tree_tree_null
- #define LANG_HOOKS_OMP_CLAUSE_COPY_CTOR lhd_omp_assignment
- #define LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP lhd_omp_assignment
-+#define LANG_HOOKS_OMP_CLAUSE_LINEAR_CTOR NULL
- #define LANG_HOOKS_OMP_CLAUSE_DTOR hook_tree_tree_tree_null
--#define LANG_HOOKS_OMP_FINISH_CLAUSE hook_void_tree
-+#define LANG_HOOKS_OMP_FINISH_CLAUSE lhd_omp_finish_clause
-
- #define LANG_HOOKS_DECLS { \
- LANG_HOOKS_GLOBAL_BINDINGS_P, \
-@@ -234,6 +236,7 @@
- LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR, \
- LANG_HOOKS_OMP_CLAUSE_COPY_CTOR, \
- LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP, \
-+ LANG_HOOKS_OMP_CLAUSE_LINEAR_CTOR, \
- LANG_HOOKS_OMP_CLAUSE_DTOR, \
- LANG_HOOKS_OMP_FINISH_CLAUSE \
- }
-Index: libgo/configure
-===================================================================
---- a/src/libgo/configure (.../tags/gcc_4_9_0_release)
-+++ b/src/libgo/configure (.../branches/gcc-4_9-branch)
-@@ -14627,7 +14627,7 @@
- ;;
- esac
-
--for ac_header in sys/file.h sys/mman.h syscall.h sys/epoll.h sys/inotify.h sys/ptrace.h sys/syscall.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/if.h net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h linux/fs.h linux/reboot.h netinet/icmp6.h netinet/in_syst.h netinet/ip.h netinet/ip_mroute.h netinet/if_ether.h
-+for ac_header in sched.h sys/file.h sys/mman.h syscall.h sys/epoll.h sys/inotify.h sys/ptrace.h sys/syscall.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/if.h net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h linux/fs.h linux/reboot.h netinet/icmp6.h netinet/in_syst.h netinet/ip.h netinet/ip_mroute.h netinet/if_ether.h
- do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
- ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-Index: libgo/runtime/proc.c
-===================================================================
---- a/src/libgo/runtime/proc.c (.../tags/gcc_4_9_0_release)
-+++ b/src/libgo/runtime/proc.c (.../branches/gcc-4_9-branch)
-@@ -1117,7 +1117,8 @@
- if(runtime_needextram) {
- // Can happen if C/C++ code calls Go from a global ctor.
- // Can not throw, because scheduler is not initialized yet.
-- runtime_write(2, "fatal error: cgo callback before cgo call\n",
-+ int rv __attribute__((unused));
-+ rv = runtime_write(2, "fatal error: cgo callback before cgo call\n",
- sizeof("fatal error: cgo callback before cgo call\n")-1);
- runtime_exit(1);
- }
-Index: libgo/runtime/mheap.c
-===================================================================
---- a/src/libgo/runtime/mheap.c (.../tags/gcc_4_9_0_release)
-+++ b/src/libgo/runtime/mheap.c (.../branches/gcc-4_9-branch)
-@@ -387,7 +387,7 @@
- static uintptr
- scavengelist(MSpan *list, uint64 now, uint64 limit)
- {
-- uintptr released, sumreleased;
-+ uintptr released, sumreleased, start, end, pagesize;
- MSpan *s;
-
- if(runtime_MSpanList_IsEmpty(list))
-@@ -400,7 +400,17 @@
- mstats.heap_released += released;
- sumreleased += released;
- s->npreleased = s->npages;
-- runtime_SysUnused((void*)(s->start << PageShift), s->npages << PageShift);
-+
-+ start = s->start << PageShift;
-+ end = start + (s->npages << PageShift);
-+
-+ // Round start up and end down to ensure we
-+ // are acting on entire pages.
-+ pagesize = getpagesize();
-+ start = ROUND(start, pagesize);
-+ end &= ~(pagesize - 1);
-+ if(end > start)
-+ runtime_SysUnused((void*)start, end - start);
- }
- }
- return sumreleased;
-Index: libgo/mksysinfo.sh
-===================================================================
---- a/src/libgo/mksysinfo.sh (.../tags/gcc_4_9_0_release)
-+++ b/src/libgo/mksysinfo.sh (.../branches/gcc-4_9-branch)
-@@ -163,6 +163,9 @@
- #if defined(HAVE_NETINET_ICMP6_H)
- #include <netinet/icmp6.h>
- #endif
-+#if defined(HAVE_SCHED_H)
-+#include <sched.h>
-+#endif
-
- /* Constants that may only be defined as expressions on some systems,
- expressions too complex for -fdump-go-spec to handle. These are
-@@ -177,6 +180,18 @@
- #ifdef TIOCSCTTY
- TIOCSCTTY_val = TIOCSCTTY,
- #endif
-+#ifdef TIOCGPTN
-+ TIOCGPTN_val = TIOCGPTN,
-+#endif
-+#ifdef TIOCSPTLCK
-+ TIOCSPTLCK_val = TIOCSPTLCK,
-+#endif
-+#ifdef TIOCGDEV
-+ TIOCGDEV_val = TIOCGDEV,
-+#endif
-+#ifdef TIOCSIG
-+ TIOCSIG_val = TIOCSIG,
-+#endif
- };
- EOF
-
-@@ -775,6 +790,26 @@
- echo 'const TIOCSCTTY = _TIOCSCTTY_val' >> ${OUT}
- fi
- fi
-+if ! grep '^const TIOCGPTN' ${OUT} >/dev/null 2>&1; then
-+ if grep '^const _TIOCGPTN_val' ${OUT} >/dev/null 2>&1; then
-+ echo 'const TIOCGPTN = _TIOCGPTN_val' >> ${OUT}
-+ fi
-+fi
-+if ! grep '^const TIOCSPTLCK' ${OUT} >/dev/null 2>&1; then
-+ if grep '^const _TIOCSPTLCK_val' ${OUT} >/dev/null 2>&1; then
-+ echo 'const TIOCSPTLCK = _TIOCSPTLCK_val' >> ${OUT}
-+ fi
-+fi
-+if ! grep '^const TIOCGDEV' ${OUT} >/dev/null 2>&1; then
-+ if grep '^const _TIOCGDEV_val' ${OUT} >/dev/null 2>&1; then
-+ echo 'const TIOCGDEV = _TIOCGDEV_val' >> ${OUT}
-+ fi
-+fi
-+if ! grep '^const TIOCSIG' ${OUT} >/dev/null 2>&1; then
-+ if grep '^const _TIOCSIG_val' ${OUT} >/dev/null 2>&1; then
-+ echo 'const TIOCSIG = _TIOCSIG_val' >> ${OUT}
-+ fi
-+fi
-
- # The ioctl flags for terminal control
- grep '^const _TC[GS]ET' gen-sysinfo.go | \
-@@ -1130,6 +1165,10 @@
- -e 's/\[0\]byte/[0]int8/' \
- >> ${OUT}
-
-+# The GNU/Linux CLONE flags.
-+grep '^const _CLONE_' gen-sysinfo.go | \
-+ sed -e 's/^\(const \)_\(CLONE_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
-+
- # The Solaris 11 Update 1 _zone_net_addr_t struct.
- grep '^type _zone_net_addr_t ' gen-sysinfo.go | \
- sed -e 's/_in6_addr/[16]byte/' \
-Index: libgo/config.h.in
-===================================================================
---- a/src/libgo/config.h.in (.../tags/gcc_4_9_0_release)
-+++ b/src/libgo/config.h.in (.../branches/gcc-4_9-branch)
-@@ -192,6 +192,9 @@
- /* Define to 1 if you have the `renameat' function. */
- #undef HAVE_RENAMEAT
-
-+/* Define to 1 if you have the <sched.h> header file. */
-+#undef HAVE_SCHED_H
-+
- /* Define to 1 if you have the `sem_timedwait' function. */
- #undef HAVE_SEM_TIMEDWAIT
-
-Index: libgo/configure.ac
-===================================================================
---- a/src/libgo/configure.ac (.../tags/gcc_4_9_0_release)
-+++ b/src/libgo/configure.ac (.../branches/gcc-4_9-branch)
-@@ -480,7 +480,7 @@
- ;;
- esac
-
--AC_CHECK_HEADERS(sys/file.h sys/mman.h syscall.h sys/epoll.h sys/inotify.h sys/ptrace.h sys/syscall.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/if.h net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h linux/fs.h linux/reboot.h netinet/icmp6.h netinet/in_syst.h netinet/ip.h netinet/ip_mroute.h netinet/if_ether.h)
-+AC_CHECK_HEADERS(sched.h sys/file.h sys/mman.h syscall.h sys/epoll.h sys/inotify.h sys/ptrace.h sys/syscall.h sys/user.h sys/utsname.h sys/select.h sys/socket.h net/if.h net/if_arp.h net/route.h netpacket/packet.h sys/prctl.h sys/mount.h sys/vfs.h sys/statfs.h sys/timex.h sys/sysinfo.h utime.h linux/ether.h linux/fs.h linux/reboot.h netinet/icmp6.h netinet/in_syst.h netinet/ip.h netinet/ip_mroute.h netinet/if_ether.h)
-
- AC_CHECK_HEADERS([linux/filter.h linux/if_addr.h linux/if_ether.h linux/if_tun.h linux/netlink.h linux/rtnetlink.h], [], [],
- [#ifdef HAVE_SYS_SOCKET_H
-Index: libgfortran/intrinsics/ctime.c
-===================================================================
---- a/src/libgfortran/intrinsics/ctime.c (.../tags/gcc_4_9_0_release)
-+++ b/src/libgfortran/intrinsics/ctime.c (.../branches/gcc-4_9-branch)
-@@ -31,31 +31,53 @@
- #include <string.h>
-
-
--/* strftime-like function that fills a C string with %c format which
-- is identical to ctime in the default locale. As ctime and ctime_r
-- are poorly specified and their usage not recommended, the
-- implementation instead uses strftime. */
-+/* Maximum space a ctime-like string might need. A "normal" ctime
-+ string is 26 bytes, and in our case 24 bytes as we don't include
-+ the trailing newline and null. However, the longest possible year
-+ number is -2,147,481,748 (1900 - 2,147,483,648, since tm_year is a
-+ 32-bit signed integer) so an extra 7 bytes are needed. */
-+#define CTIME_BUFSZ 31
-
--static size_t
--strctime (char *s, size_t max, const time_t *timep)
-+
-+/* Thread-safe ctime-like function that fills a Fortran
-+ string. ctime_r is a portability headache and marked as obsolescent
-+ in POSIX 2008, which recommends strftime in its place. However,
-+ strftime(..., "%c",...) doesn't produce ctime-like output on
-+ MinGW, so do it manually with snprintf. */
-+
-+static int
-+gf_ctime (char *s, size_t max, const time_t timev)
- {
- struct tm ltm;
- int failed;
-+ char buf[CTIME_BUFSZ + 1];
- /* Some targets provide a localtime_r based on a draft of the POSIX
- standard where the return type is int rather than the
- standardized struct tm*. */
-- __builtin_choose_expr (__builtin_classify_type (localtime_r (timep, &ltm))
-+ __builtin_choose_expr (__builtin_classify_type (localtime_r (&timev, &ltm))
- == 5,
-- failed = localtime_r (timep, &ltm) == NULL,
-- failed = localtime_r (timep, &ltm) != 0);
-+ failed = localtime_r (&timev, &ltm) == NULL,
-+ failed = localtime_r (&timev, &ltm) != 0);
- if (failed)
-- return 0;
-- return strftime (s, max, "%c", &ltm);
-+ goto blank;
-+ int n = snprintf (buf, sizeof (buf),
-+ "%3.3s %3.3s%3d %.2d:%.2d:%.2d %d",
-+ "SunMonTueWedThuFriSat" + ltm.tm_wday * 3,
-+ "JanFebMarAprMayJunJulAugSepOctNovDec" + ltm.tm_mon * 3,
-+ ltm.tm_mday, ltm.tm_hour, ltm.tm_min, ltm.tm_sec,
-+ 1900 + ltm.tm_year);
-+ if (n < 0)
-+ goto blank;
-+ if ((size_t) n <= max)
-+ {
-+ cf_strcpy (s, max, buf);
-+ return n;
-+ }
-+ blank:
-+ memset (s, ' ', max);
-+ return 0;
- }
-
--/* In the default locale, the date and time representation fits in 26
-- bytes. However, other locales might need more space. */
--#define CSZ 100
-
- extern void fdate (char **, gfc_charlen_type *);
- export_proto(fdate);
-@@ -64,8 +86,8 @@
- fdate (char ** date, gfc_charlen_type * date_len)
- {
- time_t now = time(NULL);
-- *date = xmalloc (CSZ);
-- *date_len = strctime (*date, CSZ, &now);
-+ *date = xmalloc (CTIME_BUFSZ);
-+ *date_len = gf_ctime (*date, CTIME_BUFSZ, now);
- }
-
-
-@@ -76,10 +98,7 @@
- fdate_sub (char * date, gfc_charlen_type date_len)
- {
- time_t now = time(NULL);
-- char *s = xmalloc (date_len + 1);
-- size_t n = strctime (s, date_len + 1, &now);
-- fstrcpy (date, date_len, s, n);
-- free (s);
-+ gf_ctime (date, date_len, now);
- }
-
-
-@@ -91,8 +110,8 @@
- PREFIX(ctime) (char ** date, gfc_charlen_type * date_len, GFC_INTEGER_8 t)
- {
- time_t now = t;
-- *date = xmalloc (CSZ);
-- *date_len = strctime (*date, CSZ, &now);
-+ *date = xmalloc (CTIME_BUFSZ);
-+ *date_len = gf_ctime (*date, CTIME_BUFSZ, now);
- }
-
-
-@@ -103,8 +122,5 @@
- ctime_sub (GFC_INTEGER_8 * t, char * date, gfc_charlen_type date_len)
- {
- time_t now = *t;
-- char *s = xmalloc (date_len + 1);
-- size_t n = strctime (s, date_len + 1, &now);
-- fstrcpy (date, date_len, s, n);
-- free (s);
-+ gf_ctime (date, date_len, now);
- }
-Index: libgfortran/ChangeLog
-===================================================================
---- a/src/libgfortran/ChangeLog (.../tags/gcc_4_9_0_release)
-+++ b/src/libgfortran/ChangeLog (.../branches/gcc-4_9-branch)
-@@ -1,3 +1,52 @@
-+2014-07-06 Jerry DeLisle <jvdelisle@gcc.gnu.org>
-+
-+ Backport from trunk.
-+ PR libgfortran/61640
-+ * io/list_read.c (next_char_internal): Adjust the read length to
-+ a single wide character. (eat_spaces): Add missing paren.
-+ * io/unix.c (mem_read4): Use the correct mem_alloc function for
-+ wide character internal reads.
-+
-+2014-06-27 Jerry DeLisle <jvdelisle@gcc.gnu.org>
-+
-+ Backport from trunk.
-+ PR libgfortran/61499
-+ * io/list_read.c (eat_spaces): Use a 'for' loop instead of
-+ 'while' loop to skip the loop if there are no bytes left in the
-+ string. Only seek if actual spaces can be skipped.
-+
-+2014-06-07 Jerry DeLisle <jvdelisle@gcc.gnu>
-+
-+ Backport from trunk.
-+ PR libfortran/61173
-+ * io/list_read.c (eat_spaces): If the next character pointed to
-+ is a space, don't seek, must be at the end.
-+
-+2014-05-26 Janne Blomqvist <jb@gcc.gnu.org>
-+
-+ Backport from mainline
-+ PR libfortran/61310
-+ * intrinsics/ctime.c (strctime): Rename to gf_ctime, use snprintf
-+ instead of strftime.
-+ (fdate): Use gf_ctime.
-+ (fdate_sub): Likewise.
-+ (ctime): Likewise.
-+ (ctime_sub): Likewise.
-+
-+2014-05-16 Janne Blomqvist <jb@gcc.gnu.org>
-+
-+ Backport from trunk:
-+ PR libfortran/61187
-+ * io/unix.c (raw_close): Check if s->fd is -1.
-+ (fd_to_stream): Check return value of fstat(), handle error.
-+
-+2014-05-10 Jerry DeLisle <jvdelisle@gcc.gnu>
-+
-+ Backport from Trunk.
-+ PR libfortran/61049
-+ * io/list_read.c (list_formatted_read_scalar): Use eat_separator
-+ and delete extraneous code.
-+
- 2014-04-22 Release Manager
-
- * GCC 4.9.0 released.
-Index: libgfortran/io/list_read.c
-===================================================================
---- a/src/libgfortran/io/list_read.c (.../tags/gcc_4_9_0_release)
-+++ b/src/libgfortran/io/list_read.c (.../branches/gcc-4_9-branch)
-@@ -200,7 +200,7 @@
- {
- /* Check for kind=4 internal unit. */
- if (dtp->common.unit)
-- length = sread (dtp->u.p.current_unit->s, &c, sizeof (gfc_char4_t));
-+ length = sread (dtp->u.p.current_unit->s, &c, 1);
- else
- {
- char cc;
-@@ -265,46 +265,39 @@
- int c;
-
- /* If internal character array IO, peak ahead and seek past spaces.
-- This is an optimazation to eliminate numerous calls to
-- next character unique to character arrays with large character
-- lengths (PR38199). */
-- if (is_array_io (dtp))
-+ This is an optimization unique to character arrays with large
-+ character lengths (PR38199). This code eliminates numerous calls
-+ to next_character. */
-+ if (is_array_io (dtp) && (dtp->u.p.last_char == EOF - 1))
- {
- gfc_offset offset = stell (dtp->u.p.current_unit->s);
-- gfc_offset limit = dtp->u.p.current_unit->bytes_left;
-+ gfc_offset i;
-
- if (dtp->common.unit) /* kind=4 */
- {
-- gfc_char4_t cc;
-- limit *= (sizeof (gfc_char4_t));
-- do
-+ for (i = 0; i < dtp->u.p.current_unit->bytes_left; i++)
- {
-- cc = dtp->internal_unit[offset];
-- offset += (sizeof (gfc_char4_t));
-- dtp->u.p.current_unit->bytes_left--;
-+ if (dtp->internal_unit[(offset + i) * sizeof (gfc_char4_t)]
-+ != (gfc_char4_t)' ')
-+ break;
- }
-- while (offset < limit && (cc == (gfc_char4_t)' '
-- || cc == (gfc_char4_t)'\t'));
-- /* Back up, seek ahead, and fall through to complete the
-- process so that END conditions are handled correctly. */
-- dtp->u.p.current_unit->bytes_left++;
-- sseek (dtp->u.p.current_unit->s,
-- offset-(sizeof (gfc_char4_t)), SEEK_SET);
- }
- else
- {
-- do
-+ for (i = 0; i < dtp->u.p.current_unit->bytes_left; i++)
- {
-- c = dtp->internal_unit[offset++];
-- dtp->u.p.current_unit->bytes_left--;
-+ if (dtp->internal_unit[offset + i] != ' ')
-+ break;
- }
-- while (offset < limit && (c == ' ' || c == '\t'));
-- /* Back up, seek ahead, and fall through to complete the
-- process so that END conditions are handled correctly. */
-- dtp->u.p.current_unit->bytes_left++;
-- sseek (dtp->u.p.current_unit->s, offset-1, SEEK_SET);
- }
-+
-+ if (i != 0)
-+ {
-+ sseek (dtp->u.p.current_unit->s, offset + i, SEEK_SET);
-+ dtp->u.p.current_unit->bytes_left -= i;
-+ }
- }
-+
- /* Now skip spaces, EOF and EOL are handled in next_char. */
- do
- c = next_char (dtp);
-@@ -1923,21 +1916,10 @@
- }
- if (is_separator (c))
- {
-- /* Found a null value. Do not use eat_separator here otherwise
-- we will do an extra read from stdin. */
-+ /* Found a null value. */
- dtp->u.p.repeat_count = 0;
-+ eat_separator (dtp);
-
-- /* Set comma_flag. */
-- if ((c == ';'
-- && dtp->u.p.current_unit->decimal_status == DECIMAL_COMMA)
-- ||
-- (c == ','
-- && dtp->u.p.current_unit->decimal_status == DECIMAL_POINT))
-- {
-- dtp->u.p.comma_flag = 1;
-- goto cleanup;
-- }
--
- /* Set end-of-line flag. */
- if (c == '\n' || c == '\r')
- {
-@@ -1951,7 +1933,6 @@
- else
- goto cleanup;
- }
--
- }
- else
- {
-Index: libgfortran/io/unix.c
-===================================================================
---- a/src/libgfortran/io/unix.c (.../tags/gcc_4_9_0_release)
-+++ b/src/libgfortran/io/unix.c (.../branches/gcc-4_9-branch)
-@@ -412,7 +412,9 @@
- {
- int retval;
-
-- if (s->fd != STDOUT_FILENO
-+ if (s->fd == -1)
-+ retval = -1;
-+ else if (s->fd != STDOUT_FILENO
- && s->fd != STDERR_FILENO
- && s->fd != STDIN_FILENO)
- retval = close (s->fd);
-@@ -784,10 +786,10 @@
- void *p;
- int nb = nbytes;
-
-- p = mem_alloc_r (s, &nb);
-+ p = mem_alloc_r4 (s, &nb);
- if (p)
- {
-- memcpy (buf, p, nb);
-+ memcpy (buf, p, nb * 4);
- return (ssize_t) nb;
- }
- else
-@@ -1003,7 +1005,15 @@
-
- /* Get the current length of the file. */
-
-- fstat (fd, &statbuf);
-+ if (fstat (fd, &statbuf) == -1)
-+ {
-+ s->st_dev = s->st_ino = -1;
-+ s->file_length = 0;
-+ if (errno == EBADF)
-+ s->fd = -1;
-+ raw_init (s);
-+ return (stream *) s;
-+ }
-
- s->st_dev = statbuf.st_dev;
- s->st_ino = statbuf.st_ino;
-Index: libcpp/ChangeLog
-===================================================================
---- a/src/libcpp/ChangeLog (.../tags/gcc_4_9_0_release)
-+++ b/src/libcpp/ChangeLog (.../branches/gcc-4_9-branch)
-@@ -1,3 +1,10 @@
-+2014-07-09 Edward Smith-Rowland <3dw4rd@verizon.net>
-+
-+ PR c++/58155 - -Wliteral-suffix warns about tokens which are skipped
-+ by preprocessor
-+ * lex.c (lex_raw_string ()): Do not warn about invalid suffix
-+ if skipping. (lex_string ()): Ditto.
-+
- 2014-04-22 Release Manager
-
- * GCC 4.9.0 released.
-Index: libcpp/lex.c
-===================================================================
---- a/src/libcpp/lex.c (.../tags/gcc_4_9_0_release)
-+++ b/src/libcpp/lex.c (.../branches/gcc-4_9-branch)
-@@ -1648,7 +1648,7 @@
- if (is_macro (pfile, cur))
- {
- /* Raise a warning, but do not consume subsequent tokens. */
-- if (CPP_OPTION (pfile, warn_literal_suffix))
-+ if (CPP_OPTION (pfile, warn_literal_suffix) && !pfile->state.skipping)
- cpp_warning_with_line (pfile, CPP_W_LITERAL_SUFFIX,
- token->src_loc, 0,
- "invalid suffix on literal; C++11 requires "
-@@ -1777,7 +1777,7 @@
- if (is_macro (pfile, cur))
- {
- /* Raise a warning, but do not consume subsequent tokens. */
-- if (CPP_OPTION (pfile, warn_literal_suffix))
-+ if (CPP_OPTION (pfile, warn_literal_suffix) && !pfile->state.skipping)
- cpp_warning_with_line (pfile, CPP_W_LITERAL_SUFFIX,
- token->src_loc, 0,
- "invalid suffix on literal; C++11 requires "
-Index: .
-===================================================================
---- a/src/. (.../tags/gcc_4_9_0_release)
-+++ b/src/. (.../branches/gcc-4_9-branch)
-
-Property changes on: .
-___________________________________________________________________
-Added: svn:mergeinfo
- Merged /trunk:r210668,211733
diff --git a/debian/rules.d/binary-cxx.mk b/debian/rules.d/binary-cxx.mk
index 8ce3e0a..8ebca2c 100644
--- a/debian/rules.d/binary-cxx.mk
+++ b/debian/rules.d/binary-cxx.mk
@@ -61,7 +61,8 @@ endif
echo "TEST COMPARE BEGIN"
ifeq ($(with_check),yes)
# more than one libgo.sum, avoid it
- cp -p $$(find $(builddir) -mindepth 3 -name '*.sum' ! -name libgo.sum) \
+ cp -p $$(find $(builddir)/gcc -maxdepth 2 \( -name '*.sum' -o -name '*.log' \)) \
+ $$(find $(buildlibdir)/*/testsuite -maxdepth 1 \( -name '*.sum' -o -name '*.log' \) ! -name 'libgo.*') \
$(d_cxx)/$(docdir)/$(p_xbase)/test-summaries/
ifeq ($(with_go),yes)
cp -p $(buildlibdir)/libgo/libgo.sum \
diff --git a/debian/rules.patch b/debian/rules.patch
index fb07604..99f4d8a 100644
--- a/debian/rules.patch
+++ b/debian/rules.patch
@@ -13,7 +13,6 @@ series_file ?= $(patchdir)/series
# which patches should be applied?
debian_patches = \
- svn-updates \
$(if $(with_linaro_branch),gcc-linaro) \
# svn-updates \
@@ -25,7 +24,6 @@ endif
ifneq ($(GFDL_INVARIANT_FREE),yes)
debian_patches += \
- svn-doc-updates \
rename-info-files \
# $(if $(with_linaro_branch),gcc-linaro-doc) \