diff -Nru gcc-snapshot-20140321/debian/changelog gcc-snapshot-20140405/debian/changelog --- gcc-snapshot-20140321/debian/changelog 2014-04-05 22:42:23.000000000 +0000 +++ gcc-snapshot-20140405/debian/changelog 2014-04-05 22:42:40.000000000 +0000 @@ -1,8 +1,34 @@ -gcc-snapshot (20140321-0ubuntu1) trusty; urgency=medium +gcc-snapshot (20140405-0ubuntu1) trusty; urgency=medium + + * Snapshot, taken from the trunk (20140405) + + -- Matthias Klose Sat, 05 Apr 2014 11:36:11 +0200 + +gcc-snapshot (20140403-0ubuntu1) trusty; urgency=medium + + * Snapshot, taken from the trunk (20140403) + * Fix the ada build on powerpc. + + -- Matthias Klose Thu, 03 Apr 2014 19:08:08 +0200 + +gcc-snapshot (20140402-0ubuntu2) trusty; urgency=medium + + * Apply ada-ppc64.diff in snapshot builds. + + -- Matthias Klose Wed, 02 Apr 2014 17:05:24 +0200 + +gcc-snapshot (20140402-0ubuntu1) trusty; urgency=medium + + * Snapshot, taken from the trunk (20140402) + * Build gnat on ppc64el. + + -- Matthias Klose Wed, 02 Apr 2014 15:34:00 +0200 + +gcc-snapshot (20140321-1) unstable; urgency=medium * Snapshot, taken from the trunk (20140321) - -- Matthias Klose Fri, 21 Mar 2014 19:20:31 +0100 + -- Matthias Klose Fri, 21 Mar 2014 19:20:31 +0100 gcc-snapshot (20140305-1) unstable; urgency=medium diff -Nru gcc-snapshot-20140321/debian/control gcc-snapshot-20140405/debian/control --- gcc-snapshot-20140321/debian/control 2014-04-05 22:42:23.000000000 +0000 +++ gcc-snapshot-20140405/debian/control 2014-04-05 22:42:40.000000000 +0000 @@ -10,13 +10,13 @@ kfreebsd-kernel-headers (>= 0.84) [kfreebsd-any], m4, libtool, autoconf2.64, libunwind7-dev (>= 0.98.5-6) [ia64], libatomic-ops-dev [ia64], - zlib1g-dev, gawk, lzma, xz-utils, patchutils, + autogen, zlib1g-dev, gawk, lzma, xz-utils, patchutils, binutils (>= 2.23) | binutils-multiarch (>= 2.23), binutils-hppa64 (>= 2.23) [hppa], gperf (>= 3.0.1), bison (>= 1:2.3), flex, gettext, texinfo (>= 4.3), locales, sharutils, - procps, zlib1g-dev, libantlr-java, python, libffi-dev, fastjar, libmagic-dev, libecj-java (>= 3.3.0-2), zip, libasound2-dev [ !hurd-any !kfreebsd-any], libxtst-dev, libxt-dev, libgtk2.0-dev (>= 2.4.4-2), libart-2.0-dev, libcairo2-dev, gnat (>= 4.1) [!arm !armhf !arm64 !powerpcspe !ppc64el !sh4 !sparc64 !hurd-i386], netbase, + procps, zlib1g-dev, libantlr-java, python, libffi-dev, fastjar, libmagic-dev, libecj-java (>= 3.3.0-2), zip, libasound2-dev [ !hurd-any !kfreebsd-any], libxtst-dev, libxt-dev, libgtk2.0-dev (>= 2.4.4-2), libart-2.0-dev, libcairo2-dev, gnat (>= 4.1) [!arm !armhf !arm64 !powerpcspe !sh4 !sparc64 !hurd-i386], netbase, libcloog-isl-dev (>= 0.18), libmpc-dev (>= 1.0), libmpfr-dev (>= 3.0.0-9~), libgmp-dev (>= 2:5.0.1~), - dejagnu [!arm64 !m68k !hurd-amd64 !hurd-i386 !hurd-alpha], autogen, realpath (>= 1.9.12), chrpath, lsb-release, quilt + dejagnu [!m68k !hurd-amd64 !hurd-i386 !hurd-alpha], realpath (>= 1.9.12), chrpath, lsb-release, quilt Build-Depends-Indep: doxygen (>= 1.7.2), graphviz (>= 2.2), ghostscript, texlive-latex-base, xsltproc, libxml2-utils, docbook-xsl-ns Homepage: http://gcc.gnu.org/ XS-Vcs-Browser: http://svn.debian.org/viewsvn/gcccvs/branches/sid/gcc-4.9/ diff -Nru gcc-snapshot-20140321/debian/control.m4 gcc-snapshot-20140405/debian/control.m4 --- gcc-snapshot-20140321/debian/control.m4 2014-04-05 22:42:23.000000000 +0000 +++ gcc-snapshot-20140405/debian/control.m4 2014-04-05 22:42:40.000000000 +0000 @@ -55,18 +55,18 @@ ifdef(`TARGET',`dnl cross Build-Depends: debhelper (>= 5.0.62), LIBC_BUILD_DEP, LIBC_BIARCH_BUILD_DEP - LIBUNWIND_BUILD_DEP LIBATOMIC_OPS_BUILD_DEP AUTOGEN_BUILD_DEP AUTO_BUILD_DEP + LIBUNWIND_BUILD_DEP LIBATOMIC_OPS_BUILD_DEP AUTO_BUILD_DEP SOURCE_BUILD_DEP CROSS_BUILD_DEP CLOOG_BUILD_DEP MPC_BUILD_DEP MPFR_BUILD_DEP GMP_BUILD_DEP, - zlib1g-dev, gawk, lzma, xz-utils, patchutils, + autogen, zlib1g-dev, gawk, lzma, xz-utils, patchutils, bison (>= 1:2.3), flex, realpath (>= 1.9.12), lsb-release, quilt ',`dnl native Build-Depends: debhelper (>= 5.0.62), GCC_MULTILIB_BUILD_DEP LIBC_BUILD_DEP, LIBC_BIARCH_BUILD_DEP LIBC_DBG_DEP kfreebsd-kernel-headers (>= 0.84) [kfreebsd-any], - AUTO_BUILD_DEP AUTOGEN_BUILD_DEP + AUTO_BUILD_DEP libunwind7-dev (>= 0.98.5-6) [ia64], libatomic-ops-dev [ia64], - zlib1g-dev, gawk, lzma, xz-utils, patchutils, + autogen, zlib1g-dev, gawk, lzma, xz-utils, patchutils, BINUTILS_BUILD_DEP, binutils-hppa64 (>= BINUTILSBDV) [hppa], gperf (>= 3.0.1), bison (>= 1:2.3), flex, gettext, texinfo (>= 4.3), locales, sharutils, @@ -309,6 +309,7 @@ ${dep:libqmath}, ${dep:libunwinddev}, ${shlibs:Depends}, ${misc:Depends} ifdef(`TARGET',`',ifdef(`MULTIARCH', `Multi-Arch: same '))`'dnl +Replaces: gccgo-4.9 (<< ${gcc:Version) BUILT_USING`'dnl Description: GCC support library (development files) This package contains the headers and static library files necessary for @@ -737,6 +738,7 @@ binutils`'TS (>= ${binutils:Version}), depifenabled(`libgcc',`libdevdep(gcc`'PV-dev`',), ')${shlibs:Depends}, ${misc:Depends} Recommends: ${dep:libcdev} +Replaces: gccgo-4.9 (<< ${gcc:Version) Suggests: ${gcc:multilib}, gcc`'PV-doc (>= ${gcc:SoftVersion}), gcc`'PV-locales (>= ${gcc:SoftVersion}), libdbgdep(gcc`'GCC_SO-dbg,,>=,${libgcc:Version}), @@ -808,7 +810,7 @@ Priority: ifdef(`TARGET',`extra',`PRI(optional)') Depends: BASEDEP, ${shlibs:Depends}, ${misc:Depends} Suggests: gcc`'PV-locales (>= ${gcc:SoftVersion}) -Replaces: gcc-4.6 (<< 4.6.1-9) +Replaces: gccgo-4.9 (<< ${gcc:Version) BUILT_USING`'dnl Description: GNU C preprocessor A macro processor that is used automatically by the GNU C compiler diff -Nru gcc-snapshot-20140321/debian/libasan.symbols.common gcc-snapshot-20140405/debian/libasan.symbols.common --- gcc-snapshot-20140321/debian/libasan.symbols.common 2014-04-05 22:42:23.000000000 +0000 +++ gcc-snapshot-20140405/debian/libasan.symbols.common 2014-04-05 22:42:40.000000000 +0000 @@ -15,6 +15,7 @@ __asan_backtrace_initialize@Base 4.9 __asan_backtrace_open@Base 4.9 __asan_backtrace_pcinfo@Base 4.9 + __asan_backtrace_qsort@Base 4.9 __asan_backtrace_release_view@Base 4.9 __asan_backtrace_syminfo@Base 4.9 __asan_backtrace_vector_finish@Base 4.9 diff -Nru gcc-snapshot-20140321/debian/liblsan0.symbols gcc-snapshot-20140405/debian/liblsan0.symbols --- gcc-snapshot-20140321/debian/liblsan0.symbols 2014-04-05 22:42:23.000000000 +0000 +++ gcc-snapshot-20140405/debian/liblsan0.symbols 2014-04-05 22:42:40.000000000 +0000 @@ -18,6 +18,7 @@ __asan_backtrace_initialize@Base 4.9 __asan_backtrace_open@Base 4.9 __asan_backtrace_pcinfo@Base 4.9 + __asan_backtrace_qsort@Base 4.9 __asan_backtrace_release_view@Base 4.9 __asan_backtrace_syminfo@Base 4.9 __asan_backtrace_vector_finish@Base 4.9 diff -Nru gcc-snapshot-20140321/debian/libtsan0.symbols gcc-snapshot-20140405/debian/libtsan0.symbols --- gcc-snapshot-20140321/debian/libtsan0.symbols 2014-04-05 22:42:23.000000000 +0000 +++ gcc-snapshot-20140405/debian/libtsan0.symbols 2014-04-05 22:42:40.000000000 +0000 @@ -42,6 +42,7 @@ WTFAnnotateHappensBefore@Base 4.9 _ZN11__sanitizer11CheckFailedEPKciS1_yy@Base 4.9 _ZN11__sanitizer7OnPrintEPKc@Base 4.9 + _ZN6__tsan10OnFinalizeEb@Base 4.9 _ZN6__tsan8OnReportEPKNS_10ReportDescEb@Base 4.9 _ZdaPv@Base 4.9 _ZdaPvRKSt9nothrow_t@Base 4.9 @@ -60,6 +61,7 @@ __asan_backtrace_initialize@Base 4.9 __asan_backtrace_open@Base 4.9 __asan_backtrace_pcinfo@Base 4.9 + __asan_backtrace_qsort@Base 4.9 __asan_backtrace_release_view@Base 4.9 __asan_backtrace_syminfo@Base 4.9 __asan_backtrace_vector_finish@Base 4.9 @@ -1172,6 +1174,7 @@ __tsan_atomic8_store@Base 4.9 __tsan_atomic_signal_fence@Base 4.9 __tsan_atomic_thread_fence@Base 4.9 + __tsan_default_options@Base 4.9 __tsan_func_entry@Base 4.9 __tsan_func_exit@Base 4.9 __tsan_init@Base 4.9 diff -Nru gcc-snapshot-20140321/debian/libubsan0.symbols gcc-snapshot-20140405/debian/libubsan0.symbols --- gcc-snapshot-20140321/debian/libubsan0.symbols 2014-04-05 22:42:23.000000000 +0000 +++ gcc-snapshot-20140405/debian/libubsan0.symbols 2014-04-05 22:42:40.000000000 +0000 @@ -10,6 +10,7 @@ __asan_backtrace_initialize@Base 4.9 __asan_backtrace_open@Base 4.9 __asan_backtrace_pcinfo@Base 4.9 + __asan_backtrace_qsort@Base 4.9 __asan_backtrace_release_view@Base 4.9 __asan_backtrace_syminfo@Base 4.9 __asan_backtrace_vector_finish@Base 4.9 diff -Nru gcc-snapshot-20140321/debian/patches/ada-ppc64.diff gcc-snapshot-20140405/debian/patches/ada-ppc64.diff --- gcc-snapshot-20140321/debian/patches/ada-ppc64.diff 2014-04-05 22:42:23.000000000 +0000 +++ gcc-snapshot-20140405/debian/patches/ada-ppc64.diff 2014-04-05 22:42:40.000000000 +0000 @@ -11,7 +11,7 @@ - ifeq ($(strip $(shell $(GCC_FOR_TARGET) $(GNATLIBCFLAGS) -print-multi-os-directory)),../lib64) - LIBGNAT_TARGET_PAIRS = \ - $(LIBGNAT_TARGET_PAIRS_COMMON) $(LIBGNAT_TARGET_PAIRS_64) -+ ifeq ($(strip $(filter-out powerpc64,$(arch))),) ++ ifeq ($(strip $(filter-out powerpc64 powerpc64le,$(target_cpu))),) + ifeq ($(strip $(MULTISUBDIR)),/32) + LIBGNAT_TARGET_PAIRS = \ + $(LIBGNAT_TARGET_PAIRS_COMMON) $(LIBGNAT_TARGET_PAIRS_32) diff -Nru gcc-snapshot-20140321/debian/patches/cross-install-location.diff gcc-snapshot-20140405/debian/patches/cross-install-location.diff --- gcc-snapshot-20140321/debian/patches/cross-install-location.diff 2014-04-05 22:42:23.000000000 +0000 +++ gcc-snapshot-20140405/debian/patches/cross-install-location.diff 2014-04-05 22:42:40.000000000 +0000 @@ -1,25 +1,3 @@ ---- a/src/libmudflap/Makefile.in 2012-12-08 08:32:41.301881153 +0100 -+++ b/src/libmudflap/Makefile.in 2012-12-08 08:58:29.281874520 +0100 -@@ -269,7 +269,7 @@ - @LIBMUDFLAPTH_FALSE@libmudflapth = - @LIBMUDFLAPTH_TRUE@libmudflapth = libmudflapth.la - toolexeclib_LTLIBRARIES = libmudflap.la $(libmudflapth) --libsubincludedir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)/include -+libsubincludedir = $(libdir)/gcc-cross/$(target_noncanonical)/$(gcc_version)/include - nobase_libsubinclude_HEADERS = mf-runtime.h - libmudflap_la_SOURCES = \ - mf-runtime.c \ ---- a/src/libmudflap/Makefile.am 2012-12-08 08:32:41.301881153 +0100 -+++ b/src/libmudflap/Makefile.am 2012-12-08 08:58:04.633876182 +0100 -@@ -23,7 +23,7 @@ - - toolexeclib_LTLIBRARIES = libmudflap.la $(libmudflapth) - target_noncanonical = @target_noncanonical@ --libsubincludedir = $(libdir)/gcc/$(target_noncanonical)/$(gcc_version)/include -+libsubincludedir = $(libdir)/gcc-cross/$(target_noncanonical)/$(gcc_version)/include - nobase_libsubinclude_HEADERS = mf-runtime.h - - --- a/src/fixincludes/Makefile.in 2011-01-03 21:52:22.000000000 +0100 +++ b/src/fixincludes/Makefile.in 2012-12-08 08:53:27.029874709 +0100 @@ -52,9 +52,9 @@ diff -Nru gcc-snapshot-20140321/debian/patches/gcc-base-version.diff gcc-snapshot-20140405/debian/patches/gcc-base-version.diff --- gcc-snapshot-20140321/debian/patches/gcc-base-version.diff 2014-04-05 22:42:23.000000000 +0000 +++ gcc-snapshot-20140405/debian/patches/gcc-base-version.diff 2014-04-05 22:42:40.000000000 +0000 @@ -113,7 +113,7 @@ > tmp-gcov-iov.h $(SHELL) $(srcdir)/../move-if-change tmp-gcov-iov.h gcov-iov.h $(STAMP) s-iov -@@ -2820,8 +2822,8 @@ +@@ -2797,8 +2799,8 @@ TEXI_CPPINT_FILES = cppinternals.texi gcc-common.texi gcc-vers.texi # gcc-vers.texi is generated from the version files. @@ -124,23 +124,11 @@ if [ "$(DEVPHASE_c)" = "experimental" ]; \ then echo "@set DEVELOPMENT"; \ else echo "@clear DEVELOPMENT"; \ -@@ -3237,9 +3239,11 @@ - install-driver: installdirs xgcc$(exeext) - -rm -f $(DESTDIR)$(bindir)/$(GCC_INSTALL_NAME)$(exeext) - -$(INSTALL_PROGRAM) xgcc$(exeext) $(DESTDIR)$(bindir)/$(GCC_INSTALL_NAME)$(exeext) -+ifneq ($(GCC_INSTALL_NAME),$(target_noncanonical)-gcc-$(version)) - -rm -f $(DESTDIR)$(bindir)/$(target_noncanonical)-gcc-$(version)$(exeext) - -( cd $(DESTDIR)$(bindir) && \ - $(LN) $(GCC_INSTALL_NAME)$(exeext) $(target_noncanonical)-gcc-$(version)$(exeext) ) -+endif - -if [ ! -f gcc-cross$(exeext) ] ; then \ - rm -f $(DESTDIR)$(bindir)/$(target_noncanonical)-gcc-tmp$(exeext); \ - ( cd $(DESTDIR)$(bindir) && \ Index: b/src/libjava/Makefile.am =================================================================== --- a/src/libjava/Makefile.am +++ b/src/libjava/Makefile.am -@@ -779,7 +779,7 @@ +@@ -780,7 +780,7 @@ install-data-local: $(PRE_INSTALL) ## Install the .pc file. @@ -153,7 +141,7 @@ =================================================================== --- a/src/libjava/Makefile.in +++ b/src/libjava/Makefile.in -@@ -12456,7 +12456,7 @@ +@@ -12457,7 +12457,7 @@ @BUILD_ECJ1_TRUE@ mv $(DESTDIR)$(libexecsubdir)/`echo ecjx | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'` $(DESTDIR)$(libexecsubdir)/ecj1$(host_exeext) install-data-local: $(PRE_INSTALL) diff -Nru gcc-snapshot-20140321/debian/patches/libstdc++-link-pthread.diff gcc-snapshot-20140405/debian/patches/libstdc++-link-pthread.diff --- gcc-snapshot-20140321/debian/patches/libstdc++-link-pthread.diff 2014-04-05 22:42:23.000000000 +0000 +++ gcc-snapshot-20140405/debian/patches/libstdc++-link-pthread.diff 2014-04-05 22:42:40.000000000 +0000 @@ -75,7 +75,7 @@ --- a/src/libstdc++-v3/testsuite/30_threads/condition_variable/54185.cc +++ b/src/libstdc++-v3/testsuite/30_threads/condition_variable/54185.cc @@ -1,5 +1,5 @@ - // { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-gnu* *-*-solaris* *-*-cygwin *-*-darwin* powerpc-ibm-aix* } } + // { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-gnu* *-*-solaris* *-*-cygwin *-*-darwin1[1-9]* powerpc-ibm-aix* } } -// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-gnu* powerpc-ibm-aix* } } +// { dg-options " -std=gnu++0x -pthread -Wl,--no-as-needed" { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-gnu* powerpc-ibm-aix* } } // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } } diff -Nru gcc-snapshot-20140321/debian/patches/pr60609.diff gcc-snapshot-20140405/debian/patches/pr60609.diff --- gcc-snapshot-20140321/debian/patches/pr60609.diff 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/debian/patches/pr60609.diff 2014-04-05 22:42:40.000000000 +0000 @@ -0,0 +1,289 @@ +# DP: Fix PR target/60609, proposed patch + +2014-04-02 Charles Baylis + + PR target/60609 + * config/arm/arm.h (ASM_OUTPUT_CASE_END) Remove. + (LABEL_ALIGN_AFTER_BARRIER) Align barriers which occur after + ADDR_DIFF_VEC. + +2014-04-02 Charles Baylis + + PR target/60609 + * g++.dg/torture/pr60609.C: New test. + +--- a/src/gcc/config/arm/arm.h ++++ b/src/gcc/config/arm/arm.h +@@ -2194,14 +2194,9 @@ extern int making_const_table; + #undef ASM_OUTPUT_BEFORE_CASE_LABEL + #define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE, PREFIX, NUM, TABLE) /* Empty. */ + +-/* Make sure subsequent insns are aligned after a TBB. */ +-#define ASM_OUTPUT_CASE_END(FILE, NUM, JUMPTABLE) \ +- do \ +- { \ +- if (GET_MODE (PATTERN (JUMPTABLE)) == QImode) \ +- ASM_OUTPUT_ALIGN (FILE, 1); \ +- } \ +- while (0) ++#define LABEL_ALIGN_AFTER_BARRIER(LABEL) \ ++ (GET_CODE (PATTERN (prev_active_insn (LABEL))) == ADDR_DIFF_VEC \ ++ ? 1 : 0) + + #define ARM_DECLARE_FUNCTION_NAME(STREAM, NAME, DECL) \ + do \ +--- /dev/null ++++ b/src/gcc/testsuite/g++.dg/torture/pr60609.C +@@ -0,0 +1,252 @@ ++/* { dg-do assemble } */ ++ ++class exception ++{ ++}; ++class bad_alloc:exception ++{ ++}; ++class logic_error:exception ++{ ++}; ++class domain_error:logic_error ++{ ++}; ++class invalid_argument:logic_error ++{ ++}; ++class length_error:logic_error ++{ ++}; ++class overflow_error:exception ++{ ++}; ++typedef int mpz_t[]; ++template < class > class __gmp_expr; ++template <> class __gmp_expr < mpz_t > ++{ ++ ~__gmp_expr (); ++}; ++ ++class PIP_Solution_Node; ++class internal_exception ++{ ++ ~internal_exception (); ++}; ++class not_an_integer:internal_exception ++{ ++}; ++class not_a_variable:internal_exception ++{ ++}; ++class not_an_optimization_mode:internal_exception ++{ ++}; ++class not_a_bounded_integer_type_width:internal_exception ++{ ++}; ++class not_a_bounded_integer_type_representation:internal_exception ++{ ++}; ++class not_a_bounded_integer_type_overflow:internal_exception ++{ ++}; ++class not_a_complexity_class:internal_exception ++{ ++}; ++class not_a_control_parameter_name:internal_exception ++{ ++}; ++class not_a_control_parameter_value:internal_exception ++{ ++}; ++class not_a_pip_problem_control_parameter_name:internal_exception ++{ ++}; ++class not_a_pip_problem_control_parameter_value:internal_exception ++{ ++}; ++class not_a_relation:internal_exception ++{ ++}; ++class ppl_handle_mismatch:internal_exception ++{ ++}; ++class timeout_exception ++{ ++ ~timeout_exception (); ++}; ++class deterministic_timeout_exception:timeout_exception ++{ ++}; ++void __assert_fail (const char *, const char *, int, int *) ++__attribute__ ((__noreturn__)); ++void PL_get_pointer (void *); ++int Prolog_is_address (); ++inline int ++Prolog_get_address (void **p1) ++{ ++ Prolog_is_address ()? static_cast < ++ void >(0) : __assert_fail ("Prolog_is_address", "./swi_cfli.hh", 0, 0); ++ PL_get_pointer (p1); ++ return 0; ++} ++ ++class non_linear:internal_exception ++{ ++}; ++class not_unsigned_integer:internal_exception ++{ ++}; ++class not_universe_or_empty:internal_exception ++{ ++}; ++class not_a_nil_terminated_list:internal_exception ++{ ++}; ++class PPL_integer_out_of_range ++{ ++ __gmp_expr < mpz_t > n; ++}; ++void handle_exception (); ++template < typename T > T * term_to_handle (int, const char *) ++{ ++ if (Prolog_is_address ()) ++ { ++ void *p; ++ Prolog_get_address (&p); ++ return static_cast < T * >(0); ++ } ++ throw; ++} ++ ++void ++ppl_new_MIP_Problem_from_MIP_Problem () ++try ++{ ++ term_to_handle < int >(0, "ppl_new_MIP_Problem_from_MIP_Problem/2"); ++} ++ ++catch (exception &) ++{ ++} ++ ++int ++ppl_PIP_Tree_Node_parametric_values () ++{ ++ try ++ { ++ PIP_Solution_Node *a = term_to_handle < PIP_Solution_Node > (0, 0); ++ (void)a; ++ return 1; ++ } ++ catch (internal_exception &) ++ { ++ } ++ catch (not_unsigned_integer &) ++ { ++ handle_exception (); ++ } ++ catch (non_linear &) ++ { ++ handle_exception (); ++ } ++ catch (not_a_variable &) ++ { ++ handle_exception (); ++ } ++ catch (not_an_integer &) ++ { ++ handle_exception (); ++ } ++ catch (ppl_handle_mismatch &) ++ { ++ handle_exception (); ++ } ++ catch (not_an_optimization_mode &) ++ { ++ handle_exception (); ++ } ++ catch (not_a_complexity_class &) ++ { ++ handle_exception (); ++ } ++ catch (not_a_bounded_integer_type_width &) ++ { ++ handle_exception (); ++ } ++ catch (not_a_bounded_integer_type_representation &) ++ { ++ handle_exception (); ++ } ++ catch (not_a_bounded_integer_type_overflow &) ++ { ++ handle_exception (); ++ } ++ catch (not_a_control_parameter_name &) ++ { ++ handle_exception (); ++ } ++ catch (not_a_control_parameter_value &) ++ { ++ handle_exception (); ++ } ++ catch (not_a_pip_problem_control_parameter_name &) ++ { ++ handle_exception (); ++ } ++ catch (not_a_pip_problem_control_parameter_value &) ++ { ++ handle_exception (); ++ } ++ catch (not_universe_or_empty &) ++ { ++ handle_exception (); ++ } ++ catch (not_a_relation &) ++ { ++ handle_exception (); ++ } ++ catch (not_a_nil_terminated_list &) ++ { ++ handle_exception (); ++ } ++ catch (PPL_integer_out_of_range &) ++ { ++ handle_exception (); ++ } ++ catch (int &) ++ { ++ } catch (timeout_exception &) ++ { ++ handle_exception (); ++ } catch (deterministic_timeout_exception &) ++ { ++ handle_exception (); ++ } catch (overflow_error &) ++ { ++ handle_exception (); ++ } catch (domain_error &) ++ { ++ handle_exception (); ++ } catch (length_error &) ++ { ++ handle_exception (); ++ } catch (invalid_argument &) ++ { ++ handle_exception (); ++ } catch (logic_error &) ++ { ++ handle_exception (); ++ } catch (bad_alloc &) ++ { ++ handle_exception (); ++ } catch (exception &) ++ { ++ handle_exception (); ++ } catch ( ...) ++ { ++ handle_exception (); ++ } ++ return 0; ++} diff -Nru gcc-snapshot-20140321/debian/rules2 gcc-snapshot-20140405/debian/rules2 --- gcc-snapshot-20140321/debian/rules2 2014-04-05 22:42:23.000000000 +0000 +++ gcc-snapshot-20140405/debian/rules2 2014-04-05 22:42:40.000000000 +0000 @@ -334,7 +334,7 @@ endif endif -ifneq (,$(filter $(DEB_TARGET_GNU_TYPE), x86_64-linux-gnu x86_64-kfreebsd-gnu s390x-linux-gnu)) +ifneq (,$(filter $(DEB_TARGET_GNU_TYPE), x86_64-linux-gnu x86_64-linux-gnux32 x86_64-kfreebsd-gnu s390x-linux-gnu sparc64-linux-gnuA)) ifneq ($(biarch32),yes) CONFARGS += --disable-multilib endif @@ -505,11 +505,14 @@ ifeq ($(DEB_TARGET_ARCH),amd64) CONFARGS += --with-abi=m64 endif +ifeq ($(DEB_TARGET_ARCH),x32) + CONFARGS += --with-abi=mx32 +endif ifeq ($(multilib),yes) ifneq (,$(filter $(DEB_TARGET_ARCH), amd64 i386)) CONFARGS += --with-multilib-list=m32,m64$(if $(filter yes,$(biarchx32)),$(COMMA)mx32) else ifeq ($(DEB_TARGET_ARCH),x32) - CONFARGS += --with-abi=mx32 --with-multilib-list=mx32,m64,m32 + CONFARGS += --with-multilib-list=mx32,m64,m32 endif CONFARGS += --enable-multilib endif @@ -552,8 +555,8 @@ ifeq ($(multilib),yes) ifeq ($(biarchn32)-$(biarch32),yes-yes) CONFARGS += --enable-targets=all - CONFARGS += --with-arch-64=mips64r2 --with-tune-64=loongson3a - CONFARGS += --with-arch-32=mips32 --with-tune-32=mips32r2 + CONFARGS += --with-arch-64=mips3 --with-tune-64=mips64 + CONFARGS += --with-arch-32=mips2 --with-tune-32=mips32 endif endif endif @@ -563,15 +566,15 @@ ifeq ($(multilib),yes) ifeq ($(biarchn32)-$(biarch32),yes-yes) CONFARGS += --enable-targets=all - CONFARGS += --with-arch-64=mips64r2 --with-tune-64=octeon+ - CONFARGS += --with-arch-32=mips32 --with-tune-32=mips32r2 + CONFARGS += --with-arch-64=mips3 --with-tune-64=mips64 + CONFARGS += --with-arch-32=mips2 --with-tune-32=mips32 endif endif endif ifneq (,$(findstring mips64el-linux-gnuabi64,$(DEB_TARGET_GNU_TYPE))) CONFARGS += --with-mips-plt - CONFARGS += --with-arch-64=mips64r2 --with-tune-64=loongson3a + CONFARGS += --with-arch-64=mips3 --with-tune-64=mips64 ifeq ($(multilib),yes) ifeq ($(biarchn32)-$(biarch32),yes-yes) CONFARGS += --enable-targets=all @@ -582,7 +585,7 @@ ifneq (,$(findstring mips64-linux-gnuabi64,$(DEB_TARGET_GNU_TYPE))) CONFARGS += --with-mips-plt - CONFARGS += --with-arch-64=mips64r2 --with-tune-64=octeon+ + CONFARGS += --with-arch-64=mips3 --with-tune-64=mips64 ifeq ($(multilib),yes) ifeq ($(biarchn32)-$(biarch32),yes-yes) CONFARGS += --enable-targets=all diff -Nru gcc-snapshot-20140321/debian/rules.conf gcc-snapshot-20140405/debian/rules.conf --- gcc-snapshot-20140321/debian/rules.conf 2014-04-05 22:42:23.000000000 +0000 +++ gcc-snapshot-20140405/debian/rules.conf 2014-04-05 22:42:40.000000000 +0000 @@ -373,9 +373,6 @@ endif CHECK_BUILD_DEP := dejagnu [$(check_no_archs)], -ifneq (,$(findstring gcc,$(PKGSOURCE))) - CHECK_BUILD_DEP += autogen, -endif AUTO_BUILD_DEP := m4, libtool, AUTO_BUILD_DEP += autoconf2.64, @@ -462,13 +459,13 @@ # if gnat is not present on unsupported architectures; the build scripts # will not use gnat anyway. #GNAT_BUILD_DEP := gnat (>= 4.1) [$(ada_no_archs)], - GNAT_BUILD_DEP := gnat (>= 4.1) [!arm !armhf !arm64 !powerpcspe !ppc64el !sh4 !sparc64 !hurd-i386], + GNAT_BUILD_DEP := gnat (>= 4.1) [!arm !armhf !arm64 !powerpcspe !sh4 !sparc64 !hurd-i386], endif else ifeq ($(single_package),yes) # Ditto, as part of the gcc-snapshot package. # FIXME: ad hoc dependency, better fix setting of ada_no_archs #GNAT_BUILD_DEP := gnat (>= 4.1) [$(ada_no_archs)], gcc-snapshot (>= 20090821-1) [armel armhf], - GNAT_BUILD_DEP := gnat (>= 4.1) [!arm !armhf !arm64 !powerpcspe !ppc64el !sh4 !sparc64 !hurd-i386], + GNAT_BUILD_DEP := gnat (>= 4.1) [!arm !armhf !arm64 !powerpcspe !sh4 !sparc64 !hurd-i386], else ifeq ($(PKGSOURCE),gnat-$(BASE_VERSION)) # Special source package just for gnat. Fail early if gnat is not present, # rather than waste CPU cycles and fail later. @@ -587,7 +584,6 @@ -DLIBC_BUILD_DEP="$(LIBC_BUILD_DEP)" \ -DCHECK_BUILD_DEP="$(CHECK_BUILD_DEP)" \ -DAUTO_BUILD_DEP="$(AUTO_BUILD_DEP)" \ - -DAUTOGEN_BUILD_DEP="$(AUTOGEN_BUILD_DEP)" \ -DCLOOG_BUILD_DEP="$(CLOOG_BUILD_DEP)" \ -DGMP_BUILD_DEP="$(GMP_BUILD_DEP)" \ -DMPFR_BUILD_DEP="$(MPFR_BUILD_DEP)" \ diff -Nru gcc-snapshot-20140321/debian/rules.d/binary-gcc.mk gcc-snapshot-20140405/debian/rules.d/binary-gcc.mk --- gcc-snapshot-20140321/debian/rules.d/binary-gcc.mk 2014-04-05 22:42:23.000000000 +0000 +++ gcc-snapshot-20140405/debian/rules.d/binary-gcc.mk 2014-04-05 22:42:40.000000000 +0000 @@ -36,6 +36,17 @@ $(shell test -e $(d)/$(gcc_lib_dir)/SYSCALLS.c.X \ && echo $(gcc_lib_dir)/SYSCALLS.c.X) +ifeq ($(DEB_STAGE),stage1) + files_gcc += \ + $(gcc_lib_dir)/include \ + $(shell for h in \ + README limits.h syslimits.h; \ + do \ + test -e $(d)/$(gcc_lib_dir)/include-fixed/$$h \ + && echo $(gcc_lib_dir)/include-fixed/$$h; \ + done) +endif + ifneq ($(GFDL_INVARIANT_FREE),yes) files_gcc += \ $(PF)/share/man/man1/$(cmd_prefix){gcc,gcov}$(pkg_ver).1 @@ -96,21 +107,19 @@ DH_COMPAT=2 dh_movefiles -p$(p_gcc) $(files_gcc) ifneq ($(DEB_CROSS),yes) - ln -sf gcc$(pkg_ver) \ - $(d_gcc)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-gcc$(pkg_ver) - ln -sf gcc$(pkg_ver) \ - $(d_gcc)/$(PF)/bin/$(TARGET_ALIAS)-gcc$(pkg_ver) - for i in ar ranlib nm; do \ - ln -sf gcc-$$i$(pkg_ver) \ - $(d_gcc)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-gcc-$$i$(pkg_ver); \ - ln -sf gcc-$$i$(pkg_ver) \ - $(d_gcc)/$(PF)/bin/$(TARGET_ALIAS)-gcc-$$i$(pkg_ver); \ + for i in gcc gcov gcc-ar gcc-nm gcc-ranlib; do \ + ln -sf $$i$(pkg_ver) \ + $(d_gcc)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-$$i$(pkg_ver); \ + ln -sf $$i$(pkg_ver) \ + $(d_gcc)/$(PF)/bin/$(TARGET_ALIAS)-$$i$(pkg_ver); \ done ifneq ($(GFDL_INVARIANT_FREE),yes) - ln -sf gcc$(pkg_ver).1 \ - $(d_gcc)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-gcc$(pkg_ver).1 - ln -sf gcc$(pkg_ver).1 \ - $(d_gcc)/$(PF)/share/man/man1/$(TARGET_ALIAS)-gcc$(pkg_ver).1 + for i in gcc gcov gcc-ar gcc-nm gcc-ranlib; do \ + ln -sf gcc$(pkg_ver).1 \ + $(d_gcc)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-$$i$(pkg_ver).1; \ + ln -sf $$i$(pkg_ver).1 \ + $(d_gcc)/$(PF)/share/man/man1/$(TARGET_ALIAS)-$$i$(pkg_ver).1; \ + done endif endif diff -Nru gcc-snapshot-20140321/debian/rules.d/binary-go.mk gcc-snapshot-20140405/debian/rules.d/binary-go.mk --- gcc-snapshot-20140321/debian/rules.d/binary-go.mk 2014-04-05 22:42:23.000000000 +0000 +++ gcc-snapshot-20140405/debian/rules.d/binary-go.mk 2014-04-05 22:42:40.000000000 +0000 @@ -59,6 +59,8 @@ # XXX: what about triarch mapping? files_go += \ $(PF)/bin/{cpp,gcc,gcov}$(pkg_ver) \ + $(PF)/bin/$(cmd_prefix)gcc-{ar,ranlib,nm}$(pkg_ver) \ + $(PF)/share/man/man1/$(cmd_prefix)gcc-{ar,nm,ranlib}$(pkg_ver).1 \ $(gcc_lexec_dir)/{collect2,lto1,lto-wrapper} \ $(gcc_lexec_dir)/liblto_plugin.so{,.0,.0.0.0} \ $(gcc_lib_dir)/{libgcc*,libgcov.a,*.o} \ @@ -221,6 +223,25 @@ endif endif +ifeq ($(with_standalone_go),yes) +ifneq ($(DEB_CROSS),yes) + for i in gcc gcov gcc-ar gcc-nm gcc-ranlib; do \ + ln -sf $$i$(pkg_ver) \ + $(d_go)/$(PF)/bin/$(DEB_TARGET_GNU_TYPE)-$$i$(pkg_ver); \ + ln -sf $$i$(pkg_ver) \ + $(d_go)/$(PF)/bin/$(TARGET_ALIAS)-$$i$(pkg_ver); \ + done +ifneq ($(GFDL_INVARIANT_FREE),yes) + for i in gcc gcov gcc-ar gcc-nm gcc-ranlib; do \ + ln -sf gcc$(pkg_ver).1 \ + $(d_go)/$(PF)/share/man/man1/$(DEB_TARGET_GNU_TYPE)-$$i$(pkg_ver).1; \ + ln -sf $$i$(pkg_ver).1 \ + $(d_go)/$(PF)/share/man/man1/$(TARGET_ALIAS)-$$i$(pkg_ver).1; \ + done +endif +endif +endif + debian/dh_doclink -p$(p_go) $(p_xbase) # cp -p $(srcdir)/gcc/go/ChangeLog \ diff -Nru gcc-snapshot-20140321/debian/rules.defs gcc-snapshot-20140405/debian/rules.defs --- gcc-snapshot-20140321/debian/rules.defs 2014-04-05 22:42:23.000000000 +0000 +++ gcc-snapshot-20140405/debian/rules.defs 2014-04-05 22:42:40.000000000 +0000 @@ -493,7 +493,7 @@ ada_no_systems := ada_no_cross := yes ada_no_snap := no -ifneq (,$(filter $(DEB_TARGET_ARCH),arm64 armhf m68k powerpcspe ppc64el sh4 sparc64)) +ifneq (,$(filter $(DEB_TARGET_ARCH),arm64 armhf m68k powerpcspe sh4 sparc64)) ada_no_snap := yes endif @@ -1231,7 +1231,7 @@ ifeq ($(REVERSE_CROSS),yes) with_check := disabled for reverse cross build endif -check_no_cpus := arm64 m68k +check_no_cpus := m68k check_no_systems := gnu ifneq (,$(filter $(DEB_TARGET_ARCH_CPU),$(check_no_cpus))) with_check := disabled for cpu $(DEB_TARGET_ARCH_CPU) diff -Nru gcc-snapshot-20140321/debian/rules.parameters gcc-snapshot-20140405/debian/rules.parameters --- gcc-snapshot-20140321/debian/rules.parameters 2014-04-05 22:42:23.000000000 +0000 +++ gcc-snapshot-20140405/debian/rules.parameters 2014-04-05 22:42:40.000000000 +0000 @@ -2,14 +2,14 @@ GCC_VERSION := 4.9.0 NEXT_GCC_VERSION := 4.9.1 BASE_VERSION := 4.9 -SOURCE_VERSION := 20140321-0ubuntu1 -DEB_VERSION := 20140321-0ubuntu1 -DEB_EVERSION := 1:20140321-0ubuntu1 +SOURCE_VERSION := 20140405-0ubuntu1 +DEB_VERSION := 20140405-0ubuntu1 +DEB_EVERSION := 1:20140405-0ubuntu1 DEB_GDC_VERSION := DEB_SOVERSION := 4.9 DEB_SOEVERSION := 1:4.9 DEB_LIBGCC_SOVERSION := -DEB_LIBGCC_VERSION := 1:20140321-0ubuntu1 +DEB_LIBGCC_VERSION := 1:20140405-0ubuntu1 DEB_STDCXX_SOVERSION := 4.9 DEB_GCJ_SOVERSION := 4.9 PKG_GCJ_EXT := 15 diff -Nru gcc-snapshot-20140321/debian/rules.patch gcc-snapshot-20140405/debian/rules.patch --- gcc-snapshot-20140321/debian/rules.patch 2014-04-05 22:42:23.000000000 +0000 +++ gcc-snapshot-20140405/debian/rules.patch 2014-04-05 22:42:40.000000000 +0000 @@ -115,8 +115,7 @@ ada-gcc-name \ ada-default-project-path \ ada-symbolic-tracebacks \ - ada-library-project-files-soname \ - ada-ppc64 + ada-library-project-files-soname ifeq ($(biarch64),yes) debian_patches += \ @@ -293,6 +292,10 @@ debian_patches += go-testsuite debian_patches += libstdc++-link-pthread debian_patches += fix-ffi_call_VFP-with-no-VFP-argument + +debian_patches += ada-ppc64 +debian_patches += pr60609 + series_stamp = $(stampdir)/02-series-stamp series: $(series_stamp) $(series_stamp): Binary files /tmp/pQ9K4o_D3z/gcc-snapshot-20140321/gcc-20140321.tar.xz and /tmp/yqhkQp9JSg/gcc-snapshot-20140405/gcc-20140321.tar.xz differ Binary files /tmp/pQ9K4o_D3z/gcc-snapshot-20140321/gcc-20140405.tar.xz and /tmp/yqhkQp9JSg/gcc-snapshot-20140405/gcc-20140405.tar.xz differ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/ChangeLog gcc-snapshot-20140405/=unpacked-tar1=/ChangeLog --- gcc-snapshot-20140321/=unpacked-tar1=/ChangeLog 2014-03-21 17:14:27.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/ChangeLog 2014-04-05 08:48:42.000000000 +0000 @@ -1,3 +1,28 @@ +2014-04-04 Eric Botcazou + + PR bootstrap/60620 + * Makefile.def (dependencies): Make gnattools depend on libstdc++-v3. + * Makefile.in: Regenerate. + +2014-03-28 Yaakov Selkowitz + + * Makefile.def (dependencies): Make all-ld depend on all-binutils + for WINDRES_FOR_TARGET in default-manifest.o rule. + * Makefile.in: Regenerate. + +2014-03-26 Dominique d'Humieres + + * MAINTAINERS (Write After Approval): Add myself. + +2014-03-26 Jakub Jelinek + + PR sanitizer/56781 + * Makefile.def: Set bootstrap=true; for host fixincludes. + * configure.ac: Don't bootstrap host fixincludes unless + --with-build-config=bootstrap-{a,ub}san. + * Makefile.in: Regenerated. + * configure: Regenerated. + 2014-03-21 Jakub Jelinek * configure.ac: Move BUILD_CONFIG set up earlier. Add diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/configure gcc-snapshot-20140405/=unpacked-tar1=/configure --- gcc-snapshot-20140321/=unpacked-tar1=/configure 2014-03-21 17:14:27.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/configure 2014-03-27 17:33:34.000000000 +0000 @@ -7163,6 +7163,7 @@ # build configuration in Makefile. target_configdirs=`echo "${target_configdirs}" | sed -e 's/target-//g'` build_configdirs=`echo "${build_configdirs}" | sed -e 's/build-//g'` +bootstrap_fixincludes=no # If we are building libgomp, bootstrap it. if echo " ${target_configdirs} " | grep " libgomp " > /dev/null 2>&1 ; then @@ -7175,6 +7176,7 @@ case "$BUILD_CONFIG" in *bootstrap-asan* | *bootstrap-ubsan* ) bootstrap_target_libs=${bootstrap_target_libs}target-libsanitizer, + bootstrap_fixincludes=yes ;; esac fi @@ -7257,11 +7259,15 @@ fi done fi + case ${module},${bootstrap_fixincludes} in + fixincludes,no) host_bootstrap_suffix=no-bootstrap ;; + *) host_bootstrap_suffix=$bootstrap_suffix ;; + esac extrasub_host="$extrasub_host /^@if $module\$/d /^@endif $module\$/d -/^@if $module-$bootstrap_suffix\$/d -/^@endif $module-$bootstrap_suffix\$/d" +/^@if $module-$host_bootstrap_suffix\$/d +/^@endif $module-$host_bootstrap_suffix\$/d" done extrasub_target= for module in ${target_configdirs} ; do diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/configure.ac gcc-snapshot-20140405/=unpacked-tar1=/configure.ac --- gcc-snapshot-20140321/=unpacked-tar1=/configure.ac 2014-03-21 17:14:27.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/configure.ac 2014-03-27 17:33:34.000000000 +0000 @@ -2532,6 +2532,7 @@ # build configuration in Makefile. target_configdirs=`echo "${target_configdirs}" | sed -e 's/target-//g'` build_configdirs=`echo "${build_configdirs}" | sed -e 's/build-//g'` +bootstrap_fixincludes=no # If we are building libgomp, bootstrap it. if echo " ${target_configdirs} " | grep " libgomp " > /dev/null 2>&1 ; then @@ -2544,6 +2545,7 @@ case "$BUILD_CONFIG" in *bootstrap-asan* | *bootstrap-ubsan* ) bootstrap_target_libs=${bootstrap_target_libs}target-libsanitizer, + bootstrap_fixincludes=yes ;; esac fi @@ -2626,11 +2628,15 @@ fi done fi + case ${module},${bootstrap_fixincludes} in + fixincludes,no) host_bootstrap_suffix=no-bootstrap ;; + *) host_bootstrap_suffix=$bootstrap_suffix ;; + esac extrasub_host="$extrasub_host /^@if $module\$/d /^@endif $module\$/d -/^@if $module-$bootstrap_suffix\$/d -/^@endif $module-$bootstrap_suffix\$/d" +/^@if $module-$host_bootstrap_suffix\$/d +/^@endif $module-$host_bootstrap_suffix\$/d" done extrasub_target= for module in ${target_configdirs} ; do diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/ada/ChangeLog gcc-snapshot-20140405/=unpacked-tar1=/gcc/ada/ChangeLog --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/ada/ChangeLog 2014-03-20 10:50:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/ada/ChangeLog 2014-03-31 14:27:29.000000000 +0000 @@ -1,3 +1,17 @@ +2014-03-30 Eric Botcazou + + PR ada/60703 + * system-linux-alpha.ads: Adjust for Ada 2005. + * system-linux-mips.ads: Likewise. + * system-linux-mips64el.ads: Likewise. + * system-linux-mipsel.ads: Likewise. + * system-linux-s390.ads: Likewise. + * system-linux-s390x.ads: Likewise. + * system-linux-sparc.ads: Likewise. + * system-linux-sparcv9.ads: Likewise. + * system-rtems.ads: Likewise. + * system-vxworks-arm.ads: Likewise. + 2014-03-16 Andreas Schwab PR ada/39172 diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/ada/system-linux-alpha.ads gcc-snapshot-20140405/=unpacked-tar1=/gcc/ada/system-linux-alpha.ads --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/ada/system-linux-alpha.ads 2013-02-25 13:51:27.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/ada/system-linux-alpha.ads 2014-03-31 14:27:29.000000000 +0000 @@ -7,7 +7,7 @@ -- S p e c -- -- (GNU-Linux/alpha Version) -- -- -- --- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2014, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -35,9 +35,10 @@ ------------------------------------------------------------------------------ package System is -pragma Pure (System); --- Note that we take advantage of the implementation permission to --- make this unit Pure instead of Preelaborable, see RM 13.7(36) + pragma Pure; + -- Note that we take advantage of the implementation permission to make + -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada + -- 2005, this is Pure in any case (AI-362). type Name is (SYSTEM_NAME_GNAT); System_Name : constant Name := SYSTEM_NAME_GNAT; @@ -61,6 +62,7 @@ -- Storage-related Declarations type Address is private; + pragma Preelaborable_Initialization (Address); Null_Address : constant Address; Storage_Unit : constant := 8; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/ada/system-linux-mips64el.ads gcc-snapshot-20140405/=unpacked-tar1=/gcc/ada/system-linux-mips64el.ads --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/ada/system-linux-mips64el.ads 2013-02-25 13:51:27.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/ada/system-linux-mips64el.ads 2014-03-31 14:27:29.000000000 +0000 @@ -7,7 +7,7 @@ -- S p e c -- -- (GNU-Linux/MIPS64EL Version) -- -- -- --- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2014, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -62,6 +62,7 @@ -- Storage-related Declarations type Address is private; + pragma Preelaborable_Initialization (Address); Null_Address : constant Address; Storage_Unit : constant := 8; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/ada/system-linux-mips.ads gcc-snapshot-20140405/=unpacked-tar1=/gcc/ada/system-linux-mips.ads --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/ada/system-linux-mips.ads 2013-02-25 13:51:27.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/ada/system-linux-mips.ads 2014-03-31 14:27:29.000000000 +0000 @@ -7,7 +7,7 @@ -- S p e c -- -- (GNU-Linux/MIPS Version) -- -- -- --- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2014, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -62,6 +62,7 @@ -- Storage-related Declarations type Address is private; + pragma Preelaborable_Initialization (Address); Null_Address : constant Address; Storage_Unit : constant := 8; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/ada/system-linux-mipsel.ads gcc-snapshot-20140405/=unpacked-tar1=/gcc/ada/system-linux-mipsel.ads --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/ada/system-linux-mipsel.ads 2013-02-25 13:51:27.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/ada/system-linux-mipsel.ads 2014-03-31 14:27:29.000000000 +0000 @@ -7,7 +7,7 @@ -- S p e c -- -- (GNU-Linux/MIPSEL Version) -- -- -- --- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2014, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -62,6 +62,7 @@ -- Storage-related Declarations type Address is private; + pragma Preelaborable_Initialization (Address); Null_Address : constant Address; Storage_Unit : constant := 8; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/ada/system-linux-s390.ads gcc-snapshot-20140405/=unpacked-tar1=/gcc/ada/system-linux-s390.ads --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/ada/system-linux-s390.ads 2013-02-25 13:51:27.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/ada/system-linux-s390.ads 2014-03-31 14:27:29.000000000 +0000 @@ -7,7 +7,7 @@ -- S p e c -- -- (GNU-Linux/s390 Version) -- -- -- --- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2014, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -35,9 +35,10 @@ ------------------------------------------------------------------------------ package System is -pragma Pure (System); --- Note that we take advantage of the implementation permission to --- make this unit Pure instead of Preelaborable, see RM 13.7(36) + pragma Pure; + -- Note that we take advantage of the implementation permission to make + -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada + -- 2005, this is Pure in any case (AI-362). type Name is (SYSTEM_NAME_GNAT); System_Name : constant Name := SYSTEM_NAME_GNAT; @@ -61,6 +62,7 @@ -- Storage-related Declarations type Address is private; + pragma Preelaborable_Initialization (Address); Null_Address : constant Address; Storage_Unit : constant := 8; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/ada/system-linux-s390x.ads gcc-snapshot-20140405/=unpacked-tar1=/gcc/ada/system-linux-s390x.ads --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/ada/system-linux-s390x.ads 2013-02-25 13:51:27.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/ada/system-linux-s390x.ads 2014-03-31 14:27:29.000000000 +0000 @@ -7,7 +7,7 @@ -- S p e c -- -- (GNU-Linux/s390x Version) -- -- -- --- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2014, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -35,9 +35,10 @@ ------------------------------------------------------------------------------ package System is -pragma Pure (System); --- Note that we take advantage of the implementation permission to --- make this unit Pure instead of Preelaborable, see RM 13.7(36) + pragma Pure; + -- Note that we take advantage of the implementation permission to make + -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada + -- 2005, this is Pure in any case (AI-362). type Name is (SYSTEM_NAME_GNAT); System_Name : constant Name := SYSTEM_NAME_GNAT; @@ -61,6 +62,7 @@ -- Storage-related Declarations type Address is private; + pragma Preelaborable_Initialization (Address); Null_Address : constant Address; Storage_Unit : constant := 8; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/ada/system-linux-sparc.ads gcc-snapshot-20140405/=unpacked-tar1=/gcc/ada/system-linux-sparc.ads --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/ada/system-linux-sparc.ads 2013-02-25 13:51:27.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/ada/system-linux-sparc.ads 2014-03-31 14:27:29.000000000 +0000 @@ -7,7 +7,7 @@ -- S p e c -- -- (GNU/Linux-SPARC Version) -- -- -- --- Copyright (C) 1992-2012, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2014, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -35,9 +35,10 @@ ------------------------------------------------------------------------------ package System is -pragma Pure (System); --- Note that we take advantage of the implementation permission to --- make this unit Pure instead of Preelaborable, see RM 13.7(36) + pragma Pure; + -- Note that we take advantage of the implementation permission to make + -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada + -- 2005, this is Pure in any case (AI-362). type Name is (SYSTEM_NAME_GNAT); System_Name : constant Name := SYSTEM_NAME_GNAT; @@ -61,6 +62,7 @@ -- Storage-related Declarations type Address is private; + pragma Preelaborable_Initialization (Address); Null_Address : constant Address; Storage_Unit : constant := 8; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/ada/system-linux-sparcv9.ads gcc-snapshot-20140405/=unpacked-tar1=/gcc/ada/system-linux-sparcv9.ads --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/ada/system-linux-sparcv9.ads 2013-02-25 13:51:27.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/ada/system-linux-sparcv9.ads 2014-03-31 14:27:29.000000000 +0000 @@ -7,7 +7,7 @@ -- S p e c -- -- (GNU/Linux-SPARCV9 Version) -- -- -- --- Copyright (C) 1992-2011, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2014, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -35,9 +35,10 @@ ------------------------------------------------------------------------------ package System is -pragma Pure (System); --- Note that we take advantage of the implementation permission to --- make this unit Pure instead of Preelaborable, see RM 13.7(36) + pragma Pure; + -- Note that we take advantage of the implementation permission to make + -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada + -- 2005, this is Pure in any case (AI-362). type Name is (SYSTEM_NAME_GNAT); System_Name : constant Name := SYSTEM_NAME_GNAT; @@ -61,6 +62,7 @@ -- Storage-related Declarations type Address is private; + pragma Preelaborable_Initialization (Address); Null_Address : constant Address; Storage_Unit : constant := 8; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/ada/system-rtems.ads gcc-snapshot-20140405/=unpacked-tar1=/gcc/ada/system-rtems.ads --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/ada/system-rtems.ads 2013-02-25 13:51:27.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/ada/system-rtems.ads 2014-03-31 14:27:29.000000000 +0000 @@ -7,7 +7,7 @@ -- S p e c -- -- (Compiler Version) -- -- -- --- Copyright (C) 1992-2011 Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2014 Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -34,9 +34,8 @@ -- -- ------------------------------------------------------------------------------ --- This version of System is a RTEMS version that is used in building --- the compiler. This is based as closely as possible on the generic --- version with the following exceptions: +-- This version is for RTEMS. It is based as closely as possible on the +-- generic version with the following exceptions: -- + priority definitions package System is @@ -67,6 +66,7 @@ -- Storage-related Declarations type Address is private; + pragma Preelaborable_Initialization (Address); Null_Address : constant Address; Storage_Unit : constant := Standard'Storage_Unit; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/ada/system-vxworks-arm.ads gcc-snapshot-20140405/=unpacked-tar1=/gcc/ada/system-vxworks-arm.ads --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/ada/system-vxworks-arm.ads 2013-10-14 20:16:50.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/ada/system-vxworks-arm.ads 2014-03-31 14:27:29.000000000 +0000 @@ -7,7 +7,7 @@ -- S p e c -- -- (VxWorks Version ARM) -- -- -- --- Copyright (C) 1992-2013, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2014, Free Software Foundation, Inc. -- -- -- -- This specification is derived from the Ada Reference Manual for use with -- -- GNAT. The copyright notice above, and the license provisions that follow -- @@ -35,10 +35,10 @@ ------------------------------------------------------------------------------ package System is -pragma Pure (System); --- Note that we take advantage of the implementation permission to make this --- unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada 2005, this is --- Pure in any case (AI-362). + pragma Pure; + -- Note that we take advantage of the implementation permission to make + -- this unit Pure instead of Preelaborable; see RM 13.7.1(15). In Ada + -- 2005, this is Pure in any case (AI-362). type Name is (SYSTEM_NAME_GNAT); System_Name : constant Name := SYSTEM_NAME_GNAT; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/bb-reorder.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/bb-reorder.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/bb-reorder.c 2014-01-20 11:15:29.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/bb-reorder.c 2014-03-26 08:19:16.000000000 +0000 @@ -1826,9 +1826,8 @@ edge e; edge_iterator ei; - /* Find EDGE_CAN_FALLTHRU edge. */ FOR_EACH_EDGE (e, ei, cur_bb->succs) - if (e->flags & EDGE_CAN_FALLTHRU) + if (e->flags & EDGE_FALLTHRU) { fall_thru = e; break; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/c/c-decl.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/c/c-decl.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/c/c-decl.c 2014-03-07 09:59:28.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/c/c-decl.c 2014-03-28 19:04:53.000000000 +0000 @@ -4568,8 +4568,8 @@ cleanup = build_unary_op (input_location, ADDR_EXPR, decl, 0); vec_alloc (v, 1); v->quick_push (cleanup); - cleanup = build_function_call_vec (DECL_SOURCE_LOCATION (decl), - vNULL, cleanup_decl, v, NULL); + cleanup = c_build_function_call_vec (DECL_SOURCE_LOCATION (decl), + vNULL, cleanup_decl, v, NULL); vec_free (v); /* Don't warn about decl unused; the cleanup uses it. */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/c/ChangeLog gcc-snapshot-20140405/=unpacked-tar1=/gcc/c/ChangeLog --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/c/ChangeLog 2014-03-20 10:50:12.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/c/ChangeLog 2014-03-28 19:04:53.000000000 +0000 @@ -1,3 +1,16 @@ +2014-03-28 Jakub Jelinek + + PR c++/60689 + * c-tree.h (c_build_function_call_vec): New prototype. + * c-typeck.c (build_function_call_vec): Don't call + resolve_overloaded_builtin here. + (c_build_function_call_vec): New wrapper function around + build_function_call_vec. Call resolve_overloaded_builtin here. + (convert_lvalue_to_rvalue, build_function_call, build_atomic_assign): + Call c_build_function_call_vec instead of build_function_call_vec. + * c-parser.c (c_parser_postfix_expression_after_primary): Likewise. + * c-decl.c (finish_decl): Likewise. + 2014-03-18 Manuel López-Ibáñez PR c/55383 diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/c/c-parser.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/c/c-parser.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/c/c-parser.c 2014-02-21 09:32:56.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/c/c-parser.c 2014-03-28 19:04:53.000000000 +0000 @@ -7703,8 +7703,9 @@ expr.value, exprlist, sizeof_arg, sizeof_ptr_memacc_comptypes); - expr.value = build_function_call_vec (expr_loc, arg_loc, expr.value, - exprlist, origtypes); + expr.value + = c_build_function_call_vec (expr_loc, arg_loc, expr.value, + exprlist, origtypes); expr.original_code = ERROR_MARK; if (TREE_CODE (expr.value) == INTEGER_CST && TREE_CODE (orig_expr.value) == FUNCTION_DECL diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/c/c-tree.h gcc-snapshot-20140405/=unpacked-tar1=/gcc/c/c-tree.h --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/c/c-tree.h 2014-02-09 10:14:56.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/c/c-tree.h 2014-03-28 19:04:53.000000000 +0000 @@ -643,6 +643,8 @@ extern tree c_build_va_arg (location_t, tree, tree); extern tree c_finish_transaction (location_t, tree, int); extern bool c_tree_equal (tree, tree); +extern tree c_build_function_call_vec (location_t, vec, tree, + vec *, vec *); /* Set to 0 at beginning of a function definition, set to 1 if a return statement that specifies a return value is seen. */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/c/c-typeck.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/c/c-typeck.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/c/c-typeck.c 2014-03-20 10:50:12.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/c/c-typeck.c 2014-03-28 19:04:53.000000000 +0000 @@ -2016,7 +2016,7 @@ params->quick_push (expr_addr); params->quick_push (tmp_addr); params->quick_push (seq_cst); - func_call = build_function_call_vec (loc, vNULL, fndecl, params, NULL); + func_call = c_build_function_call_vec (loc, vNULL, fndecl, params, NULL); /* EXPR is always read. */ mark_exp_read (exp.value); @@ -2801,7 +2801,7 @@ vec_alloc (v, list_length (params)); for (; params; params = TREE_CHAIN (params)) v->quick_push (TREE_VALUE (params)); - ret = build_function_call_vec (loc, vNULL, function, v, NULL); + ret = c_build_function_call_vec (loc, vNULL, function, v, NULL); vec_free (v); return ret; } @@ -2840,14 +2840,6 @@ /* Convert anything with function type to a pointer-to-function. */ if (TREE_CODE (function) == FUNCTION_DECL) { - /* Implement type-directed function overloading for builtins. - resolve_overloaded_builtin and targetm.resolve_overloaded_builtin - handle all the type checking. The result is a complete expression - that implements this function call. */ - tem = resolve_overloaded_builtin (loc, function, params); - if (tem) - return tem; - name = DECL_NAME (function); if (flag_tm) @@ -2970,6 +2962,30 @@ } return require_complete_type (result); } + +/* Like build_function_call_vec, but call also resolve_overloaded_builtin. */ + +tree +c_build_function_call_vec (location_t loc, vec arg_loc, + tree function, vec *params, + vec *origtypes) +{ + /* Strip NON_LVALUE_EXPRs, etc., since we aren't using as an lvalue. */ + STRIP_TYPE_NOPS (function); + + /* Convert anything with function type to a pointer-to-function. */ + if (TREE_CODE (function) == FUNCTION_DECL) + { + /* Implement type-directed function overloading for builtins. + resolve_overloaded_builtin and targetm.resolve_overloaded_builtin + handle all the type checking. The result is a complete expression + that implements this function call. */ + tree tem = resolve_overloaded_builtin (loc, function, params); + if (tem) + return tem; + } + return build_function_call_vec (loc, arg_loc, function, params, origtypes); +} /* Convert the argument expressions in the vector VALUES to the types in the list TYPELIST. @@ -3634,7 +3650,7 @@ params->quick_push (lhs_addr); params->quick_push (rhs); params->quick_push (seq_cst); - func_call = build_function_call_vec (loc, vNULL, fndecl, params, NULL); + func_call = c_build_function_call_vec (loc, vNULL, fndecl, params, NULL); add_stmt (func_call); /* Finish the compound statement. */ @@ -3666,7 +3682,7 @@ params->quick_push (lhs_addr); params->quick_push (old_addr); params->quick_push (seq_cst); - func_call = build_function_call_vec (loc, vNULL, fndecl, params, NULL); + func_call = c_build_function_call_vec (loc, vNULL, fndecl, params, NULL); add_stmt (func_call); params->truncate (0); @@ -3705,7 +3721,7 @@ params->quick_push (integer_zero_node); params->quick_push (seq_cst); params->quick_push (seq_cst); - func_call = build_function_call_vec (loc, vNULL, fndecl, params, NULL); + func_call = c_build_function_call_vec (loc, vNULL, fndecl, params, NULL); goto_stmt = build1 (GOTO_EXPR, void_type_node, done_decl); SET_EXPR_LOCATION (goto_stmt, loc); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/c-family/c-common.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/c-family/c-common.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/c-family/c-common.c 2014-02-28 00:03:07.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/c-family/c-common.c 2014-03-28 19:04:53.000000000 +0000 @@ -10453,6 +10453,7 @@ len = params->length (); vec_alloc (v, len + 1); + v->quick_push (build_int_cst (size_type_node, n)); for (z = 0; z < len; z++) v->quick_push ((*params)[z]); f = build_function_call_vec (loc, vNULL, function, v, NULL); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/c-family/c-common.h gcc-snapshot-20140405/=unpacked-tar1=/gcc/c-family/c-common.h --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/c-family/c-common.h 2014-03-06 14:11:07.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/c-family/c-common.h 2014-04-02 14:02:38.000000000 +0000 @@ -928,8 +928,6 @@ extern bool vector_types_convertible_p (const_tree t1, const_tree t2, bool emit_lax_note); extern tree c_build_vec_perm_expr (location_t, tree, tree, tree, bool = true); -extern rtx c_expand_expr (tree, rtx, enum machine_mode, int, rtx *); - extern void init_c_lex (void); extern void c_cpp_builtins (cpp_reader *); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/c-family/ChangeLog gcc-snapshot-20140405/=unpacked-tar1=/gcc/c-family/ChangeLog --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/c-family/ChangeLog 2014-03-20 10:50:12.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/c-family/ChangeLog 2014-04-03 16:42:11.000000000 +0000 @@ -1,3 +1,29 @@ +2014-04-03 Nathan Sidwell + + * c.opt (Wnon-virtual-dtor): Auto set when Weffc++. + +2014-04-02 Marek Polacek + + * c-common.h (c_expand_expr): Remove declaration. + +2014-03-28 Jakub Jelinek + + PR c++/60689 + * c-common.c (add_atomic_size_parameter): When creating new + params vector, push the size argument first. + +2014-03-26 Jakub Jelinek + + * c-ubsan.c (ubsan_instrument_division, ubsan_instrument_shift, + ubsan_instrument_vla, ubsan_instrument_return): Adjust + ubsan_create_data callers. + +2014-03-22 Jakub Jelinek + + PR debug/60603 + * c-opts.c (c_finish_options): Restore cb_file_change call to + . + 2014-03-13 Jakub Jelinek PR middle-end/36282 diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/c-family/c.opt gcc-snapshot-20140405/=unpacked-tar1=/gcc/c-family/c.opt --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/c-family/c.opt 2014-03-20 10:50:12.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/c-family/c.opt 2014-04-03 16:42:11.000000000 +0000 @@ -569,7 +569,7 @@ Warn when non-templatized friend functions are declared within a template Wnon-virtual-dtor -C++ ObjC++ Var(warn_nonvdtor) Warning +C++ ObjC++ Var(warn_nonvdtor) Warning LangEnabledBy(C++ ObjC++,Weffc++) Warn about non-virtual destructors Wnonnull diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/c-family/c-opts.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/c-family/c-opts.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/c-family/c-opts.c 2014-03-20 10:50:12.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/c-family/c-opts.c 2014-03-22 12:09:05.000000000 +0000 @@ -1274,17 +1274,18 @@ { size_t i; - { - /* Make sure all of the builtins about to be declared have - BUILTINS_LOCATION has their source_location. */ - source_location builtins_loc = BUILTINS_LOCATION; - cpp_force_token_locations (parse_in, &builtins_loc); + cb_file_change (parse_in, + linemap_add (line_table, LC_RENAME, 0, + _(""), 0)); + /* Make sure all of the builtins about to be declared have + BUILTINS_LOCATION has their source_location. */ + source_location builtins_loc = BUILTINS_LOCATION; + cpp_force_token_locations (parse_in, &builtins_loc); - cpp_init_builtins (parse_in, flag_hosted); - c_cpp_builtins (parse_in); + cpp_init_builtins (parse_in, flag_hosted); + c_cpp_builtins (parse_in); - cpp_stop_forcing_token_locations (parse_in); - } + cpp_stop_forcing_token_locations (parse_in); /* We're about to send user input to cpplib, so make it warn for things that we previously (when we sent it internal definitions) diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/c-family/c-ubsan.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/c-family/c-ubsan.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/c-family/c-ubsan.c 2014-01-05 19:58:09.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/c-family/c-ubsan.c 2014-03-27 17:33:34.000000000 +0000 @@ -73,7 +73,7 @@ make sure it gets evaluated before the condition. */ t = fold_build2 (COMPOUND_EXPR, TREE_TYPE (t), op0, t); tree data = ubsan_create_data ("__ubsan_overflow_data", - loc, NULL, + &loc, NULL, ubsan_type_descriptor (type, false), NULL_TREE); data = build_fold_addr_expr_loc (loc, data); @@ -142,7 +142,7 @@ make sure it gets evaluated before the condition. */ t = fold_build2 (COMPOUND_EXPR, TREE_TYPE (t), op0, t); tree data = ubsan_create_data ("__ubsan_shift_data", - loc, NULL, + &loc, NULL, ubsan_type_descriptor (type0, false), ubsan_type_descriptor (type1, false), NULL_TREE); @@ -169,7 +169,7 @@ t = fold_build2 (LE_EXPR, boolean_type_node, size, build_int_cst (type, 0)); tree data = ubsan_create_data ("__ubsan_vla_data", - loc, NULL, + &loc, NULL, ubsan_type_descriptor (type, false), NULL_TREE); data = build_fold_addr_expr_loc (loc, data); @@ -185,7 +185,7 @@ tree ubsan_instrument_return (location_t loc) { - tree data = ubsan_create_data ("__ubsan_missing_return_data", loc, + tree data = ubsan_create_data ("__ubsan_missing_return_data", &loc, NULL, NULL_TREE); tree t = builtin_decl_explicit (BUILT_IN_UBSAN_HANDLE_MISSING_RETURN); return build_call_expr_loc (loc, t, 1, build_fold_addr_expr_loc (loc, data)); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cgraph.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/cgraph.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cgraph.c 2014-03-21 17:14:27.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cgraph.c 2014-04-04 14:53:38.000000000 +0000 @@ -61,6 +61,8 @@ #include "ipa-inline.h" #include "cfgloop.h" #include "gimple-pretty-print.h" +#include "expr.h" +#include "tree-dfa.h" /* FIXME: Only for PROP_loops, but cgraph shouldn't have to know about this. */ #include "tree-pass.h" @@ -1329,6 +1331,7 @@ cgraph_redirect_edge_call_stmt_to_callee (struct cgraph_edge *e) { tree decl = gimple_call_fndecl (e->call_stmt); + tree lhs = gimple_call_lhs (e->call_stmt); gimple new_stmt; gimple_stmt_iterator gsi; #ifdef ENABLE_CHECKING @@ -1471,6 +1474,31 @@ update_stmt_fn (DECL_STRUCT_FUNCTION (e->caller->decl), new_stmt); } + /* If the call becomes noreturn, remove the lhs. */ + if (lhs && (gimple_call_flags (new_stmt) & ECF_NORETURN)) + { + if (TREE_CODE (lhs) == SSA_NAME) + { + tree var = create_tmp_reg_fn (DECL_STRUCT_FUNCTION (e->caller->decl), + TREE_TYPE (lhs), NULL); + var = get_or_create_ssa_default_def + (DECL_STRUCT_FUNCTION (e->caller->decl), var); + gimple set_stmt = gimple_build_assign (lhs, var); + gsi = gsi_for_stmt (new_stmt); + gsi_insert_before_without_update (&gsi, set_stmt, GSI_SAME_STMT); + update_stmt_fn (DECL_STRUCT_FUNCTION (e->caller->decl), set_stmt); + } + gimple_call_set_lhs (new_stmt, NULL_TREE); + update_stmt_fn (DECL_STRUCT_FUNCTION (e->caller->decl), new_stmt); + } + + /* If new callee has no static chain, remove it. */ + if (gimple_call_chain (new_stmt) && !DECL_STATIC_CHAIN (e->callee->decl)) + { + gimple_call_set_chain (new_stmt, NULL); + update_stmt_fn (DECL_STRUCT_FUNCTION (e->caller->decl), new_stmt); + } + cgraph_set_call_stmt_including_clones (e->caller, e->call_stmt, new_stmt, false); if (cgraph_dump_file) @@ -2516,12 +2544,34 @@ return redirect_callers; } -/* Return TRUE if NODE2 is equivalent to NODE or its clone. */ +/* Return TRUE if NODE2 a clone of NODE or is equivalent to it. */ + static bool clone_of_p (struct cgraph_node *node, struct cgraph_node *node2) { + bool skipped_thunk = false; node = cgraph_function_or_thunk_node (node, NULL); node2 = cgraph_function_or_thunk_node (node2, NULL); + + /* There are no virtual clones of thunks so check former_clone_of or if we + might have skipped thunks because this adjustments are no longer + necessary. */ + while (node->thunk.thunk_p) + { + if (node2->former_clone_of == node->decl) + return true; + if (!node->thunk.this_adjusting) + return false; + node = cgraph_function_or_thunk_node (node->callees->callee, NULL); + 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; + while (node != node2 && node2) node2 = node2->clone_of; return node2 != NULL; @@ -2612,13 +2662,17 @@ || node->in_other_partition || e->callee->in_other_partition) return false; + + /* Optimizers can redirect unreachable calls or calls triggering undefined + behaviour to builtin_unreachable. */ + if (DECL_BUILT_IN_CLASS (e->callee->decl) == BUILT_IN_NORMAL + && DECL_FUNCTION_CODE (e->callee->decl) == BUILT_IN_UNREACHABLE) + return false; node = cgraph_function_or_thunk_node (node, NULL); if (e->callee->former_clone_of != node->decl - /* IPA-CP sometimes redirect edge to clone and then back to the former - function. This ping-pong has to go, eventually. */ && (node != cgraph_function_or_thunk_node (e->callee, NULL)) - && !clone_of_p (cgraph_function_or_thunk_node (node, NULL), e->callee)) + && !clone_of_p (node, e->callee)) return true; else return false; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cgraphclones.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/cgraphclones.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cgraphclones.c 2014-02-05 09:15:43.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cgraphclones.c 2014-04-04 14:53:38.000000000 +0000 @@ -168,6 +168,212 @@ return new_edge; } +/* Build variant of function type ORIG_TYPE skipping ARGS_TO_SKIP and the + return value if SKIP_RETURN is true. */ + +static tree +build_function_type_skip_args (tree orig_type, bitmap args_to_skip, + bool skip_return) +{ + tree new_type = NULL; + tree args, new_args = NULL, t; + tree new_reversed; + int i = 0; + + for (args = TYPE_ARG_TYPES (orig_type); args && args != void_list_node; + args = TREE_CHAIN (args), i++) + if (!args_to_skip || !bitmap_bit_p (args_to_skip, i)) + new_args = tree_cons (NULL_TREE, TREE_VALUE (args), new_args); + + new_reversed = nreverse (new_args); + if (args) + { + if (new_reversed) + TREE_CHAIN (new_args) = void_list_node; + else + new_reversed = void_list_node; + } + + /* Use copy_node to preserve as much as possible from original type + (debug info, attribute lists etc.) + Exception is METHOD_TYPEs must have THIS argument. + When we are asked to remove it, we need to build new FUNCTION_TYPE + instead. */ + if (TREE_CODE (orig_type) != METHOD_TYPE + || !args_to_skip + || !bitmap_bit_p (args_to_skip, 0)) + { + new_type = build_distinct_type_copy (orig_type); + TYPE_ARG_TYPES (new_type) = new_reversed; + } + else + { + new_type + = build_distinct_type_copy (build_function_type (TREE_TYPE (orig_type), + new_reversed)); + TYPE_CONTEXT (new_type) = TYPE_CONTEXT (orig_type); + } + + if (skip_return) + TREE_TYPE (new_type) = void_type_node; + + /* This is a new type, not a copy of an old type. Need to reassociate + variants. We can handle everything except the main variant lazily. */ + t = TYPE_MAIN_VARIANT (orig_type); + if (t != orig_type) + { + t = build_function_type_skip_args (t, args_to_skip, skip_return); + TYPE_MAIN_VARIANT (new_type) = t; + TYPE_NEXT_VARIANT (new_type) = TYPE_NEXT_VARIANT (t); + TYPE_NEXT_VARIANT (t) = new_type; + } + else + { + TYPE_MAIN_VARIANT (new_type) = new_type; + TYPE_NEXT_VARIANT (new_type) = NULL; + } + + return new_type; +} + +/* Build variant of function decl ORIG_DECL skipping ARGS_TO_SKIP and the + return value if SKIP_RETURN is true. + + Arguments from DECL_ARGUMENTS list can't be removed now, since they are + linked by TREE_CHAIN directly. The caller is responsible for eliminating + them when they are being duplicated (i.e. copy_arguments_for_versioning). */ + +static tree +build_function_decl_skip_args (tree orig_decl, bitmap args_to_skip, + bool skip_return) +{ + tree new_decl = copy_node (orig_decl); + tree new_type; + + new_type = TREE_TYPE (orig_decl); + if (prototype_p (new_type) + || (skip_return && !VOID_TYPE_P (TREE_TYPE (new_type)))) + new_type + = build_function_type_skip_args (new_type, args_to_skip, skip_return); + TREE_TYPE (new_decl) = new_type; + + /* For declarations setting DECL_VINDEX (i.e. methods) + we expect first argument to be THIS pointer. */ + if (args_to_skip && bitmap_bit_p (args_to_skip, 0)) + DECL_VINDEX (new_decl) = NULL_TREE; + + /* When signature changes, we need to clear builtin info. */ + if (DECL_BUILT_IN (new_decl) + && args_to_skip + && !bitmap_empty_p (args_to_skip)) + { + DECL_BUILT_IN_CLASS (new_decl) = NOT_BUILT_IN; + DECL_FUNCTION_CODE (new_decl) = (enum built_in_function) 0; + } + /* The FE might have information and assumptions about the other + arguments. */ + DECL_LANG_SPECIFIC (new_decl) = NULL; + return new_decl; +} + +/* Set flags of NEW_NODE and its decl. NEW_NODE is a newly created private + clone or its thunk. */ + +static void +set_new_clone_decl_and_node_flags (cgraph_node *new_node) +{ + DECL_EXTERNAL (new_node->decl) = 0; + DECL_COMDAT_GROUP (new_node->decl) = 0; + TREE_PUBLIC (new_node->decl) = 0; + DECL_COMDAT (new_node->decl) = 0; + DECL_WEAK (new_node->decl) = 0; + DECL_VIRTUAL_P (new_node->decl) = 0; + DECL_STATIC_CONSTRUCTOR (new_node->decl) = 0; + DECL_STATIC_DESTRUCTOR (new_node->decl) = 0; + + new_node->externally_visible = 0; + new_node->local.local = 1; + new_node->lowered = true; +} + +/* Duplicate thunk THUNK if necessary but make it to refer to NODE. + ARGS_TO_SKIP, if non-NULL, determines which parameters should be omitted. + Function can return NODE if no thunk is necessary, which can happen when + 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) +{ + 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); + + struct cgraph_edge *cs; + for (cs = node->callers; cs; cs = cs->next_caller) + if (cs->caller->thunk.thunk_p + && cs->caller->thunk.this_adjusting == thunk->thunk.this_adjusting + && cs->caller->thunk.fixed_offset == thunk->thunk.fixed_offset + && cs->caller->thunk.virtual_offset_p == thunk->thunk.virtual_offset_p + && cs->caller->thunk.virtual_value == thunk->thunk.virtual_value) + return cs->caller; + + tree new_decl; + if (!args_to_skip) + new_decl = copy_node (thunk->decl); + else + { + /* 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)) + return node; + + new_decl = build_function_decl_skip_args (thunk->decl, args_to_skip, + false); + } + gcc_checking_assert (!DECL_STRUCT_FUNCTION (new_decl)); + gcc_checking_assert (!DECL_INITIAL (new_decl)); + gcc_checking_assert (!DECL_RESULT (new_decl)); + gcc_checking_assert (!DECL_RTL_SET_P (new_decl)); + + DECL_NAME (new_decl) = clone_function_name (thunk->decl, "artificial_thunk"); + SET_DECL_ASSEMBLER_NAME (new_decl, DECL_NAME (new_decl)); + DECL_SECTION_NAME (new_decl) = NULL; + + new_thunk = cgraph_create_node (new_decl); + set_new_clone_decl_and_node_flags (new_thunk); + new_thunk->definition = true; + new_thunk->thunk = thunk->thunk; + new_thunk->unique_name = in_lto_p; + new_thunk->former_clone_of = thunk->decl; + + struct cgraph_edge *e = cgraph_create_edge (new_thunk, node, NULL, 0, + CGRAPH_FREQ_BASE); + e->call_stmt_cannot_inline_p = true; + cgraph_call_edge_duplication_hooks (thunk->callees, e); + if (!expand_thunk (new_thunk, false)) + new_thunk->analyzed = true; + cgraph_call_node_duplication_hooks (thunk, new_thunk); + return new_thunk; +} + +/* If E does not lead to a thunk, simply redirect it to N. Otherwise create + one or more equivalent thunks for N and redirect E to the first in the + chain. */ + +void +redirect_edge_duplicating_thunks (struct cgraph_edge *e, struct cgraph_node *n, + bitmap args_to_skip) +{ + 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); + + cgraph_redirect_edge_callee (e, n); +} /* Create node representing clone of N executed COUNT times. Decrease the execution counts from original node too. @@ -190,7 +396,8 @@ bool update_original, vec redirect_callers, bool call_duplication_hook, - struct cgraph_node *new_inlined_to) + struct cgraph_node *new_inlined_to, + bitmap args_to_skip) { struct cgraph_node *new_node = cgraph_create_empty_node (); struct cgraph_edge *e; @@ -238,8 +445,12 @@ FOR_EACH_VEC_ELT (redirect_callers, i, e) { /* Redirect calls to the old version node to point to its new - version. */ - cgraph_redirect_edge_callee (e, new_node); + version. The only exception is when the edge was proved to + be unreachable during the clonning procedure. */ + 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); } @@ -288,114 +499,6 @@ return get_identifier (tmp_name); } -/* Build variant of function type ORIG_TYPE skipping ARGS_TO_SKIP and the - return value if SKIP_RETURN is true. */ - -static tree -build_function_type_skip_args (tree orig_type, bitmap args_to_skip, - bool skip_return) -{ - tree new_type = NULL; - tree args, new_args = NULL, t; - tree new_reversed; - int i = 0; - - for (args = TYPE_ARG_TYPES (orig_type); args && args != void_list_node; - args = TREE_CHAIN (args), i++) - if (!args_to_skip || !bitmap_bit_p (args_to_skip, i)) - new_args = tree_cons (NULL_TREE, TREE_VALUE (args), new_args); - - new_reversed = nreverse (new_args); - if (args) - { - if (new_reversed) - TREE_CHAIN (new_args) = void_list_node; - else - new_reversed = void_list_node; - } - - /* Use copy_node to preserve as much as possible from original type - (debug info, attribute lists etc.) - Exception is METHOD_TYPEs must have THIS argument. - When we are asked to remove it, we need to build new FUNCTION_TYPE - instead. */ - if (TREE_CODE (orig_type) != METHOD_TYPE - || !args_to_skip - || !bitmap_bit_p (args_to_skip, 0)) - { - new_type = build_distinct_type_copy (orig_type); - TYPE_ARG_TYPES (new_type) = new_reversed; - } - else - { - new_type - = build_distinct_type_copy (build_function_type (TREE_TYPE (orig_type), - new_reversed)); - TYPE_CONTEXT (new_type) = TYPE_CONTEXT (orig_type); - } - - if (skip_return) - TREE_TYPE (new_type) = void_type_node; - - /* This is a new type, not a copy of an old type. Need to reassociate - variants. We can handle everything except the main variant lazily. */ - t = TYPE_MAIN_VARIANT (orig_type); - if (t != orig_type) - { - t = build_function_type_skip_args (t, args_to_skip, skip_return); - TYPE_MAIN_VARIANT (new_type) = t; - TYPE_NEXT_VARIANT (new_type) = TYPE_NEXT_VARIANT (t); - TYPE_NEXT_VARIANT (t) = new_type; - } - else - { - TYPE_MAIN_VARIANT (new_type) = new_type; - TYPE_NEXT_VARIANT (new_type) = NULL; - } - - return new_type; -} - -/* Build variant of function decl ORIG_DECL skipping ARGS_TO_SKIP and the - return value if SKIP_RETURN is true. - - Arguments from DECL_ARGUMENTS list can't be removed now, since they are - linked by TREE_CHAIN directly. The caller is responsible for eliminating - them when they are being duplicated (i.e. copy_arguments_for_versioning). */ - -static tree -build_function_decl_skip_args (tree orig_decl, bitmap args_to_skip, - bool skip_return) -{ - tree new_decl = copy_node (orig_decl); - tree new_type; - - new_type = TREE_TYPE (orig_decl); - if (prototype_p (new_type) - || (skip_return && !VOID_TYPE_P (TREE_TYPE (new_type)))) - new_type - = build_function_type_skip_args (new_type, args_to_skip, skip_return); - TREE_TYPE (new_decl) = new_type; - - /* For declarations setting DECL_VINDEX (i.e. methods) - we expect first argument to be THIS pointer. */ - if (args_to_skip && bitmap_bit_p (args_to_skip, 0)) - DECL_VINDEX (new_decl) = NULL_TREE; - - /* When signature changes, we need to clear builtin info. */ - if (DECL_BUILT_IN (new_decl) - && args_to_skip - && !bitmap_empty_p (args_to_skip)) - { - DECL_BUILT_IN_CLASS (new_decl) = NOT_BUILT_IN; - DECL_FUNCTION_CODE (new_decl) = (enum built_in_function) 0; - } - /* The FE might have information and assumptions about the other - arguments. */ - DECL_LANG_SPECIFIC (new_decl) = NULL; - return new_decl; -} - /* Create callgraph node clone with new declaration. The actual body will be copied later at compilation stage. @@ -449,22 +552,15 @@ new_node = cgraph_clone_node (old_node, new_decl, old_node->count, CGRAPH_FREQ_BASE, false, - redirect_callers, false, NULL); + redirect_callers, false, NULL, args_to_skip); /* Update the properties. Make clone visible only within this translation unit. Make sure that is not weak also. ??? We cannot use COMDAT linkage because there is no ABI support for this. */ - DECL_EXTERNAL (new_node->decl) = 0; if (DECL_ONE_ONLY (old_decl)) DECL_SECTION_NAME (new_node->decl) = NULL; - DECL_COMDAT_GROUP (new_node->decl) = 0; - TREE_PUBLIC (new_node->decl) = 0; - DECL_COMDAT (new_node->decl) = 0; - DECL_WEAK (new_node->decl) = 0; - DECL_VIRTUAL_P (new_node->decl) = 0; - DECL_STATIC_CONSTRUCTOR (new_node->decl) = 0; - DECL_STATIC_DESTRUCTOR (new_node->decl) = 0; + 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; @@ -504,9 +600,6 @@ } else new_node->clone.combined_args_to_skip = args_to_skip; - new_node->externally_visible = 0; - new_node->local.local = 1; - new_node->lowered = true; cgraph_call_node_duplication_hooks (old_node, new_node); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cgraph.h gcc-snapshot-20140405/=unpacked-tar1=/gcc/cgraph.h --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cgraph.h 2014-03-21 17:14:27.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cgraph.h 2014-04-04 14:53:38.000000000 +0000 @@ -890,7 +890,7 @@ unsigned, gcov_type, int, bool); struct cgraph_node * cgraph_clone_node (struct cgraph_node *, tree, gcov_type, int, bool, vec, - bool, struct cgraph_node *); + bool, struct cgraph_node *, bitmap); tree clone_function_name (tree decl, const char *); struct cgraph_node * cgraph_create_virtual_clone (struct cgraph_node *old_node, vec, diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/ChangeLog gcc-snapshot-20140405/=unpacked-tar1=/gcc/ChangeLog --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/ChangeLog 2014-03-21 17:14:27.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/ChangeLog 2014-04-05 08:48:42.000000000 +0000 @@ -1,3 +1,799 @@ +2014-04-05 Pitchumani Sivanupandi + + * 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 + updated device specific info. + * config/avr/avr-mcus.def: Merge device specific details to + dev_attribute field. + * config/avr/avr.c (avr_2word_insn_p): use dev_attribute field to check + errata_skip. + * config/avr/avr.h (AVR_HAVE_8BIT_SP): same for short sp info. + * config/avr/driver-avr.c (avr_device_to_as): Pass -mrmw option to + assembler if RMW isa supported by current device. + * config/avr/genmultilib.awk: Update as device info structure changed. + * doc/invoke.texi: Add info for __AVR_ISA_RMW__ builtin macro + +2014-04-04 Cong Hou + + PR tree-optimization/60656 + * tree-vect-stmts.c (supportable_widening_operation): + Fix a bug that elements in a vector with vect_used_by_reduction + property are incorrectly reordered when the operation on it is not + consistant with the one in reduction operation. + +2014-04-04 John David Anglin + + PR rtl-optimization/60155 + * gcse.c (record_set_data): New function. + (single_set_gcse): New function. + (gcse_emit_move_after): Use single_set_gcse instead of single_set. + (hoist_code): Likewise. + (get_pressure_class_and_nregs): Likewise. + +2014-04-04 Eric Botcazou + + * explow.c (probe_stack_range): Emit a final optimization blockage. + +2014-04-04 Anthony Green + + * config/moxie/moxie.md (zero_extendqisi2, zero_extendhisi2): Fix + typos. + +2014-04-04 Jan Hubicka + + PR ipa/59626 + * lto-cgraph.c (input_overwrite_node): Check that partitioning + flags are set only during streaming. + * ipa.c (process_references, walk_polymorphic_call_targets, + symtab_remove_unreachable_nodes): Drop bodies of always inline + after early inlining. + (symtab_remove_unreachable_nodes): Remove always_inline attribute. + +2014-04-04 Jakub Jelinek + Ramana Radhakrishnan + + PR debug/60655 + * dwarf2out.c (const_ok_for_output_1): Reject expressions + containing a NOT. + +2014-04-04 Kyrylo Tkachov + + PR bootstrap/60743 + * config/arm/cortex-a53.md (cortex_a53_fdivs): Reduce reservation + duration. + (cortex_a53_fdivd): Likewise. + +2014-04-04 Martin Jambor + + PR ipa/60640 + * 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. + (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, + moved setting of a lot of flags to set_new_clone_decl_and_node_flags. + +2014-04-04 Bernd Edlinger + + PR fortran/60191 + * fortran/trans-types.c (gfc_get_function_type): In case of recursion + build a variadic function type with empty argument list instead of a + stdarg-like function type with incomplete argument list. + +2014-04-04 Jeff Law + + PR target/60657 + * config/arm/predicates.md (const_int_I_operand): New predicate. + (const_int_M_operand): Similarly. + * config/arm/arm.md (insv_zero): Use const_int_M_operand instead of + const_int_operand. + (insv_t2, extv_reg, extzv_t2): Likewise. + (load_multiple_with_writeback): Similarly for const_int_I_operand. + (pop_multiple_with_writeback_and_return): Likewise. + (vfp_pop_multiple_with_writeback): Likewise + +2014-04-04 Richard Biener + + PR ipa/60746 + * tree-ssanames.c (make_ssa_name_fn): Fix assert. + * gimple.c (gimple_set_bb): Avoid ICEing for NULL cfun for + non-GIMPLE_LABELs. + * gimplify.h (gimple_add_tmp_var_fn): Declare. + * gimplify.c (gimple_add_tmp_var_fn): New function. + * gimple-expr.h (create_tmp_reg_fn): Declare. + * gimple-expr.c (create_tmp_reg_fn): New function. + * gimple-low.c (record_vars_into): Don't change cfun. + * cgraph.c (cgraph_redirect_edge_call_stmt_to_callee): Fix + code generation without cfun. + +2014-04-04 Thomas Schwinge + + PR bootstrap/60719 + * Makefile.in (install-driver): Fix shell scripting. + +2014-04-03 Cong Hou + + 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. + * tree-vect-loop.c (new_loop_vec_info): + Initialize LOOP_VINFO_COST_MODEL_THRESHOLD. + * tree-vect-loop.c (vect_analyze_loop_operations): + Set LOOP_VINFO_COST_MODEL_THRESHOLD. + * tree-vect-loop.c (vect_transform_loop): + Use LOOP_VINFO_COST_MODEL_THRESHOLD. + * tree-vect-loop.c (vect_analyze_loop_2): Check the maximum number + of iterations of the loop and see if we should build the epilogue. + +2014-04-03 Richard Biener + + * 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. + (streamer_tree_cache_insert_1): Use next_idx to assign idx. + (streamer_tree_cache_append): Likewise. + (streamer_tree_cache_create): Create nodes array optionally + as specified by parameter. + * 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. + * lto-streamer-in.c (lto_data_in_create): Adjust for + streamer_tree_cache_create prototype change. + +2014-04-03 Richard Biener + + * tree-streamer-out.c (streamer_write_chain): Do not temporarily + set TREE_CHAIN to NULL_TREE. + +2014-04-03 Richard Biener + + PR tree-optimization/60740 + * graphite-scop-detection.c (stmt_simple_for_scop_p): Iterate + over all GIMPLE_COND operands. + +2014-04-03 Nathan Sidwell + + * doc/invoke.texi (Wnon-virtual-dtor): Adjust documentation. + (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 + + * config/rl78/rl78-expand.md (movqi): Handle (SUBREG (SYMBOL_REF)) + properly. + +2014-04-03 Martin Jambor + + * ipa-cp.c (ipcp_verify_propagated_values): Also dump symtab and + mention gcc_unreachable before failing. + * ipa.c (symtab_remove_unreachable_nodes): Also print order of + removed symbols. + +2014-04-02 Jan Hubicka + + PR ipa/60659 + * 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. + +2014-04-02 Anthony Green + + * config/moxie/moxie.md (zero_extendqisi2, zero_extendhisi2) + (extendqisi2, extendhisi2): Define. + * config/moxie/moxie.h (DEFAULT_SIGNED_CHAR): Change to 0. + (WCHAR_TYPE): Change to unsigned int. + +2014-04-02 Bill Schmidt + + PR tree-optimization/60733 + * gimple-ssa-strength-reduction.c (ncd_with_phi): Change required + insertion point for PHI candidates to be the end of the feeding + block for the PHI argument. + +2014-04-02 Vladimir Makarov + + PR rtl-optimization/60650 + * lra-constraints.c (process_alt_operands): Decrease reject for + earlyclobber matching. + +2014-04-02 Andreas Krebbel + + * config/s390/s390.c (s390_expand_insv): Use GET_MODE_BITSIZE. + +2014-04-02 Ulrich Weigand + + * config/spu/spu.c (pad_bb): Do not crash when the last + insn is CODE_FOR_blockage. + +2014-04-02 Ulrich Weigand + + * config/spu/spu.md ("insv"): Fail if bitoffset+bitsize + lies outside the target mode. + +2014-04-02 Michael Meissner + + PR target/60735 + * config/rs6000/rs6000.c (rs6000_hard_regno_mode_ok): If we have + software floating point or no floating point registers, do not + allow any type in the FPRs. Eliminate a test for SPE SIMD types + in GPRs that occurs after we tested for GPRs that would never be + true. + + * config/rs6000/rs6000.md (mov_softfloat32, FMOVE64): + Rewrite tests to use TARGET_DOUBLE_FLOAT and TARGET_E500_DOUBLE, + since the FMOVE64 type is DFmode/DDmode. If TARGET_E500_DOUBLE, + specifically allow DDmode, since that does not use the SPE SIMD + instructions. + +2014-04-02 Richard Biener + + PR middle-end/60729 + * optabs.c (expand_abs_nojump): Honor flag_trapv only for + MODE_INTs. Properly use negv_optab. + (expand_abs): Likewise. + +2014-04-02 Richard Biener + + PR bootstrap/60719 + * Makefile.in (install-driver): Guard extra installs with special + names properly. + +2014-04-01 Michael Meissner + + * doc/extend.texi (PowerPC AltiVec/VSX Built-in Functions): + Document vec_vgbbd. + +2014-04-01 Richard Henderson + + PR target/60704 + * config/i386/i386.md (*float2_sse): Leave the second + alternative enabled before register allocation. + +2014-04-01 Chung-Lin Tang + + * config/nios2/nios2.md (unspec): Remove UNSPEC_TLS, UNSPEC_TLS_LDM. + * config/nios2/nios2.c (nios2_function_profiler): Fix addi operand + typo. + (nios2_large_got_address): Remove unneeded 'sym' parameter. + (nios2_got_address): Update nios2_large_got_address call site. + (nios2_delegitimize_address): New function. + (TARGET_DELEGITIMIZE_ADDRESS): Define to nios2_delegitimize_address. + * config/nios2/linux.h (GLIBC_DYNAMIC_LINKER): Define. + (LINK_SPEC): Specify dynamic linker using GNU_USER_DYNAMIC_LINKER. + +2014-04-01 Martin Husemann + + * config/mips/netbsd.h (TARGET_OS_CPP_BUILTINS): Define __mips_o32 + for -mabi=32. + +2014-04-01 Richard Sandiford + + PR rtl-optimization/60604 + * recog.c (general_operand): Incorporate REG_CANNOT_CHANGE_MODE_P + check from register_operand. + (register_operand): Redefine in terms of general_operand. + (nonmemory_operand): Use register_operand for the non-constant cases. + +2014-04-01 Richard Biener + + * gimple.h (struct gimple_statement_base): Align subcode to + 16 bits. + +2014-04-01 Sebastian Huber + + * doc/invoke.texi (mapp-regs): Clarify. + +2014-03-31 Ulrich Drepper + + * config/i386/avx512fintrin.h (__v32hi): Define type. + (__v64qi): Likewise. + (_mm512_set1_epi8): Define. + (_mm512_set1_epi16): Define. + (_mm512_set4_epi32): Define. + (_mm512_set4_epi64): Define. + (_mm512_set4_pd): Define. + (_mm512_set4_ps): Define. + (_mm512_setr4_epi64): Define. + (_mm512_setr4_epi32): Define. + (_mm512_setr4_pd): Define. + (_mm512_setr4_ps): Define. + (_mm512_setzero_epi32): Define. + +2014-03-31 Martin Jambor + + PR middle-end/60647 + * tree-sra.c (callsite_has_enough_arguments_p): Renamed to + callsite_arguments_match_p. Updated all callers. Also check types of + corresponding formal parameters and actual arguments. + (not_all_callers_have_enough_arguments_p) Renamed to + some_callers_have_mismatched_arguments_p. + +2014-03-31 Yuri Rumyantsev + + * tree-inline.c (copy_loops): Add missed copy of 'safelen'. + +2014-03-31 Kugan Vivekanandarajah + + PR target/60034 + * aarch64/aarch64.c (aarch64_classify_address): Fix alignment for + section anchor. + +2014-03-30 Uros Bizjak + + * config/i386/sse.md (FMAMODE_NOVF512): New mode iterator. + (fma_fmadd_): + Split out + fma_fmadd_. + Use FMAMODE_NOVF512 mode iterator. + (fma_fmsub_): Ditto. + (fma_fnmadd_): Ditto. + (fma_fnmsub_): Ditto. + (fma_fmaddsub_): + Split out + fma_fmaddsub_. + Use VF_128_256 mode iterator. + (fma_fmsubadd_): + Ditto. + +2014-03-28 Jan Hubicka + + * cgraph.c (cgraph_redirect_edge_call_stmt_to_callee): Clear + static chain if needed. + +2014-03-28 Vladimir Makarov + + PR target/60697 + * lra-constraints.c (index_part_to_reg): New. + (process_address): Use it. + +2014-03-27 Jeff Law + Jakub Jelinek + + PR target/60648 + * expr.c (do_tablejump): Use simplify_gen_binary rather than + gen_rtx_{PLUS,MULT} to build up the address expression. + + * i386/i386.c (ix86_legitimize_address): Use copy_addr_to_reg to avoid + creating non-canonical RTL. + +2014-03-28 Jan Hubicka + + PR ipa/60243 + * ipa-inline.c (want_inline_small_function_p): Short circuit large + functions; reorganize to make cheap checks first. + (inline_small_functions): Do not estimate growth when dumping; + it is expensive. + * ipa-inline.h (inline_summary): Add min_size. + (growth_likely_positive): New function. + * ipa-inline-analysis.c (dump_inline_summary): Add min_size. + (set_cond_stmt_execution_predicate): Cleanup. + (estimate_edge_size_and_time): Compute min_size. + (estimate_calls_size_and_time): Likewise. + (estimate_node_size_and_time): Likewise. + (inline_update_overall_summary): Update min_size. + (do_estimate_edge_time): Likewise. + (do_estimate_edge_size): Update. + (do_estimate_edge_hints): Update. + (growth_likely_positive): New function. + +2014-03-28 Jakub Jelinek + + PR target/60693 + * config/i386/i386.c (ix86_copy_addr_to_reg): Call copy_addr_to_reg + also if addr has VOIDmode. + +2014-03-28 Kyrylo Tkachov + + * config/arm/aarch-common.c (aarch_crypto_can_dual_issue): New. + * config/arm/aarch-common-protos.h (aarch_crypto_can_dual_issue): + Declare extern. + * config/arm/cortex-a53.md: Add reservations and bypass for crypto + instructions as well as AdvancedSIMD loads. + +2014-03-28 Kyrylo Tkachov + + * config/aarch64/aarch64-simd.md (aarch64_crypto_aesv16qi): + Use crypto_aese type. + (aarch64_crypto_aesv16qi): Use crypto_aesmc type. + * config/arm/arm.md (is_neon_type): Replace crypto_aes with + crypto_aese, crypto_aesmc. Move to types.md. + * config/arm/types.md (crypto_aes): Split into crypto_aese, + crypto_aesmc. + * config/arm/iterators.md (crypto_type): Likewise. + +2014-03-28 Jan Hubicka + + * cgraph.c: Include expr.h and tree-dfa.h. + (cgraph_redirect_edge_call_stmt_to_callee): If call in noreturn; + remove LHS. + +2014-03-28 Vladimir Makarov + + PR target/60675 + * lra-assigns.c (find_hard_regno_for): Remove unavailable hard + regs from checking multi-reg pseudos. + +2014-03-28 Ramana Radhakrishnan + + * config/arm/t-aprofile (MULTILIB_MATCHES): Correct A12 rule. + +2014-03-28 Ulrich Weigand + + * config/rs6000/rs6000.c (fusion_gpr_load_p): Refuse optimization + if it would clobber the stack pointer, even temporarily. + +2014-03-28 Eric Botcazou + + * mode-switching.c: Make small adjustments to the top comment. + +2014-03-27 Michael Meissner + + * config/rs6000/constraints.md (wD constraint): New constraint to + match the constant integer to get the top DImode/DFmode out of a + vector in a VSX register. + + * config/rs6000/predicates.md (vsx_scalar_64bit): New predicate to + match the constant integer to get the top DImode/DFmode out of a + vector in a VSX register. + + * config/rs6000/rs6000-builtins.def (VBPERMQ): Add vbpermq builtin + for ISA 2.07. + + * config/rs6000/rs6000-c.c (altivec_overloaded_builtins): Add + vbpermq builtins. + + * config/rs6000/rs6000.c (rs6000_debug_reg_global): If + -mdebug=reg, print value of VECTOR_ELEMENT_SCALAR_64BIT. + + * config/rs6000/vsx.md (vsx_extract_, V2DI/V2DF modes): + Optimize vec_extract of 64-bit values, where the value being + extracted is in the top word, where we can use scalar + instructions. Add direct move and store support. Combine the big + endian/little endian vector select load support into a single insn. + (vsx_extract__internal1): Likewise. + (vsx_extract__internal2): Likewise. + (vsx_extract__load): Likewise. + (vsx_extract__store): Likewise. + (vsx_extract__zero): Delete, big and little endian insns are + combined into vsx_extract__load. + (vsx_extract__one_le): Likewise. + + * config/rs6000/rs6000.h (VECTOR_ELEMENT_SCALAR_64BIT): Macro to + define the top 64-bit vector element. + + * doc/md.texi (PowerPC and IBM RS6000 constraints): Document wD + constraint. + + * doc/extend.texi (PowerPC AltiVec/VSX Built-in Functions): + Document vec_vbpermq builtin. + + PR target/60672 + * config/rs6000/altivec.h (vec_xxsldwi): Add missing define to + enable use of xxsldwi and xxpermdi builtin functions. + (vec_xxpermdi): Likewise. + + * doc/extend.texi (PowerPC AltiVec/VSX Built-in Functions): + Document use of vec_xxsldwi and vec_xxpermdi builtins. + +2014-03-27 Vladimir Makarov + + PR rtl-optimization/60650 + * lra-assign.c (find_hard_regno_for, spill_for): Add parameter + first_p. Use it. + (find_spills_for): New. + (assign_by_spills): Pass the new parameter to find_hard_regno_for. + Spill all pseudos on the second iteration. + +2014-03-27 Marek Polacek + + PR c/50347 + * doc/extend.texi (ffs Builtins): Change unsigned types to signed + types. + +2014-03-27 Andreas Krebbel + + * config/s390/s390.c (s390_can_use_return_insn): Check for + call-saved FPRs on 31 bit. + +2014-03-27 Jakub Jelinek + + PR middle-end/60682 + * omp-low.c (lower_omp_1): For gimple_clobber_p stmts, + if they need regimplification, just drop them instead of + calling gimple_regimplify_operands on them. + +2014-03-27 Marcus Shawcroft + + PR target/60580 + * config/aarch64/aarch64.c (faked_omit_frame_pointer): Remove. + (aarch64_frame_pointer_required): Adjust logic. + (aarch64_can_eliminate): Adjust logic. + (aarch64_override_options_after_change): Adjust logic. + +2014-03-27 Dehao Chen + + * ipa-inline.c (early_inliner): Update node's inline info. + +2014-03-26 Dehao Chen + + * dojump.c (do_compare_rtx_and_jump): Sets correct probability for + compiler inserted conditional jumps for NAN float check. + +2014-03-26 Jakub Jelinek + + * ubsan.h (ubsan_create_data): Change second argument's type + to const location_t *. + * ubsan.c (ubsan_source_location): If xloc.file is NULL, set it to + _(""). + (ubsan_create_data): Change second argument to const location_t *PLOC. + Create Loc field whenever PLOC is non-NULL. + (ubsan_instrument_unreachable, ubsan_expand_null_ifn, + ubsan_build_overflow_builtin, instrument_bool_enum_load): Adjust + callers. + + PR other/59545 + * real.c (real_to_integer2): Change type of low to UHWI. + +2014-03-26 Tobias Burnus + + * gcc.c (LINK_COMMAND_SPEC): Use libcilkrts.spec for -fcilkplus. + (CILK_SELF_SPECS): New define. + (driver_self_specs): Use it. + +2014-03-26 Richard Biener + + * tree-pretty-print.c (percent_K_format): Implement special + case for LTO and its stripped down BLOCK tree. + +2014-03-26 Jakub Jelinek + + PR sanitizer/60636 + * ubsan.c (instrument_si_overflow): Instrument ABS_EXPR. + + * tree-vrp.c (simplify_internal_call_using_ranges): If only + one range is range_int_cst_p, but not both, at least optimize + addition/subtraction of 0 and multiplication by 0 or 1. + * gimple-fold.c (gimple_fold_call): Fold + IFN_UBSAN_CHECK_{ADD,SUB,MUL}. + (gimple_fold_stmt_to_constant_1): If both op0 and op1 aren't + INTEGER_CSTs, try to fold at least x * 0 and y - y. + +2014-03-26 Eric Botcazou + + PR rtl-optimization/60452 + * rtlanal.c (rtx_addr_can_trap_p_1): Fix head comment. + : Return 1 for invalid offsets from the frame pointer. + +2014-03-26 Marek Polacek + + PR c/37428 + * doc/extend.texi (C Extensions): Mention variable-length arrays in + a structure/union. + +2014-03-26 Marek Polacek + + PR c/39525 + * doc/extend.texi (Designated Inits): Describe what happens to omitted + field members. + +2014-03-26 Marek Polacek + + PR other/59545 + * ira-color.c (update_conflict_hard_regno_costs): Perform the + multiplication in unsigned type. + +2014-03-26 Chung-Ju Wu + + * doc/install.texi: Document nds32le-*-elf and nds32be-*-elf. + +2014-03-26 Chung-Ju Wu + + * doc/contrib.texi: Add myself as Andes nds32 port contributor. + +2014-03-25 Jan Hubicka + + PR ipa/60315 + * cif-code.def (UNREACHABLE) New code. + * ipa-inline.c (inline_small_functions): Skip edges to + __builtlin_unreachable. + (estimate_edge_growth): Allow edges to __builtlin_unreachable. + * ipa-inline-analysis.c (edge_set_predicate): Redirect edges with false + predicate to __bulitin_unreachable. + (set_cond_stmt_execution_predicate): Fix issue when + invert_tree_comparison returns ERROR_MARK. + * ipa-pure-const.c (propagate_pure_const, propagate_nothrow): Do not + propagate to inline clones. + * cgraph.c (verify_edge_corresponds_to_fndecl): Allow redirection + to unreachable. + * ipa-cp.c (create_specialized_node): Be ready for new node to appear. + * cgraphclones.c (cgraph_clone_node): If call destination is already + ureachable, do not redirect it back. + * tree-inline.c (fold_marked_statements): Hanlde calls becoming + unreachable. + +2014-03-25 Jan Hubicka + + * ipa-pure-const.c (propagate_pure_const, propagate_nothrow): + Do not modify inline clones. + +2014-03-25 Jakub Jelinek + + * config/i386/i386.md (general_sext_operand): New mode attr. + (addv4, subv4, mulv4): If operands[2] is CONST_INT, + don't generate (sign_extend (const_int)). + (*addv4, *subv4, *mulv4): Disallow CONST_INT_P + operands[2]. Use We constraint instead of and + predicate instead of . + (*addv4_1, *subv4_1, *mulv4_1): New insns. + * config/i386/constraints.md (We): New constraint. + * config/i386/predicates.md (x86_64_sext_operand, + sext_operand): New predicates. + +2014-03-25 Martin Jambor + + PR ipa/60600 + * ipa-cp.c (ipa_get_indirect_edge_target_1): Redirect type + inconsistent devirtualizations to __builtin_unreachable. + +2014-03-25 Marek Polacek + + PR c/35449 + * doc/extend.texi (Example of asm with clobbered asm reg): Fix typo. + +2014-03-25 Alan Lawrence + + * config/aarch64/aarch64.c (aarch64_simd_valid_immediate): Reverse + order of elements for big-endian. + +2014-03-25 Richard Biener + + PR middle-end/60635 + * gimplify-me.c (gimple_regimplify_operands): Update the + re-gimplifed stmt. + +2014-03-25 Martin Jambor + + PR ipa/59176 + * lto-cgraph.c (lto_output_node): Stream body_removed flag. + (lto_output_varpool_node): Likewise. + (input_overwrite_node): Likewise. + (input_varpool_node): Likewise. + +2014-03-25 Richard Biener + + * lto-wrapper.c (merge_and_complain): Handle OPT_fPIE like OPT_fpie. + (run_gcc): Likewise. + +2014-03-25 Jakub Jelinek + + * combine.c (simplify_compare_const): Add MODE argument. + Handle mode_width 0 as very large mode_width. + (try_combine, simplify_comparison): Adjust callers. + + * cselib.c (cselib_hash_rtx): Perform addition in unsigned + type to avoid signed integer overflow. + * explow.c (plus_constant): Likewise. + +2014-03-25 Dominik Vogt + + * doc/generic.texi: Correct typos. + +2014-03-24 Tobias Burnus + + * doc/invoke.texi (-flto): Expand section about + using static libraries with LTO. + +2014-03-24 Andreas Krebbel + + PR rtl-optimization/60501 + * optabs.def (addptr3_optab): New optab. + * optabs.c (gen_addptr3_insn, have_addptr3_insn): New function. + * doc/md.texi ("addptrm3"): Document new RTL standard expander. + * expr.h (gen_addptr3_insn, have_addptr3_insn): Add prototypes. + + * lra.c (emit_add3_insn): Use the addptr pattern if available. + + * config/s390/s390.md ("addptrdi3", "addptrsi3"): New expanders. + +2014-03-24 Ulrich Drepper + + * config/i386/avx512fintrin.h: Define _mm512_set1_ps and + _mm512_set1_pd. + + * config/i386/avxintrin.h (_mm256_undefined_si256): Define. + (_mm256_undefined_ps): Define. + (_mm256_undefined_pd): Define. + * config/i386/emmintrin.h (_mm_undefined_si128): Define. + (_mm_undefined_pd): Define. + * config/i386/xmmintrin.h (_mm_undefined_ps): Define. + * config/i386/avx512fintrin.h (_mm512_undefined_si512): Define. + (_mm512_undefined_ps): Define. + (_mm512_undefined_pd): Define. + Use _mm*_undefined_*. + * config/i386/avx2intrin.h: Use _mm*_undefined_*. + +2014-03-24 Alex Velenko + + * config/aarch64/aarch64-simd-builtins.def (lshr): DI mode excluded. + (lshr_simd): DI mode added. + * config/aarch64/aarch64-simd.md (aarch64_lshr_simddi): New pattern. + (aarch64_ushr_simddi): Likewise. + * config/aarch64/aarch64.md (UNSPEC_USHR64): New unspec. + * config/aarch64/arm_neon.h (vshr_n_u64): Intrinsic fixed. + (vshrd_n_u64): Likewise. + +2014-03-24 Rainer Orth + + * Makefile.in (s-macro_list): Depend on cc1. + +2014-03-23 Teresa Johnson + + * ipa-utils.c (ipa_print_order): Use specified dump file. + +2014-03-23 Eric Botcazou + + PR rtl-optimization/60601 + * bb-reorder.c (fix_up_fall_thru_edges): Test EDGE_FALLTHRU everywhere. + + * gcc.c (eval_spec_function): Initialize save_growing_value. + +2014-03-22 Jakub Jelinek + + PR sanitizer/60613 + * internal-fn.c (ubsan_expand_si_overflow_addsub_check): For + code == MINUS_EXPR, never swap op0 with op1. + + * toplev.c (init_local_tick): Avoid signed integer multiplication + overflow. + * genautomata.c (reserv_sets_hash_value): Fix rotate idiom, avoid + shift by first operand's bitsize. + +2014-03-21 Jakub Jelinek + + PR target/60610 + * config/i386/i386.h (TARGET_64BIT_P): If not TARGET_BI_ARCH, + redefine to 1 or 0. + * config/i386/darwin.h (TARGET_64BIT_P): Redefine to + TARGET_ISA_64BIT_P(x). + 2014-03-21 Bill Schmidt * config/rs6000/rs6000.c (rs6000_expand_vector_set): Generate a @@ -128,15 +924,12 @@ 2014-03-18 Basile Starynkevitch - * plugin.def: Improve comment for PLUGIN_INCLUDE_FILE. - * doc/plugins.texi (Plugin callbacks): Mention - PLUGIN_INCLUDE_FILE. - Italicize plugin event names in description. Explain that - PLUGIN_PRAGMAS has no sense for lto1. Explain - PLUGIN_INCLUDE_FILE. - Remind that no GCC functions should be called after - PLUGIN_FINISH. - Explain what pragmas with expansion are. + * plugin.def: Improve comment for PLUGIN_INCLUDE_FILE. + * doc/plugins.texi (Plugin callbacks): Mention PLUGIN_INCLUDE_FILE. + Italicize plugin event names in description. Explain that + PLUGIN_PRAGMAS has no sense for lto1. Explain PLUGIN_INCLUDE_FILE. + Remind that no GCC functions should be called after PLUGIN_FINISH. + Explain what pragmas with expansion are. 2014-03-18 Martin Liska @@ -372,7 +1165,7 @@ (splitters for the fop_* register patterns): Remove. (fscalexf4_i387): Rename from *fscalexf4_i387. (ldexpxf3): Use gen_floatsixf2 and gen_fscalexf4_i387. - + 2014-03-13 Jakub Jelinek PR tree-optimization/59779 @@ -393,8 +1186,7 @@ 2014-03-13 Cesar Philippidis - * lto-wrapper.c (maybe_unlink_file): Suppress diagnostic - messages. + * lto-wrapper.c (maybe_unlink_file): Suppress diagnostic messages. 2014-03-13 Jakub Jelinek @@ -792,11 +1584,11 @@ optimization levels. (run_gcc): And pass it through to the link options. -2014-03-06 Alexandre Oliva +2014-03-06 Alexandre Oliva PR debug/60381 Revert: - 2014-02-28 Alexandre Oliva + 2014-02-28 Alexandre Oliva PR debug/59992 * cselib.c (remove_useless_values): Skip to avoid quadratic behavior if the condition moved from... @@ -1006,7 +1798,7 @@ and latches. Also honor LOOPS_MAY_HAVE_MULTIPLE_LATCHES. (remove_forwarder_block): Properly update the latch of a loop. -2014-02-28 Alexandre Oliva +2014-02-28 Alexandre Oliva PR debug/59992 * cselib.c (cselib_hasher::equal): Special-case VALUE lookup. @@ -1017,14 +1809,14 @@ (cselib_finish): Release it. (dump_cselib_table): Dump it. -2014-02-28 Alexandre Oliva +2014-02-28 Alexandre Oliva PR debug/59992 * cselib.c (remove_useless_values): Skip to avoid quadratic behavior if the condition moved from... (cselib_process_insn): ... here holds. -2014-02-28 Alexandre Oliva +2014-02-28 Alexandre Oliva PR debug/57232 * var-tracking.c (vt_initialize): Apply the same condition to @@ -1299,22 +2091,22 @@ (sched_rgn_init): ... here. (schedule_region): Check for SCHED_PRESSURE_NONE earlier. -2014-02-23 David Holsgrove +2014-02-23 David Holsgrove * config/microblaze/microblaze.md: Correct ashrsi_reg / lshrsi_reg names. -2014-02-23 Edgar E. Iglesias +2014-02-23 Edgar E. Iglesias * config/microblaze/microblaze.h: Remove SECONDARY_MEMORY_NEEDED definition. -2014-02-23 David Holsgrove +2014-02-23 David Holsgrove * /config/microblaze/microblaze.c: Add microblaze_asm_output_mi_thunk, define TARGET_ASM_OUTPUT_MI_THUNK and TARGET_ASM_CAN_OUTPUT_MI_THUNK. -2014-02-23 David Holsgrove +2014-02-23 David Holsgrove * config/microblaze/predicates.md: Add cmp_op predicate. * config/microblaze/microblaze.md: Add branch_compare instruction @@ -2027,16 +2819,16 @@ * config.gcc (i[34567]86-*-solaris2* | x86_64-*-solaris2.1[0-9]*, *-*-solaris2.9*): Use it. -2014-02-10 Nagaraju Mekala +2014-02-10 Nagaraju Mekala * config/microblaze/microblaze.md: Add movsi4_rev insn pattern. * config/microblaze/predicates.md: Add reg_or_mem_operand predicate. -2014-02-10 Nagaraju Mekala +2014-02-10 Nagaraju Mekala * config/microblaze/microblaze.c: Extend mcpu version format -2014-02-10 David Holsgrove +2014-02-10 David Holsgrove * config/microblaze/microblaze.h: Define SIZE_TYPE and PTRDIFF_TYPE. @@ -3059,7 +3851,7 @@ * README.Portability: Fix typo. -2014-01-30 David Holsgrove +2014-01-30 David Holsgrove * config/microblaze/microblaze.md(cstoresf4, cbranchsf4): Replace comparison_operator with ordered_comparison_operator. @@ -3809,7 +4601,7 @@ * config/aarch64/aarch64.md (UNSPEC_LD1): New unspec definition. (UNSPEC_ST1): Likewise. -2014-01-23 David Holsgrove +2014-01-23 David Holsgrove * config/microblaze/microblaze.md: Add trap insn and attribute @@ -3865,7 +4657,7 @@ * config/mips/mips.c (mips_reorg_process_insns): Check which asm operands have been referenced when recording LO_SUM references. -2014-01-22 David Holsgrove +2014-01-22 David Holsgrove * config/microblaze/microblaze.md: Correct bswaphi2 insn. @@ -4139,7 +4931,7 @@ (ipcp_edge_removal_hook): New function. (ipcp_driver): Register ipcp_edge_removal_hook. -2014-01-17 Andrew Pinski +2014-01-17 Andrew Pinski Steve Ellcey PR target/59462 @@ -5014,7 +5806,7 @@ one successor with a block with no successors, remove any BARRIER after the second block. -2014-01-07 Dan Xio Qiang +2014-01-07 Dan Xio Qiang * hw-doloop.c (reorg_loops): Release the bitmap obstack. diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cif-code.def gcc-snapshot-20140405/=unpacked-tar1=/gcc/cif-code.def --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cif-code.def 2014-02-05 09:15:43.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cif-code.def 2014-03-26 08:19:16.000000000 +0000 @@ -127,3 +127,7 @@ /* We can't inline because of mismatched caller/callee attributes. */ DEFCIFCODE(ATTRIBUTE_MISMATCH, CIF_FINAL_NORMAL, N_("function attribute mismatch")) + +/* We proved that the call is unreachable. */ +DEFCIFCODE(UNREACHABLE, CIF_FINAL_NORMAL, + N_("unreachable")) diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/combine.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/combine.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/combine.c 2014-02-28 00:03:09.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/combine.c 2014-03-26 08:19:16.000000000 +0000 @@ -446,7 +446,8 @@ int); static int recog_for_combine (rtx *, rtx, rtx *); static rtx gen_lowpart_for_combine (enum machine_mode, rtx); -static enum rtx_code simplify_compare_const (enum rtx_code, rtx, rtx *); +static enum rtx_code simplify_compare_const (enum rtx_code, enum machine_mode, + rtx, rtx *); static enum rtx_code simplify_comparison (enum rtx_code, rtx *, rtx *); static void update_table_tick (rtx); static void record_value_for_reg (rtx, rtx, rtx); @@ -2949,7 +2950,7 @@ { compare_code = orig_compare_code = GET_CODE (*cc_use_loc); compare_code = simplify_compare_const (compare_code, - op0, &op1); + GET_MODE (i2dest), op0, &op1); target_canonicalize_comparison (&compare_code, &op0, &op1, 1); } @@ -10817,9 +10818,9 @@ *POP1 may be updated. */ static enum rtx_code -simplify_compare_const (enum rtx_code code, rtx op0, rtx *pop1) +simplify_compare_const (enum rtx_code code, enum machine_mode mode, + rtx op0, rtx *pop1) { - enum machine_mode mode = GET_MODE (op0); unsigned int mode_width = GET_MODE_PRECISION (mode); HOST_WIDE_INT const_op = INTVAL (*pop1); @@ -10835,7 +10836,7 @@ if (const_op && (code == EQ || code == NE || code == GE || code == GEU || code == LT || code == LTU) - && mode_width <= HOST_BITS_PER_WIDE_INT + && mode_width - 1 < HOST_BITS_PER_WIDE_INT && exact_log2 (const_op & GET_MODE_MASK (mode)) >= 0 && (nonzero_bits (op0, mode) == (unsigned HOST_WIDE_INT) (const_op & GET_MODE_MASK (mode)))) @@ -10882,7 +10883,7 @@ /* If we are doing a <= 0 comparison on a value known to have a zero sign bit, we can replace this with == 0. */ else if (const_op == 0 - && mode_width <= HOST_BITS_PER_WIDE_INT + && mode_width - 1 < HOST_BITS_PER_WIDE_INT && (nonzero_bits (op0, mode) & ((unsigned HOST_WIDE_INT) 1 << (mode_width - 1))) == 0) @@ -10911,7 +10912,7 @@ /* If we are doing a > 0 comparison on a value known to have a zero sign bit, we can replace this with != 0. */ else if (const_op == 0 - && mode_width <= HOST_BITS_PER_WIDE_INT + && mode_width - 1 < HOST_BITS_PER_WIDE_INT && (nonzero_bits (op0, mode) & ((unsigned HOST_WIDE_INT) 1 << (mode_width - 1))) == 0) @@ -10927,7 +10928,7 @@ /* ... fall through ... */ } /* (unsigned) < 0x80000000 is equivalent to >= 0. */ - else if (mode_width <= HOST_BITS_PER_WIDE_INT + else if (mode_width - 1 < HOST_BITS_PER_WIDE_INT && (unsigned HOST_WIDE_INT) const_op == (unsigned HOST_WIDE_INT) 1 << (mode_width - 1)) { @@ -10943,7 +10944,7 @@ if (const_op == 0) code = EQ; /* (unsigned) <= 0x7fffffff is equivalent to >= 0. */ - else if (mode_width <= HOST_BITS_PER_WIDE_INT + else if (mode_width - 1 < HOST_BITS_PER_WIDE_INT && (unsigned HOST_WIDE_INT) const_op == ((unsigned HOST_WIDE_INT) 1 << (mode_width - 1)) - 1) { @@ -10962,7 +10963,7 @@ } /* (unsigned) >= 0x80000000 is equivalent to < 0. */ - else if (mode_width <= HOST_BITS_PER_WIDE_INT + else if (mode_width - 1 < HOST_BITS_PER_WIDE_INT && (unsigned HOST_WIDE_INT) const_op == (unsigned HOST_WIDE_INT) 1 << (mode_width - 1)) { @@ -10978,7 +10979,7 @@ if (const_op == 0) code = NE; /* (unsigned) > 0x7fffffff is equivalent to < 0. */ - else if (mode_width <= HOST_BITS_PER_WIDE_INT + else if (mode_width - 1 < HOST_BITS_PER_WIDE_INT && (unsigned HOST_WIDE_INT) const_op == ((unsigned HOST_WIDE_INT) 1 << (mode_width - 1)) - 1) { @@ -11185,7 +11186,7 @@ /* Try to simplify the compare to constant, possibly changing the comparison op, and/or changing op1 to zero. */ - code = simplify_compare_const (code, op0, &op1); + code = simplify_compare_const (code, mode, op0, &op1); const_op = INTVAL (op1); /* Compute some predicates to simplify code below. */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/aarch64/aarch64-builtins.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/aarch64/aarch64-builtins.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/aarch64/aarch64-builtins.c 2014-03-20 10:50:24.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/aarch64/aarch64-builtins.c 2014-03-26 08:19:17.000000000 +0000 @@ -183,6 +183,10 @@ #define TYPES_GETLANE (aarch64_types_getlane_qualifiers) #define TYPES_SHIFTIMM (aarch64_types_getlane_qualifiers) static enum aarch64_type_qualifiers +aarch64_types_unsigned_shift_qualifiers[SIMD_MAX_BUILTIN_ARGS] + = { qualifier_unsigned, qualifier_unsigned, qualifier_immediate }; +#define TYPES_USHIFTIMM (aarch64_types_unsigned_shift_qualifiers) +static enum aarch64_type_qualifiers aarch64_types_setlane_qualifiers[SIMD_MAX_BUILTIN_ARGS] = { qualifier_none, qualifier_none, qualifier_none, qualifier_immediate }; #define TYPES_SETLANE (aarch64_types_setlane_qualifiers) diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/aarch64/aarch64.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/aarch64/aarch64.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/aarch64/aarch64.c 2014-03-20 10:50:24.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/aarch64/aarch64.c 2014-03-31 14:27:30.000000000 +0000 @@ -315,10 +315,6 @@ #define AARCH64_NUM_BITMASKS 5334 static unsigned HOST_WIDE_INT aarch64_bitmasks[AARCH64_NUM_BITMASKS]; -/* Did we set flag_omit_frame_pointer just so - aarch64_frame_pointer_required would be called? */ -static bool faked_omit_frame_pointer; - typedef enum aarch64_cond_code { AARCH64_EQ = 0, AARCH64_NE, AARCH64_CS, AARCH64_CC, AARCH64_MI, AARCH64_PL, @@ -1694,17 +1690,15 @@ if (cfun->calls_alloca) return true; - /* We may have turned flag_omit_frame_pointer on in order to have this - function called; if we did, we also set the 'faked_omit_frame_pointer' flag - and we'll check it here. - If we really did set flag_omit_frame_pointer normally, then we return false - (no frame pointer required) in all cases. */ + /* In aarch64_override_options_after_change + flag_omit_leaf_frame_pointer turns off the frame pointer by + default. Turn it back on now if we've not got a leaf + function. */ + if (flag_omit_leaf_frame_pointer + && (!crtl->is_leaf || df_regs_ever_live_p (LR_REGNUM))) + return true; - if (flag_omit_frame_pointer && !faked_omit_frame_pointer) - return false; - else if (flag_omit_leaf_frame_pointer) - return !crtl->is_leaf || df_regs_ever_live_p (LR_REGNUM); - return true; + return false; } /* Mark the registers that need to be saved by the callee and calculate @@ -3202,6 +3196,9 @@ } else if (SYMBOL_REF_DECL (sym)) align = DECL_ALIGN (SYMBOL_REF_DECL (sym)); + else if (SYMBOL_REF_HAS_BLOCK_INFO_P (sym) + && SYMBOL_REF_BLOCK (sym) != NULL) + align = SYMBOL_REF_BLOCK (sym)->alignment; else align = BITS_PER_UNIT; @@ -4132,23 +4129,8 @@ return true; if (from == FRAME_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM) return true; - return false; - } - else - { - /* If we decided that we didn't need a leaf frame pointer but then used - LR in the function, then we'll want a frame pointer after all, so - prevent this elimination to ensure a frame pointer is used. - - NOTE: the original value of flag_omit_frame_pointer gets trashed - IFF flag_omit_leaf_frame_pointer is true, so we check the value - of faked_omit_frame_pointer here (which is true when we always - wish to keep non-leaf frame pointers but only wish to keep leaf frame - pointers when LR is clobbered). */ - if (to == STACK_POINTER_REGNUM - && df_regs_ever_live_p (LR_REGNUM) - && faked_omit_frame_pointer) - return false; + + return false; } return true; @@ -5278,17 +5260,10 @@ static void aarch64_override_options_after_change (void) { - faked_omit_frame_pointer = false; - - /* To omit leaf frame pointers, we need to turn flag_omit_frame_pointer on so - that aarch64_frame_pointer_required will be called. We need to remember - whether flag_omit_frame_pointer was turned on normally or just faked. */ - - if (flag_omit_leaf_frame_pointer && !flag_omit_frame_pointer) - { - flag_omit_frame_pointer = true; - faked_omit_frame_pointer = true; - } + if (flag_omit_frame_pointer) + flag_omit_leaf_frame_pointer = false; + else if (flag_omit_leaf_frame_pointer) + flag_omit_frame_pointer = true; } static struct machine_function * @@ -6566,7 +6541,9 @@ /* Splat vector constant out into a byte vector. */ for (i = 0; i < n_elts; i++) { - rtx el = CONST_VECTOR_ELT (op, i); + /* The vector is provided in gcc endian-neutral fashion. For aarch64_be, + it must be laid out in the vector register in reverse order. */ + rtx el = CONST_VECTOR_ELT (op, BYTES_BIG_ENDIAN ? (n_elts - 1 - i) : i); unsigned HOST_WIDE_INT elpart; unsigned int part, parts; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/aarch64/aarch64.md gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/aarch64/aarch64.md --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/aarch64/aarch64.md 2014-01-24 11:57:54.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/aarch64/aarch64.md 2014-03-26 08:19:17.000000000 +0000 @@ -101,6 +101,7 @@ UNSPEC_TLS UNSPEC_TLSDESC UNSPEC_USHL_2S + UNSPEC_USHR64 UNSPEC_VSTRUCTDUMMY ]) diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/aarch64/aarch64-simd-builtins.def gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/aarch64/aarch64-simd-builtins.def --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/aarch64/aarch64-simd-builtins.def 2014-01-24 11:57:54.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/aarch64/aarch64-simd-builtins.def 2014-03-26 08:19:17.000000000 +0000 @@ -192,7 +192,8 @@ BUILTIN_VDQ_I (SHIFTIMM, ashr, 3) VAR1 (SHIFTIMM, ashr_simd, 0, di) - BUILTIN_VSDQ_I_DI (SHIFTIMM, lshr, 3) + BUILTIN_VDQ_I (SHIFTIMM, lshr, 3) + VAR1 (USHIFTIMM, lshr_simd, 0, di) /* Implemented by aarch64_shr_n. */ BUILTIN_VSDQ_I_DI (SHIFTIMM, srshr_n, 0) BUILTIN_VSDQ_I_DI (SHIFTIMM, urshr_n, 0) diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/aarch64/aarch64-simd.md gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/aarch64/aarch64-simd.md --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/aarch64/aarch64-simd.md 2014-02-06 13:16:16.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/aarch64/aarch64-simd.md 2014-03-28 19:04:55.000000000 +0000 @@ -724,6 +724,31 @@ DONE; }) +(define_expand "aarch64_lshr_simddi" + [(match_operand:DI 0 "register_operand" "=w") + (match_operand:DI 1 "register_operand" "w") + (match_operand:SI 2 "aarch64_shift_imm64_di" "")] + "TARGET_SIMD" + { + if (INTVAL (operands[2]) == 64) + emit_insn (gen_aarch64_ushr_simddi (operands[0], operands[1])); + else + emit_insn (gen_lshrdi3 (operands[0], operands[1], operands[2])); + DONE; + } +) + +;; SIMD shift by 64. This pattern is a special case as standard pattern does +;; not handle NEON shifts by 64. +(define_insn "aarch64_ushr_simddi" + [(set (match_operand:DI 0 "register_operand" "=w") + (unspec:DI + [(match_operand:DI 1 "register_operand" "w")] UNSPEC_USHR64))] + "TARGET_SIMD" + "ushr\t%d0, %d1, 64" + [(set_attr "type" "neon_shift_imm")] +) + (define_expand "vec_set" [(match_operand:VQ_S 0 "register_operand") (match_operand: 1 "register_operand") @@ -4225,7 +4250,7 @@ CRYPTO_AES))] "TARGET_SIMD && TARGET_CRYPTO" "aes\\t%0.16b, %2.16b" - [(set_attr "type" "crypto_aes")] + [(set_attr "type" "crypto_aese")] ) (define_insn "aarch64_crypto_aesv16qi" @@ -4234,7 +4259,7 @@ CRYPTO_AESMC))] "TARGET_SIMD && TARGET_CRYPTO" "aes\\t%0.16b, %1.16b" - [(set_attr "type" "crypto_aes")] + [(set_attr "type" "crypto_aesmc")] ) ;; sha1 diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/aarch64/arm_neon.h gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/aarch64/arm_neon.h --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/aarch64/arm_neon.h 2014-03-20 10:50:24.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/aarch64/arm_neon.h 2014-03-26 08:19:17.000000000 +0000 @@ -23364,7 +23364,7 @@ __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) vshr_n_u64 (uint64x1_t __a, const int __b) { - return (uint64x1_t) __builtin_aarch64_lshrdi ((int64x1_t) __a, __b); + return __builtin_aarch64_lshr_simddi_uus ( __a, __b); } __extension__ static __inline int8x16_t __attribute__ ((__always_inline__)) @@ -23421,10 +23421,10 @@ return (int64x1_t) __builtin_aarch64_ashr_simddi (__a, __b); } -__extension__ static __inline uint64x1_t __attribute__ ((__always_inline__)) -vshrd_n_u64 (uint64x1_t __a, const int __b) +__extension__ static __inline uint64_t __attribute__ ((__always_inline__)) +vshrd_n_u64 (uint64_t __a, const int __b) { - return (uint64x1_t) __builtin_aarch64_lshrdi (__a, __b); + return __builtin_aarch64_lshr_simddi_uus (__a, __b); } /* vsli */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/arm/aarch-common.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/arm/aarch-common.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/arm/aarch-common.c 2014-01-05 19:58:26.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/arm/aarch-common.c 2014-03-28 19:04:56.000000000 +0000 @@ -31,6 +31,42 @@ #include "c-family/c-common.h" #include "rtl.h" +/* In ARMv8-A there's a general expectation that AESE/AESMC + and AESD/AESIMC sequences of the form: + + AESE Vn, _ + AESMC Vn, Vn + + will issue both instructions in a single cycle on super-scalar + implementations. This function identifies such pairs. */ + +int +aarch_crypto_can_dual_issue (rtx producer, rtx consumer) +{ + rtx producer_src, consumer_src; + + producer = single_set (producer); + consumer = single_set (consumer); + + producer_src = producer ? SET_SRC (producer) : NULL; + consumer_src = consumer ? SET_SRC (consumer) : NULL; + + if (producer_src && consumer_src + && GET_CODE (producer_src) == UNSPEC && GET_CODE (consumer_src) == UNSPEC + && ((XINT (producer_src, 1) == UNSPEC_AESE + && XINT (consumer_src, 1) == UNSPEC_AESMC) + || (XINT (producer_src, 1) == UNSPEC_AESD + && XINT (consumer_src, 1) == UNSPEC_AESIMC))) + { + unsigned int regno = REGNO (SET_DEST (producer)); + + return REGNO (SET_DEST (consumer)) == regno + && REGNO (XVECEXP (consumer_src, 0, 0)) == regno; + } + + return 0; +} + typedef struct { rtx_code search_code; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/arm/aarch-common-protos.h gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/arm/aarch-common-protos.h --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/arm/aarch-common-protos.h 2014-03-20 10:50:25.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/arm/aarch-common-protos.h 2014-03-28 19:04:56.000000000 +0000 @@ -23,6 +23,7 @@ #ifndef GCC_AARCH_COMMON_PROTOS_H #define GCC_AARCH_COMMON_PROTOS_H +extern int aarch_crypto_can_dual_issue (rtx, rtx); extern int arm_early_load_addr_dep (rtx, rtx); extern int arm_early_store_addr_dep (rtx, rtx); extern int arm_mac_accumulator_is_mul_result (rtx, rtx); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/arm/arm.md gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/arm/arm.md --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/arm/arm.md 2014-01-05 19:58:26.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/arm/arm.md 2014-04-04 14:53:38.000000000 +0000 @@ -262,105 +262,6 @@ ; initialized by arm_option_override() (define_attr "ldsched" "no,yes" (const (symbol_ref "arm_ld_sched"))) -; YES if the "type" attribute assigned to the insn denotes an -; Advanced SIMD instruction, NO otherwise. -(define_attr "is_neon_type" "yes,no" - (if_then_else (eq_attr "type" - "neon_add, neon_add_q, neon_add_widen, neon_add_long,\ - neon_qadd, neon_qadd_q, neon_add_halve, neon_add_halve_q,\ - neon_add_halve_narrow_q,\ - neon_sub, neon_sub_q, neon_sub_widen, neon_sub_long, neon_qsub,\ - neon_qsub_q, neon_sub_halve, neon_sub_halve_q,\ - neon_sub_halve_narrow_q,\ - neon_abs, neon_abs_q, neon_neg, neon_neg_q, neon_qneg,\ - neon_qneg_q, neon_qabs, neon_qabs_q, neon_abd, neon_abd_q,\ - neon_abd_long, neon_minmax, neon_minmax_q, neon_compare,\ - neon_compare_q, neon_compare_zero, neon_compare_zero_q,\ - neon_arith_acc, neon_arith_acc_q, neon_reduc_add,\ - neon_reduc_add_q, neon_reduc_add_long, neon_reduc_add_acc,\ - neon_reduc_add_acc_q, neon_reduc_minmax, neon_reduc_minmax_q,\ - neon_logic, neon_logic_q, neon_tst, neon_tst_q,\ - neon_shift_imm, neon_shift_imm_q, neon_shift_imm_narrow_q,\ - neon_shift_imm_long, neon_shift_reg, neon_shift_reg_q,\ - neon_shift_acc, neon_shift_acc_q, neon_sat_shift_imm,\ - neon_sat_shift_imm_q, neon_sat_shift_imm_narrow_q,\ - neon_sat_shift_reg, neon_sat_shift_reg_q,\ - neon_ins, neon_ins_q, neon_move, neon_move_q, neon_move_narrow_q,\ - neon_permute, neon_permute_q, neon_zip, neon_zip_q, neon_tbl1,\ - neon_tbl1_q, neon_tbl2, neon_tbl2_q, neon_tbl3, neon_tbl3_q,\ - neon_tbl4, neon_tbl4_q, neon_bsl, neon_bsl_q, neon_cls,\ - neon_cls_q, neon_cnt, neon_cnt_q, neon_dup, neon_dup_q,\ - neon_ext, neon_ext_q, neon_rbit, neon_rbit_q,\ - neon_rev, neon_rev_q, neon_mul_b, neon_mul_b_q, neon_mul_h,\ - neon_mul_h_q, neon_mul_s, neon_mul_s_q, neon_mul_b_long,\ - neon_mul_h_long, neon_mul_s_long, neon_mul_d_long, neon_mul_h_scalar,\ - neon_mul_h_scalar_q, neon_mul_s_scalar, neon_mul_s_scalar_q,\ - neon_mul_h_scalar_long, neon_mul_s_scalar_long, neon_sat_mul_b,\ - neon_sat_mul_b_q, neon_sat_mul_h, neon_sat_mul_h_q,\ - neon_sat_mul_s, neon_sat_mul_s_q, neon_sat_mul_b_long,\ - neon_sat_mul_h_long, neon_sat_mul_s_long, neon_sat_mul_h_scalar,\ - neon_sat_mul_h_scalar_q, neon_sat_mul_s_scalar,\ - neon_sat_mul_s_scalar_q, neon_sat_mul_h_scalar_long,\ - neon_sat_mul_s_scalar_long, neon_mla_b, neon_mla_b_q, neon_mla_h,\ - neon_mla_h_q, neon_mla_s, neon_mla_s_q, neon_mla_b_long,\ - neon_mla_h_long, neon_mla_s_long, neon_mla_h_scalar,\ - neon_mla_h_scalar_q, neon_mla_s_scalar, neon_mla_s_scalar_q,\ - neon_mla_h_scalar_long, neon_mla_s_scalar_long,\ - neon_sat_mla_b_long, neon_sat_mla_h_long,\ - neon_sat_mla_s_long, neon_sat_mla_h_scalar_long,\ - neon_sat_mla_s_scalar_long,\ - neon_to_gp, neon_to_gp_q, neon_from_gp, neon_from_gp_q,\ - neon_ldr, neon_load1_1reg, neon_load1_1reg_q, neon_load1_2reg,\ - neon_load1_2reg_q, neon_load1_3reg, neon_load1_3reg_q,\ - neon_load1_4reg, neon_load1_4reg_q, neon_load1_all_lanes,\ - neon_load1_all_lanes_q, neon_load1_one_lane, neon_load1_one_lane_q,\ - neon_load2_2reg, neon_load2_2reg_q, neon_load2_4reg,\ - neon_load2_4reg_q, neon_load2_all_lanes, neon_load2_all_lanes_q,\ - neon_load2_one_lane, neon_load2_one_lane_q,\ - neon_load3_3reg, neon_load3_3reg_q, neon_load3_all_lanes,\ - neon_load3_all_lanes_q, neon_load3_one_lane, neon_load3_one_lane_q,\ - neon_load4_4reg, neon_load4_4reg_q, neon_load4_all_lanes,\ - neon_load4_all_lanes_q, neon_load4_one_lane, neon_load4_one_lane_q,\ - neon_str, neon_store1_1reg, neon_store1_1reg_q, neon_store1_2reg,\ - neon_store1_2reg_q, neon_store1_3reg, neon_store1_3reg_q,\ - neon_store1_4reg, neon_store1_4reg_q, neon_store1_one_lane,\ - neon_store1_one_lane_q, neon_store2_2reg, neon_store2_2reg_q,\ - neon_store2_4reg, neon_store2_4reg_q, neon_store2_one_lane,\ - neon_store2_one_lane_q, neon_store3_3reg, neon_store3_3reg_q,\ - neon_store3_one_lane, neon_store3_one_lane_q, neon_store4_4reg,\ - neon_store4_4reg_q, neon_store4_one_lane, neon_store4_one_lane_q,\ - neon_fp_abd_s, neon_fp_abd_s_q, neon_fp_abd_d, neon_fp_abd_d_q,\ - neon_fp_addsub_s, neon_fp_addsub_s_q, neon_fp_addsub_d,\ - neon_fp_addsub_d_q, neon_fp_compare_s, neon_fp_compare_s_q,\ - neon_fp_compare_d, neon_fp_compare_d_q, neon_fp_minmax_s,\ - neon_fp_minmax_s_q, neon_fp_minmax_d, neon_fp_minmax_d_q,\ - neon_fp_reduc_add_s, neon_fp_reduc_add_s_q, neon_fp_reduc_add_d,\ - neon_fp_reduc_add_d_q, neon_fp_reduc_minmax_s, - neon_fp_reduc_minmax_s_q, neon_fp_reduc_minmax_d,\ - neon_fp_reduc_minmax_d_q,\ - neon_fp_cvt_narrow_s_q, neon_fp_cvt_narrow_d_q,\ - neon_fp_cvt_widen_h, neon_fp_cvt_widen_s, neon_fp_to_int_s,\ - neon_fp_to_int_s_q, neon_int_to_fp_s, neon_int_to_fp_s_q,\ - neon_fp_round_s, neon_fp_round_s_q, neon_fp_recpe_s,\ - neon_fp_recpe_s_q,\ - neon_fp_recpe_d, neon_fp_recpe_d_q, neon_fp_recps_s,\ - neon_fp_recps_s_q, neon_fp_recps_d, neon_fp_recps_d_q,\ - neon_fp_recpx_s, neon_fp_recpx_s_q, neon_fp_recpx_d,\ - neon_fp_recpx_d_q, neon_fp_rsqrte_s, neon_fp_rsqrte_s_q,\ - neon_fp_rsqrte_d, neon_fp_rsqrte_d_q, neon_fp_rsqrts_s,\ - neon_fp_rsqrts_s_q, neon_fp_rsqrts_d, neon_fp_rsqrts_d_q,\ - neon_fp_mul_s, neon_fp_mul_s_q, neon_fp_mul_s_scalar,\ - neon_fp_mul_s_scalar_q, neon_fp_mul_d, neon_fp_mul_d_q,\ - neon_fp_mul_d_scalar_q, neon_fp_mla_s, neon_fp_mla_s_q,\ - neon_fp_mla_s_scalar, neon_fp_mla_s_scalar_q, neon_fp_mla_d,\ - neon_fp_mla_d_q, neon_fp_mla_d_scalar_q, neon_fp_sqrt_s,\ - neon_fp_sqrt_s_q, neon_fp_sqrt_d, neon_fp_sqrt_d_q,\ - neon_fp_div_s, neon_fp_div_s_q, neon_fp_div_d, neon_fp_div_d_q, crypto_aes,\ - crypto_sha1_xor, crypto_sha1_fast, crypto_sha1_slow, crypto_sha256_fast,\ - crypto_sha256_slow") - (const_string "yes") - (const_string "no"))) - ; condition codes: this one is used by final_prescan_insn to speed up ; conditionalizing instructions. It saves having to scan the rtl to see if ; it uses or alters the condition codes. @@ -2883,8 +2784,8 @@ (define_insn "insv_zero" [(set (zero_extract:SI (match_operand:SI 0 "s_register_operand" "+r") - (match_operand:SI 1 "const_int_operand" "M") - (match_operand:SI 2 "const_int_operand" "M")) + (match_operand:SI 1 "const_int_M_operand" "M") + (match_operand:SI 2 "const_int_M_operand" "M")) (const_int 0))] "arm_arch_thumb2" "bfc%?\t%0, %2, %1" @@ -2896,8 +2797,8 @@ (define_insn "insv_t2" [(set (zero_extract:SI (match_operand:SI 0 "s_register_operand" "+r") - (match_operand:SI 1 "const_int_operand" "M") - (match_operand:SI 2 "const_int_operand" "M")) + (match_operand:SI 1 "const_int_M_operand" "M") + (match_operand:SI 2 "const_int_M_operand" "M")) (match_operand:SI 3 "s_register_operand" "r"))] "arm_arch_thumb2" "bfi%?\t%0, %3, %2, %1" @@ -4579,8 +4480,8 @@ (define_insn "*extv_reg" [(set (match_operand:SI 0 "s_register_operand" "=r") (sign_extract:SI (match_operand:SI 1 "s_register_operand" "r") - (match_operand:SI 2 "const_int_operand" "M") - (match_operand:SI 3 "const_int_operand" "M")))] + (match_operand:SI 2 "const_int_M_operand" "M") + (match_operand:SI 3 "const_int_M_operand" "M")))] "arm_arch_thumb2" "sbfx%?\t%0, %1, %3, %2" [(set_attr "length" "4") @@ -4592,8 +4493,8 @@ (define_insn "extzv_t2" [(set (match_operand:SI 0 "s_register_operand" "=r") (zero_extract:SI (match_operand:SI 1 "s_register_operand" "r") - (match_operand:SI 2 "const_int_operand" "M") - (match_operand:SI 3 "const_int_operand" "M")))] + (match_operand:SI 2 "const_int_M_operand" "M") + (match_operand:SI 3 "const_int_M_operand" "M")))] "arm_arch_thumb2" "ubfx%?\t%0, %1, %3, %2" [(set_attr "length" "4") @@ -12172,7 +12073,7 @@ [(match_parallel 0 "load_multiple_operation" [(set (match_operand:SI 1 "s_register_operand" "+rk") (plus:SI (match_dup 1) - (match_operand:SI 2 "const_int_operand" "I"))) + (match_operand:SI 2 "const_int_I_operand" "I"))) (set (match_operand:SI 3 "s_register_operand" "=rk") (mem:SI (match_dup 1))) ])] @@ -12201,7 +12102,7 @@ [(return) (set (match_operand:SI 1 "s_register_operand" "+rk") (plus:SI (match_dup 1) - (match_operand:SI 2 "const_int_operand" "I"))) + (match_operand:SI 2 "const_int_I_operand" "I"))) (set (match_operand:SI 3 "s_register_operand" "=rk") (mem:SI (match_dup 1))) ])] @@ -12254,7 +12155,7 @@ [(match_parallel 0 "pop_multiple_fp" [(set (match_operand:SI 1 "s_register_operand" "+rk") (plus:SI (match_dup 1) - (match_operand:SI 2 "const_int_operand" "I"))) + (match_operand:SI 2 "const_int_I_operand" "I"))) (set (match_operand:DF 3 "vfp_hard_register_operand" "") (mem:DF (match_dup 1)))])] "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP" diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/arm/cortex-a53.md gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/arm/cortex-a53.md --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/arm/cortex-a53.md 2014-01-05 19:58:26.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/arm/cortex-a53.md 2014-04-05 08:48:43.000000000 +0000 @@ -61,6 +61,11 @@ (define_cpu_unit "cortex_a53_fp_div_sqrt" "cortex_a53") +;; The Advanced SIMD pipelines. + +(define_cpu_unit "cortex_a53_simd0" "cortex_a53") +(define_cpu_unit "cortex_a53_simd1" "cortex_a53") + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ALU instructions. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -240,12 +245,45 @@ (define_insn_reservation "cortex_a53_fdivs" 14 (and (eq_attr "tune" "cortexa53") (eq_attr "type" "fdivs, fsqrts")) - "cortex_a53_slot0, cortex_a53_fp_div_sqrt * 13") + "cortex_a53_slot0, cortex_a53_fp_div_sqrt * 5") (define_insn_reservation "cortex_a53_fdivd" 29 (and (eq_attr "tune" "cortexa53") (eq_attr "type" "fdivd, fsqrtd")) - "cortex_a53_slot0, cortex_a53_fp_div_sqrt * 28") + "cortex_a53_slot0, cortex_a53_fp_div_sqrt * 8") + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; ARMv8-A Cryptographic extensions. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define_insn_reservation "cortex_a53_crypto_aese" 2 + (and (eq_attr "tune" "cortexa53") + (eq_attr "type" "crypto_aese")) + "cortex_a53_simd0") + +(define_insn_reservation "cortex_a53_crypto_aesmc" 2 + (and (eq_attr "tune" "cortexa53") + (eq_attr "type" "crypto_aesmc")) + "cortex_a53_simd0 | cortex_a53_simd1") + +(define_insn_reservation "cortex_a53_crypto_sha1_fast" 2 + (and (eq_attr "tune" "cortexa53") + (eq_attr "type" "crypto_sha1_fast, crypto_sha256_fast")) + "cortex_a53_simd0") + +(define_insn_reservation "cortex_a53_crypto_sha1_xor" 3 + (and (eq_attr "tune" "cortexa53") + (eq_attr "type" "crypto_sha1_xor")) + "cortex_a53_simd0") + +(define_insn_reservation "cortex_a53_crypto_sha_slow" 5 + (and (eq_attr "tune" "cortexa53") + (eq_attr "type" "crypto_sha1_slow, crypto_sha256_slow")) + "cortex_a53_simd0") + +(define_bypass 0 "cortex_a53_crypto_aese" + "cortex_a53_crypto_aesmc" + "aarch_crypto_can_dual_issue") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; VFP to/from core transfers. @@ -284,6 +322,16 @@ (eq_attr "type" "f_loadd")) "cortex_a53_slot0") +(define_insn_reservation "cortex_a53_f_load_2reg" 5 + (and (eq_attr "tune" "cortexa53") + (eq_attr "type" "neon_load2_2reg_q")) + "(cortex_a53_slot_any+cortex_a53_ls)*2") + +(define_insn_reservation "cortex_a53_f_loadq" 5 + (and (eq_attr "tune" "cortexa53") + (eq_attr "type" "neon_load1_1reg_q")) + "cortex_a53_slot_any+cortex_a53_ls") + (define_insn_reservation "cortex_a53_f_stores" 0 (and (eq_attr "tune" "cortexa53") (eq_attr "type" "f_stores")) @@ -307,3 +355,11 @@ cortex_a53_fdivs, cortex_a53_fdivd,\ cortex_a53_f2r") +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Crude Advanced SIMD approximation. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define_insn_reservation "cortex_53_advsimd" 4 + (and (eq_attr "tune" "cortexa53") + (eq_attr "is_neon_type" "yes")) + "cortex_a53_simd0") diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/arm/iterators.md gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/arm/iterators.md --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/arm/iterators.md 2014-01-05 19:58:26.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/arm/iterators.md 2014-03-28 19:04:56.000000000 +0000 @@ -551,8 +551,8 @@ (UNSPEC_SHA256SU1 "sha256su1")]) (define_int_attr crypto_type - [(UNSPEC_AESE "crypto_aes") (UNSPEC_AESD "crypto_aes") - (UNSPEC_AESMC "crypto_aes") (UNSPEC_AESIMC "crypto_aes") + [(UNSPEC_AESE "crypto_aese") (UNSPEC_AESD "crypto_aese") + (UNSPEC_AESMC "crypto_aesmc") (UNSPEC_AESIMC "crypto_aesmc") (UNSPEC_SHA1C "crypto_sha1_slow") (UNSPEC_SHA1P "crypto_sha1_slow") (UNSPEC_SHA1M "crypto_sha1_slow") (UNSPEC_SHA1SU1 "crypto_sha1_fast") (UNSPEC_SHA1SU0 "crypto_sha1_xor") (UNSPEC_SHA256H "crypto_sha256_slow") diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/arm/predicates.md gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/arm/predicates.md --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/arm/predicates.md 2014-01-05 19:58:26.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/arm/predicates.md 2014-04-04 14:53:38.000000000 +0000 @@ -153,6 +153,14 @@ (ior (match_operand 0 "arm_rhs_operand") (match_operand 0 "memory_operand"))) +(define_predicate "const_int_I_operand" + (and (match_operand 0 "const_int_operand") + (match_test "satisfies_constraint_I (op)"))) + +(define_predicate "const_int_M_operand" + (and (match_operand 0 "const_int_operand") + (match_test "satisfies_constraint_M (op)"))) + ;; This doesn't have to do much because the constant is already checked ;; in the shift_operator predicate. (define_predicate "shift_amount_operand" diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/arm/t-aprofile gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/arm/t-aprofile --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/arm/t-aprofile 2014-01-29 19:18:15.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/arm/t-aprofile 2014-03-28 19:04:56.000000000 +0000 @@ -81,7 +81,8 @@ MULTILIB_MATCHES += march?armv7-a=mcpu?cortex-a8 MULTILIB_MATCHES += march?armv7-a=mcpu?cortex-a9 MULTILIB_MATCHES += march?armv7-a=mcpu?cortex-a5 -MULTILIB_MATCHES += march?armv7ve=mcpu?cortex-a15=mcpu?cortex-a12 +MULTILIB_MATCHES += march?armv7ve=mcpu?cortex-a15 +MULTILIB_MATCHES += march?armv7ve=mcpu?cortex-a12 MULTILIB_MATCHES += march?armv7ve=mcpu?cortex-a15.cortex-a7 MULTILIB_MATCHES += march?armv8-a=mcpu?cortex-a53 MULTILIB_MATCHES += march?armv8-a=mcpu?cortex-a57 diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/arm/types.md gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/arm/types.md --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/arm/types.md 2014-01-05 19:58:26.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/arm/types.md 2014-03-28 19:04:56.000000000 +0000 @@ -524,7 +524,8 @@ ; ; The classification below is for Crypto instructions. ; -; crypto_aes +; crypto_aese +; crypto_aesmc ; crypto_sha1_xor ; crypto_sha1_fast ; crypto_sha1_slow @@ -1051,7 +1052,8 @@ neon_fp_div_d,\ neon_fp_div_d_q,\ \ - crypto_aes,\ + crypto_aese,\ + crypto_aesmc,\ crypto_sha1_xor,\ crypto_sha1_fast,\ crypto_sha1_slow,\ @@ -1075,3 +1077,102 @@ "smlalxy,umull,umulls,umaal,umlal,umlals,smull,smulls,smlal,smlals") (const_string "yes") (const_string "no"))) + +; YES if the "type" attribute assigned to the insn denotes an +; Advanced SIMD instruction, NO otherwise. +(define_attr "is_neon_type" "yes,no" + (if_then_else (eq_attr "type" + "neon_add, neon_add_q, neon_add_widen, neon_add_long,\ + neon_qadd, neon_qadd_q, neon_add_halve, neon_add_halve_q,\ + neon_add_halve_narrow_q,\ + neon_sub, neon_sub_q, neon_sub_widen, neon_sub_long, neon_qsub,\ + neon_qsub_q, neon_sub_halve, neon_sub_halve_q,\ + neon_sub_halve_narrow_q,\ + neon_abs, neon_abs_q, neon_neg, neon_neg_q, neon_qneg,\ + neon_qneg_q, neon_qabs, neon_qabs_q, neon_abd, neon_abd_q,\ + neon_abd_long, neon_minmax, neon_minmax_q, neon_compare,\ + neon_compare_q, neon_compare_zero, neon_compare_zero_q,\ + neon_arith_acc, neon_arith_acc_q, neon_reduc_add,\ + neon_reduc_add_q, neon_reduc_add_long, neon_reduc_add_acc,\ + neon_reduc_add_acc_q, neon_reduc_minmax, neon_reduc_minmax_q,\ + neon_logic, neon_logic_q, neon_tst, neon_tst_q,\ + neon_shift_imm, neon_shift_imm_q, neon_shift_imm_narrow_q,\ + neon_shift_imm_long, neon_shift_reg, neon_shift_reg_q,\ + neon_shift_acc, neon_shift_acc_q, neon_sat_shift_imm,\ + neon_sat_shift_imm_q, neon_sat_shift_imm_narrow_q,\ + neon_sat_shift_reg, neon_sat_shift_reg_q,\ + neon_ins, neon_ins_q, neon_move, neon_move_q, neon_move_narrow_q,\ + neon_permute, neon_permute_q, neon_zip, neon_zip_q, neon_tbl1,\ + neon_tbl1_q, neon_tbl2, neon_tbl2_q, neon_tbl3, neon_tbl3_q,\ + neon_tbl4, neon_tbl4_q, neon_bsl, neon_bsl_q, neon_cls,\ + neon_cls_q, neon_cnt, neon_cnt_q, neon_dup, neon_dup_q,\ + neon_ext, neon_ext_q, neon_rbit, neon_rbit_q,\ + neon_rev, neon_rev_q, neon_mul_b, neon_mul_b_q, neon_mul_h,\ + neon_mul_h_q, neon_mul_s, neon_mul_s_q, neon_mul_b_long,\ + neon_mul_h_long, neon_mul_s_long, neon_mul_d_long, neon_mul_h_scalar,\ + neon_mul_h_scalar_q, neon_mul_s_scalar, neon_mul_s_scalar_q,\ + neon_mul_h_scalar_long, neon_mul_s_scalar_long, neon_sat_mul_b,\ + neon_sat_mul_b_q, neon_sat_mul_h, neon_sat_mul_h_q,\ + neon_sat_mul_s, neon_sat_mul_s_q, neon_sat_mul_b_long,\ + neon_sat_mul_h_long, neon_sat_mul_s_long, neon_sat_mul_h_scalar,\ + neon_sat_mul_h_scalar_q, neon_sat_mul_s_scalar,\ + neon_sat_mul_s_scalar_q, neon_sat_mul_h_scalar_long,\ + neon_sat_mul_s_scalar_long, neon_mla_b, neon_mla_b_q, neon_mla_h,\ + neon_mla_h_q, neon_mla_s, neon_mla_s_q, neon_mla_b_long,\ + neon_mla_h_long, neon_mla_s_long, neon_mla_h_scalar,\ + neon_mla_h_scalar_q, neon_mla_s_scalar, neon_mla_s_scalar_q,\ + neon_mla_h_scalar_long, neon_mla_s_scalar_long,\ + neon_sat_mla_b_long, neon_sat_mla_h_long,\ + neon_sat_mla_s_long, neon_sat_mla_h_scalar_long,\ + neon_sat_mla_s_scalar_long,\ + neon_to_gp, neon_to_gp_q, neon_from_gp, neon_from_gp_q,\ + neon_ldr, neon_load1_1reg, neon_load1_1reg_q, neon_load1_2reg,\ + neon_load1_2reg_q, neon_load1_3reg, neon_load1_3reg_q,\ + neon_load1_4reg, neon_load1_4reg_q, neon_load1_all_lanes,\ + neon_load1_all_lanes_q, neon_load1_one_lane, neon_load1_one_lane_q,\ + neon_load2_2reg, neon_load2_2reg_q, neon_load2_4reg,\ + neon_load2_4reg_q, neon_load2_all_lanes, neon_load2_all_lanes_q,\ + neon_load2_one_lane, neon_load2_one_lane_q,\ + neon_load3_3reg, neon_load3_3reg_q, neon_load3_all_lanes,\ + neon_load3_all_lanes_q, neon_load3_one_lane, neon_load3_one_lane_q,\ + neon_load4_4reg, neon_load4_4reg_q, neon_load4_all_lanes,\ + neon_load4_all_lanes_q, neon_load4_one_lane, neon_load4_one_lane_q,\ + neon_str, neon_store1_1reg, neon_store1_1reg_q, neon_store1_2reg,\ + neon_store1_2reg_q, neon_store1_3reg, neon_store1_3reg_q,\ + neon_store1_4reg, neon_store1_4reg_q, neon_store1_one_lane,\ + neon_store1_one_lane_q, neon_store2_2reg, neon_store2_2reg_q,\ + neon_store2_4reg, neon_store2_4reg_q, neon_store2_one_lane,\ + neon_store2_one_lane_q, neon_store3_3reg, neon_store3_3reg_q,\ + neon_store3_one_lane, neon_store3_one_lane_q, neon_store4_4reg,\ + neon_store4_4reg_q, neon_store4_one_lane, neon_store4_one_lane_q,\ + neon_fp_abd_s, neon_fp_abd_s_q, neon_fp_abd_d, neon_fp_abd_d_q,\ + neon_fp_addsub_s, neon_fp_addsub_s_q, neon_fp_addsub_d,\ + neon_fp_addsub_d_q, neon_fp_compare_s, neon_fp_compare_s_q,\ + neon_fp_compare_d, neon_fp_compare_d_q, neon_fp_minmax_s,\ + neon_fp_minmax_s_q, neon_fp_minmax_d, neon_fp_minmax_d_q,\ + neon_fp_reduc_add_s, neon_fp_reduc_add_s_q, neon_fp_reduc_add_d,\ + neon_fp_reduc_add_d_q, neon_fp_reduc_minmax_s, + neon_fp_reduc_minmax_s_q, neon_fp_reduc_minmax_d,\ + neon_fp_reduc_minmax_d_q,\ + neon_fp_cvt_narrow_s_q, neon_fp_cvt_narrow_d_q,\ + neon_fp_cvt_widen_h, neon_fp_cvt_widen_s, neon_fp_to_int_s,\ + neon_fp_to_int_s_q, neon_int_to_fp_s, neon_int_to_fp_s_q,\ + neon_fp_round_s, neon_fp_round_s_q, neon_fp_recpe_s,\ + neon_fp_recpe_s_q,\ + neon_fp_recpe_d, neon_fp_recpe_d_q, neon_fp_recps_s,\ + neon_fp_recps_s_q, neon_fp_recps_d, neon_fp_recps_d_q,\ + neon_fp_recpx_s, neon_fp_recpx_s_q, neon_fp_recpx_d,\ + neon_fp_recpx_d_q, neon_fp_rsqrte_s, neon_fp_rsqrte_s_q,\ + neon_fp_rsqrte_d, neon_fp_rsqrte_d_q, neon_fp_rsqrts_s,\ + neon_fp_rsqrts_s_q, neon_fp_rsqrts_d, neon_fp_rsqrts_d_q,\ + neon_fp_mul_s, neon_fp_mul_s_q, neon_fp_mul_s_scalar,\ + neon_fp_mul_s_scalar_q, neon_fp_mul_d, neon_fp_mul_d_q,\ + neon_fp_mul_d_scalar_q, neon_fp_mla_s, neon_fp_mla_s_q,\ + neon_fp_mla_s_scalar, neon_fp_mla_s_scalar_q, neon_fp_mla_d,\ + neon_fp_mla_d_q, neon_fp_mla_d_scalar_q, neon_fp_sqrt_s,\ + neon_fp_sqrt_s_q, neon_fp_sqrt_d, neon_fp_sqrt_d_q,\ + neon_fp_div_s, neon_fp_div_s_q, neon_fp_div_d, neon_fp_div_d_q, crypto_aese,\ + crypto_aesmc, crypto_sha1_xor, crypto_sha1_fast, crypto_sha1_slow,\ + crypto_sha256_fast, crypto_sha256_slow") + (const_string "yes") + (const_string "no"))) diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/avr/avr-arch.h gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/avr/avr-arch.h --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/avr/avr-arch.h 2014-01-05 19:58:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/avr/avr-arch.h 2014-04-05 08:48:43.000000000 +0000 @@ -100,32 +100,12 @@ /* Index in avr_arch_types[]. */ enum avr_arch arch; + /* device specific feature */ + int dev_attribute; + /* Must lie outside user's namespace. NULL == no macro. */ const char *const macro; - /* Stack pointer have 8 bits width. */ - int short_sp; - - /* Some AVR devices have a core erratum when skipping a 2-word instruction. - Skip instructions are: SBRC, SBRS, SBIC, SBIS, CPSE. - Problems will occur with return address is IRQ executes during the - skip sequence. - - A support ticket from Atmel returned the following information: - - Subject: (ATTicket:644469) On AVR skip-bug core Erratum - From: avr@atmel.com Date: 2011-07-27 - (Please keep the subject when replying to this mail) - - This errata exists only in AT90S8515 and ATmega103 devices. - - For information please refer the following respective errata links - http://www.atmel.com/dyn/resources/prod_documents/doc2494.pdf - http://www.atmel.com/dyn/resources/prod_documents/doc1436.pdf */ - - /* Core Erratum: Must not skip 2-word instruction. */ - int errata_skip; - /* Start of data section. */ int data_section_start; @@ -136,6 +116,42 @@ const char *const library_name; } avr_mcu_t; +/* AVR device specific features. + +AVR_ISA_RMW + Only few avr devices have Read-Modify-Write (RMW) instructions + (XCH, LAC, LAS and LAT) + +AVR_SHORT_SP + Stack Pointer has only 8 bit width. + The device / multilib has an 8-bit stack pointer (no SPH). + +AVR_ERRATA_SKIP + Some AVR devices have a core erratum when skipping a 2-word instruction. + Skip instructions are: SBRC, SBRS, SBIC, SBIS, CPSE. + Problems will occur with return address is IRQ executes during the + skip sequence. + + A support ticket from Atmel returned the following information: + + Subject: (ATTicket:644469) On AVR skip-bug core Erratum + From: avr@atmel.com Date: 2011-07-27 + (Please keep the subject when replying to this mail) + + This errata exists only in AT90S8515 and ATmega103 devices. + + For information please refer the following respective errata links + http://www.atmel.com/dyn/resources/prod_documents/doc2494.pdf + http://www.atmel.com/dyn/resources/prod_documents/doc1436.pdf */ + +enum avr_device_specific_features +{ + AVR_ISA_NONE, + AVR_ISA_RMW = 0x1, /* device has RMW instructions. */ + AVR_SHORT_SP = 0x2, /* Stack Pointer has 8 bits width. */ + AVR_ERRATA_SKIP = 0x4 /* device has a core erratum. */ +}; + /* Map architecture to its texinfo string. */ typedef struct diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/avr/avr.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/avr/avr.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/avr/avr.c 2014-03-20 10:50:24.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/avr/avr.c 2014-04-05 08:48:43.000000000 +0000 @@ -10120,7 +10120,7 @@ static bool avr_2word_insn_p (rtx insn) { - if (avr_current_device->errata_skip + if ((avr_current_device->dev_attribute & AVR_ERRATA_SKIP) || !insn || 2 != get_attr_length (insn)) { diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/avr/avr-c.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/avr/avr-c.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/avr/avr-c.c 2014-02-12 12:25:58.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/avr/avr-c.c 2014-04-05 08:48:43.000000000 +0000 @@ -347,7 +347,7 @@ if (TARGET_NO_INTERRUPTS) cpp_define (pfile, "__NO_INTERRUPTS__"); - if (avr_current_device->errata_skip) + if (avr_current_device->dev_attribute & AVR_ERRATA_SKIP) { cpp_define (pfile, "__AVR_ERRATA_SKIP__"); @@ -355,6 +355,9 @@ cpp_define (pfile, "__AVR_ERRATA_SKIP_JMP_CALL__"); } + if (avr_current_device->dev_attribute & AVR_ISA_RMW) + cpp_define (pfile, "__AVR_ISA_RMW__"); + cpp_define_formatted (pfile, "__AVR_SFR_OFFSET__=0x%x", avr_current_arch->sfr_offset); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/avr/avr-devices.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/avr/avr-devices.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/avr/avr-devices.c 2014-01-05 19:58:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/avr/avr-devices.c 2014-04-05 08:48:43.000000000 +0000 @@ -104,11 +104,11 @@ const avr_mcu_t avr_mcu_types[] = { -#define AVR_MCU(NAME, ARCH, MACRO, SP8, ERR_SKIP, DATA_SEC, N_FLASH, LIBNAME)\ - { NAME, ARCH, MACRO, SP8, ERR_SKIP, DATA_SEC, N_FLASH, LIBNAME }, +#define AVR_MCU(NAME, ARCH, DEV_ATTRIBUTE, MACRO, DATA_SEC, N_FLASH, LIBNAME)\ + { NAME, ARCH, DEV_ATTRIBUTE, MACRO, DATA_SEC, N_FLASH, LIBNAME }, #include "avr-mcus.def" #undef AVR_MCU /* End of list. */ - { NULL, ARCH_UNKNOWN, NULL, 0, 0, 0, 0, NULL } + { NULL, ARCH_UNKNOWN, AVR_ISA_NONE, NULL, 0, 0, NULL } }; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/avr/avr.h gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/avr/avr.h --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/avr/avr.h 2014-02-24 09:22:33.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/avr/avr.h 2014-04-05 08:48:43.000000000 +0000 @@ -88,8 +88,9 @@ __AVR_HAVE_8BIT_SP__ and __AVR_HAVE_16BIT_SP__. During multilib generation there is always __AVR_SP8__ == __AVR_HAVE_8BIT_SP__. */ -#define AVR_HAVE_8BIT_SP \ - (avr_current_device->short_sp || TARGET_TINY_STACK || avr_sp8) +#define AVR_HAVE_8BIT_SP \ + ((avr_current_device->dev_attribute & AVR_SHORT_SP) || \ + TARGET_TINY_STACK || avr_sp8) #define AVR_HAVE_SPH (!avr_sp8) diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/avr/avr-mcus.def gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/avr/avr-mcus.def --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/avr/avr-mcus.def 2014-03-03 23:53:40.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/avr/avr-mcus.def 2014-04-05 08:48:43.000000000 +0000 @@ -33,291 +33,288 @@ Before including this file, define a macro: - AVR_MCU (NAME, ARCH, MACRO, SHORT_SP, ERRATA_SKIP, DATA_SEC, N_FLASH, - LIBRARY_NAME) + AVR_MCU (NAME, ARCH, DEV_ATTRIBUTE, MACRO, DATA_SEC, N_FLASH, LIBRARY_NAME) where the arguments are the fields of avr_mcu_t: - NAME Accept -mmcu= + NAME Accept -mmcu= - ARCH Specifies the multilib variant together with SHORT_SP + ARCH Specifies the multilib variant together with SHORT_SP - MACRO If NULL, this is a core and not a device. If non-NULL, - supply respective built-in macro. + DEV_ATTRIBUTE Specifies the device specific features + - additional ISA, short SP, errata skip etc., - SHORT_SP The device / multilib has an 8-bit stack pointer (no SPH). + MACRO If NULL, this is a core and not a device. If non-NULL, + supply respective built-in macro. - ERRATA_SKIP Apply work-around for the "skip 32-bit instruction" - silicon bug: Don't skip 32-bit instrctions. + DATA_SEC First address of SRAM, used in -Tdata= by the driver. - DATA_SEC First address of SRAM, used in -Tdata= by the driver. + N_FLASH Number of 64 KiB flash segments, rounded up. - N_FLASH Number of 64 KiB flash segments, rounded up. - - LIBRARY_NAME Used by the driver to linke startup code from avr-libc - as of crt.o + LIBRARY_NAME Used by the driver to linke startup code from avr-libc + as of crt.o "avr2" must be first for the "0" default to work as intended. */ /* Classic, <= 8K. */ -AVR_MCU ("avr2", ARCH_AVR2, NULL, 0, 1, 0x0060, 6, "s8515") -AVR_MCU ("at90s2313", ARCH_AVR2, "__AVR_AT90S2313__", 1, 0, 0x0060, 1, "s2313") -AVR_MCU ("at90s2323", ARCH_AVR2, "__AVR_AT90S2323__", 1, 0, 0x0060, 1, "s2323") -AVR_MCU ("at90s2333", ARCH_AVR2, "__AVR_AT90S2333__", 1, 0, 0x0060, 1, "s2333") -AVR_MCU ("at90s2343", ARCH_AVR2, "__AVR_AT90S2343__", 1, 0, 0x0060, 1, "s2343") -AVR_MCU ("attiny22", ARCH_AVR2, "__AVR_ATtiny22__", 1, 0, 0x0060, 1, "tn22") -AVR_MCU ("attiny26", ARCH_AVR2, "__AVR_ATtiny26__", 1, 0, 0x0060, 1, "tn26") -AVR_MCU ("at90s4414", ARCH_AVR2, "__AVR_AT90S4414__", 0, 0, 0x0060, 1, "s4414") -AVR_MCU ("at90s4433", ARCH_AVR2, "__AVR_AT90S4433__", 1, 0, 0x0060, 1, "s4433") -AVR_MCU ("at90s4434", ARCH_AVR2, "__AVR_AT90S4434__", 0, 0, 0x0060, 1, "s4434") -AVR_MCU ("at90s8515", ARCH_AVR2, "__AVR_AT90S8515__", 0, 1, 0x0060, 1, "s8515") -AVR_MCU ("at90c8534", ARCH_AVR2, "__AVR_AT90C8534__", 0, 0, 0x0060, 1, "c8534") -AVR_MCU ("at90s8535", ARCH_AVR2, "__AVR_AT90S8535__", 0, 0, 0x0060, 1, "s8535") +AVR_MCU ("avr2", ARCH_AVR2, AVR_ERRATA_SKIP, NULL, 0x0060, 6, "s8515") +AVR_MCU ("at90s2313", ARCH_AVR2, AVR_SHORT_SP, "__AVR_AT90S2313__", 0x0060, 1, "s2313") +AVR_MCU ("at90s2323", ARCH_AVR2, AVR_SHORT_SP, "__AVR_AT90S2323__", 0x0060, 1, "s2323") +AVR_MCU ("at90s2333", ARCH_AVR2, AVR_SHORT_SP, "__AVR_AT90S2333__", 0x0060, 1, "s2333") +AVR_MCU ("at90s2343", ARCH_AVR2, AVR_SHORT_SP, "__AVR_AT90S2343__", 0x0060, 1, "s2343") +AVR_MCU ("attiny22", ARCH_AVR2, AVR_SHORT_SP, "__AVR_ATtiny22__", 0x0060, 1, "tn22") +AVR_MCU ("attiny26", ARCH_AVR2, AVR_SHORT_SP, "__AVR_ATtiny26__", 0x0060, 1, "tn26") +AVR_MCU ("at90s4414", ARCH_AVR2, AVR_ISA_NONE, "__AVR_AT90S4414__", 0x0060, 1, "s4414") +AVR_MCU ("at90s4433", ARCH_AVR2, AVR_SHORT_SP, "__AVR_AT90S4433__", 0x0060, 1, "s4433") +AVR_MCU ("at90s4434", ARCH_AVR2, AVR_ISA_NONE, "__AVR_AT90S4434__", 0x0060, 1, "s4434") +AVR_MCU ("at90s8515", ARCH_AVR2, AVR_ERRATA_SKIP, "__AVR_AT90S8515__", 0x0060, 1, "s8515") +AVR_MCU ("at90c8534", ARCH_AVR2, AVR_ISA_NONE, "__AVR_AT90C8534__", 0x0060, 1, "c8534") +AVR_MCU ("at90s8535", ARCH_AVR2, AVR_ISA_NONE, "__AVR_AT90S8535__", 0x0060, 1, "s8535") /* Classic + MOVW, <= 8K. */ -AVR_MCU ("avr25", ARCH_AVR25, NULL, 0, 0, 0x0060, 1, "tn85") -AVR_MCU ("ata6289", ARCH_AVR25, "__AVR_ATA6289__", 0, 0, 0x0100, 1, "a6289") -AVR_MCU ("ata5272", ARCH_AVR25, "__AVR_ATA5272__", 0, 0, 0x0100, 1, "a5272") -AVR_MCU ("attiny13", ARCH_AVR25, "__AVR_ATtiny13__", 1, 0, 0x0060, 1, "tn13") -AVR_MCU ("attiny13a", ARCH_AVR25, "__AVR_ATtiny13A__", 1, 0, 0x0060, 1, "tn13a") -AVR_MCU ("attiny2313", ARCH_AVR25, "__AVR_ATtiny2313__", 1, 0, 0x0060, 1, "tn2313") -AVR_MCU ("attiny2313a", ARCH_AVR25, "__AVR_ATtiny2313A__", 1, 0, 0x0060, 1, "tn2313a") -AVR_MCU ("attiny24", ARCH_AVR25, "__AVR_ATtiny24__", 1, 0, 0x0060, 1, "tn24") -AVR_MCU ("attiny24a", ARCH_AVR25, "__AVR_ATtiny24A__", 1, 0, 0x0060, 1, "tn24a") -AVR_MCU ("attiny4313", ARCH_AVR25, "__AVR_ATtiny4313__", 0, 0, 0x0060, 1, "tn4313") -AVR_MCU ("attiny44", ARCH_AVR25, "__AVR_ATtiny44__", 0, 0, 0x0060, 1, "tn44") -AVR_MCU ("attiny44a", ARCH_AVR25, "__AVR_ATtiny44A__", 0, 0, 0x0060, 1, "tn44a") -AVR_MCU ("attiny84", ARCH_AVR25, "__AVR_ATtiny84__", 0, 0, 0x0060, 1, "tn84") -AVR_MCU ("attiny84a", ARCH_AVR25, "__AVR_ATtiny84A__", 0, 0, 0x0060, 1, "tn84") -AVR_MCU ("attiny25", ARCH_AVR25, "__AVR_ATtiny25__", 1, 0, 0x0060, 1, "tn25") -AVR_MCU ("attiny45", ARCH_AVR25, "__AVR_ATtiny45__", 0, 0, 0x0060, 1, "tn45") -AVR_MCU ("attiny85", ARCH_AVR25, "__AVR_ATtiny85__", 0, 0, 0x0060, 1, "tn85") -AVR_MCU ("attiny261", ARCH_AVR25, "__AVR_ATtiny261__", 1, 0, 0x0060, 1, "tn261") -AVR_MCU ("attiny261a", ARCH_AVR25, "__AVR_ATtiny261A__", 1, 0, 0x0060, 1, "tn261a") -AVR_MCU ("attiny461", ARCH_AVR25, "__AVR_ATtiny461__", 0, 0, 0x0060, 1, "tn461") -AVR_MCU ("attiny461a", ARCH_AVR25, "__AVR_ATtiny461A__", 0, 0, 0x0060, 1, "tn461a") -AVR_MCU ("attiny861", ARCH_AVR25, "__AVR_ATtiny861__", 0, 0, 0x0060, 1, "tn861") -AVR_MCU ("attiny861a", ARCH_AVR25, "__AVR_ATtiny861A__", 0, 0, 0x0060, 1, "tn861a") -AVR_MCU ("attiny43u", ARCH_AVR25, "__AVR_ATtiny43U__", 0, 0, 0x0060, 1, "tn43u") -AVR_MCU ("attiny87", ARCH_AVR25, "__AVR_ATtiny87__", 0, 0, 0x0100, 1, "tn87") -AVR_MCU ("attiny48", ARCH_AVR25, "__AVR_ATtiny48__", 0, 0, 0x0100, 1, "tn48") -AVR_MCU ("attiny88", ARCH_AVR25, "__AVR_ATtiny88__", 0, 0, 0x0100, 1, "tn88") -AVR_MCU ("at86rf401", ARCH_AVR25, "__AVR_AT86RF401__", 0, 0, 0x0060, 1, "86401") +AVR_MCU ("avr25", ARCH_AVR25, AVR_ISA_NONE, NULL, 0x0060, 1, "tn85") +AVR_MCU ("ata6289", ARCH_AVR25, AVR_ISA_NONE, "__AVR_ATA6289__", 0x0100, 1, "a6289") +AVR_MCU ("ata5272", ARCH_AVR25, AVR_ISA_NONE, "__AVR_ATA5272__", 0x0100, 1, "a5272") +AVR_MCU ("attiny13", ARCH_AVR25, AVR_SHORT_SP, "__AVR_ATtiny13__", 0x0060, 1, "tn13") +AVR_MCU ("attiny13a", ARCH_AVR25, AVR_SHORT_SP, "__AVR_ATtiny13A__", 0x0060, 1, "tn13a") +AVR_MCU ("attiny2313", ARCH_AVR25, AVR_SHORT_SP, "__AVR_ATtiny2313__", 0x0060, 1, "tn2313") +AVR_MCU ("attiny2313a", ARCH_AVR25, AVR_SHORT_SP, "__AVR_ATtiny2313A__", 0x0060, 1, "tn2313a") +AVR_MCU ("attiny24", ARCH_AVR25, AVR_SHORT_SP, "__AVR_ATtiny24__", 0x0060, 1, "tn24") +AVR_MCU ("attiny24a", ARCH_AVR25, AVR_SHORT_SP, "__AVR_ATtiny24A__", 0x0060, 1, "tn24a") +AVR_MCU ("attiny4313", ARCH_AVR25, AVR_ISA_NONE, "__AVR_ATtiny4313__", 0x0060, 1, "tn4313") +AVR_MCU ("attiny44", ARCH_AVR25, AVR_ISA_NONE, "__AVR_ATtiny44__", 0x0060, 1, "tn44") +AVR_MCU ("attiny44a", ARCH_AVR25, AVR_ISA_NONE, "__AVR_ATtiny44A__", 0x0060, 1, "tn44a") +AVR_MCU ("attiny84", ARCH_AVR25, AVR_ISA_NONE, "__AVR_ATtiny84__", 0x0060, 1, "tn84") +AVR_MCU ("attiny84a", ARCH_AVR25, AVR_ISA_NONE, "__AVR_ATtiny84A__", 0x0060, 1, "tn84") +AVR_MCU ("attiny25", ARCH_AVR25, AVR_SHORT_SP, "__AVR_ATtiny25__", 0x0060, 1, "tn25") +AVR_MCU ("attiny45", ARCH_AVR25, AVR_ISA_NONE, "__AVR_ATtiny45__", 0x0060, 1, "tn45") +AVR_MCU ("attiny85", ARCH_AVR25, AVR_ISA_NONE, "__AVR_ATtiny85__", 0x0060, 1, "tn85") +AVR_MCU ("attiny261", ARCH_AVR25, AVR_SHORT_SP, "__AVR_ATtiny261__", 0x0060, 1, "tn261") +AVR_MCU ("attiny261a", ARCH_AVR25, AVR_SHORT_SP, "__AVR_ATtiny261A__", 0x0060, 1, "tn261a") +AVR_MCU ("attiny461", ARCH_AVR25, AVR_ISA_NONE, "__AVR_ATtiny461__", 0x0060, 1, "tn461") +AVR_MCU ("attiny461a", ARCH_AVR25, AVR_ISA_NONE, "__AVR_ATtiny461A__", 0x0060, 1, "tn461a") +AVR_MCU ("attiny861", ARCH_AVR25, AVR_ISA_NONE, "__AVR_ATtiny861__", 0x0060, 1, "tn861") +AVR_MCU ("attiny861a", ARCH_AVR25, AVR_ISA_NONE, "__AVR_ATtiny861A__", 0x0060, 1, "tn861a") +AVR_MCU ("attiny43u", ARCH_AVR25, AVR_ISA_NONE, "__AVR_ATtiny43U__", 0x0060, 1, "tn43u") +AVR_MCU ("attiny87", ARCH_AVR25, AVR_ISA_NONE, "__AVR_ATtiny87__", 0x0100, 1, "tn87") +AVR_MCU ("attiny48", ARCH_AVR25, AVR_ISA_NONE, "__AVR_ATtiny48__", 0x0100, 1, "tn48") +AVR_MCU ("attiny88", ARCH_AVR25, AVR_ISA_NONE, "__AVR_ATtiny88__", 0x0100, 1, "tn88") +AVR_MCU ("at86rf401", ARCH_AVR25, AVR_ISA_NONE, "__AVR_AT86RF401__", 0x0060, 1, "86401") /* Classic, > 8K, <= 64K. */ -AVR_MCU ("avr3", ARCH_AVR3, NULL, 0, 0, 0x0060, 1, "43355") -AVR_MCU ("at43usb355", ARCH_AVR3, "__AVR_AT43USB355__", 0, 0, 0x0060, 1, "43355") -AVR_MCU ("at76c711", ARCH_AVR3, "__AVR_AT76C711__", 0, 0, 0x0060, 1, "76711") +AVR_MCU ("avr3", ARCH_AVR3, AVR_ISA_NONE, NULL, 0x0060, 1, "43355") +AVR_MCU ("at43usb355", ARCH_AVR3, AVR_ISA_NONE, "__AVR_AT43USB355__", 0x0060, 1, "43355") +AVR_MCU ("at76c711", ARCH_AVR3, AVR_ISA_NONE, "__AVR_AT76C711__", 0x0060, 1, "76711") /* Classic, == 128K. */ -AVR_MCU ("avr31", ARCH_AVR31, NULL, 0, 1, 0x0060, 2, "m103") -AVR_MCU ("atmega103", ARCH_AVR31, "__AVR_ATmega103__", 0, 1, 0x0060, 2, "m103") -AVR_MCU ("at43usb320", ARCH_AVR31, "__AVR_AT43USB320__", 0, 0, 0x0060, 2, "43320") +AVR_MCU ("avr31", ARCH_AVR31, AVR_ERRATA_SKIP, NULL, 0x0060, 2, "m103") +AVR_MCU ("atmega103", ARCH_AVR31, AVR_ERRATA_SKIP, "__AVR_ATmega103__", 0x0060, 2, "m103") +AVR_MCU ("at43usb320", ARCH_AVR31, AVR_ISA_NONE, "__AVR_AT43USB320__", 0x0060, 2, "43320") /* Classic + MOVW + JMP/CALL. */ -AVR_MCU ("avr35", ARCH_AVR35, NULL, 0, 0, 0x0100, 1, "usb162") -AVR_MCU ("ata5505", ARCH_AVR35, "__AVR_ATA5505__", 0, 0, 0x0100, 1, "a5505") -AVR_MCU ("at90usb82", ARCH_AVR35, "__AVR_AT90USB82__", 0, 0, 0x0100, 1, "usb82") -AVR_MCU ("at90usb162", ARCH_AVR35, "__AVR_AT90USB162__", 0, 0, 0x0100, 1, "usb162") -AVR_MCU ("atmega8u2", ARCH_AVR35, "__AVR_ATmega8U2__", 0, 0, 0x0100, 1, "m8u2") -AVR_MCU ("atmega16u2", ARCH_AVR35, "__AVR_ATmega16U2__", 0, 0, 0x0100, 1, "m16u2") -AVR_MCU ("atmega32u2", ARCH_AVR35, "__AVR_ATmega32U2__", 0, 0, 0x0100, 1, "m32u2") -AVR_MCU ("attiny167", ARCH_AVR35, "__AVR_ATtiny167__", 0, 0, 0x0100, 1, "tn167") -AVR_MCU ("attiny1634", ARCH_AVR35, "__AVR_ATtiny1634__", 0, 0, 0x0100, 1, "tn1634") +AVR_MCU ("avr35", ARCH_AVR35, AVR_ISA_NONE, NULL, 0x0100, 1, "usb162") +AVR_MCU ("ata5505", ARCH_AVR35, AVR_ISA_NONE, "__AVR_ATA5505__", 0x0100, 1, "a5505") +AVR_MCU ("at90usb82", ARCH_AVR35, AVR_ISA_NONE, "__AVR_AT90USB82__", 0x0100, 1, "usb82") +AVR_MCU ("at90usb162", ARCH_AVR35, AVR_ISA_NONE, "__AVR_AT90USB162__", 0x0100, 1, "usb162") +AVR_MCU ("atmega8u2", ARCH_AVR35, AVR_ISA_NONE, "__AVR_ATmega8U2__", 0x0100, 1, "m8u2") +AVR_MCU ("atmega16u2", ARCH_AVR35, AVR_ISA_NONE, "__AVR_ATmega16U2__", 0x0100, 1, "m16u2") +AVR_MCU ("atmega32u2", ARCH_AVR35, AVR_ISA_NONE, "__AVR_ATmega32U2__", 0x0100, 1, "m32u2") +AVR_MCU ("attiny167", ARCH_AVR35, AVR_ISA_NONE, "__AVR_ATtiny167__", 0x0100, 1, "tn167") +AVR_MCU ("attiny1634", ARCH_AVR35, AVR_ISA_NONE, "__AVR_ATtiny1634__", 0x0100, 1, "tn1634") /* Enhanced, <= 8K. */ -AVR_MCU ("avr4", ARCH_AVR4, NULL, 0, 0, 0x0060, 1, "m8") -AVR_MCU ("ata6285", ARCH_AVR4, "__AVR_ATA6285__", 0, 0, 0x0100, 1, "a6285") -AVR_MCU ("ata6286", ARCH_AVR4, "__AVR_ATA6286__", 0, 0, 0x0100, 1, "a6286") -AVR_MCU ("atmega8", ARCH_AVR4, "__AVR_ATmega8__", 0, 0, 0x0060, 1, "m8") -AVR_MCU ("atmega8a", ARCH_AVR4, "__AVR_ATmega8A__", 0, 0, 0x0060, 1, "m8a") -AVR_MCU ("atmega48", ARCH_AVR4, "__AVR_ATmega48__", 0, 0, 0x0100, 1, "m48") -AVR_MCU ("atmega48a", ARCH_AVR4, "__AVR_ATmega48A__", 0, 0, 0x0100, 1, "m48a") -AVR_MCU ("atmega48p", ARCH_AVR4, "__AVR_ATmega48P__", 0, 0, 0x0100, 1, "m48p") -AVR_MCU ("atmega48pa", ARCH_AVR4, "__AVR_ATmega48PA__", 0, 0, 0x0100, 1, "m48pa") -AVR_MCU ("atmega88", ARCH_AVR4, "__AVR_ATmega88__", 0, 0, 0x0100, 1, "m88") -AVR_MCU ("atmega88a", ARCH_AVR4, "__AVR_ATmega88A__", 0, 0, 0x0100, 1, "m88a") -AVR_MCU ("atmega88p", ARCH_AVR4, "__AVR_ATmega88P__", 0, 0, 0x0100, 1, "m88p") -AVR_MCU ("atmega88pa", ARCH_AVR4, "__AVR_ATmega88PA__", 0, 0, 0x0100, 1, "m88pa") -AVR_MCU ("atmega8515", ARCH_AVR4, "__AVR_ATmega8515__", 0, 0, 0x0060, 1, "m8515") -AVR_MCU ("atmega8535", ARCH_AVR4, "__AVR_ATmega8535__", 0, 0, 0x0060, 1, "m8535") -AVR_MCU ("atmega8hva", ARCH_AVR4, "__AVR_ATmega8HVA__", 0, 0, 0x0100, 1, "m8hva") -AVR_MCU ("at90pwm1", ARCH_AVR4, "__AVR_AT90PWM1__", 0, 0, 0x0100, 1, "90pwm1") -AVR_MCU ("at90pwm2", ARCH_AVR4, "__AVR_AT90PWM2__", 0, 0, 0x0100, 1, "90pwm2") -AVR_MCU ("at90pwm2b", ARCH_AVR4, "__AVR_AT90PWM2B__", 0, 0, 0x0100, 1, "90pwm2b") -AVR_MCU ("at90pwm3", ARCH_AVR4, "__AVR_AT90PWM3__", 0, 0, 0x0100, 1, "90pwm3") -AVR_MCU ("at90pwm3b", ARCH_AVR4, "__AVR_AT90PWM3B__", 0, 0, 0x0100, 1, "90pwm3b") -AVR_MCU ("at90pwm81", ARCH_AVR4, "__AVR_AT90PWM81__", 0, 0, 0x0100, 1, "90pwm81") +AVR_MCU ("avr4", ARCH_AVR4, AVR_ISA_NONE, NULL, 0x0060, 1, "m8") +AVR_MCU ("ata6285", ARCH_AVR4, AVR_ISA_NONE, "__AVR_ATA6285__", 0x0100, 1, "a6285") +AVR_MCU ("ata6286", ARCH_AVR4, AVR_ISA_NONE, "__AVR_ATA6286__", 0x0100, 1, "a6286") +AVR_MCU ("atmega8", ARCH_AVR4, AVR_ISA_NONE, "__AVR_ATmega8__", 0x0060, 1, "m8") +AVR_MCU ("atmega8a", ARCH_AVR4, AVR_ISA_NONE, "__AVR_ATmega8A__", 0x0060, 1, "m8a") +AVR_MCU ("atmega48", ARCH_AVR4, AVR_ISA_NONE, "__AVR_ATmega48__", 0x0100, 1, "m48") +AVR_MCU ("atmega48a", ARCH_AVR4, AVR_ISA_NONE, "__AVR_ATmega48A__", 0x0100, 1, "m48a") +AVR_MCU ("atmega48p", ARCH_AVR4, AVR_ISA_NONE, "__AVR_ATmega48P__", 0x0100, 1, "m48p") +AVR_MCU ("atmega48pa", ARCH_AVR4, AVR_ISA_NONE, "__AVR_ATmega48PA__", 0x0100, 1, "m48pa") +AVR_MCU ("atmega88", ARCH_AVR4, AVR_ISA_NONE, "__AVR_ATmega88__", 0x0100, 1, "m88") +AVR_MCU ("atmega88a", ARCH_AVR4, AVR_ISA_NONE, "__AVR_ATmega88A__", 0x0100, 1, "m88a") +AVR_MCU ("atmega88p", ARCH_AVR4, AVR_ISA_NONE, "__AVR_ATmega88P__", 0x0100, 1, "m88p") +AVR_MCU ("atmega88pa", ARCH_AVR4, AVR_ISA_NONE, "__AVR_ATmega88PA__", 0x0100, 1, "m88pa") +AVR_MCU ("atmega8515", ARCH_AVR4, AVR_ISA_NONE, "__AVR_ATmega8515__", 0x0060, 1, "m8515") +AVR_MCU ("atmega8535", ARCH_AVR4, AVR_ISA_NONE, "__AVR_ATmega8535__", 0x0060, 1, "m8535") +AVR_MCU ("atmega8hva", ARCH_AVR4, AVR_ISA_NONE, "__AVR_ATmega8HVA__", 0x0100, 1, "m8hva") +AVR_MCU ("at90pwm1", ARCH_AVR4, AVR_ISA_NONE, "__AVR_AT90PWM1__", 0x0100, 1, "90pwm1") +AVR_MCU ("at90pwm2", ARCH_AVR4, AVR_ISA_NONE, "__AVR_AT90PWM2__", 0x0100, 1, "90pwm2") +AVR_MCU ("at90pwm2b", ARCH_AVR4, AVR_ISA_NONE, "__AVR_AT90PWM2B__", 0x0100, 1, "90pwm2b") +AVR_MCU ("at90pwm3", ARCH_AVR4, AVR_ISA_NONE, "__AVR_AT90PWM3__", 0x0100, 1, "90pwm3") +AVR_MCU ("at90pwm3b", ARCH_AVR4, AVR_ISA_NONE, "__AVR_AT90PWM3B__", 0x0100, 1, "90pwm3b") +AVR_MCU ("at90pwm81", ARCH_AVR4, AVR_ISA_NONE, "__AVR_AT90PWM81__", 0x0100, 1, "90pwm81") /* Enhanced, > 8K, <= 64K. */ -AVR_MCU ("avr5", ARCH_AVR5, NULL, 0, 0, 0x0060, 1, "m16") -AVR_MCU ("ata5790", ARCH_AVR5, "__AVR_ATA5790__", 0, 0, 0x0100, 1, "a5790") -AVR_MCU ("ata5790n", ARCH_AVR5, "__AVR_ATA5790N__", 0, 0, 0x0100, 1, "a5790n") -AVR_MCU ("ata5795", ARCH_AVR5, "__AVR_ATA5795__", 0, 0, 0x0100, 1, "a5795") -AVR_MCU ("atmega16", ARCH_AVR5, "__AVR_ATmega16__", 0, 0, 0x0060, 1, "m16") -AVR_MCU ("atmega16a", ARCH_AVR5, "__AVR_ATmega16A__", 0, 0, 0x0060, 1, "m16a") -AVR_MCU ("atmega161", ARCH_AVR5, "__AVR_ATmega161__", 0, 0, 0x0060, 1, "m161") -AVR_MCU ("atmega162", ARCH_AVR5, "__AVR_ATmega162__", 0, 0, 0x0100, 1, "m162") -AVR_MCU ("atmega163", ARCH_AVR5, "__AVR_ATmega163__", 0, 0, 0x0060, 1, "m163") -AVR_MCU ("atmega164a", ARCH_AVR5, "__AVR_ATmega164A__", 0, 0, 0x0100, 1, "m164a") -AVR_MCU ("atmega164p", ARCH_AVR5, "__AVR_ATmega164P__", 0, 0, 0x0100, 1, "m164p") -AVR_MCU ("atmega164pa", ARCH_AVR5, "__AVR_ATmega164PA__", 0, 0, 0x0100, 1, "m164pa") -AVR_MCU ("atmega165", ARCH_AVR5, "__AVR_ATmega165__", 0, 0, 0x0100, 1, "m165") -AVR_MCU ("atmega165a", ARCH_AVR5, "__AVR_ATmega165A__", 0, 0, 0x0100, 1, "m165a") -AVR_MCU ("atmega165p", ARCH_AVR5, "__AVR_ATmega165P__", 0, 0, 0x0100, 1, "m165p") -AVR_MCU ("atmega165pa", ARCH_AVR5, "__AVR_ATmega165PA__", 0, 0, 0x0100, 1, "m165pa") -AVR_MCU ("atmega168", ARCH_AVR5, "__AVR_ATmega168__", 0, 0, 0x0100, 1, "m168") -AVR_MCU ("atmega168a", ARCH_AVR5, "__AVR_ATmega168A__", 0, 0, 0x0100, 1, "m168a") -AVR_MCU ("atmega168p", ARCH_AVR5, "__AVR_ATmega168P__", 0, 0, 0x0100, 1, "m168p") -AVR_MCU ("atmega168pa", ARCH_AVR5, "__AVR_ATmega168PA__", 0, 0, 0x0100, 1, "m168pa") -AVR_MCU ("atmega169", ARCH_AVR5, "__AVR_ATmega169__", 0, 0, 0x0100, 1, "m169") -AVR_MCU ("atmega169a", ARCH_AVR5, "__AVR_ATmega169A__", 0, 0, 0x0100, 1, "m169a") -AVR_MCU ("atmega169p", ARCH_AVR5, "__AVR_ATmega169P__", 0, 0, 0x0100, 1, "m169p") -AVR_MCU ("atmega169pa", ARCH_AVR5, "__AVR_ATmega169PA__", 0, 0, 0x0100, 1, "m169pa") -AVR_MCU ("atmega16hvb", ARCH_AVR5, "__AVR_ATmega16HVB__", 0, 0, 0x0100, 1, "m16hvb") -AVR_MCU ("atmega16hvbrevb", ARCH_AVR5, "__AVR_ATmega16HVBREVB__", 0, 0, 0x0100, 1, "m16hvbrevb") -AVR_MCU ("atmega16m1", ARCH_AVR5, "__AVR_ATmega16M1__", 0, 0, 0x0100, 1, "m16m1") -AVR_MCU ("atmega16u4", ARCH_AVR5, "__AVR_ATmega16U4__", 0, 0, 0x0100, 1, "m16u4") -AVR_MCU ("atmega26hvg", ARCH_AVR5, "__AVR_ATmega26HVG__", 0, 0, 0x0100, 1, "m26hvg") -AVR_MCU ("atmega32a", ARCH_AVR5, "__AVR_ATmega32A__", 0, 0, 0x0060, 1, "m32a") -AVR_MCU ("atmega32", ARCH_AVR5, "__AVR_ATmega32__", 0, 0, 0x0060, 1, "m32") -AVR_MCU ("atmega323", ARCH_AVR5, "__AVR_ATmega323__", 0, 0, 0x0060, 1, "m323") -AVR_MCU ("atmega324a", ARCH_AVR5, "__AVR_ATmega324A__", 0, 0, 0x0100, 1, "m324a") -AVR_MCU ("atmega324p", ARCH_AVR5, "__AVR_ATmega324P__", 0, 0, 0x0100, 1, "m324p") -AVR_MCU ("atmega324pa", ARCH_AVR5, "__AVR_ATmega324PA__", 0, 0, 0x0100, 1, "m324pa") -AVR_MCU ("atmega325", ARCH_AVR5, "__AVR_ATmega325__", 0, 0, 0x0100, 1, "m325") -AVR_MCU ("atmega325a", ARCH_AVR5, "__AVR_ATmega325A__", 0, 0, 0x0100, 1, "m325a") -AVR_MCU ("atmega325p", ARCH_AVR5, "__AVR_ATmega325P__", 0, 0, 0x0100, 1, "m325p") -AVR_MCU ("atmega3250", ARCH_AVR5, "__AVR_ATmega3250__", 0, 0, 0x0100, 1, "m3250") -AVR_MCU ("atmega3250a", ARCH_AVR5, "__AVR_ATmega3250A__", 0, 0, 0x0100, 1, "m3250a") -AVR_MCU ("atmega3250p", ARCH_AVR5, "__AVR_ATmega3250P__", 0, 0, 0x0100, 1, "m3250p") -AVR_MCU ("atmega3250pa", ARCH_AVR5, "__AVR_ATmega3250PA__", 0, 0, 0x0100, 1, "m3250pa") -AVR_MCU ("atmega328", ARCH_AVR5, "__AVR_ATmega328__", 0, 0, 0x0100, 1, "m328") -AVR_MCU ("atmega328p", ARCH_AVR5, "__AVR_ATmega328P__", 0, 0, 0x0100, 1, "m328p") -AVR_MCU ("atmega329", ARCH_AVR5, "__AVR_ATmega329__", 0, 0, 0x0100, 1, "m329") -AVR_MCU ("atmega329a", ARCH_AVR5, "__AVR_ATmega329A__", 0, 0, 0x0100, 1, "m329a") -AVR_MCU ("atmega329p", ARCH_AVR5, "__AVR_ATmega329P__", 0, 0, 0x0100, 1, "m329p") -AVR_MCU ("atmega329pa", ARCH_AVR5, "__AVR_ATmega329PA__", 0, 0, 0x0100, 1, "m329pa") -AVR_MCU ("atmega3290", ARCH_AVR5, "__AVR_ATmega3290__", 0, 0, 0x0100, 1, "m3290") -AVR_MCU ("atmega3290a", ARCH_AVR5, "__AVR_ATmega3290A__", 0, 0, 0x0100, 1, "m3290a") -AVR_MCU ("atmega3290p", ARCH_AVR5, "__AVR_ATmega3290P__", 0, 0, 0x0100, 1, "m3290p") -AVR_MCU ("atmega3290pa", ARCH_AVR5, "__AVR_ATmega3290PA__", 0, 0, 0x0100, 1, "m3290pa") -AVR_MCU ("atmega32c1", ARCH_AVR5, "__AVR_ATmega32C1__", 0, 0, 0x0100, 1, "m32c1") -AVR_MCU ("atmega32m1", ARCH_AVR5, "__AVR_ATmega32M1__", 0, 0, 0x0100, 1, "m32m1") -AVR_MCU ("atmega32u4", ARCH_AVR5, "__AVR_ATmega32U4__", 0, 0, 0x0100, 1, "m32u4") -AVR_MCU ("atmega32u6", ARCH_AVR5, "__AVR_ATmega32U6__", 0, 0, 0x0100, 1, "m32u6") -AVR_MCU ("atmega406", ARCH_AVR5, "__AVR_ATmega406__", 0, 0, 0x0100, 1, "m406") -AVR_MCU ("atmega64", ARCH_AVR5, "__AVR_ATmega64__", 0, 0, 0x0100, 1, "m64") -AVR_MCU ("atmega64a", ARCH_AVR5, "__AVR_ATmega64A__", 0, 0, 0x0100, 1, "m64a") -AVR_MCU ("atmega640", ARCH_AVR5, "__AVR_ATmega640__", 0, 0, 0x0200, 1, "m640") -AVR_MCU ("atmega644", ARCH_AVR5, "__AVR_ATmega644__", 0, 0, 0x0100, 1, "m644") -AVR_MCU ("atmega644a", ARCH_AVR5, "__AVR_ATmega644A__", 0, 0, 0x0100, 1, "m644a") -AVR_MCU ("atmega644p", ARCH_AVR5, "__AVR_ATmega644P__", 0, 0, 0x0100, 1, "m644p") -AVR_MCU ("atmega644pa", ARCH_AVR5, "__AVR_ATmega644PA__", 0, 0, 0x0100, 1, "m644pa") -AVR_MCU ("atmega645", ARCH_AVR5, "__AVR_ATmega645__", 0, 0, 0x0100, 1, "m645") -AVR_MCU ("atmega645a", ARCH_AVR5, "__AVR_ATmega645A__", 0, 0, 0x0100, 1, "m645a") -AVR_MCU ("atmega645p", ARCH_AVR5, "__AVR_ATmega645P__", 0, 0, 0x0100, 1, "m645p") -AVR_MCU ("atmega6450", ARCH_AVR5, "__AVR_ATmega6450__", 0, 0, 0x0100, 1, "m6450") -AVR_MCU ("atmega6450a", ARCH_AVR5, "__AVR_ATmega6450A__", 0, 0, 0x0100, 1, "m6450a") -AVR_MCU ("atmega6450p", ARCH_AVR5, "__AVR_ATmega6450P__", 0, 0, 0x0100, 1, "m6450p") -AVR_MCU ("atmega649", ARCH_AVR5, "__AVR_ATmega649__", 0, 0, 0x0100, 1, "m649") -AVR_MCU ("atmega649a", ARCH_AVR5, "__AVR_ATmega649A__", 0, 0, 0x0100, 1, "m649a") -AVR_MCU ("atmega649p", ARCH_AVR5, "__AVR_ATmega649P__", 0, 0, 0x0100, 1, "m649p") -AVR_MCU ("atmega6490", ARCH_AVR5, "__AVR_ATmega6490__", 0, 0, 0x0100, 1, "m6490") -AVR_MCU ("atmega16hva", ARCH_AVR5, "__AVR_ATmega16HVA__", 0, 0, 0x0100, 1, "m16hva") -AVR_MCU ("atmega16hva2", ARCH_AVR5, "__AVR_ATmega16HVA2__", 0, 0, 0x0100, 1, "m16hva2") -AVR_MCU ("atmega32hvb", ARCH_AVR5, "__AVR_ATmega32HVB__", 0, 0, 0x0100, 1, "m32hvb") -AVR_MCU ("atmega6490a", ARCH_AVR5, "__AVR_ATmega6490A__", 0, 0, 0x0100, 1, "m6490a") -AVR_MCU ("atmega6490p", ARCH_AVR5, "__AVR_ATmega6490P__", 0, 0, 0x0100, 1, "m6490p") -AVR_MCU ("atmega64c1", ARCH_AVR5, "__AVR_ATmega64C1__", 0, 0, 0x0100, 1, "m64c1") -AVR_MCU ("atmega64m1", ARCH_AVR5, "__AVR_ATmega64M1__", 0, 0, 0x0100, 1, "m64m1") -AVR_MCU ("atmega64hve", ARCH_AVR5, "__AVR_ATmega64HVE__", 0, 0, 0x0100, 1, "m64hve") -AVR_MCU ("atmega64rfa2", ARCH_AVR5, "__AVR_ATmega64RFA2__", 0, 0, 0x0200, 1, "m64rfa2") -AVR_MCU ("atmega64rfr2", ARCH_AVR5, "__AVR_ATmega64RFR2__", 0, 0, 0x0200, 1, "m64rfr2") -AVR_MCU ("atmega32hvbrevb", ARCH_AVR5, "__AVR_ATmega32HVBREVB__", 0, 0, 0x0100, 1, "m32hvbrevb") -AVR_MCU ("atmega48hvf", ARCH_AVR5, "__AVR_ATmega48HVF__", 0, 0, 0x0100, 1, "m48hvf") -AVR_MCU ("at90can32", ARCH_AVR5, "__AVR_AT90CAN32__", 0, 0, 0x0100, 1, "can32") -AVR_MCU ("at90can64", ARCH_AVR5, "__AVR_AT90CAN64__", 0, 0, 0x0100, 1, "can64") -AVR_MCU ("at90pwm161", ARCH_AVR5, "__AVR_AT90PWM161__", 0, 0, 0x0100, 1, "90pwm161") -AVR_MCU ("at90pwm216", ARCH_AVR5, "__AVR_AT90PWM216__", 0, 0, 0x0100, 1, "90pwm216") -AVR_MCU ("at90pwm316", ARCH_AVR5, "__AVR_AT90PWM316__", 0, 0, 0x0100, 1, "90pwm316") -AVR_MCU ("at90scr100", ARCH_AVR5, "__AVR_AT90SCR100__", 0, 0, 0x0100, 1, "90scr100") -AVR_MCU ("at90usb646", ARCH_AVR5, "__AVR_AT90USB646__", 0, 0, 0x0100, 1, "usb646") -AVR_MCU ("at90usb647", ARCH_AVR5, "__AVR_AT90USB647__", 0, 0, 0x0100, 1, "usb647") -AVR_MCU ("at94k", ARCH_AVR5, "__AVR_AT94K__", 0, 0, 0x0060, 1, "at94k") -AVR_MCU ("m3000", ARCH_AVR5, "__AVR_M3000__", 0, 0, 0x1000, 1, "m3000") +AVR_MCU ("avr5", ARCH_AVR5, AVR_ISA_NONE, NULL, 0x0060, 1, "m16") +AVR_MCU ("ata5790", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATA5790__", 0x0100, 1, "a5790") +AVR_MCU ("ata5790n", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATA5790N__", 0x0100, 1, "a5790n") +AVR_MCU ("ata5795", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATA5795__", 0x0100, 1, "a5795") +AVR_MCU ("atmega16", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega16__", 0x0060, 1, "m16") +AVR_MCU ("atmega16a", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega16A__", 0x0060, 1, "m16a") +AVR_MCU ("atmega161", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega161__", 0x0060, 1, "m161") +AVR_MCU ("atmega162", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega162__", 0x0100, 1, "m162") +AVR_MCU ("atmega163", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega163__", 0x0060, 1, "m163") +AVR_MCU ("atmega164a", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega164A__", 0x0100, 1, "m164a") +AVR_MCU ("atmega164p", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega164P__", 0x0100, 1, "m164p") +AVR_MCU ("atmega164pa", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega164PA__", 0x0100, 1, "m164pa") +AVR_MCU ("atmega165", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega165__", 0x0100, 1, "m165") +AVR_MCU ("atmega165a", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega165A__", 0x0100, 1, "m165a") +AVR_MCU ("atmega165p", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega165P__", 0x0100, 1, "m165p") +AVR_MCU ("atmega165pa", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega165PA__", 0x0100, 1, "m165pa") +AVR_MCU ("atmega168", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega168__", 0x0100, 1, "m168") +AVR_MCU ("atmega168a", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega168A__", 0x0100, 1, "m168a") +AVR_MCU ("atmega168p", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega168P__", 0x0100, 1, "m168p") +AVR_MCU ("atmega168pa", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega168PA__", 0x0100, 1, "m168pa") +AVR_MCU ("atmega169", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega169__", 0x0100, 1, "m169") +AVR_MCU ("atmega169a", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega169A__", 0x0100, 1, "m169a") +AVR_MCU ("atmega169p", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega169P__", 0x0100, 1, "m169p") +AVR_MCU ("atmega169pa", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega169PA__", 0x0100, 1, "m169pa") +AVR_MCU ("atmega16hvb", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega16HVB__", 0x0100, 1, "m16hvb") +AVR_MCU ("atmega16hvbrevb", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega16HVBREVB__", 0x0100, 1, "m16hvbrevb") +AVR_MCU ("atmega16m1", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega16M1__", 0x0100, 1, "m16m1") +AVR_MCU ("atmega16u4", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega16U4__", 0x0100, 1, "m16u4") +AVR_MCU ("atmega26hvg", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega26HVG__", 0x0100, 1, "m26hvg") +AVR_MCU ("atmega32a", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega32A__", 0x0060, 1, "m32a") +AVR_MCU ("atmega32", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega32__", 0x0060, 1, "m32") +AVR_MCU ("atmega323", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega323__", 0x0060, 1, "m323") +AVR_MCU ("atmega324a", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega324A__", 0x0100, 1, "m324a") +AVR_MCU ("atmega324p", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega324P__", 0x0100, 1, "m324p") +AVR_MCU ("atmega324pa", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega324PA__", 0x0100, 1, "m324pa") +AVR_MCU ("atmega325", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega325__", 0x0100, 1, "m325") +AVR_MCU ("atmega325a", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega325A__", 0x0100, 1, "m325a") +AVR_MCU ("atmega325p", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega325P__", 0x0100, 1, "m325p") +AVR_MCU ("atmega3250", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega3250__", 0x0100, 1, "m3250") +AVR_MCU ("atmega3250a", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega3250A__", 0x0100, 1, "m3250a") +AVR_MCU ("atmega3250p", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega3250P__", 0x0100, 1, "m3250p") +AVR_MCU ("atmega3250pa", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega3250PA__", 0x0100, 1, "m3250pa") +AVR_MCU ("atmega328", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega328__", 0x0100, 1, "m328") +AVR_MCU ("atmega328p", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega328P__", 0x0100, 1, "m328p") +AVR_MCU ("atmega329", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega329__", 0x0100, 1, "m329") +AVR_MCU ("atmega329a", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega329A__", 0x0100, 1, "m329a") +AVR_MCU ("atmega329p", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega329P__", 0x0100, 1, "m329p") +AVR_MCU ("atmega329pa", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega329PA__", 0x0100, 1, "m329pa") +AVR_MCU ("atmega3290", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega3290__", 0x0100, 1, "m3290") +AVR_MCU ("atmega3290a", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega3290A__", 0x0100, 1, "m3290a") +AVR_MCU ("atmega3290p", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega3290P__", 0x0100, 1, "m3290p") +AVR_MCU ("atmega3290pa", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega3290PA__", 0x0100, 1, "m3290pa") +AVR_MCU ("atmega32c1", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega32C1__", 0x0100, 1, "m32c1") +AVR_MCU ("atmega32m1", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega32M1__", 0x0100, 1, "m32m1") +AVR_MCU ("atmega32u4", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega32U4__", 0x0100, 1, "m32u4") +AVR_MCU ("atmega32u6", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega32U6__", 0x0100, 1, "m32u6") +AVR_MCU ("atmega406", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega406__", 0x0100, 1, "m406") +AVR_MCU ("atmega64", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega64__", 0x0100, 1, "m64") +AVR_MCU ("atmega64a", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega64A__", 0x0100, 1, "m64a") +AVR_MCU ("atmega640", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega640__", 0x0200, 1, "m640") +AVR_MCU ("atmega644", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega644__", 0x0100, 1, "m644") +AVR_MCU ("atmega644a", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega644A__", 0x0100, 1, "m644a") +AVR_MCU ("atmega644p", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega644P__", 0x0100, 1, "m644p") +AVR_MCU ("atmega644pa", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega644PA__", 0x0100, 1, "m644pa") +AVR_MCU ("atmega645", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega645__", 0x0100, 1, "m645") +AVR_MCU ("atmega645a", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega645A__", 0x0100, 1, "m645a") +AVR_MCU ("atmega645p", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega645P__", 0x0100, 1, "m645p") +AVR_MCU ("atmega6450", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega6450__", 0x0100, 1, "m6450") +AVR_MCU ("atmega6450a", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega6450A__", 0x0100, 1, "m6450a") +AVR_MCU ("atmega6450p", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega6450P__", 0x0100, 1, "m6450p") +AVR_MCU ("atmega649", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega649__", 0x0100, 1, "m649") +AVR_MCU ("atmega649a", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega649A__", 0x0100, 1, "m649a") +AVR_MCU ("atmega649p", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega649P__", 0x0100, 1, "m649p") +AVR_MCU ("atmega6490", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega6490__", 0x0100, 1, "m6490") +AVR_MCU ("atmega16hva", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega16HVA__", 0x0100, 1, "m16hva") +AVR_MCU ("atmega16hva2", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega16HVA2__", 0x0100, 1, "m16hva2") +AVR_MCU ("atmega32hvb", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega32HVB__", 0x0100, 1, "m32hvb") +AVR_MCU ("atmega6490a", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega6490A__", 0x0100, 1, "m6490a") +AVR_MCU ("atmega6490p", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega6490P__", 0x0100, 1, "m6490p") +AVR_MCU ("atmega64c1", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega64C1__", 0x0100, 1, "m64c1") +AVR_MCU ("atmega64m1", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega64M1__", 0x0100, 1, "m64m1") +AVR_MCU ("atmega64hve", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega64HVE__", 0x0100, 1, "m64hve") +AVR_MCU ("atmega64rfa2", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega64RFA2__", 0x0200, 1, "m64rfa2") +AVR_MCU ("atmega64rfr2", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega64RFR2__", 0x0200, 1, "m64rfr2") +AVR_MCU ("atmega32hvbrevb", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega32HVBREVB__", 0x0100, 1, "m32hvbrevb") +AVR_MCU ("atmega48hvf", ARCH_AVR5, AVR_ISA_NONE, "__AVR_ATmega48HVF__", 0x0100, 1, "m48hvf") +AVR_MCU ("at90can32", ARCH_AVR5, AVR_ISA_NONE, "__AVR_AT90CAN32__", 0x0100, 1, "can32") +AVR_MCU ("at90can64", ARCH_AVR5, AVR_ISA_NONE, "__AVR_AT90CAN64__", 0x0100, 1, "can64") +AVR_MCU ("at90pwm161", ARCH_AVR5, AVR_ISA_NONE, "__AVR_AT90PWM161__", 0x0100, 1, "90pwm161") +AVR_MCU ("at90pwm216", ARCH_AVR5, AVR_ISA_NONE, "__AVR_AT90PWM216__", 0x0100, 1, "90pwm216") +AVR_MCU ("at90pwm316", ARCH_AVR5, AVR_ISA_NONE, "__AVR_AT90PWM316__", 0x0100, 1, "90pwm316") +AVR_MCU ("at90scr100", ARCH_AVR5, AVR_ISA_NONE, "__AVR_AT90SCR100__", 0x0100, 1, "90scr100") +AVR_MCU ("at90usb646", ARCH_AVR5, AVR_ISA_NONE, "__AVR_AT90USB646__", 0x0100, 1, "usb646") +AVR_MCU ("at90usb647", ARCH_AVR5, AVR_ISA_NONE, "__AVR_AT90USB647__", 0x0100, 1, "usb647") +AVR_MCU ("at94k", ARCH_AVR5, AVR_ISA_NONE, "__AVR_AT94K__", 0x0060, 1, "at94k") +AVR_MCU ("m3000", ARCH_AVR5, AVR_ISA_NONE, "__AVR_M3000__", 0x1000, 1, "m3000") /* Enhanced, == 128K. */ -AVR_MCU ("avr51", ARCH_AVR51, NULL, 0, 0, 0x0100, 2, "m128") -AVR_MCU ("atmega128", ARCH_AVR51, "__AVR_ATmega128__", 0, 0, 0x0100, 2, "m128") -AVR_MCU ("atmega128a", ARCH_AVR51, "__AVR_ATmega128A__", 0, 0, 0x0100, 2, "m128a") -AVR_MCU ("atmega1280", ARCH_AVR51, "__AVR_ATmega1280__", 0, 0, 0x0200, 2, "m1280") -AVR_MCU ("atmega1281", ARCH_AVR51, "__AVR_ATmega1281__", 0, 0, 0x0200, 2, "m1281") -AVR_MCU ("atmega1284", ARCH_AVR51, "__AVR_ATmega1284__", 0, 0, 0x0100, 2, "m1284") -AVR_MCU ("atmega1284p", ARCH_AVR51, "__AVR_ATmega1284P__", 0, 0, 0x0100, 2, "m1284p") -AVR_MCU ("atmega128rfa1", ARCH_AVR51, "__AVR_ATmega128RFA1__", 0, 0, 0x0200, 2, "m128rfa1") -AVR_MCU ("at90can128", ARCH_AVR51, "__AVR_AT90CAN128__", 0, 0, 0x0100, 2, "can128") -AVR_MCU ("at90usb1286", ARCH_AVR51, "__AVR_AT90USB1286__", 0, 0, 0x0100, 2, "usb1286") -AVR_MCU ("at90usb1287", ARCH_AVR51, "__AVR_AT90USB1287__", 0, 0, 0x0100, 2, "usb1287") +AVR_MCU ("avr51", ARCH_AVR51, AVR_ISA_NONE, NULL, 0x0100, 2, "m128") +AVR_MCU ("atmega128", ARCH_AVR51, AVR_ISA_NONE, "__AVR_ATmega128__", 0x0100, 2, "m128") +AVR_MCU ("atmega128a", ARCH_AVR51, AVR_ISA_NONE, "__AVR_ATmega128A__", 0x0100, 2, "m128a") +AVR_MCU ("atmega1280", ARCH_AVR51, AVR_ISA_NONE, "__AVR_ATmega1280__", 0x0200, 2, "m1280") +AVR_MCU ("atmega1281", ARCH_AVR51, AVR_ISA_NONE, "__AVR_ATmega1281__", 0x0200, 2, "m1281") +AVR_MCU ("atmega1284", ARCH_AVR51, AVR_ISA_NONE, "__AVR_ATmega1284__", 0x0100, 2, "m1284") +AVR_MCU ("atmega1284p", ARCH_AVR51, AVR_ISA_NONE, "__AVR_ATmega1284P__", 0x0100, 2, "m1284p") +AVR_MCU ("atmega128rfa1", ARCH_AVR51, AVR_ISA_NONE, "__AVR_ATmega128RFA1__", 0x0200, 2, "m128rfa1") +AVR_MCU ("at90can128", ARCH_AVR51, AVR_ISA_NONE, "__AVR_AT90CAN128__", 0x0100, 2, "can128") +AVR_MCU ("at90usb1286", ARCH_AVR51, AVR_ISA_NONE, "__AVR_AT90USB1286__", 0x0100, 2, "usb1286") +AVR_MCU ("at90usb1287", ARCH_AVR51, AVR_ISA_NONE, "__AVR_AT90USB1287__", 0x0100, 2, "usb1287") /* 3-Byte PC. */ -AVR_MCU ("avr6", ARCH_AVR6, NULL, 0, 0, 0x0200, 4, "m2561") -AVR_MCU ("atmega2560", ARCH_AVR6, "__AVR_ATmega2560__", 0, 0, 0x0200, 4, "m2560") -AVR_MCU ("atmega2561", ARCH_AVR6, "__AVR_ATmega2561__", 0, 0, 0x0200, 4, "m2561") +AVR_MCU ("avr6", ARCH_AVR6, AVR_ISA_NONE, NULL, 0x0200, 4, "m2561") +AVR_MCU ("atmega2560", ARCH_AVR6, AVR_ISA_NONE, "__AVR_ATmega2560__", 0x0200, 4, "m2560") +AVR_MCU ("atmega2561", ARCH_AVR6, AVR_ISA_NONE, "__AVR_ATmega2561__", 0x0200, 4, "m2561") /* Xmega, 16K <= Flash < 64K, RAM <= 64K */ -AVR_MCU ("avrxmega2", ARCH_AVRXMEGA2, NULL, 0, 0, 0x2000, 1, "x32a4") -AVR_MCU ("atxmega16a4", ARCH_AVRXMEGA2, "__AVR_ATxmega16A4__", 0, 0, 0x2000, 1, "x16a4") -AVR_MCU ("atxmega16d4", ARCH_AVRXMEGA2, "__AVR_ATxmega16D4__", 0, 0, 0x2000, 1, "x16d4") -AVR_MCU ("atxmega32a4", ARCH_AVRXMEGA2, "__AVR_ATxmega32A4__", 0, 0, 0x2000, 1, "x32a4") -AVR_MCU ("atxmega32d4", ARCH_AVRXMEGA2, "__AVR_ATxmega32D4__", 0, 0, 0x2000, 1, "x32d4") -AVR_MCU ("atxmega32x1", ARCH_AVRXMEGA2, "__AVR_ATxmega32X1__", 0, 0, 0x2000, 1, "x32x1") -AVR_MCU ("atmxt112sl", ARCH_AVRXMEGA2, "__AVR_ATMXT112SL__", 0, 0, 0x2000, 1, "mxt112sl") -AVR_MCU ("atmxt224", ARCH_AVRXMEGA2, "__AVR_ATMXT224__", 0, 0, 0x2000, 1, "mxt224") -AVR_MCU ("atmxt224e", ARCH_AVRXMEGA2, "__AVR_ATMXT224E__", 0, 0, 0x2000, 1, "mxt224e") -AVR_MCU ("atmxt336s", ARCH_AVRXMEGA2, "__AVR_ATMXT336S__", 0, 0, 0x2000, 1, "mxt336s") -AVR_MCU ("atxmega16a4u", ARCH_AVRXMEGA2, "__AVR_ATxmega16A4U__", 0, 0, 0x2000, 1, "x16a4u") -AVR_MCU ("atxmega16c4", ARCH_AVRXMEGA2, "__AVR_ATxmega16C4__", 0, 0, 0x2000, 1, "x16c4") -AVR_MCU ("atxmega32a4u", ARCH_AVRXMEGA2, "__AVR_ATxmega32A4U__", 0, 0, 0x2000, 1, "x32a4u") -AVR_MCU ("atxmega32c4", ARCH_AVRXMEGA2, "__AVR_ATxmega32C4__", 0, 0, 0x2000, 1, "x32c4") -AVR_MCU ("atxmega32e5", ARCH_AVRXMEGA2, "__AVR_ATxmega32E5__", 0, 0, 0x2000, 1, "x32e5") +AVR_MCU ("avrxmega2", ARCH_AVRXMEGA2, AVR_ISA_NONE, NULL, 0x2000, 1, "x32a4") +AVR_MCU ("atxmega16a4", ARCH_AVRXMEGA2, AVR_ISA_NONE, "__AVR_ATxmega16A4__", 0x2000, 1, "x16a4") +AVR_MCU ("atxmega16d4", ARCH_AVRXMEGA2, AVR_ISA_NONE, "__AVR_ATxmega16D4__", 0x2000, 1, "x16d4") +AVR_MCU ("atxmega32a4", ARCH_AVRXMEGA2, AVR_ISA_NONE, "__AVR_ATxmega32A4__", 0x2000, 1, "x32a4") +AVR_MCU ("atxmega32d4", ARCH_AVRXMEGA2, AVR_ISA_NONE, "__AVR_ATxmega32D4__", 0x2000, 1, "x32d4") +AVR_MCU ("atxmega32x1", ARCH_AVRXMEGA2, AVR_ISA_NONE, "__AVR_ATxmega32X1__", 0x2000, 1, "x32x1") +AVR_MCU ("atmxt112sl", ARCH_AVRXMEGA2, AVR_ISA_NONE, "__AVR_ATMXT112SL__", 0x2000, 1, "mxt112sl") +AVR_MCU ("atmxt224", ARCH_AVRXMEGA2, AVR_ISA_NONE, "__AVR_ATMXT224__", 0x2000, 1, "mxt224") +AVR_MCU ("atmxt224e", ARCH_AVRXMEGA2, AVR_ISA_NONE, "__AVR_ATMXT224E__", 0x2000, 1, "mxt224e") +AVR_MCU ("atmxt336s", ARCH_AVRXMEGA2, AVR_ISA_NONE, "__AVR_ATMXT336S__", 0x2000, 1, "mxt336s") +AVR_MCU ("atxmega16a4u", ARCH_AVRXMEGA2, AVR_ISA_RMW, "__AVR_ATxmega16A4U__", 0x2000, 1, "x16a4u") +AVR_MCU ("atxmega16c4", ARCH_AVRXMEGA2, AVR_ISA_RMW, "__AVR_ATxmega16C4__", 0x2000, 1, "x16c4") +AVR_MCU ("atxmega32a4u", ARCH_AVRXMEGA2, AVR_ISA_RMW, "__AVR_ATxmega32A4U__", 0x2000, 1, "x32a4u") +AVR_MCU ("atxmega32c4", ARCH_AVRXMEGA2, AVR_ISA_RMW, "__AVR_ATxmega32C4__", 0x2000, 1, "x32c4") +AVR_MCU ("atxmega32e5", ARCH_AVRXMEGA2, AVR_ISA_NONE, "__AVR_ATxmega32E5__", 0x2000, 1, "x32e5") /* Xmega, 64K < Flash <= 128K, RAM <= 64K */ -AVR_MCU ("avrxmega4", ARCH_AVRXMEGA4, NULL, 0, 0, 0x2000, 2, "x64a4") -AVR_MCU ("atxmega64a3", ARCH_AVRXMEGA4, "__AVR_ATxmega64A3__", 0, 0, 0x2000, 2, "x64a3") -AVR_MCU ("atxmega64d3", ARCH_AVRXMEGA4, "__AVR_ATxmega64D3__", 0, 0, 0x2000, 2, "x64d3") -AVR_MCU ("atxmega64a3u", ARCH_AVRXMEGA4, "__AVR_ATxmega64A3U__", 0, 0, 0x2000, 2, "x64a3u") -AVR_MCU ("atxmega64a4u", ARCH_AVRXMEGA4, "__AVR_ATxmega64A4U__", 0, 0, 0x2000, 2, "x64a4u") -AVR_MCU ("atxmega64b1", ARCH_AVRXMEGA4, "__AVR_ATxmega64B1__", 0, 0, 0x2000, 2, "x64b1") -AVR_MCU ("atxmega64b3", ARCH_AVRXMEGA4, "__AVR_ATxmega64B3__", 0, 0, 0x2000, 2, "x64b3") -AVR_MCU ("atxmega64c3", ARCH_AVRXMEGA4, "__AVR_ATxmega64C3__", 0, 0, 0x2000, 2, "x64c3") -AVR_MCU ("atxmega64d4", ARCH_AVRXMEGA4, "__AVR_ATxmega64D4__", 0, 0, 0x2000, 2, "x64d4") +AVR_MCU ("avrxmega4", ARCH_AVRXMEGA4, AVR_ISA_NONE, NULL, 0x2000, 2, "x64a4") +AVR_MCU ("atxmega64a3", ARCH_AVRXMEGA4, AVR_ISA_NONE, "__AVR_ATxmega64A3__", 0x2000, 2, "x64a3") +AVR_MCU ("atxmega64d3", ARCH_AVRXMEGA4, AVR_ISA_NONE, "__AVR_ATxmega64D3__", 0x2000, 2, "x64d3") +AVR_MCU ("atxmega64a3u", ARCH_AVRXMEGA4, AVR_ISA_RMW, "__AVR_ATxmega64A3U__", 0x2000, 2, "x64a3u") +AVR_MCU ("atxmega64a4u", ARCH_AVRXMEGA4, AVR_ISA_RMW, "__AVR_ATxmega64A4U__", 0x2000, 2, "x64a4u") +AVR_MCU ("atxmega64b1", ARCH_AVRXMEGA4, AVR_ISA_RMW, "__AVR_ATxmega64B1__", 0x2000, 2, "x64b1") +AVR_MCU ("atxmega64b3", ARCH_AVRXMEGA4, AVR_ISA_RMW, "__AVR_ATxmega64B3__", 0x2000, 2, "x64b3") +AVR_MCU ("atxmega64c3", ARCH_AVRXMEGA4, AVR_ISA_RMW, "__AVR_ATxmega64C3__", 0x2000, 2, "x64c3") +AVR_MCU ("atxmega64d4", ARCH_AVRXMEGA4, AVR_ISA_NONE, "__AVR_ATxmega64D4__", 0x2000, 2, "x64d4") /* Xmega, 64K < Flash <= 128K, RAM > 64K */ -AVR_MCU ("avrxmega5", ARCH_AVRXMEGA5, NULL, 0, 0, 0x2000, 2, "x64a1") -AVR_MCU ("atxmega64a1", ARCH_AVRXMEGA5, "__AVR_ATxmega64A1__", 0, 0, 0x2000, 2, "x64a1") -AVR_MCU ("atxmega64a1u", ARCH_AVRXMEGA5, "__AVR_ATxmega64A1U__", 0, 0, 0x2000, 2, "x64a1u") +AVR_MCU ("avrxmega5", ARCH_AVRXMEGA5, AVR_ISA_NONE, NULL, 0x2000, 2, "x64a1") +AVR_MCU ("atxmega64a1", ARCH_AVRXMEGA5, AVR_ISA_NONE, "__AVR_ATxmega64A1__", 0x2000, 2, "x64a1") +AVR_MCU ("atxmega64a1u", ARCH_AVRXMEGA5, AVR_ISA_RMW, "__AVR_ATxmega64A1U__", 0x2000, 2, "x64a1u") /* Xmega, 128K < Flash, RAM <= 64K */ -AVR_MCU ("avrxmega6", ARCH_AVRXMEGA6, NULL, 0, 0, 0x2000, 6, "x128a3") -AVR_MCU ("atxmega128a3", ARCH_AVRXMEGA6, "__AVR_ATxmega128A3__", 0, 0, 0x2000, 3, "x128a3") -AVR_MCU ("atxmega128d3", ARCH_AVRXMEGA6, "__AVR_ATxmega128D3__", 0, 0, 0x2000, 3, "x128d3") -AVR_MCU ("atxmega192a3", ARCH_AVRXMEGA6, "__AVR_ATxmega192A3__", 0, 0, 0x2000, 4, "x192a3") -AVR_MCU ("atxmega192d3", ARCH_AVRXMEGA6, "__AVR_ATxmega192D3__", 0, 0, 0x2000, 4, "x192d3") -AVR_MCU ("atxmega256a3", ARCH_AVRXMEGA6, "__AVR_ATxmega256A3__", 0, 0, 0x2000, 5, "x256a3") -AVR_MCU ("atxmega256a3b", ARCH_AVRXMEGA6, "__AVR_ATxmega256A3B__", 0, 0, 0x2000, 5, "x256a3b") -AVR_MCU ("atxmega256a3bu", ARCH_AVRXMEGA6, "__AVR_ATxmega256A3BU__", 0, 0, 0x2000, 5, "x256a3bu") -AVR_MCU ("atxmega256d3", ARCH_AVRXMEGA6, "__AVR_ATxmega256D3__", 0, 0, 0x2000, 5, "x256d3") -AVR_MCU ("atxmega128a3u", ARCH_AVRXMEGA6, "__AVR_ATxmega128A3U__", 0, 0, 0x2000, 3, "x128a3u") -AVR_MCU ("atxmega128b1", ARCH_AVRXMEGA6, "__AVR_ATxmega128B1__", 0, 0, 0x2000, 3, "x128b1") -AVR_MCU ("atxmega128b3", ARCH_AVRXMEGA6, "__AVR_ATxmega128B3__", 0, 0, 0x2000, 3, "x128b3") -AVR_MCU ("atxmega128c3", ARCH_AVRXMEGA6, "__AVR_ATxmega128C3__", 0, 0, 0x2000, 3, "x128c3") -AVR_MCU ("atxmega128d4", ARCH_AVRXMEGA6, "__AVR_ATxmega128D4__", 0, 0, 0x2000, 3, "x128d4") -AVR_MCU ("atmxt540s", ARCH_AVRXMEGA6, "__AVR_ATMXT540S__", 0, 0, 0x2000, 2, "mxt540s") -AVR_MCU ("atmxt540sreva", ARCH_AVRXMEGA6, "__AVR_ATMXT540SREVA__", 0, 0, 0x2000, 2, "mxt540sreva") -AVR_MCU ("atxmega192a3u", ARCH_AVRXMEGA6, "__AVR_ATxmega192A3U__", 0, 0, 0x2000, 4, "x192a3u") -AVR_MCU ("atxmega192c3", ARCH_AVRXMEGA6, "__AVR_ATxmega192C3__", 0, 0, 0x2000, 4, "x192c3") -AVR_MCU ("atxmega256a3u", ARCH_AVRXMEGA6, "__AVR_ATxmega256A3U__", 0, 0, 0x2000, 5, "x256a3u") -AVR_MCU ("atxmega256c3", ARCH_AVRXMEGA6, "__AVR_ATxmega256C3__", 0, 0, 0x2000, 5, "x256c3") -AVR_MCU ("atxmega384c3", ARCH_AVRXMEGA6, "__AVR_ATxmega384C3__", 0, 0, 0x2000, 6, "x384c3") -AVR_MCU ("atxmega384d3", ARCH_AVRXMEGA6, "__AVR_ATxmega384D3__", 0, 0, 0x2000, 6, "x384d3") +AVR_MCU ("avrxmega6", ARCH_AVRXMEGA6, AVR_ISA_NONE, NULL, 0x2000, 6, "x128a3") +AVR_MCU ("atxmega128a3", ARCH_AVRXMEGA6, AVR_ISA_NONE, "__AVR_ATxmega128A3__", 0x2000, 3, "x128a3") +AVR_MCU ("atxmega128d3", ARCH_AVRXMEGA6, AVR_ISA_NONE, "__AVR_ATxmega128D3__", 0x2000, 3, "x128d3") +AVR_MCU ("atxmega192a3", ARCH_AVRXMEGA6, AVR_ISA_NONE, "__AVR_ATxmega192A3__", 0x2000, 4, "x192a3") +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 ("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") +AVR_MCU ("atxmega128b3", ARCH_AVRXMEGA6, AVR_ISA_RMW, "__AVR_ATxmega128B3__", 0x2000, 3, "x128b3") +AVR_MCU ("atxmega128c3", ARCH_AVRXMEGA6, AVR_ISA_RMW, "__AVR_ATxmega128C3__", 0x2000, 3, "x128c3") +AVR_MCU ("atxmega128d4", ARCH_AVRXMEGA6, AVR_ISA_NONE, "__AVR_ATxmega128D4__", 0x2000, 3, "x128d4") +AVR_MCU ("atmxt540s", ARCH_AVRXMEGA6, AVR_ISA_NONE, "__AVR_ATMXT540S__", 0x2000, 2, "mxt540s") +AVR_MCU ("atmxt540sreva", ARCH_AVRXMEGA6, AVR_ISA_NONE, "__AVR_ATMXT540SREVA__", 0x2000, 2, "mxt540sreva") +AVR_MCU ("atxmega192a3u", ARCH_AVRXMEGA6, AVR_ISA_RMW, "__AVR_ATxmega192A3U__", 0x2000, 4, "x192a3u") +AVR_MCU ("atxmega192c3", ARCH_AVRXMEGA6, AVR_ISA_RMW, "__AVR_ATxmega192C3__", 0x2000, 4, "x192c3") +AVR_MCU ("atxmega256a3u", ARCH_AVRXMEGA6, AVR_ISA_RMW, "__AVR_ATxmega256A3U__", 0x2000, 5, "x256a3u") +AVR_MCU ("atxmega256c3", ARCH_AVRXMEGA6, AVR_ISA_RMW, "__AVR_ATxmega256C3__", 0x2000, 5, "x256c3") +AVR_MCU ("atxmega384c3", ARCH_AVRXMEGA6, AVR_ISA_RMW, "__AVR_ATxmega384C3__", 0x2000, 6, "x384c3") +AVR_MCU ("atxmega384d3", ARCH_AVRXMEGA6, AVR_ISA_NONE, "__AVR_ATxmega384D3__", 0x2000, 6, "x384d3") /* Xmega, 128K < Flash, RAM > 64K RAM. */ -AVR_MCU ("avrxmega7", ARCH_AVRXMEGA7, NULL, 0, 0, 0x2000, 3, "x128a1") -AVR_MCU ("atxmega128a1", ARCH_AVRXMEGA7, "__AVR_ATxmega128A1__", 0, 0, 0x2000, 3, "x128a1") -AVR_MCU ("atxmega128a1u", ARCH_AVRXMEGA7, "__AVR_ATxmega128A1U__", 0, 0, 0x2000, 3, "x128a1u") -AVR_MCU ("atxmega128a4u", ARCH_AVRXMEGA7, "__AVR_ATxmega128A4U__", 0, 0, 0x2000, 3, "x128a4u") +AVR_MCU ("avrxmega7", ARCH_AVRXMEGA7, AVR_ISA_NONE, NULL, 0x2000, 3, "x128a1") +AVR_MCU ("atxmega128a1", ARCH_AVRXMEGA7, AVR_ISA_NONE, "__AVR_ATxmega128A1__", 0x2000, 3, "x128a1") +AVR_MCU ("atxmega128a1u", ARCH_AVRXMEGA7, AVR_ISA_RMW, "__AVR_ATxmega128A1U__", 0x2000, 3, "x128a1u") +AVR_MCU ("atxmega128a4u", ARCH_AVRXMEGA7, AVR_ISA_RMW, "__AVR_ATxmega128A4U__", 0x2000, 3, "x128a4u") /* Assembler only. */ -AVR_MCU ("avr1", ARCH_AVR1, NULL, 0, 0, 0x0060, 1, "s1200") -AVR_MCU ("at90s1200", ARCH_AVR1, "__AVR_AT90S1200__", 0, 0, 0x0060, 1, "s1200") -AVR_MCU ("attiny11", ARCH_AVR1, "__AVR_ATtiny11__", 0, 0, 0x0060, 1, "tn11") -AVR_MCU ("attiny12", ARCH_AVR1, "__AVR_ATtiny12__", 0, 0, 0x0060, 1, "tn12") -AVR_MCU ("attiny15", ARCH_AVR1, "__AVR_ATtiny15__", 0, 0, 0x0060, 1, "tn15") -AVR_MCU ("attiny28", ARCH_AVR1, "__AVR_ATtiny28__", 0, 0, 0x0060, 1, "tn28") +AVR_MCU ("avr1", ARCH_AVR1, AVR_ISA_NONE, NULL, 0x0060, 1, "s1200") +AVR_MCU ("at90s1200", ARCH_AVR1, AVR_ISA_NONE, "__AVR_AT90S1200__", 0x0060, 1, "s1200") +AVR_MCU ("attiny11", ARCH_AVR1, AVR_ISA_NONE, "__AVR_ATtiny11__", 0x0060, 1, "tn11") +AVR_MCU ("attiny12", ARCH_AVR1, AVR_ISA_NONE, "__AVR_ATtiny12__", 0x0060, 1, "tn12") +AVR_MCU ("attiny15", ARCH_AVR1, AVR_ISA_NONE, "__AVR_ATtiny15__", 0x0060, 1, "tn15") +AVR_MCU ("attiny28", ARCH_AVR1, AVR_ISA_NONE, "__AVR_ATtiny28__", 0x0060, 1, "tn28") diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/avr/avr.md gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/avr/avr.md --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/avr/avr.md 2014-01-05 19:58:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/avr/avr.md 2014-04-05 08:48:43.000000000 +0000 @@ -5342,7 +5342,7 @@ (label_ref (match_operand 0 "" "")) (pc)))] "!AVR_HAVE_JMP_CALL - || !avr_current_device->errata_skip" + || !(avr_current_device->dev_attribute & AVR_ERRATA_SKIP)" { if (operands[2] == CONST0_RTX (mode)) operands[2] = zero_reg_rtx; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/avr/driver-avr.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/avr/driver-avr.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/avr/driver-avr.c 2014-01-05 19:58:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/avr/driver-avr.c 2014-04-05 08:48:43.000000000 +0000 @@ -59,8 +59,8 @@ avr_set_current_device (argv[0]); return concat ("-mmcu=", avr_current_arch->arch_name, - avr_current_device->errata_skip ? "" : " -mno-skip-bug", - NULL); + avr_current_device->dev_attribute & AVR_ERRATA_SKIP ? "" : " -mno-skip-bug", + avr_current_device->dev_attribute & AVR_ISA_RMW ? " -mrmw" : "", NULL); } /* Returns command line parameters to pass to ld. */ @@ -144,7 +144,7 @@ || avr_current_device->arch == ARCH_AVR25)) return ""; - return avr_current_device->short_sp + return (avr_current_device->dev_attribute & AVR_SHORT_SP) ? "-msp8" : "%mode, mode)") (eq_attr "alternative" "1") + /* ??? For sched1 we need constrain_operands to be able to + select an alternative. Leave this enabled before RA. */ (symbol_ref "TARGET_INTER_UNIT_CONVERSIONS - || optimize_function_for_size_p (cfun)") + || optimize_function_for_size_p (cfun) + || !(reload_completed + || reload_in_progress + || lra_in_progress)") ] (symbol_ref "true"))) ]) @@ -5821,10 +5835,11 @@ (eq:CCO (plus: (sign_extend: (match_operand:SWI 1 "nonimmediate_operand")) - (sign_extend: - (match_operand:SWI 2 ""))) + (match_dup 4)) (sign_extend: - (plus:SWI (match_dup 1) (match_dup 2))))) + (plus:SWI (match_dup 1) + (match_operand:SWI 2 + ""))))) (set (match_operand:SWI 0 "register_operand") (plus:SWI (match_dup 1) (match_dup 2)))]) (set (pc) (if_then_else @@ -5832,7 +5847,13 @@ (label_ref (match_operand 3)) (pc)))] "" - "ix86_fixup_binary_operands_no_copy (PLUS, mode, operands);") +{ + ix86_fixup_binary_operands_no_copy (PLUS, mode, operands); + if (CONST_INT_P (operands[2])) + operands[4] = operands[2]; + else + operands[4] = gen_rtx_SIGN_EXTEND (mode, operands[2]); +}) (define_insn "*addv4" [(set (reg:CCO FLAGS_REG) @@ -5840,7 +5861,8 @@ (sign_extend: (match_operand:SWI 1 "nonimmediate_operand" "%0,0")) (sign_extend: - (match_operand:SWI 2 "" ","))) + (match_operand:SWI 2 "" + "mWe,We"))) (sign_extend: (plus:SWI (match_dup 1) (match_dup 2))))) (set (match_operand:SWI 0 "nonimmediate_operand" "=,m") @@ -5850,6 +5872,31 @@ [(set_attr "type" "alu") (set_attr "mode" "")]) +(define_insn "*addv4_1" + [(set (reg:CCO FLAGS_REG) + (eq:CCO (plus: + (sign_extend: + (match_operand:SWI 1 "nonimmediate_operand" "0")) + (match_operand: 3 "const_int_operand" "i")) + (sign_extend: + (plus:SWI (match_dup 1) + (match_operand:SWI 2 "x86_64_immediate_operand" + ""))))) + (set (match_operand:SWI 0 "nonimmediate_operand" "=m") + (plus:SWI (match_dup 1) (match_dup 2)))] + "ix86_binary_operator_ok (PLUS, mode, operands) + && CONST_INT_P (operands[2]) + && INTVAL (operands[2]) == INTVAL (operands[3])" + "add{}\t{%2, %0|%0, %2}" + [(set_attr "type" "alu") + (set_attr "mode" "") + (set (attr "length_immediate") + (cond [(match_test "IN_RANGE (INTVAL (operands[2]), -128, 127)") + (const_string "1") + (match_test " == 8") + (const_string "4")] + (const_string "")))]) + ;; The lea patterns for modes less than 32 bits need to be matched by ;; several insns converted to real lea by splitters. @@ -6093,10 +6140,11 @@ (eq:CCO (minus: (sign_extend: (match_operand:SWI 1 "nonimmediate_operand")) - (sign_extend: - (match_operand:SWI 2 ""))) + (match_dup 4)) (sign_extend: - (minus:SWI (match_dup 1) (match_dup 2))))) + (minus:SWI (match_dup 1) + (match_operand:SWI 2 + ""))))) (set (match_operand:SWI 0 "register_operand") (minus:SWI (match_dup 1) (match_dup 2)))]) (set (pc) (if_then_else @@ -6104,7 +6152,13 @@ (label_ref (match_operand 3)) (pc)))] "" - "ix86_fixup_binary_operands_no_copy (MINUS, mode, operands);") +{ + ix86_fixup_binary_operands_no_copy (MINUS, mode, operands); + if (CONST_INT_P (operands[2])) + operands[4] = operands[2]; + else + operands[4] = gen_rtx_SIGN_EXTEND (mode, operands[2]); +}) (define_insn "*subv4" [(set (reg:CCO FLAGS_REG) @@ -6112,7 +6166,8 @@ (sign_extend: (match_operand:SWI 1 "nonimmediate_operand" "0,0")) (sign_extend: - (match_operand:SWI 2 "" ",m"))) + (match_operand:SWI 2 "" + "We,m"))) (sign_extend: (minus:SWI (match_dup 1) (match_dup 2))))) (set (match_operand:SWI 0 "nonimmediate_operand" "=m,") @@ -6122,6 +6177,31 @@ [(set_attr "type" "alu") (set_attr "mode" "")]) +(define_insn "*subv4_1" + [(set (reg:CCO FLAGS_REG) + (eq:CCO (minus: + (sign_extend: + (match_operand:SWI 1 "nonimmediate_operand" "0")) + (match_operand: 3 "const_int_operand" "i")) + (sign_extend: + (minus:SWI (match_dup 1) + (match_operand:SWI 2 "x86_64_immediate_operand" + ""))))) + (set (match_operand:SWI 0 "nonimmediate_operand" "=m") + (minus:SWI (match_dup 1) (match_dup 2)))] + "ix86_binary_operator_ok (MINUS, mode, operands) + && CONST_INT_P (operands[2]) + && INTVAL (operands[2]) == INTVAL (operands[3])" + "sub{}\t{%2, %0|%0, %2}" + [(set_attr "type" "alu") + (set_attr "mode" "") + (set (attr "length_immediate") + (cond [(match_test "IN_RANGE (INTVAL (operands[2]), -128, 127)") + (const_string "1") + (match_test " == 8") + (const_string "4")] + (const_string "")))]) + (define_insn "*sub_3" [(set (reg FLAGS_REG) (compare (match_operand:SWI 1 "nonimmediate_operand" "0,0") @@ -6442,52 +6522,98 @@ (eq:CCO (mult: (sign_extend: (match_operand:SWI48 1 "register_operand")) - (sign_extend: - (match_operand:SWI48 2 ""))) + (match_dup 4)) (sign_extend: - (mult:SWI48 (match_dup 1) (match_dup 2))))) + (mult:SWI48 (match_dup 1) + (match_operand:SWI48 2 + ""))))) (set (match_operand:SWI48 0 "register_operand") (mult:SWI48 (match_dup 1) (match_dup 2)))]) (set (pc) (if_then_else (eq (reg:CCO FLAGS_REG) (const_int 0)) (label_ref (match_operand 3)) - (pc)))]) + (pc)))] + "" +{ + if (CONST_INT_P (operands[2])) + operands[4] = operands[2]; + else + operands[4] = gen_rtx_SIGN_EXTEND (mode, operands[2]); +}) (define_insn "*mulv4" [(set (reg:CCO FLAGS_REG) (eq:CCO (mult: (sign_extend: - (match_operand:SWI 1 "nonimmediate_operand" "%rm,rm,0")) + (match_operand:SWI48 1 "nonimmediate_operand" "%rm,0")) (sign_extend: - (match_operand:SWI 2 "" "K,,mr"))) + (match_operand:SWI48 2 "" + "We,mr"))) (sign_extend: - (mult:SWI (match_dup 1) (match_dup 2))))) - (set (match_operand:SWI 0 "register_operand" "=r,r,r") - (mult:SWI (match_dup 1) (match_dup 2)))] + (mult:SWI48 (match_dup 1) (match_dup 2))))) + (set (match_operand:SWI48 0 "register_operand" "=r,r") + (mult:SWI48 (match_dup 1) (match_dup 2)))] "!(MEM_P (operands[1]) && MEM_P (operands[2]))" "@ imul{}\t{%2, %1, %0|%0, %1, %2} - imul{}\t{%2, %1, %0|%0, %1, %2} imul{}\t{%2, %0|%0, %2}" [(set_attr "type" "imul") - (set_attr "prefix_0f" "0,0,1") + (set_attr "prefix_0f" "0,1") (set (attr "athlon_decode") (cond [(eq_attr "cpu" "athlon") (const_string "vector") - (eq_attr "alternative" "1") + (eq_attr "alternative" "0") (const_string "vector") - (and (eq_attr "alternative" "2") + (and (eq_attr "alternative" "1") (match_operand 1 "memory_operand")) (const_string "vector")] (const_string "direct"))) (set (attr "amdfam10_decode") - (cond [(and (eq_attr "alternative" "0,1") + (cond [(and (eq_attr "alternative" "1") (match_operand 1 "memory_operand")) (const_string "vector")] (const_string "direct"))) (set_attr "bdver1_decode" "direct") (set_attr "mode" "")]) +(define_insn "*mulv4_1" + [(set (reg:CCO FLAGS_REG) + (eq:CCO (mult: + (sign_extend: + (match_operand:SWI48 1 "nonimmediate_operand" "rm,rm")) + (match_operand: 3 "const_int_operand" "K,i")) + (sign_extend: + (mult:SWI48 (match_dup 1) + (match_operand:SWI 2 "x86_64_immediate_operand" + "K,"))))) + (set (match_operand:SWI48 0 "register_operand" "=r,r") + (mult:SWI48 (match_dup 1) (match_dup 2)))] + "!(MEM_P (operands[1]) && MEM_P (operands[2])) + && CONST_INT_P (operands[2]) + && INTVAL (operands[2]) == INTVAL (operands[3])" + "@ + imul{}\t{%2, %1, %0|%0, %1, %2} + imul{}\t{%2, %1, %0|%0, %1, %2}" + [(set_attr "type" "imul") + (set (attr "athlon_decode") + (cond [(eq_attr "cpu" "athlon") + (const_string "vector") + (eq_attr "alternative" "1") + (const_string "vector")] + (const_string "direct"))) + (set (attr "amdfam10_decode") + (cond [(match_operand 1 "memory_operand") + (const_string "vector")] + (const_string "direct"))) + (set_attr "bdver1_decode" "direct") + (set_attr "mode" "") + (set (attr "length_immediate") + (cond [(match_test "IN_RANGE (INTVAL (operands[2]), -128, 127)") + (const_string "1") + (match_test " == 8") + (const_string "4")] + (const_string "")))]) + (define_expand "mul3" [(parallel [(set (match_operand: 0 "register_operand") (mult: diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/i386/predicates.md gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/i386/predicates.md --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/i386/predicates.md 2014-03-04 22:24:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/i386/predicates.md 2014-03-26 08:19:17.000000000 +0000 @@ -338,6 +338,20 @@ (match_operand 0 "x86_64_immediate_operand")) (match_operand 0 "general_operand"))) +;; Return true if OP is non-VOIDmode general operand representable +;; on x86_64. This predicate is used in sign-extending conversion +;; operations that require non-VOIDmode immediate operands. +(define_predicate "x86_64_sext_operand" + (and (match_test "GET_MODE (op) != VOIDmode") + (match_operand 0 "x86_64_general_operand"))) + +;; Return true if OP is non-VOIDmode general operand. This predicate +;; is used in sign-extending conversion operations that require +;; non-VOIDmode immediate operands. +(define_predicate "sext_operand" + (and (match_test "GET_MODE (op) != VOIDmode") + (match_operand 0 "general_operand"))) + ;; Return true if OP is representable on x86_64 as zero-extended operand. ;; This predicate is used in zero-extending conversion operations that ;; require non-VOIDmode immediate operands. diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/i386/sse.md gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/i386/sse.md --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/i386/sse.md 2014-03-04 22:24:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/i386/sse.md 2014-03-31 14:27:30.000000000 +0000 @@ -2712,50 +2712,46 @@ (fma:FMAMODEM (match_operand:FMAMODEM 1 "nonimmediate_operand") (match_operand:FMAMODEM 2 "nonimmediate_operand") - (match_operand:FMAMODEM 3 "nonimmediate_operand")))] - "") + (match_operand:FMAMODEM 3 "nonimmediate_operand")))]) (define_expand "fms4" [(set (match_operand:FMAMODEM 0 "register_operand") (fma:FMAMODEM (match_operand:FMAMODEM 1 "nonimmediate_operand") (match_operand:FMAMODEM 2 "nonimmediate_operand") - (neg:FMAMODEM (match_operand:FMAMODEM 3 "nonimmediate_operand"))))] - "") + (neg:FMAMODEM (match_operand:FMAMODEM 3 "nonimmediate_operand"))))]) (define_expand "fnma4" [(set (match_operand:FMAMODEM 0 "register_operand") (fma:FMAMODEM (neg:FMAMODEM (match_operand:FMAMODEM 1 "nonimmediate_operand")) (match_operand:FMAMODEM 2 "nonimmediate_operand") - (match_operand:FMAMODEM 3 "nonimmediate_operand")))] - "") + (match_operand:FMAMODEM 3 "nonimmediate_operand")))]) (define_expand "fnms4" [(set (match_operand:FMAMODEM 0 "register_operand") (fma:FMAMODEM (neg:FMAMODEM (match_operand:FMAMODEM 1 "nonimmediate_operand")) (match_operand:FMAMODEM 2 "nonimmediate_operand") - (neg:FMAMODEM (match_operand:FMAMODEM 3 "nonimmediate_operand"))))] - "") + (neg:FMAMODEM (match_operand:FMAMODEM 3 "nonimmediate_operand"))))]) ;; The builtins for intrinsics are not constrained by SSE math enabled. -(define_mode_iterator FMAMODE [(SF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512F") - (DF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512F") - (V4SF "TARGET_FMA || TARGET_FMA4") - (V2DF "TARGET_FMA || TARGET_FMA4") - (V8SF "TARGET_FMA || TARGET_FMA4") - (V4DF "TARGET_FMA || TARGET_FMA4") - (V16SF "TARGET_AVX512F") - (V8DF "TARGET_AVX512F")]) +(define_mode_iterator FMAMODE + [(SF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512F") + (DF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512F") + (V4SF "TARGET_FMA || TARGET_FMA4") + (V2DF "TARGET_FMA || TARGET_FMA4") + (V8SF "TARGET_FMA || TARGET_FMA4") + (V4DF "TARGET_FMA || TARGET_FMA4") + (V16SF "TARGET_AVX512F") + (V8DF "TARGET_AVX512F")]) (define_expand "fma4i_fmadd_" [(set (match_operand:FMAMODE 0 "register_operand") (fma:FMAMODE (match_operand:FMAMODE 1 "nonimmediate_operand") (match_operand:FMAMODE 2 "nonimmediate_operand") - (match_operand:FMAMODE 3 "nonimmediate_operand")))] - "") + (match_operand:FMAMODE 3 "nonimmediate_operand")))]) (define_expand "avx512f_fmadd__maskz" [(match_operand:VF_512 0 "register_operand") @@ -2771,12 +2767,20 @@ DONE; }) +(define_mode_iterator FMAMODE_NOVF512 + [(SF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512F") + (DF "TARGET_FMA || TARGET_FMA4 || TARGET_AVX512F") + (V4SF "TARGET_FMA || TARGET_FMA4") + (V2DF "TARGET_FMA || TARGET_FMA4") + (V8SF "TARGET_FMA || TARGET_FMA4") + (V4DF "TARGET_FMA || TARGET_FMA4")]) + (define_insn "fma_fmadd_" - [(set (match_operand:FMAMODE 0 "register_operand" "=v,v,v,x,x") - (fma:FMAMODE - (match_operand:FMAMODE 1 "" "%0,0,v,x,x") - (match_operand:FMAMODE 2 "" ",v,,x,m") - (match_operand:FMAMODE 3 "" "v,,0,xm,x")))] + [(set (match_operand:FMAMODE_NOVF512 0 "register_operand" "=v,v,v,x,x") + (fma:FMAMODE_NOVF512 + (match_operand:FMAMODE_NOVF512 1 "" "%0,0,v,x,x") + (match_operand:FMAMODE_NOVF512 2 "" ",v,,x,m") + (match_operand:FMAMODE_NOVF512 3 "" "v,,0,xm,x")))] " && " "@ vfmadd132\t{%2, %3, %0|%0, %3, %2} @@ -2788,6 +2792,21 @@ (set_attr "type" "ssemuladd") (set_attr "mode" "")]) +(define_insn "fma_fmadd_" + [(set (match_operand:VF_512 0 "register_operand" "=v,v,v") + (fma:VF_512 + (match_operand:VF_512 1 "" "%0,0,v") + (match_operand:VF_512 2 "" ",v,") + (match_operand:VF_512 3 "" "v,,0")))] + " && " + "@ + vfmadd132\t{%2, %3, %0|%0, %3, %2} + vfmadd213\t{%3, %2, %0|%0, %2, %3} + vfmadd231\t{%2, %1, %0|%0, %1, %2}" + [(set_attr "isa" "fma_avx512f,fma_avx512f,fma_avx512f") + (set_attr "type" "ssemuladd") + (set_attr "mode" "")]) + (define_insn "avx512f_fmadd__mask" [(set (match_operand:VF_512 0 "register_operand" "=v,v") (vec_merge:VF_512 @@ -2821,12 +2840,12 @@ (set_attr "mode" "")]) (define_insn "fma_fmsub_" - [(set (match_operand:FMAMODE 0 "register_operand" "=v,v,v,x,x") - (fma:FMAMODE - (match_operand:FMAMODE 1 "" "%0, 0, v, x,x") - (match_operand:FMAMODE 2 "" ",v,,x,m") - (neg:FMAMODE - (match_operand:FMAMODE 3 "" "v,,0,xm,x"))))] + [(set (match_operand:FMAMODE_NOVF512 0 "register_operand" "=v,v,v,x,x") + (fma:FMAMODE_NOVF512 + (match_operand:FMAMODE_NOVF512 1 "" "%0,0,v,x,x") + (match_operand:FMAMODE_NOVF512 2 "" ",v,,x,m") + (neg:FMAMODE_NOVF512 + (match_operand:FMAMODE_NOVF512 3 "" "v,,0,xm,x"))))] " && " "@ vfmsub132\t{%2, %3, %0|%0, %3, %2} @@ -2838,6 +2857,22 @@ (set_attr "type" "ssemuladd") (set_attr "mode" "")]) +(define_insn "fma_fmsub_" + [(set (match_operand:VF_512 0 "register_operand" "=v,v,v") + (fma:VF_512 + (match_operand:VF_512 1 "" "%0,0,v") + (match_operand:VF_512 2 "" ",v,") + (neg:VF_512 + (match_operand:VF_512 3 "" "v,,0"))))] + " && " + "@ + vfmsub132\t{%2, %3, %0|%0, %3, %2} + vfmsub213\t{%3, %2, %0|%0, %2, %3} + vfmsub231\t{%2, %1, %0|%0, %1, %2}" + [(set_attr "isa" "fma_avx512f,fma_avx512f,fma_avx512f") + (set_attr "type" "ssemuladd") + (set_attr "mode" "")]) + (define_insn "avx512f_fmsub__mask" [(set (match_operand:VF_512 0 "register_operand" "=v,v") (vec_merge:VF_512 @@ -2873,12 +2908,12 @@ (set_attr "mode" "")]) (define_insn "fma_fnmadd_" - [(set (match_operand:FMAMODE 0 "register_operand" "=v,v,v,x,x") - (fma:FMAMODE - (neg:FMAMODE - (match_operand:FMAMODE 1 "" "%0,0,v,x,x")) - (match_operand:FMAMODE 2 "" ",v,,x,m") - (match_operand:FMAMODE 3 "" "v,,0,xm,x")))] + [(set (match_operand:FMAMODE_NOVF512 0 "register_operand" "=v,v,v,x,x") + (fma:FMAMODE_NOVF512 + (neg:FMAMODE_NOVF512 + (match_operand:FMAMODE_NOVF512 1 "" "%0,0,v,x,x")) + (match_operand:FMAMODE_NOVF512 2 "" ",v,,x,m") + (match_operand:FMAMODE_NOVF512 3 "" "v,,0,xm,x")))] " && " "@ vfnmadd132\t{%2, %3, %0|%0, %3, %2} @@ -2890,6 +2925,22 @@ (set_attr "type" "ssemuladd") (set_attr "mode" "")]) +(define_insn "fma_fnmadd_" + [(set (match_operand:VF_512 0 "register_operand" "=v,v,v") + (fma:VF_512 + (neg:VF_512 + (match_operand:VF_512 1 "" "%0,0,v")) + (match_operand:VF_512 2 "" ",v,") + (match_operand:VF_512 3 "" "v,,0")))] + " && " + "@ + vfnmadd132\t{%2, %3, %0|%0, %3, %2} + vfnmadd213\t{%3, %2, %0|%0, %2, %3} + vfnmadd231\t{%2, %1, %0|%0, %1, %2}" + [(set_attr "isa" "fma_avx512f,fma_avx512f,fma_avx512f") + (set_attr "type" "ssemuladd") + (set_attr "mode" "")]) + (define_insn "avx512f_fnmadd__mask" [(set (match_operand:VF_512 0 "register_operand" "=v,v") (vec_merge:VF_512 @@ -2925,13 +2976,13 @@ (set_attr "mode" "")]) (define_insn "fma_fnmsub_" - [(set (match_operand:FMAMODE 0 "register_operand" "=v,v,v,x,x") - (fma:FMAMODE - (neg:FMAMODE - (match_operand:FMAMODE 1 "" "%0,0,v,x,x")) - (match_operand:FMAMODE 2 "" ",v,,x,m") - (neg:FMAMODE - (match_operand:FMAMODE 3 "" "v,,0,xm,x"))))] + [(set (match_operand:FMAMODE_NOVF512 0 "register_operand" "=v,v,v,x,x") + (fma:FMAMODE_NOVF512 + (neg:FMAMODE_NOVF512 + (match_operand:FMAMODE_NOVF512 1 "" "%0,0,v,x,x")) + (match_operand:FMAMODE_NOVF512 2 "" ",v,,x,m") + (neg:FMAMODE_NOVF512 + (match_operand:FMAMODE_NOVF512 3 "" "v,,0,xm,x"))))] " && " "@ vfnmsub132\t{%2, %3, %0|%0, %3, %2} @@ -2943,6 +2994,23 @@ (set_attr "type" "ssemuladd") (set_attr "mode" "")]) +(define_insn "fma_fnmsub_" + [(set (match_operand:VF_512 0 "register_operand" "=v,v,v") + (fma:VF_512 + (neg:VF_512 + (match_operand:VF_512 1 "" "%0,0,v")) + (match_operand:VF_512 2 "" ",v,") + (neg:VF_512 + (match_operand:VF_512 3 "" "v,,0"))))] + " && " + "@ + vfnmsub132\t{%2, %3, %0|%0, %3, %2} + vfnmsub213\t{%3, %2, %0|%0, %2, %3} + vfnmsub231\t{%2, %1, %0|%0, %1, %2}" + [(set_attr "isa" "fma_avx512f,fma_avx512f,fma_avx512f") + (set_attr "type" "ssemuladd") + (set_attr "mode" "")]) + (define_insn "avx512f_fnmsub__mask" [(set (match_operand:VF_512 0 "register_operand" "=v,v") (vec_merge:VF_512 @@ -3014,11 +3082,11 @@ }) (define_insn "fma_fmaddsub_" - [(set (match_operand:VF 0 "register_operand" "=v,v,v,x,x") - (unspec:VF - [(match_operand:VF 1 "" "%0,0,v,x,x") - (match_operand:VF 2 "" ",v,,x,m") - (match_operand:VF 3 "" "v,,0,xm,x")] + [(set (match_operand:VF_128_256 0 "register_operand" "=v,v,v,x,x") + (unspec:VF_128_256 + [(match_operand:VF_128_256 1 "" "%0,0,v,x,x") + (match_operand:VF_128_256 2 "" ",v,,x,m") + (match_operand:VF_128_256 3 "" "v,,0,xm,x")] UNSPEC_FMADDSUB))] "(TARGET_FMA || TARGET_FMA4 || TARGET_AVX512F) && && " "@ @@ -3031,6 +3099,22 @@ (set_attr "type" "ssemuladd") (set_attr "mode" "")]) +(define_insn "fma_fmaddsub_" + [(set (match_operand:VF_512 0 "register_operand" "=v,v,v") + (unspec:VF_512 + [(match_operand:VF_512 1 "" "%0,0,v") + (match_operand:VF_512 2 "" ",v,") + (match_operand:VF_512 3 "" "v,,0")] + UNSPEC_FMADDSUB))] + "TARGET_AVX512F && && " + "@ + vfmaddsub132\t{%2, %3, %0|%0, %3, %2} + vfmaddsub213\t{%3, %2, %0|%0, %2, %3} + vfmaddsub231\t{%2, %1, %0|%0, %1, %2}" + [(set_attr "isa" "fma_avx512f,fma_avx512f,fma_avx512f") + (set_attr "type" "ssemuladd") + (set_attr "mode" "")]) + (define_insn "avx512f_fmaddsub__mask" [(set (match_operand:VF_512 0 "register_operand" "=v,v") (vec_merge:VF_512 @@ -3066,12 +3150,12 @@ (set_attr "mode" "")]) (define_insn "fma_fmsubadd_" - [(set (match_operand:VF 0 "register_operand" "=v,v,v,x,x") - (unspec:VF - [(match_operand:VF 1 "" "%0,0,v,x,x") - (match_operand:VF 2 "" ",v,,x,m") - (neg:VF - (match_operand:VF 3 "" "v,,0,xm,x"))] + [(set (match_operand:VF_128_256 0 "register_operand" "=v,v,v,x,x") + (unspec:VF_128_256 + [(match_operand:VF_128_256 1 "" "%0,0,v,x,x") + (match_operand:VF_128_256 2 "" ",v,,x,m") + (neg:VF_128_256 + (match_operand:VF_128_256 3 "" "v,,0,xm,x"))] UNSPEC_FMADDSUB))] "(TARGET_FMA || TARGET_FMA4 || TARGET_AVX512F) && && " "@ @@ -3084,6 +3168,23 @@ (set_attr "type" "ssemuladd") (set_attr "mode" "")]) +(define_insn "fma_fmsubadd_" + [(set (match_operand:VF_512 0 "register_operand" "=v,v,v") + (unspec:VF_512 + [(match_operand:VF_512 1 "" "%0,0,v") + (match_operand:VF_512 2 "" ",v,") + (neg:VF_512 + (match_operand:VF_512 3 "" "v,,0"))] + UNSPEC_FMADDSUB))] + "TARGET_AVX512F && && " + "@ + vfmsubadd132\t{%2, %3, %0|%0, %3, %2} + vfmsubadd213\t{%3, %2, %0|%0, %2, %3} + vfmsubadd231\t{%2, %1, %0|%0, %1, %2}" + [(set_attr "isa" "fma_avx512f,fma_avx512f,fma_avx512f") + (set_attr "type" "ssemuladd") + (set_attr "mode" "")]) + (define_insn "avx512f_fmsubadd__mask" [(set (match_operand:VF_512 0 "register_operand" "=v,v") (vec_merge:VF_512 diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/i386/xmmintrin.h gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/i386/xmmintrin.h --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/i386/xmmintrin.h 2014-03-03 23:53:40.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/i386/xmmintrin.h 2014-03-26 08:19:17.000000000 +0000 @@ -102,6 +102,14 @@ #define _MM_FLUSH_ZERO_ON 0x8000 #define _MM_FLUSH_ZERO_OFF 0x0000 +/* Create an undefined vector. */ +extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__)) +_mm_undefined_ps (void) +{ + __m128 __Y = __Y; + return __Y; +} + /* Create a vector of zeros. */ extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__)) _mm_setzero_ps (void) diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/mips/netbsd.h gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/mips/netbsd.h --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/mips/netbsd.h 2014-01-05 19:58:27.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/mips/netbsd.h 2014-04-01 18:05:47.000000000 +0000 @@ -32,7 +32,9 @@ if (TARGET_ABICALLS) \ builtin_define ("__ABICALLS__"); \ \ - if (mips_abi == ABI_EABI) \ + if (mips_abi == ABI_32) \ + builtin_define ("__mips_o32"); \ + else if (mips_abi == ABI_EABI) \ builtin_define ("__mips_eabi"); \ else if (mips_abi == ABI_N32) \ builtin_define ("__mips_n32"); \ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/moxie/moxie.h gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/moxie/moxie.h --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/moxie/moxie.h 2014-01-05 19:58:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/moxie/moxie.h 2014-04-03 11:49:37.000000000 +0000 @@ -59,7 +59,7 @@ #define DOUBLE_TYPE_SIZE 64 #define LONG_DOUBLE_TYPE_SIZE 64 -#define DEFAULT_SIGNED_CHAR 1 +#define DEFAULT_SIGNED_CHAR 0 #undef SIZE_TYPE #define SIZE_TYPE "unsigned int" @@ -68,7 +68,7 @@ #define PTRDIFF_TYPE "int" #undef WCHAR_TYPE -#define WCHAR_TYPE "long int" +#define WCHAR_TYPE "unsigned int" #undef WCHAR_TYPE_SIZE #define WCHAR_TYPE_SIZE BITS_PER_WORD diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/moxie/moxie.md gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/moxie/moxie.md --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/moxie/moxie.md 2014-01-05 19:58:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/moxie/moxie.md 2014-04-05 08:48:43.000000000 +0000 @@ -239,6 +239,56 @@ ldo.l %0, %1" [(set_attr "length" "2,2,6,2,6,2,6,6,6")]) +(define_insn_and_split "zero_extendqisi2" + [(set (match_operand:SI 0 "register_operand" "=r,r,r,r") + (zero_extend:SI (match_operand:QI 1 "nonimmediate_operand" "0,W,A,B")))] + "" + "@ + ; + ld.b %0, %1 + lda.b %0, %1 + ldo.b %0, %1" + "reload_completed" + [(set (match_dup 2) (match_dup 1)) + (set (match_dup 0) (zero_extend:SI (match_dup 2)))] +{ + operands[2] = gen_lowpart (QImode, operands[0]); +} + [(set_attr "length" "0,2,6,6")]) + +(define_insn_and_split "zero_extendhisi2" + [(set (match_operand:SI 0 "register_operand" "=r,r,r,r") + (zero_extend:SI (match_operand:HI 1 "nonimmediate_operand" "0,W,A,B")))] + "" + "@ + ; + ld.s %0, %1 + lda.s %0, %1 + ldo.s %0, %1" + "reload_completed" + [(set (match_dup 2) (match_dup 1)) + (set (match_dup 0) (zero_extend:SI (match_dup 2)))] +{ + operands[2] = gen_lowpart (HImode, operands[0]); +} + [(set_attr "length" "0,2,6,6")]) + +(define_insn "extendqisi2" + [(set (match_operand:SI 0 "register_operand" "=r") + (sign_extend:SI (match_operand:QI 1 "nonimmediate_operand" "r")))] + "" + "@ + sex.b %0, %1" + [(set_attr "length" "2")]) + +(define_insn "extendhisi2" + [(set (match_operand:SI 0 "register_operand" "=r") + (sign_extend:SI (match_operand:HI 1 "nonimmediate_operand" "r")))] + "" + "@ + sex.s %0, %1" + [(set_attr "length" "2")]) + (define_expand "movqi" [(set (match_operand:QI 0 "general_operand" "") (match_operand:QI 1 "general_operand" ""))] diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/nios2/linux.h gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/nios2/linux.h --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/nios2/linux.h 2014-01-05 19:58:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/nios2/linux.h 2014-04-01 18:05:47.000000000 +0000 @@ -26,11 +26,16 @@ } \ while (0) +#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-nios2.so.1" + #undef LINK_SPEC #define LINK_SPEC LINK_SPEC_ENDIAN \ - " %{shared:-shared} \ - %{static:-Bstatic} \ - %{rdynamic:-export-dynamic}" + "%{shared:-shared} \ + %{!shared: \ + %{!static: \ + %{rdynamic:-export-dynamic} \ + -dynamic-linker " GNU_USER_DYNAMIC_LINKER "} \ + %{static:-static}}" /* This toolchain implements the ABI for Linux Systems documented in the Nios II Processor Reference Handbook. */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/nios2/nios2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/nios2/nios2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/nios2/nios2.c 2014-03-20 10:50:24.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/nios2/nios2.c 2014-04-01 18:05:47.000000000 +0000 @@ -695,7 +695,7 @@ fprintf (file, "\taddi\tr3, r3, %%lo(_gp_got - 1b)\n"); fprintf (file, "\tadd\tr2, r2, r3\n"); fprintf (file, "\tmovhi\tr3, %%call_hiadj(_mcount)\n"); - fprintf (file, "\taddi\tr3, %%call_lo(_mcount)\n"); + fprintf (file, "\taddi\tr3, r3, %%call_lo(_mcount)\n"); fprintf (file, "\tadd\tr3, r2, r3\n"); fprintf (file, "\tldw\tr2, 0(r3)\n"); fprintf (file, "\tcallr\tr2\n"); @@ -1183,7 +1183,7 @@ /* Generate GOT pointer based address with large offset. */ static rtx -nios2_large_got_address (rtx sym, rtx offset) +nios2_large_got_address (rtx offset) { rtx addr = gen_reg_rtx (Pmode); emit_insn (gen_add3_insn (addr, pic_offset_table_rtx, @@ -1199,7 +1199,7 @@ crtl->uses_pic_offset_table = 1; if (nios2_large_offset_p (unspec)) - return nios2_large_got_address (loc, offset); + return nios2_large_got_address (offset); return gen_rtx_PLUS (Pmode, pic_offset_table_rtx, offset); } @@ -1805,6 +1805,30 @@ return x; } +static rtx +nios2_delegitimize_address (rtx x) +{ + x = delegitimize_mem_from_attrs (x); + + if (GET_CODE (x) == CONST && GET_CODE (XEXP (x, 0)) == UNSPEC) + { + switch (XINT (XEXP (x, 0), 1)) + { + case UNSPEC_PIC_SYM: + case UNSPEC_PIC_CALL_SYM: + case UNSPEC_PIC_GOTOFF_SYM: + case UNSPEC_ADD_TLS_GD: + case UNSPEC_ADD_TLS_LDM: + case UNSPEC_LOAD_TLS_IE: + case UNSPEC_ADD_TLS_LE: + x = XVECEXP (XEXP (x, 0), 0, 0); + gcc_assert (GET_CODE (x) == SYMBOL_REF); + break; + } + } + return x; +} + /* Main expander function for RTL moves. */ int nios2_emit_move_sequence (rtx *operands, enum machine_mode mode) @@ -3259,6 +3283,9 @@ #undef TARGET_LEGITIMIZE_ADDRESS #define TARGET_LEGITIMIZE_ADDRESS nios2_legitimize_address +#undef TARGET_DELEGITIMIZE_ADDRESS +#define TARGET_DELEGITIMIZE_ADDRESS nios2_delegitimize_address + #undef TARGET_LEGITIMATE_ADDRESS_P #define TARGET_LEGITIMATE_ADDRESS_P nios2_legitimate_address_p diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/nios2/nios2.md gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/nios2/nios2.md --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/nios2/nios2.md 2014-02-21 09:33:02.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/nios2/nios2.md 2014-04-01 18:05:47.000000000 +0000 @@ -74,8 +74,6 @@ UNSPEC_PIC_SYM UNSPEC_PIC_CALL_SYM UNSPEC_PIC_GOTOFF_SYM - UNSPEC_TLS - UNSPEC_TLS_LDM UNSPEC_LOAD_TLS_IE UNSPEC_ADD_TLS_LE UNSPEC_ADD_TLS_GD diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/rl78/rl78-expand.md gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/rl78/rl78-expand.md --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/rl78/rl78-expand.md 2014-03-03 23:53:41.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/rl78/rl78-expand.md 2014-04-03 16:42:11.000000000 +0000 @@ -30,18 +30,23 @@ if (rl78_far_p (operands[0]) && rl78_far_p (operands[1])) operands[1] = copy_to_mode_reg (QImode, operands[1]); - /* FIXME: Not sure how GCC can generate (SUBREG (SYMBOL_REF)), - but it does. Since this makes no sense, reject it here. */ + /* GCC can generate (SUBREG (SYMBOL_REF)) when it has to store a symbol + into a bitfield, or a packed ordinary field. We can handle this + provided that the destination is a register. If not, then load the + source into a register first. */ if (GET_CODE (operands[1]) == SUBREG - && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF) - FAIL; + && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF + && ! REG_P (operands[0])) + operands[1] = copy_to_mode_reg (QImode, operands[1]); + /* Similarly for (SUBREG (CONST (PLUS (SYMBOL_REF)))). cf. g++.dg/abi/packed.C. */ if (GET_CODE (operands[1]) == SUBREG && GET_CODE (XEXP (operands[1], 0)) == CONST && GET_CODE (XEXP (XEXP (operands[1], 0), 0)) == PLUS - && GET_CODE (XEXP (XEXP (XEXP (operands[1], 0), 0), 0)) == SYMBOL_REF) - FAIL; + && GET_CODE (XEXP (XEXP (XEXP (operands[1], 0), 0), 0)) == SYMBOL_REF + && ! REG_P (operands[0])) + operands[1] = copy_to_mode_reg (QImode, operands[1]); if (CONST_INT_P (operands[1]) && ! IN_RANGE (INTVAL (operands[1]), (-1 << 8) + 1, (1 << 8) - 1)) FAIL; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/rs6000/altivec.h gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/rs6000/altivec.h --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/rs6000/altivec.h 2014-03-20 10:50:25.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/rs6000/altivec.h 2014-03-28 19:04:55.000000000 +0000 @@ -319,6 +319,11 @@ #define vec_sqrt __builtin_vec_sqrt #define vec_vsx_ld __builtin_vec_vsx_ld #define vec_vsx_st __builtin_vec_vsx_st + +/* Note, xxsldi and xxpermdi were added as __builtin_vsx_ functions + instead of __builtin_vec_ */ +#define vec_xxsldwi __builtin_vsx_xxsldwi +#define vec_xxpermdi __builtin_vsx_xxpermdi #endif #ifdef _ARCH_PWR8 @@ -329,6 +334,7 @@ #define vec_vaddcuq __builtin_vec_vaddcuq #define vec_vaddudm __builtin_vec_vaddudm #define vec_vadduqm __builtin_vec_vadduqm +#define vec_vbpermq __builtin_vec_vbpermq #define vec_vclz __builtin_vec_vclz #define vec_vclzb __builtin_vec_vclzb #define vec_vclzd __builtin_vec_vclzd diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/rs6000/altivec.md gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/rs6000/altivec.md --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/rs6000/altivec.md 2014-03-20 10:50:25.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/rs6000/altivec.md 2014-03-28 19:04:55.000000000 +0000 @@ -142,6 +142,7 @@ UNSPEC_VSUBCUQ UNSPEC_VSUBEUQM UNSPEC_VSUBECUQ + UNSPEC_VBPERMQ ]) (define_c_enum "unspecv" @@ -3322,3 +3323,14 @@ [(set_attr "length" "4") (set_attr "type" "vecsimple")]) +;; We use V2DI as the output type to simplify converting the permute +;; bits into an integer +(define_insn "altivec_vbpermq" + [(set (match_operand:V2DI 0 "register_operand" "=v") + (unspec:V2DI [(match_operand:V16QI 1 "register_operand" "v") + (match_operand:V16QI 2 "register_operand" "v")] + UNSPEC_VBPERMQ))] + "TARGET_P8_VECTOR" + "vbpermq %0,%1,%2" + [(set_attr "length" "4") + (set_attr "type" "vecsimple")]) diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/rs6000/constraints.md gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/rs6000/constraints.md --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/rs6000/constraints.md 2014-03-03 01:43:59.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/rs6000/constraints.md 2014-03-28 19:04:55.000000000 +0000 @@ -106,6 +106,11 @@ (define_register_constraint "wz" "rs6000_constraints[RS6000_CONSTRAINT_wz]" "Floating point register if the LFIWZX instruction is enabled or NO_REGS.") +(define_constraint "wD" + "Int constant that is the element number of the 64-bit scalar in a vector." + (and (match_code "const_int") + (match_test "TARGET_VSX && (ival == VECTOR_ELEMENT_SCALAR_64BIT)"))) + ;; Lq/stq validates the address for load/store quad (define_memory_constraint "wQ" "Memory operand suitable for the load/store quad instructions" diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/rs6000/predicates.md gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/rs6000/predicates.md --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/rs6000/predicates.md 2014-01-24 11:57:54.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/rs6000/predicates.md 2014-03-28 19:04:55.000000000 +0000 @@ -981,6 +981,14 @@ (ior (match_operand 0 "zero_fp_constant") (match_operand 0 "reg_or_mem_operand"))) +;; Return 1 if the operand is a CONST_INT and it is the element for 64-bit +;; data types inside of a vector that scalar instructions operate on +(define_predicate "vsx_scalar_64bit" + (match_code "const_int") +{ + return (INTVAL (op) == VECTOR_ELEMENT_SCALAR_64BIT); +}) + ;; Return 1 if the operand is a general register or memory operand without ;; pre_inc or pre_dec or pre_modify, which produces invalid form of PowerPC ;; lwa instruction. diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/rs6000/rs6000-builtin.def gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/rs6000/rs6000-builtin.def --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/rs6000/rs6000-builtin.def 2014-03-20 10:50:25.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/rs6000/rs6000-builtin.def 2014-03-28 19:04:55.000000000 +0000 @@ -1374,6 +1374,7 @@ BU_P8V_AV_2 (VMAXUD, "vmaxud", CONST, umaxv2di3) BU_P8V_AV_2 (VMRGEW, "vmrgew", CONST, p8_vmrgew) BU_P8V_AV_2 (VMRGOW, "vmrgow", CONST, p8_vmrgow) +BU_P8V_AV_2 (VBPERMQ, "vbpermq", CONST, altivec_vbpermq) BU_P8V_AV_2 (VPKUDUM, "vpkudum", CONST, altivec_vpkudum) BU_P8V_AV_2 (VPKSDSS, "vpksdss", CONST, altivec_vpksdss) BU_P8V_AV_2 (VPKUDUS, "vpkudus", CONST, altivec_vpkudus) @@ -1448,6 +1449,7 @@ BU_P8V_OVERLOAD_2 (VADDCUQ, "vaddcuq") BU_P8V_OVERLOAD_2 (VADDUDM, "vaddudm") BU_P8V_OVERLOAD_2 (VADDUQM, "vadduqm") +BU_P8V_OVERLOAD_2 (VBPERMQ, "vbpermq") BU_P8V_OVERLOAD_2 (VMAXSD, "vmaxsd") BU_P8V_OVERLOAD_2 (VMAXUD, "vmaxud") BU_P8V_OVERLOAD_2 (VMINSD, "vminsd") diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/rs6000/rs6000.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/rs6000/rs6000.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/rs6000/rs6000.c 2014-03-21 17:14:28.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/rs6000/rs6000.c 2014-04-02 23:41:00.000000000 +0000 @@ -1752,6 +1752,9 @@ modes and DImode. */ if (FP_REGNO_P (regno)) { + if (TARGET_SOFT_FLOAT || !TARGET_FPRS) + return 0; + if (SCALAR_FLOAT_MODE_P (mode) && (mode != TDmode || (regno % 2) == 0) && FP_REGNO_P (last_regno)) @@ -1780,10 +1783,6 @@ return (VECTOR_MEM_ALTIVEC_OR_VSX_P (mode) || mode == V1TImode); - /* ...but GPRs can hold SIMD data on the SPE in one register. */ - if (SPE_SIMD_REGNO_P (regno) && TARGET_SPE && SPE_VECTOR_MODE (mode)) - return 1; - /* We cannot put non-VSX TImode or PTImode anywhere except general register and it must be able to fit within the register set. */ @@ -2310,6 +2309,10 @@ (int)END_BUILTINS); fprintf (stderr, DEBUG_FMT_D, "Number of rs6000 builtins", (int)RS6000_BUILTIN_COUNT); + + if (TARGET_VSX) + fprintf (stderr, DEBUG_FMT_D, "VSX easy 64-bit scalar element", + (int)VECTOR_ELEMENT_SCALAR_64BIT); } @@ -32519,6 +32522,11 @@ if (!peep2_reg_dead_p (2, addis_reg)) return false; + + /* If the target register being loaded is the stack pointer, we must + avoid loading any other value into it, even temporarily. */ + if (REG_P (target) && REGNO (target) == STACK_POINTER_REGNUM) + return false; } base_reg = XEXP (addr, 0); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/rs6000/rs6000-c.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/rs6000/rs6000-c.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/rs6000/rs6000-c.c 2014-03-20 10:50:25.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/rs6000/rs6000-c.c 2014-03-28 19:04:55.000000000 +0000 @@ -3778,6 +3778,12 @@ RS6000_BTI_unsigned_V1TI, RS6000_BTI_unsigned_V1TI, RS6000_BTI_unsigned_V1TI, 0 }, + { P8V_BUILTIN_VEC_VBPERMQ, P8V_BUILTIN_VBPERMQ, + RS6000_BTI_V2DI, RS6000_BTI_V16QI, RS6000_BTI_V16QI, 0 }, + { P8V_BUILTIN_VEC_VBPERMQ, P8V_BUILTIN_VBPERMQ, + RS6000_BTI_unsigned_V2DI, RS6000_BTI_unsigned_V16QI, + RS6000_BTI_unsigned_V16QI, 0 }, + { P8V_BUILTIN_VEC_VCLZ, P8V_BUILTIN_VCLZB, RS6000_BTI_V16QI, RS6000_BTI_V16QI, 0, 0 }, { P8V_BUILTIN_VEC_VCLZ, P8V_BUILTIN_VCLZB, diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/rs6000/rs6000.h gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/rs6000/rs6000.h --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/rs6000/rs6000.h 2014-03-20 10:50:25.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/rs6000/rs6000.h 2014-03-28 19:04:55.000000000 +0000 @@ -477,6 +477,10 @@ #define VECTOR_ELT_ORDER_BIG \ (BYTES_BIG_ENDIAN || (rs6000_altivec_element_order == 2)) +/* Element number of the 64-bit value in a 128-bit vector that can be accessed + with scalar instructions. */ +#define VECTOR_ELEMENT_SCALAR_64BIT ((BYTES_BIG_ENDIAN) ? 0 : 1) + /* Alignment options for fields in structures for sub-targets following AIX-like ABI. ALIGN_POWER word-aligns FP doubles (default AIX ABI). diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/rs6000/rs6000.md gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/rs6000/rs6000.md --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/rs6000/rs6000.md 2014-03-20 10:50:25.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/rs6000/rs6000.md 2014-04-02 23:41:00.000000000 +0000 @@ -9394,8 +9394,9 @@ [(set (match_operand:FMOVE64 0 "nonimmediate_operand" "=Y,r,r,r,r,r") (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_FPRS && TARGET_DOUBLE_FLOAT) + || TARGET_SOFT_FLOAT + || (mode == DDmode && TARGET_E500_DOUBLE)) && (gpc_reg_operand (operands[0], mode) || gpc_reg_operand (operands[1], mode))" "#" diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/rs6000/vsx.md gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/rs6000/vsx.md --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/rs6000/vsx.md 2014-03-20 10:50:25.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/rs6000/vsx.md 2014-03-28 19:04:55.000000000 +0000 @@ -1531,52 +1531,129 @@ [(set_attr "type" "vecperm")]) ;; Extract a DF/DI element from V2DF/V2DI -(define_insn "vsx_extract_" - [(set (match_operand: 0 "vsx_register_operand" "=ws,d,?wa") - (vec_select: (match_operand:VSX_D 1 "vsx_register_operand" "wd,wd,wa") +(define_expand "vsx_extract_" + [(set (match_operand: 0 "register_operand" "") + (vec_select: (match_operand:VSX_D 1 "register_operand" "") (parallel - [(match_operand:QI 2 "u5bit_cint_operand" "i,i,i")])))] + [(match_operand:QI 2 "u5bit_cint_operand" "")])))] "VECTOR_MEM_VSX_P (mode)" + "") + +;; Optimize cases were we can do a simple or direct move. +;; Or see if we can avoid doing the move at all +(define_insn "*vsx_extract__internal1" + [(set (match_operand: 0 "register_operand" "=d,ws,?wa,r") + (vec_select: + (match_operand:VSX_D 1 "register_operand" "d,wd,wa,wm") + (parallel + [(match_operand:QI 2 "vsx_scalar_64bit" "wD,wD,wD,wD")])))] + "VECTOR_MEM_VSX_P (mode) && TARGET_POWERPC64 && TARGET_DIRECT_MOVE" +{ + int op0_regno = REGNO (operands[0]); + int op1_regno = REGNO (operands[1]); + + if (op0_regno == op1_regno) + return "nop"; + + if (INT_REGNO_P (op0_regno)) + return "mfvsrd %0,%x1"; + + if (FP_REGNO_P (op0_regno) && FP_REGNO_P (op1_regno)) + return "fmr %0,%1"; + + return "xxlor %x0,%x1,%x1"; +} + [(set_attr "type" "fp,vecsimple,vecsimple,mftgpr") + (set_attr "length" "4")]) + +(define_insn "*vsx_extract__internal2" + [(set (match_operand: 0 "vsx_register_operand" "=d,ws,ws,?wa") + (vec_select: + (match_operand:VSX_D 1 "vsx_register_operand" "d,wd,wd,wa") + (parallel [(match_operand:QI 2 "u5bit_cint_operand" "wD,wD,i,i")])))] + "VECTOR_MEM_VSX_P (mode) + && (!TARGET_POWERPC64 || !TARGET_DIRECT_MOVE + || INTVAL (operands[2]) != VECTOR_ELEMENT_SCALAR_64BIT)" { int fldDM; gcc_assert (UINTVAL (operands[2]) <= 1); + + if (INTVAL (operands[2]) == VECTOR_ELEMENT_SCALAR_64BIT) + { + int op0_regno = REGNO (operands[0]); + int op1_regno = REGNO (operands[1]); + + if (op0_regno == op1_regno) + return "nop"; + + if (FP_REGNO_P (op0_regno) && FP_REGNO_P (op1_regno)) + return "fmr %0,%1"; + + return "xxlor %x0,%x1,%x1"; + } + fldDM = INTVAL (operands[2]) << 1; if (!BYTES_BIG_ENDIAN) fldDM = 3 - fldDM; operands[3] = GEN_INT (fldDM); - return \"xxpermdi %x0,%x1,%x1,%3\"; + return "xxpermdi %x0,%x1,%x1,%3"; } - [(set_attr "type" "vecperm")]) + [(set_attr "type" "fp,vecsimple,vecperm,vecperm") + (set_attr "length" "4")]) -;; Optimize extracting element 0 from memory -(define_insn "*vsx_extract__zero" - [(set (match_operand: 0 "vsx_register_operand" "=ws,d,?wa") +;; Optimize extracting a single scalar element from memory if the scalar is in +;; the correct location to use a single load. +(define_insn "*vsx_extract__load" + [(set (match_operand: 0 "register_operand" "=d,wv,wr") (vec_select: - (match_operand:VSX_D 1 "indexed_or_indirect_operand" "Z,Z,Z") - (parallel [(const_int 0)])))] - "VECTOR_MEM_VSX_P (mode) && WORDS_BIG_ENDIAN" - "lxsd%U1x %x0,%y1" - [(set (attr "type") - (if_then_else - (match_test "update_indexed_address_mem (operands[1], VOIDmode)") - (const_string "fpload_ux") - (const_string "fpload"))) - (set_attr "length" "4")]) - -;; Optimize extracting element 1 from memory for little endian -(define_insn "*vsx_extract__one_le" - [(set (match_operand: 0 "vsx_register_operand" "=ws,d,?wa") + (match_operand:VSX_D 1 "memory_operand" "m,Z,m") + (parallel [(match_operand:QI 2 "vsx_scalar_64bit" "wD,wD,wD")])))] + "VECTOR_MEM_VSX_P (mode)" + "@ + lfd%U1%X1 %0,%1 + lxsd%U1x %x0,%y1 + ld%U1%X1 %0,%1" + [(set_attr_alternative "type" + [(if_then_else + (match_test "update_indexed_address_mem (operands[1], VOIDmode)") + (const_string "fpload_ux") + (if_then_else + (match_test "update_address_mem (operands[1], VOIDmode)") + (const_string "fpload_u") + (const_string "fpload"))) + (const_string "fpload") + (if_then_else + (match_test "update_indexed_address_mem (operands[1], VOIDmode)") + (const_string "load_ux") + (if_then_else + (match_test "update_address_mem (operands[1], VOIDmode)") + (const_string "load_u") + (const_string "load")))]) + (set_attr "length" "4")]) + +;; Optimize storing a single scalar element that is the right location to +;; memory +(define_insn "*vsx_extract__store" + [(set (match_operand: 0 "memory_operand" "=m,Z,?Z") (vec_select: - (match_operand:VSX_D 1 "indexed_or_indirect_operand" "Z,Z,Z") - (parallel [(const_int 1)])))] - "VECTOR_MEM_VSX_P (mode) && !WORDS_BIG_ENDIAN" - "lxsd%U1x %x0,%y1" - [(set (attr "type") - (if_then_else - (match_test "update_indexed_address_mem (operands[1], VOIDmode)") - (const_string "fpload_ux") - (const_string "fpload"))) - (set_attr "length" "4")]) + (match_operand:VSX_D 1 "register_operand" "d,wd,wa") + (parallel [(match_operand:QI 2 "vsx_scalar_64bit" "wD,wD,wD")])))] + "VECTOR_MEM_VSX_P (mode)" + "@ + stfd%U0%X0 %1,%0 + stxsd%U0x %x1,%y0 + stxsd%U0x %x1,%y0" + [(set_attr_alternative "type" + [(if_then_else + (match_test "update_indexed_address_mem (operands[0], VOIDmode)") + (const_string "fpstore_ux") + (if_then_else + (match_test "update_address_mem (operands[0], VOIDmode)") + (const_string "fpstore_u") + (const_string "fpstore"))) + (const_string "fpstore") + (const_string "fpstore")]) + (set_attr "length" "4")]) ;; Extract a SF element from V4SF (define_insn_and_split "vsx_extract_v4sf" diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/s390/s390.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/s390/s390.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/s390/s390.c 2014-02-13 13:24:46.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/s390/s390.c 2014-04-02 23:41:00.000000000 +0000 @@ -4613,7 +4613,7 @@ int smode_bsize, mode_bsize; rtx op, clobber; - if (bitsize + bitpos > GET_MODE_SIZE (mode)) + if (bitsize + bitpos > GET_MODE_BITSIZE (mode)) return false; /* Generate INSERT IMMEDIATE (IILL et al). */ @@ -9225,6 +9225,13 @@ if (cfun_gpr_save_slot (i)) return false; + /* For 31 bit this is not covered by the frame_size check below + since f4, f6 are saved in the register save area without needing + additional stack space. */ + if (!TARGET_64BIT + && (cfun_fpr_save_p (FPR4_REGNUM) || cfun_fpr_save_p (FPR6_REGNUM))) + return false; + if (cfun->machine->base_reg && !call_really_used_regs[REGNO (cfun->machine->base_reg)]) return false; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/s390/s390.md gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/s390/s390.md --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/s390/s390.md 2014-02-07 14:55:24.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/s390/s390.md 2014-03-26 08:19:16.000000000 +0000 @@ -5034,6 +5034,57 @@ [(set_attr "op_type" ",RXE") (set_attr "type" "fsimp")]) +; +; Pointer add instruction patterns +; + +; This will match "*la_64" +(define_expand "addptrdi3" + [(set (match_operand:DI 0 "register_operand" "") + (plus:DI (match_operand:DI 1 "register_operand" "") + (match_operand:DI 2 "nonmemory_operand" "")))] + "TARGET_64BIT" +{ + HOST_WIDE_INT c = INTVAL (operands[2]); + + if (GET_CODE (operands[2]) == CONST_INT) + { + if (!CONST_OK_FOR_CONSTRAINT_P (c, 'K', "K") + && !CONST_OK_FOR_CONSTRAINT_P (c, 'O', "Os")) + { + operands[2] = force_const_mem (DImode, operands[2]); + operands[2] = force_reg (DImode, operands[2]); + } + else if (!DISP_IN_RANGE (INTVAL (operands[2]))) + operands[2] = force_reg (DImode, operands[2]); + } +}) + +; For 31 bit we have to prevent the generated pattern from matching +; normal ADDs since la only does a 31 bit add. This is supposed to +; match "force_la_31". +(define_expand "addptrsi3" + [(parallel + [(set (match_operand:SI 0 "register_operand" "") + (plus:SI (match_operand:SI 1 "register_operand" "") + (match_operand:SI 2 "nonmemory_operand" ""))) + (use (const_int 0))])] + "!TARGET_64BIT" +{ + HOST_WIDE_INT c = INTVAL (operands[2]); + + if (GET_CODE (operands[2]) == CONST_INT) + { + if (!CONST_OK_FOR_CONSTRAINT_P (c, 'K', "K") + && !CONST_OK_FOR_CONSTRAINT_P (c, 'O', "Os")) + { + operands[2] = force_const_mem (SImode, operands[2]); + operands[2] = force_reg (SImode, operands[2]); + } + else if (!DISP_IN_RANGE (INTVAL (operands[2]))) + operands[2] = force_reg (SImode, operands[2]); + } +}) ;; ;;- Subtract instructions. diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/spu/spu.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/spu/spu.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/spu/spu.c 2014-01-05 19:58:21.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/spu/spu.c 2014-04-02 23:41:00.000000000 +0000 @@ -2064,7 +2064,7 @@ } hbr_insn = insn; } - if (INSN_CODE (insn) == CODE_FOR_blockage) + if (INSN_CODE (insn) == CODE_FOR_blockage && next_insn) { if (GET_MODE (insn) == TImode) PUT_MODE (next_insn, TImode); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/spu/spu.md gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/spu/spu.md --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/config/spu/spu.md 2014-01-05 19:58:21.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/config/spu/spu.md 2014-04-02 23:41:00.000000000 +0000 @@ -2851,7 +2851,13 @@ (match_operand:SI 2 "const_int_operand" "")) (match_operand 3 "nonmemory_operand" ""))] "" - { spu_expand_insv(operands); DONE; }) + { + if (INTVAL (operands[1]) + INTVAL (operands[2]) + > GET_MODE_BITSIZE (GET_MODE (operands[0]))) + FAIL; + spu_expand_insv(operands); + DONE; + }) ;; Simplify a number of patterns that get generated by extv, extzv, ;; insv, and loads. diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/call.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/call.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/call.c 2014-03-20 10:50:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/call.c 2014-04-02 04:32:24.000000000 +0000 @@ -948,6 +948,9 @@ bool user = false; enum conversion_rank rank = cr_exact; + /* We might need to propagate the size from the element to the array. */ + complete_type (type); + if (TYPE_DOMAIN (type) && !variably_modified_type_p (TYPE_DOMAIN (type), NULL_TREE)) { diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/ChangeLog gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/ChangeLog --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/ChangeLog 2014-03-21 17:14:28.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/ChangeLog 2014-04-05 08:48:42.000000000 +0000 @@ -1,3 +1,142 @@ +2014-04-04 Fabien Chêne + + * decl.c (duplicate_decls): Check for the return of warning_at + before emitting a note. + (warn_misplaced_attr_for_class_type): Likewise. + (check_tag_decl): Likewise. + +2014-04-04 Paolo Carlini + + PR c++/58207 + * semantics.c (sort_constexpr_mem_initializers): Robustify loop. + +2014-04-04 Patrick Palka + + PR c++/44613 + * semantics.c (add_stmt): Set STATEMENT_LIST_HAS_LABEL. + * decl.c (cp_finish_decl): Create a new BIND_EXPR before + instantiating a variable-sized type. + + PR c++/21113 + * decl.c (decl_jump_unsafe): Consider variably-modified decls. + +2014-04-04 Fabien Chêne + + * class.c (find_abi_tags_r): Check for the return of warning + before emitting a note. + (one_inherited_ctor): Likewise. + +2014-04-04 Fabien Chêne + + * decl.c (duplicate_decls): Check for the return of permerror + before emitting a note. + +2014-04-03 Nathan Sidwell + + * 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. + +2014-04-01 Jason Merrill + + * pt.c (process_partial_specialization): Say "not deducible" + rather than "not used". Use inform. + + PR c++/60374 + * pt.c (coerce_template_parms): Check that the pack expansion + pattern works with the first matching parameter. + +2014-04-01 Fabien Chêne + + * init.c (perform_member_init): Homogenize uninitialized + diagnostics. + +2014-04-01 Jason Merrill + + PR c++/60708 + * call.c (build_array_conv): Call complete_type. + + PR c++/60713 + * typeck2.c (PICFLAG_SIDE_EFFECTS): New. + (picflag_from_initializer): Return it. + (process_init_constructor): Handle it. + + PR c++/60642 + * decl2.c (is_late_template_attribute): Don't defer abi_tag. + * mangle.c (write_unqualified_name): Fix abi_tag on templates. + * pt.c (get_template_info): Handle NAMESPACE_DECL. + (most_general_template): Handle more kinds of template. + * tree.c (handle_abi_tag_attribute): Ignore abi_tag on template + instantiations and specializations. + +2014-03-31 Patrick Palka + + PR c++/44859 + * typeck.c (maybe_warn_about_returning_address_of_local): Unwrap + COMPONENT_REFs and ARRAY_REFs sooner. + +2014-03-29 Adam Butcher + + PR c++/60626 + * parser.c (cp_parser_init_declarator): Handle erroneous generic type + usage in non-functions with pushed scope. + +2014-03-28 Adam Butcher + + PR c++/60573 + * name-lookup.h (cp_binding_level): New transient field defining_class_p + to indicate whether a scope is in the process of defining a class. + * semantics.c (begin_class_definition): Set defining_class_p. + * name-lookup.c (leave_scope): Reset defining_class_p. + * parser.c (synthesize_implicit_template_parm): Use cp_binding_level:: + defining_class_p rather than TYPE_BEING_DEFINED as the predicate for + unwinding to class-defining scope to handle the erroneous definition of + a generic function of an arbitrarily nested class within an enclosing + class. + +2014-03-26 Fabien Chêne + + PR c++/52369 + * method.c (walk_field_subobs): Improve the diagnostic + locations for both REFERENCE_TYPEs and non-static const members. + * init.c (diagnose_uninitialized_cst_or_ref_member): Use %q#D + instead of %qD to be consistent with the c++11 diagnostic. + +2014-03-25 Jason Merrill + + PR c++/60566 + PR c++/58678 + * class.c (build_vtbl_initializer): Handle abstract dtors here. + * search.c (get_pure_virtuals): Not here. + + PR c++/60375 + * parser.c (cp_parser_lambda_expression): Don't parse the body of + a lambda in unevaluated context. + + PR c++/60628 + * decl.c (create_array_type_for_decl): Complain about array of auto. + +2014-03-25 Jakub Jelinek + + PR c++/60331 + * semantics.c (potential_constant_expression_1): Handle + DECL_EXPR. + +2014-03-24 Adam Butcher + + PR c++/60627 + * parser.c (cp_parser_parameter_declaration_clause): Prevent 'auto' from + introducing an implicit function template parameter within an explicit + instantiation. + +2014-03-22 Jason Merrill + + PR c++/60574 + * decl.c (grokdeclarator): Change permerror about 'virtual auto' + to error. + 2014-03-21 Paolo Carlini PR c++/60384 diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/ChangeLog-2008 gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/ChangeLog-2008 --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/ChangeLog-2008 2013-02-25 13:50:45.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/ChangeLog-2008 2014-04-02 04:32:24.000000000 +0000 @@ -307,8 +307,8 @@ * g++spec.c (LIBSTDCXX_STATIC): New. (lang_spec_driver): Use LIBSTDCXX_STATIC when not shared_libgcc. - -2008-11-05 Fabien Chene + +2008-11-05 Fabien Chêne PR c++/32519 * cp-tree.h: Fix DECL_NONSTATIC_MEMBER_P to handle member template diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/ChangeLog-2010 gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/ChangeLog-2010 --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/ChangeLog-2010 2013-02-25 13:50:45.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/ChangeLog-2010 2014-04-02 04:32:24.000000000 +0000 @@ -3127,13 +3127,13 @@ * typeck.c (cp_build_modify_expr): Complain about assignment to array from init list. -2010-05-10 Fabien Chêne +2010-05-10 Fabien Chêne PR c++/43719 - * decl.c (check_initializer): strip array type before checking for + * decl.c (check_initializer): Strip array type before checking for uninitialized const or ref members. -2010-05-07 Fabien Chêne +2010-05-07 Fabien Chêne PR c++/43951 * init.c (diagnose_uninitialized_cst_or_ref_member_1): Returns the @@ -3258,12 +3258,12 @@ PR c++/43779 * typeck.c (warn_args_num): New function. (convert_arguments): Use warn_args_num to print the diagnostic - messages. + messages. -2010-04-29 Fabien Chêne +2010-04-29 Fabien Chêne PR c++/43890 - * init.c (diagnose_uninitialized_cst_or_ref_member): check for + * init.c (diagnose_uninitialized_cst_or_ref_member): Check for user-provided constructor while recursing. 2010-04-28 Manuel López-Ibáñez @@ -3277,10 +3277,10 @@ * init.c (perform_member_init): Check CLASS_TYPE_P. -2010-04-27 Fabien Chêne +2010-04-27 Fabien Chêne PR c++/29043 - * init.c (perform_member_init): check for uninitialized const or + * init.c (perform_member_init): Check for uninitialized const or reference members, including array types. 2010-04-24 Jason Merrill @@ -3331,7 +3331,7 @@ convert_like_real. * cp-tree.h: Adjust. -2010-04-27 Fabien Chêne +2010-04-27 Fabien Chêne Jason Merrill PR c++/42844 @@ -3403,7 +3403,7 @@ * call.c (type_decays_to): Call cv_unqualified for non-class type. -2010-04-12 Fabien Chene +2010-04-12 Fabien Chêne > PR c++/25811 * cp-tree.h (diagnose_uninitialized_cst_or_ref_member): Declare. diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/ChangeLog-2011 gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/ChangeLog-2011 --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/ChangeLog-2011 2013-02-25 13:50:45.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/ChangeLog-2011 2014-04-02 04:32:24.000000000 +0000 @@ -3511,7 +3511,7 @@ 2011-05-07 Fabien Chêne PR c++/48859 - * init.c (diagnose_uninitialized_cst_or_ref_member_1): stop the + * init.c (diagnose_uninitialized_cst_or_ref_member_1): Stop the recursion if there is user defined constructor. 2011-05-09 Jason Merrill diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/ChangeLog-2012 gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/ChangeLog-2012 --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/ChangeLog-2012 2013-02-25 13:50:45.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/ChangeLog-2012 2014-04-02 04:32:24.000000000 +0000 @@ -2716,7 +2716,7 @@ 2012-02-16 Fabien Chêne PR c++/52126 - * decl.c (xref_basetypes): call dependent_scope_p instead of + * decl.c (xref_basetypes): Call dependent_scope_p instead of dependent_type_p. 2012-02-16 Jason Merrill diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/class.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/class.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/class.c 2014-02-28 00:03:08.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/class.c 2014-04-05 08:48:42.000000000 +0000 @@ -149,6 +149,7 @@ static void build_base_fields (record_layout_info, splay_tree, tree *); static void check_methods (tree); static void remove_zero_width_bit_fields (tree); +static bool accessible_nvdtor_p (tree); static void check_bases (tree, int *, int *); static void check_bases_and_members (tree); static tree create_vtable_ptr (tree, tree *); @@ -1384,19 +1385,21 @@ /* Otherwise we're diagnosing missing tags. */ else if (TYPE_P (p->subob)) { - warning (OPT_Wabi_tag, "%qT does not have the %E abi tag " - "that base %qT has", p->t, tag, p->subob); - inform (location_of (p->subob), "%qT declared here", - p->subob); + if (warning (OPT_Wabi_tag, "%qT does not have the %E abi tag " + "that base %qT has", p->t, tag, p->subob)) + inform (location_of (p->subob), "%qT declared here", + p->subob); } else { - warning (OPT_Wabi_tag, "%qT does not have the %E abi tag " - "that %qT (used in the type of %qD) has", - p->t, tag, *tp, p->subob); - inform (location_of (p->subob), "%qD declared here", - p->subob); - inform (location_of (*tp), "%qT declared here", *tp); + if (warning (OPT_Wabi_tag, "%qT does not have the %E abi tag " + "that %qT (used in the type of %qD) has", + p->t, tag, *tp, p->subob)) + { + inform (location_of (p->subob), "%qD declared here", + p->subob); + inform (location_of (*tp), "%qT declared here", *tp); + } } } } @@ -1476,6 +1479,33 @@ mark_type_abi_tags (t, false); } +/* Return true, iff class T has a non-virtual destructor that is + accessible from outside the class heirarchy (i.e. is public, or + there's a suitable friend. */ + +static bool +accessible_nvdtor_p (tree t) +{ + tree dtor = CLASSTYPE_DESTRUCTORS (t); + + /* An implicitly declared destructor is always public. And, + if it were virtual, we would have created it by now. */ + if (!dtor) + return true; + + if (DECL_VINDEX (dtor)) + return false; /* Virtual */ + + if (!TREE_PRIVATE (dtor) && !TREE_PROTECTED (dtor)) + return true; /* Public */ + + if (CLASSTYPE_FRIEND_CLASSES (t) + || DECL_FRIENDLIST (TYPE_MAIN_DECL (t))) + return true; /* Has friends */ + + return false; +} + /* Run through the base classes of T, updating CANT_HAVE_CONST_CTOR_P, and NO_CONST_ASN_REF_P. Also set flag bits in T based on properties of the bases. */ @@ -1512,13 +1542,6 @@ if (!CLASSTYPE_LITERAL_P (basetype)) CLASSTYPE_LITERAL_P (t) = false; - /* Effective C++ rule 14. We only need to check TYPE_POLYMORPHIC_P - here because the case of virtual functions but non-virtual - dtor is handled in finish_struct_1. */ - if (!TYPE_POLYMORPHIC_P (basetype)) - warning (OPT_Weffc__, - "base class %q#T has a non-virtual destructor", basetype); - /* If the base class doesn't have copy constructors or assignment operators that take const references, then the derived class cannot have such a member automatically @@ -3062,9 +3085,9 @@ one_inheriting_sig (t, ctor, new_parms, i); if (parms == NULL_TREE) { - warning (OPT_Winherited_variadic_ctor, - "the ellipsis in %qD is not inherited", ctor); - inform (DECL_SOURCE_LOCATION (ctor), "%qD declared here", ctor); + if (warning (OPT_Winherited_variadic_ctor, + "the ellipsis in %qD is not inherited", ctor)) + inform (DECL_SOURCE_LOCATION (ctor), "%qD declared here", ctor); } } @@ -5547,6 +5570,27 @@ TYPE_HAS_COMPLEX_MOVE_ASSIGN (t) |= TYPE_CONTAINS_VPTR_P (t); TYPE_HAS_COMPLEX_DFLT (t) |= TYPE_CONTAINS_VPTR_P (t); + /* Warn if a base of a polymorphic type has an accessible + non-virtual destructor. It is only now that we know the class is + polymorphic. Although a polymorphic base will have a already + been diagnosed during its definition, we warn on use too. */ + if (TYPE_POLYMORPHIC_P (t) && warn_nonvdtor) + { + tree binfo, base_binfo; + unsigned i; + + for (binfo = TYPE_BINFO (t), i = 0; + BINFO_BASE_ITERATE (binfo, i, base_binfo); i++) + { + tree basetype = TREE_TYPE (base_binfo); + + if (accessible_nvdtor_p (basetype)) + warning (OPT_Wnon_virtual_dtor, + "base class %q#T has accessible non-virtual destructor", + basetype); + } + } + /* If the class has no user-declared constructor, but does have non-static const or reference data members that can never be initialized, issue a warning. */ @@ -6597,25 +6641,11 @@ /* This warning does not make sense for Java classes, since they cannot have destructors. */ - if (!TYPE_FOR_JAVA (t) && warn_nonvdtor && TYPE_POLYMORPHIC_P (t)) - { - tree dtor; - - dtor = CLASSTYPE_DESTRUCTORS (t); - if (/* An implicitly declared destructor is always public. And, - if it were virtual, we would have created it by now. */ - !dtor - || (!DECL_VINDEX (dtor) - && (/* public non-virtual */ - (!TREE_PRIVATE (dtor) && !TREE_PROTECTED (dtor)) - || (/* non-public non-virtual with friends */ - (TREE_PRIVATE (dtor) || TREE_PROTECTED (dtor)) - && (CLASSTYPE_FRIEND_CLASSES (t) - || DECL_FRIENDLIST (TYPE_MAIN_DECL (t))))))) - warning (OPT_Wnon_virtual_dtor, - "%q#T has virtual functions and accessible" - " non-virtual destructor", t); - } + if (!TYPE_FOR_JAVA (t) && warn_nonvdtor + && TYPE_POLYMORPHIC_P (t) && accessible_nvdtor_p (t)) + warning (OPT_Wnon_virtual_dtor, + "%q#T has virtual functions and accessible" + " non-virtual destructor", t); complete_vars (t); @@ -9017,6 +9047,16 @@ if (!TARGET_VTABLE_USES_DESCRIPTORS) init = fold_convert (vfunc_ptr_type_node, build_fold_addr_expr (fn)); + /* Don't refer to a virtual destructor from a constructor + vtable or a vtable for an abstract class, since destroying + an object under construction is undefined behavior and we + don't want it to be considered a candidate for speculative + devirtualization. But do create the thunk for ABI + compliance. */ + if (DECL_DESTRUCTOR_P (fn_original) + && (CLASSTYPE_PURE_VIRTUALS (DECL_CONTEXT (fn_original)) + || orig_binfo != binfo)) + init = size_zero_node; } } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/decl2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/decl2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/decl2.c 2014-02-28 00:03:08.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/decl2.c 2014-04-01 18:05:47.000000000 +0000 @@ -1169,8 +1169,9 @@ /* Also defer most attributes on dependent types. This is not necessary in all cases, but is the better default. */ else if (dependent_type_p (type) - /* But attribute visibility specifically works on - templates. */ + /* But attributes abi_tag and visibility specifically apply + to templates. */ + && !is_attribute_p ("abi_tag", name) && !is_attribute_p ("visibility", name)) return true; else diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/decl.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/decl.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/decl.c 2014-03-20 10:50:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/decl.c 2014-04-05 08:48:42.000000000 +0000 @@ -1648,10 +1648,10 @@ && prototype_p (TREE_TYPE (newdecl))) { /* Prototype decl follows defn w/o prototype. */ - warning_at (DECL_SOURCE_LOCATION (newdecl), 0, - "prototype specified for %q#D", newdecl); - inform (DECL_SOURCE_LOCATION (olddecl), - "previous non-prototype definition here"); + if (warning_at (DECL_SOURCE_LOCATION (newdecl), 0, + "prototype specified for %q#D", newdecl)) + inform (DECL_SOURCE_LOCATION (olddecl), + "previous non-prototype definition here"); } else if (VAR_OR_FUNCTION_DECL_P (olddecl) && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl)) @@ -1737,9 +1737,9 @@ if (permerror (input_location, "default argument given for parameter " "%d of %q#D", i, newdecl)) - permerror (DECL_SOURCE_LOCATION (olddecl), - "previous specification in %q#D here", - olddecl); + inform (DECL_SOURCE_LOCATION (olddecl), + "previous specification in %q#D here", + olddecl); } else { @@ -2785,12 +2785,11 @@ || type == error_mark_node) return 0; - type = strip_array_types (type); - - if (DECL_NONTRIVIALLY_INITIALIZED_P (decl)) + if (DECL_NONTRIVIALLY_INITIALIZED_P (decl) + || variably_modified_type_p (type, NULL_TREE)) return 2; - if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))) + if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)) return 1; return 0; @@ -4242,12 +4241,12 @@ { gcc_assert (OVERLOAD_TYPE_P (class_type)); - warning_at (location, OPT_Wattributes, - "attribute ignored in declaration " - "of %q#T", class_type); - inform (location, - "attribute for %q#T must follow the %qs keyword", - class_type, class_key_or_enum_as_string (class_type)); + if (warning_at (location, OPT_Wattributes, + "attribute ignored in declaration " + "of %q#T", class_type)) + inform (location, + "attribute for %q#T must follow the %qs keyword", + class_type, class_key_or_enum_as_string (class_type)); } /* Make sure that a declaration with no declarator is well-formed, i.e. @@ -4374,12 +4373,12 @@ No attribute-specifier-seq shall appertain to an explicit instantiation. */ { - warning_at (loc, OPT_Wattributes, - "attribute ignored in explicit instantiation %q#T", - declared_type); - inform (loc, - "no attribute can be applied to " - "an explicit instantiation"); + if (warning_at (loc, OPT_Wattributes, + "attribute ignored in explicit instantiation %q#T", + declared_type)) + inform (loc, + "no attribute can be applied to " + "an explicit instantiation"); } else warn_misplaced_attr_for_class_type (loc, declared_type); @@ -6441,7 +6440,24 @@ after the call to check_initializer so that the DECL_EXPR for a reference temp is added before the DECL_EXPR for the reference itself. */ if (DECL_FUNCTION_SCOPE_P (decl)) - add_decl_expr (decl); + { + /* If we're building a variable sized type, and we might be + reachable other than via the top of the current binding + level, then create a new BIND_EXPR so that we deallocate + the object at the right time. */ + if (VAR_P (decl) + && DECL_SIZE (decl) + && !TREE_CONSTANT (DECL_SIZE (decl)) + && STATEMENT_LIST_HAS_LABEL (cur_stmt_list)) + { + tree bind; + bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL); + TREE_SIDE_EFFECTS (bind) = 1; + add_stmt (bind); + BIND_EXPR_BODY (bind) = push_stmt_list (); + } + add_decl_expr (decl); + } /* Let the middle end know about variables and functions -- but not static data members in uninstantiated class templates. */ @@ -8534,6 +8550,14 @@ && (flag_iso || warn_vla > 0)) pedwarn (input_location, OPT_Wvla, "array of array of runtime bound"); + /* 8.3.4p1: ...if the type of the identifier of D contains the auto + type-specifier, the program is ill-formed. */ + if (type_uses_auto (type)) + { + error ("%qD declared as array of %qT", name, type); + return error_mark_node; + } + /* Figure out the index type for the array. */ if (size) itype = compute_array_index_type (name, size, tf_warning_or_error); @@ -9553,8 +9577,8 @@ "-std=gnu++1y"); } else if (virtualp) - permerror (input_location, "virtual function cannot " - "have deduced return type"); + error ("virtual function cannot " + "have deduced return type"); } else if (!is_auto (type)) { diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/init.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/init.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/init.c 2014-03-21 17:14:28.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/init.c 2014-04-02 04:32:24.000000000 +0000 @@ -694,11 +694,14 @@ if (CP_TYPE_CONST_P (type) && init == NULL_TREE && default_init_uninitialized_part (type)) - /* TYPE_NEEDS_CONSTRUCTING can be set just because we have a - vtable; still give this diagnostic. */ - permerror (DECL_SOURCE_LOCATION (current_function_decl), - "uninitialized member %qD with % type %qT", - member, type); + { + /* TYPE_NEEDS_CONSTRUCTING can be set just because we have a + vtable; still give this diagnostic. */ + if (permerror (DECL_SOURCE_LOCATION (current_function_decl), + "uninitialized const member in %q#T", type)) + inform (DECL_SOURCE_LOCATION (member), + "%q#D should be initialized", member ); + } finish_expr_stmt (build_aggr_init (decl, init, flags, tf_warning_or_error)); } @@ -710,13 +713,19 @@ tree core_type; /* member traversal: note it leaves init NULL */ if (TREE_CODE (type) == REFERENCE_TYPE) - permerror (DECL_SOURCE_LOCATION (current_function_decl), - "uninitialized reference member %qD", - member); + { + if (permerror (DECL_SOURCE_LOCATION (current_function_decl), + "uninitialized reference member in %q#T", type)) + inform (DECL_SOURCE_LOCATION (member), + "%q#D should be initialized", member); + } else if (CP_TYPE_CONST_P (type)) - permerror (DECL_SOURCE_LOCATION (current_function_decl), - "uninitialized member %qD with % type %qT", - member, type); + { + if (permerror (DECL_SOURCE_LOCATION (current_function_decl), + "uninitialized const member in %q#T", type)) + inform (DECL_SOURCE_LOCATION (member), + "%q#D should be initialized", member ); + } core_type = strip_array_types (type); @@ -2157,7 +2166,7 @@ "of %q#T", DECL_CONTEXT (field), origin); } inform (DECL_SOURCE_LOCATION (field), - "%qD should be initialized", field); + "%q#D should be initialized", field); } } @@ -2185,7 +2194,7 @@ "of %q#T", DECL_CONTEXT (field), origin); } inform (DECL_SOURCE_LOCATION (field), - "%qD should be initialized", field); + "%q#D should be initialized", field); } } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/mangle.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/mangle.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/mangle.c 2014-02-22 13:01:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/mangle.c 2014-04-01 18:05:47.000000000 +0000 @@ -180,7 +180,7 @@ static void write_nested_name (const tree); static void write_prefix (const tree); static void write_template_prefix (const tree); -static void write_unqualified_name (const tree); +static void write_unqualified_name (tree); static void write_conversion_operator_name (const tree); static void write_source_name (tree); static void write_literal_operator_name (tree); @@ -1195,7 +1195,7 @@ } static void -write_unqualified_name (const tree decl) +write_unqualified_name (tree decl) { MANGLE_TRACE_TREE ("unqualified-name", decl); @@ -1280,10 +1280,21 @@ write_source_name (DECL_NAME (decl)); } - tree attrs = (TREE_CODE (decl) == TYPE_DECL - ? TYPE_ATTRIBUTES (TREE_TYPE (decl)) - : DECL_ATTRIBUTES (decl)); - write_abi_tags (lookup_attribute ("abi_tag", attrs)); + /* We use the ABI tags from the primary template, ignoring tags on any + specializations. This is necessary because C++ doesn't require a + specialization to be declared before it is used unless the use + requires a complete type, but we need to get the tags right on + incomplete types as well. */ + if (tree tmpl = most_general_template (decl)) + decl = DECL_TEMPLATE_RESULT (tmpl); + /* Don't crash on an unbound class template. */ + if (decl) + { + tree attrs = (TREE_CODE (decl) == TYPE_DECL + ? TYPE_ATTRIBUTES (TREE_TYPE (decl)) + : DECL_ATTRIBUTES (decl)); + write_abi_tags (lookup_attribute ("abi_tag", attrs)); + } } /* Write the unqualified-name for a conversion operator to TYPE. */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/method.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/method.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/method.c 2014-03-20 10:50:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/method.c 2014-03-27 17:33:35.000000000 +0000 @@ -1110,15 +1110,23 @@ && default_init_uninitialized_part (mem_type)) { if (diag) - error ("uninitialized non-static const member %q#D", - field); + { + error ("uninitialized const member in %q#T", + current_class_type); + inform (DECL_SOURCE_LOCATION (field), + "%q#D should be initialized", field); + } bad = true; } else if (TREE_CODE (mem_type) == REFERENCE_TYPE) { if (diag) - error ("uninitialized non-static reference member %q#D", - field); + { + error ("uninitialized reference member in %q#T", + current_class_type); + inform (DECL_SOURCE_LOCATION (field), + "%q#D should be initialized", field); + } bad = true; } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/name-lookup.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/name-lookup.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/name-lookup.c 2014-03-21 17:14:28.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/name-lookup.c 2014-03-30 07:40:41.000000000 +0000 @@ -1630,10 +1630,14 @@ free_binding_level = scope; } - /* Find the innermost enclosing class scope, and reset - CLASS_BINDING_LEVEL appropriately. */ if (scope->kind == sk_class) { + /* Reset DEFINING_CLASS_P to allow for reuse of a + class-defining scope in a non-defining context. */ + scope->defining_class_p = 0; + + /* Find the innermost enclosing class scope, and reset + CLASS_BINDING_LEVEL appropriately. */ class_binding_level = NULL; for (scope = current_binding_level; scope; scope = scope->level_chain) if (scope->kind == sk_class) diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/name-lookup.h gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/name-lookup.h --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/name-lookup.h 2014-01-05 19:58:15.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/name-lookup.h 2014-03-30 07:40:41.000000000 +0000 @@ -255,7 +255,14 @@ unsigned more_cleanups_ok : 1; unsigned have_cleanups : 1; - /* 24 bits left to fill a 32-bit word. */ + /* Transient state set if this scope is of sk_class kind + and is in the process of defining 'this_entity'. Reset + on leaving the class definition to allow for the scope + to be subsequently re-used as a non-defining scope for + 'this_entity'. */ + unsigned defining_class_p : 1; + + /* 23 bits left to fill a 32-bit word. */ }; /* The binding level currently in effect. */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/parser.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/parser.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/parser.c 2014-03-20 10:50:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/parser.c 2014-03-30 07:40:41.000000000 +0000 @@ -8718,14 +8718,17 @@ { tree lambda_expr = build_lambda_expr (); tree type; - bool ok; + bool ok = true; LAMBDA_EXPR_LOCATION (lambda_expr) = cp_lexer_peek_token (parser->lexer)->location; if (cp_unevaluated_operand) - error_at (LAMBDA_EXPR_LOCATION (lambda_expr), - "lambda-expression in unevaluated context"); + { + error_at (LAMBDA_EXPR_LOCATION (lambda_expr), + "lambda-expression in unevaluated context"); + ok = false; + } /* We may be in the middle of deferred access check. Disable it now. */ @@ -8770,12 +8773,15 @@ /* By virtue of defining a local class, a lambda expression has access to the private variables of enclosing classes. */ - ok = cp_parser_lambda_declarator_opt (parser, lambda_expr); + ok &= cp_parser_lambda_declarator_opt (parser, lambda_expr); if (ok) cp_parser_lambda_body (parser, lambda_expr); else if (cp_parser_require (parser, CPP_OPEN_BRACE, RT_OPEN_BRACE)) - cp_parser_skip_to_end_of_block_or_statement (parser); + { + if (cp_parser_skip_to_closing_brace (parser)) + cp_lexer_consume_token (parser->lexer); + } /* The capture list was built up in reverse order; fix that now. */ LAMBDA_EXPR_CAPTURE_LIST (lambda_expr) @@ -16823,7 +16829,14 @@ been issued. */ if (parser->fully_implicit_function_template_p) if (!function_declarator_p (declarator)) - finish_fully_implicit_template (parser, /*member_decl_opt=*/0); + { + if (pushed_scope) + { + pop_scope (pushed_scope); + pushed_scope = 0; + } + finish_fully_implicit_template (parser, /*member_decl_opt=*/0); + } /* For an in-class declaration, use `grokfield' to create the declaration. */ @@ -18207,7 +18220,9 @@ (void) cleanup; - if (!processing_specialization && !processing_template_parmlist) + if (!processing_specialization + && !processing_template_parmlist + && !processing_explicit_instantiation) if (!current_function_decl || (current_class_type && LAMBDA_TYPE_P (current_class_type))) parser->auto_is_implicit_function_template_parm_p = true; @@ -31991,7 +32006,7 @@ { /* If not defining a class, then any class scope is a scope level in an out-of-line member definition. In this case simply wind back - beyond the first such scope to inject the template argument list. + beyond the first such scope to inject the template parameter list. Otherwise wind back to the class being defined. The latter can occur in class member friend declarations such as: @@ -32002,12 +32017,23 @@ friend void A::foo (auto); }; - The template argument list synthesized for the friend declaration - must be injected in the scope of 'B', just beyond the scope of 'A' - introduced by 'A::'. */ + The template parameter list synthesized for the friend declaration + must be injected in the scope of 'B'. This can also occur in + erroneous cases such as: + + struct A { + struct B { + void foo (auto); + }; + void B::foo (auto) {} + }; + + Here the attempted definition of 'B::foo' within 'A' is ill-formed + but, nevertheless, the template parameter list synthesized for the + declarator should be injected into the scope of 'A' as if the + ill-formed template was specified explicitly. */ - while (scope->kind == sk_class - && !TYPE_BEING_DEFINED (scope->this_entity)) + while (scope->kind == sk_class && !scope->defining_class_p) { parent_scope = scope; scope = scope->level_chain; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/pt.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/pt.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/pt.c 2014-03-20 10:50:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/pt.c 2014-04-02 04:32:24.000000000 +0000 @@ -320,6 +320,9 @@ if (!t || t == error_mark_node) return NULL; + if (TREE_CODE (t) == NAMESPACE_DECL) + return NULL; + if (DECL_P (t) && DECL_LANG_SPECIFIC (t)) tinfo = DECL_TEMPLATE_INFO (t); @@ -4136,15 +4139,17 @@ for (i = 0; i < ntparms; ++i) if (tpd.parms[i] == 0) { - /* One of the template parms was not used in the + /* One of the template parms was not used in a deduced context in the specialization. */ if (!did_error_intro) { - error ("template parameters not used in partial specialization:"); + error ("template parameters not deducible in " + "partial specialization:"); did_error_intro = true; } - error (" %qD", TREE_VALUE (TREE_VEC_ELT (inner_parms, i))); + inform (input_location, " %qD", + TREE_VALUE (TREE_VEC_ELT (inner_parms, i))); } if (did_error_intro) @@ -6930,6 +6935,26 @@ { if (PACK_EXPANSION_P (arg)) { + /* "If every valid specialization of a variadic template + requires an empty template parameter pack, the template is + ill-formed, no diagnostic required." So check that the + pattern works with this parameter. */ + tree pattern = PACK_EXPANSION_PATTERN (arg); + tree conv = convert_template_argument (TREE_VALUE (parm), + pattern, new_args, + complain, parm_idx, + in_decl); + if (conv == error_mark_node) + { + inform (input_location, "so any instantiation with a " + "non-empty parameter pack would be ill-formed"); + ++lost; + } + else if (TYPE_P (conv) && !TYPE_P (pattern)) + /* Recover from missing typename. */ + TREE_VEC_ELT (inner_args, arg_idx) + = make_pack_expansion (conv); + /* We don't know how many args we have yet, just use the unconverted ones for now. */ new_inner_args = inner_args; @@ -18758,23 +18783,18 @@ tree most_general_template (tree decl) { - /* If DECL is a FUNCTION_DECL, find the TEMPLATE_DECL of which it is - an immediate specialization. */ - if (TREE_CODE (decl) == FUNCTION_DECL) + if (TREE_CODE (decl) != TEMPLATE_DECL) { - if (DECL_TEMPLATE_INFO (decl)) { - decl = DECL_TI_TEMPLATE (decl); - - /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE for a - template friend. */ - if (TREE_CODE (decl) != TEMPLATE_DECL) - return NULL_TREE; - } else + if (tree tinfo = get_template_info (decl)) + decl = TI_TEMPLATE (tinfo); + /* The TI_TEMPLATE can be an IDENTIFIER_NODE for a + template friend, or a FIELD_DECL for a capture pack. */ + if (TREE_CODE (decl) != TEMPLATE_DECL) return NULL_TREE; } /* Look for more and more general templates. */ - while (DECL_TEMPLATE_INFO (decl)) + while (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl)) { /* The DECL_TI_TEMPLATE can be an IDENTIFIER_NODE in some cases. (See cp-tree.h for details.) */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/search.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/search.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/search.c 2014-03-20 10:50:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/search.c 2014-03-27 17:33:35.000000000 +0000 @@ -2115,22 +2115,6 @@ which it is a primary base will contain vtable entries for the pure virtuals in the base class. */ dfs_walk_once (TYPE_BINFO (type), NULL, dfs_get_pure_virtuals, type); - - /* Treat a virtual destructor in an abstract class as pure even if it - isn't declared as pure; there is no way it would be called through the - vtable except during construction, which causes undefined behavior. */ - if (CLASSTYPE_PURE_VIRTUALS (type) - && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)) - { - tree dtor = CLASSTYPE_DESTRUCTORS (type); - if (dtor && DECL_VIRTUAL_P (dtor) && !DECL_PURE_VIRTUAL_P (dtor)) - { - tree clone; - DECL_PURE_VIRTUAL_P (dtor) = true; - FOR_EACH_CLONE (clone, dtor) - DECL_PURE_VIRTUAL_P (clone) = true; - } - } } /* Debug info for C++ classes can get very large; try to avoid diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/semantics.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/semantics.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/semantics.c 2014-03-20 10:50:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/semantics.c 2014-04-05 08:48:42.000000000 +0000 @@ -386,6 +386,9 @@ STMT_IS_FULL_EXPR_P (t) = stmts_are_full_exprs_p (); } + if (code == LABEL_EXPR || code == CASE_LABEL_EXPR) + STATEMENT_LIST_HAS_LABEL (cur_stmt_list) = 1; + /* Add T to the statement-tree. Non-side-effect statements need to be recorded during statement expressions. */ gcc_checking_assert (!stmt_list_stack->is_empty ()); @@ -2777,6 +2780,7 @@ maybe_process_partial_specialization (t); pushclass (t); TYPE_BEING_DEFINED (t) = 1; + class_binding_level->defining_class_p = 1; if (flag_pack_struct) { @@ -7716,8 +7720,8 @@ { tree pri = CLASSTYPE_PRIMARY_BINFO (type); tree field_type; - constructor_elt elt; - int i; + unsigned i; + constructor_elt *ce; if (pri) field_type = BINFO_TYPE (pri); @@ -7728,14 +7732,14 @@ /* Find the element for the primary base or vptr and move it to the beginning of the vec. */ - vec &vref = *v; - for (i = 0; ; ++i) - if (TREE_TYPE (vref[i].index) == field_type) + for (i = 0; vec_safe_iterate (v, i, &ce); ++i) + if (TREE_TYPE (ce->index) == field_type) break; - if (i > 0) + if (i > 0 && i < vec_safe_length (v)) { - elt = vref[i]; + vec &vref = *v; + constructor_elt elt = vref[i]; for (; i > 0; --i) vref[i] = vref[i-1]; vref[0] = elt; @@ -10253,6 +10257,7 @@ case DO_STMT: case FOR_STMT: case WHILE_STMT: + case DECL_EXPR: if (flags & tf_error) error ("expression %qE is not a constant-expression", t); return false; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/tree.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/tree.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/tree.c 2014-02-04 12:24:51.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/tree.c 2014-04-01 18:05:47.000000000 +0000 @@ -3364,6 +3364,18 @@ name, *node); goto fail; } + else if (CLASSTYPE_TEMPLATE_INSTANTIATION (*node)) + { + warning (OPT_Wattributes, "ignoring %qE attribute applied to " + "template instantiation %qT", name, *node); + goto fail; + } + else if (CLASSTYPE_TEMPLATE_SPECIALIZATION (*node)) + { + warning (OPT_Wattributes, "ignoring %qE attribute applied to " + "template specialization %qT", name, *node); + goto fail; + } tree attributes = TYPE_ATTRIBUTES (*node); tree decl = TYPE_NAME (*node); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/typeck2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/typeck2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/typeck2.c 2014-03-20 10:50:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/typeck2.c 2014-04-02 04:32:24.000000000 +0000 @@ -1103,6 +1103,7 @@ #define PICFLAG_ERRONEOUS 1 #define PICFLAG_NOT_ALL_CONSTANT 2 #define PICFLAG_NOT_ALL_SIMPLE 4 +#define PICFLAG_SIDE_EFFECTS 8 /* Given an initializer INIT, return the flag (PICFLAG_*) which better describe it. */ @@ -1113,7 +1114,12 @@ if (init == error_mark_node) return PICFLAG_ERRONEOUS; else if (!TREE_CONSTANT (init)) - return PICFLAG_NOT_ALL_CONSTANT; + { + if (TREE_SIDE_EFFECTS (init)) + return PICFLAG_SIDE_EFFECTS; + else + return PICFLAG_NOT_ALL_CONSTANT; + } else if (!initializer_constant_valid_p (init, TREE_TYPE (init))) return PICFLAG_NOT_ALL_SIMPLE; return 0; @@ -1493,7 +1499,12 @@ TREE_TYPE (init) = type; if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == NULL_TREE) cp_complete_array_type (&TREE_TYPE (init), init, /*do_default=*/0); - if (flags & PICFLAG_NOT_ALL_CONSTANT) + if (flags & PICFLAG_SIDE_EFFECTS) + { + TREE_CONSTANT (init) = false; + TREE_SIDE_EFFECTS (init) = true; + } + else if (flags & PICFLAG_NOT_ALL_CONSTANT) /* Make sure TREE_CONSTANT isn't set from build_constructor. */ TREE_CONSTANT (init) = false; else diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/typeck.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/typeck.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cp/typeck.c 2014-03-20 10:50:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cp/typeck.c 2014-04-01 18:05:47.000000000 +0000 @@ -8283,6 +8283,10 @@ return; whats_returned = TREE_OPERAND (whats_returned, 0); + while (TREE_CODE (whats_returned) == COMPONENT_REF + || TREE_CODE (whats_returned) == ARRAY_REF) + whats_returned = TREE_OPERAND (whats_returned, 0); + if (TREE_CODE (valtype) == REFERENCE_TYPE) { if (TREE_CODE (whats_returned) == AGGR_INIT_EXPR @@ -8300,10 +8304,6 @@ } } - while (TREE_CODE (whats_returned) == COMPONENT_REF - || TREE_CODE (whats_returned) == ARRAY_REF) - whats_returned = TREE_OPERAND (whats_returned, 0); - if (DECL_P (whats_returned) && DECL_NAME (whats_returned) && DECL_FUNCTION_SCOPE_P (whats_returned) diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/cselib.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/cselib.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/cselib.c 2014-03-20 10:50:24.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/cselib.c 2014-03-26 08:19:16.000000000 +0000 @@ -1137,7 +1137,7 @@ return hash ? hash : (unsigned int) ENTRY_VALUE; case CONST_INT: - hash += ((unsigned) CONST_INT << 7) + INTVAL (x); + hash += ((unsigned) CONST_INT << 7) + UINTVAL (x); return hash ? hash : (unsigned int) CONST_INT; case CONST_DOUBLE: diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/DATESTAMP gcc-snapshot-20140405/=unpacked-tar1=/gcc/DATESTAMP --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/DATESTAMP 2014-03-21 17:14:27.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/DATESTAMP 2014-04-05 08:48:42.000000000 +0000 @@ -1 +1 @@ -20140321 +20140405 diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/doc/contrib.texi gcc-snapshot-20140405/=unpacked-tar1=/gcc/doc/contrib.texi --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/doc/contrib.texi 2014-03-20 10:50:12.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/doc/contrib.texi 2014-03-26 08:19:12.000000000 +0000 @@ -1050,6 +1050,9 @@ Tom Wood for work on the m88k port. @item +Chung-Ju Wu for his work on the Andes NDS32 port. + +@item Canqun Yang for work on GNU Fortran. @item diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/doc/extend.texi gcc-snapshot-20140405/=unpacked-tar1=/gcc/doc/extend.texi --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/doc/extend.texi 2014-03-20 10:50:12.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/doc/extend.texi 2014-04-02 04:32:23.000000000 +0000 @@ -1592,6 +1592,18 @@ storage. Jumping into the scope is not allowed; you get an error message for it. +@cindex variable-length array in a structure +As an extension, GCC accepts variable-length arrays as a member of +a structure or a union. For example: + +@smallexample +void +foo (int n) +@{ + struct S @{ int x[n]; @}; +@} +@end smallexample + @cindex @code{alloca} vs variable-length arrays You can use the function @code{alloca} to get an effect much like variable-length arrays. The function @code{alloca} is available in @@ -1967,6 +1979,9 @@ struct point p = @{ y: yvalue, x: xvalue @}; @end smallexample +Omitted field members are implicitly initialized the same as objects +that have static storage duration. + @cindex designators The @samp{[@var{index}]} or @samp{.@var{fieldname}} is known as a @dfn{designator}. You can also use a designator (or the obsolete colon @@ -6343,7 +6358,7 @@ int *y = &x; int result; asm ("magic stuff accessing an 'int' pointed to by '%1'" - : "=&d" (r) : "a" (y), "m" (*y)); + : "=&d" (result) : "a" (y), "m" (*y)); return result; @} @end smallexample @@ -8963,7 +8978,7 @@ Similar to @code{__builtin_nans}, except the return type is @code{long double}. @end deftypefn -@deftypefn {Built-in Function} int __builtin_ffs (unsigned int x) +@deftypefn {Built-in Function} int __builtin_ffs (int x) Returns one plus the index of the least significant 1-bit of @var{x}, or if @var{x} is zero, returns zero. @end deftypefn @@ -8993,9 +9008,9 @@ modulo 2. @end deftypefn -@deftypefn {Built-in Function} int __builtin_ffsl (unsigned long) +@deftypefn {Built-in Function} int __builtin_ffsl (long) Similar to @code{__builtin_ffs}, except the argument type is -@code{unsigned long}. +@code{long}. @end deftypefn @deftypefn {Built-in Function} int __builtin_clzl (unsigned long) @@ -9023,9 +9038,9 @@ @code{unsigned long}. @end deftypefn -@deftypefn {Built-in Function} int __builtin_ffsll (unsigned long long) +@deftypefn {Built-in Function} int __builtin_ffsll (long long) Similar to @code{__builtin_ffs}, except the argument type is -@code{unsigned long long}. +@code{long long}. @end deftypefn @deftypefn {Built-in Function} int __builtin_clzll (unsigned long long) @@ -14844,6 +14859,35 @@ void vec_vsx_st (vector bool char, int, vector bool char *); void vec_vsx_st (vector bool char, int, unsigned char *); void vec_vsx_st (vector bool char, int, signed char *); + +vector double vec_xxpermdi (vector double, vector double, int); +vector float vec_xxpermdi (vector float, vector float, int); +vector long long vec_xxpermdi (vector long long, vector long long, int); +vector unsigned long long vec_xxpermdi (vector unsigned long long, + vector unsigned long long, int); +vector int vec_xxpermdi (vector int, vector int, int); +vector unsigned int vec_xxpermdi (vector unsigned int, + vector unsigned int, int); +vector short vec_xxpermdi (vector short, vector short, int); +vector unsigned short vec_xxpermdi (vector unsigned short, + vector unsigned short, int); +vector signed char vec_xxpermdi (vector signed char, vector signed char, int); +vector unsigned char vec_xxpermdi (vector unsigned char, + vector unsigned char, int); + +vector double vec_xxsldi (vector double, vector double, int); +vector float vec_xxsldi (vector float, vector float, int); +vector long long vec_xxsldi (vector long long, vector long long, int); +vector unsigned long long vec_xxsldi (vector unsigned long long, + vector unsigned long long, int); +vector int vec_xxsldi (vector int, vector int, int); +vector unsigned int vec_xxsldi (vector unsigned int, vector unsigned int, int); +vector short vec_xxsldi (vector short, vector short, int); +vector unsigned short vec_xxsldi (vector unsigned short, + vector unsigned short, int); +vector signed char vec_xxsldi (vector signed char, vector signed char, int); +vector unsigned char vec_xxsldi (vector unsigned char, + vector unsigned char, int); @end smallexample Note that the @samp{vec_ld} and @samp{vec_st} built-in functions always @@ -15031,6 +15075,9 @@ vector unsigned long long vec_vaddudm (vector unsigned long long, vector bool unsigned long long); +vector long long vec_vbpermq (vector signed char, vector signed char); +vector long long vec_vbpermq (vector unsigned char, vector unsigned char); + vector long long vec_vclz (vector long long); vector unsigned long long vec_vclz (vector unsigned long long); vector int vec_vclz (vector int); @@ -15052,6 +15099,9 @@ vector int vec_vclzw (vector int); vector unsigned int vec_vclzw (vector int); +vector signed char vec_vgbbd (vector signed char); +vector unsigned char vec_vgbbd (vector unsigned char); + vector long long vec_vmaxsd (vector long long, vector long long); vector unsigned long long vec_vmaxud (vector unsigned long long, @@ -17495,6 +17545,10 @@ A redeclaration of a function or class must not add new ABI tags, since doing so would change the mangled name. +The ABI tags apply to a name, so all instantiations and +specializations of a template have the same tags. The attribute will +be ignored if applied to an explicit specialization or instantiation. + The @option{-Wabi-tag} flag enables a warning about a class which does not have all the ABI tags used by its subobjects and virtual functions; for users with code that needs to coexist with an earlier ABI, using this option can help diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/doc/generic.texi gcc-snapshot-20140405/=unpacked-tar1=/gcc/doc/generic.texi --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/doc/generic.texi 2014-01-05 19:58:01.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/doc/generic.texi 2014-03-26 08:19:12.000000000 +0000 @@ -13,7 +13,7 @@ The purpose of GENERIC is simply to provide a language-independent way of representing an entire function in trees. To this end, it was necessary to add a few new tree codes -to the back end, but most everything was already there. If you +to the back end, but almost everything was already there. If you can express it with the codes in @code{gcc/tree.def}, it's GENERIC@. @@ -203,7 +203,7 @@ @tindex IDENTIFIER_NODE An @code{IDENTIFIER_NODE} represents a slightly more general concept -that the standard C or C++ concept of identifier. In particular, an +than the standard C or C++ concept of identifier. In particular, an @code{IDENTIFIER_NODE} may contain a @samp{$}, or other extraordinary characters. diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/doc/install.texi gcc-snapshot-20140405/=unpacked-tar1=/gcc/doc/install.texi --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/doc/install.texi 2014-02-26 07:37:37.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/doc/install.texi 2014-03-26 08:19:12.000000000 +0000 @@ -3144,6 +3144,10 @@ @item @uref{#mips-sgi-irix6,,mips-sgi-irix6} @item +@uref{#nds32le-x-elf,,nds32le-*-elf} +@item +@uref{#nds32be-x-elf,,nds32be-*-elf} +@item @uref{#powerpc-x-x,,powerpc*-*-*} @item @uref{#powerpc-x-darwin,,powerpc-*-darwin*} @@ -4099,6 +4103,20 @@ @html
+@end html +@anchor{nds32le-x-elf} +@heading nds32le-*-elf +Andes NDS32 target in little endian mode. + +@html +
+@end html +@anchor{nds32be-x-elf} +@heading nds32be-*-elf +Andes NDS32 target in big endian mode. + +@html +
@end html @anchor{powerpc-x-x} @heading powerpc-*-* diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/doc/invoke.texi gcc-snapshot-20140405/=unpacked-tar1=/gcc/doc/invoke.texi --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/doc/invoke.texi 2014-03-20 10:50:12.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/doc/invoke.texi 2014-04-03 16:42:11.000000000 +0000 @@ -2670,9 +2670,10 @@ @opindex Wnon-virtual-dtor @opindex Wno-non-virtual-dtor Warn when a class has virtual functions and an accessible non-virtual -destructor, in which case it is possible but unsafe to delete -an instance of a derived class through a pointer to the base class. -This warning is also enabled if @option{-Weffc++} is specified. +destructor itself or in a base class, or has in which case it is +possible but unsafe to delete an instance of a derived class through a +pointer to the base class. This warning is automatically enabled if +@option{-Weffc++} is specified. @item -Wreorder @r{(C++ and Objective-C++ only)} @opindex Wreorder @@ -2716,40 +2717,34 @@ @opindex Weffc++ @opindex Wno-effc++ Warn about violations of the following style guidelines from Scott Meyers' -@cite{Effective C++, Second Edition} book: +@cite{Effective C++} series of books: @itemize @bullet @item -Item 11: Define a copy constructor and an assignment operator for classes +Define a copy constructor and an assignment operator for classes with dynamically-allocated memory. @item -Item 12: Prefer initialization to assignment in constructors. +Prefer initialization to assignment in constructors. @item -Item 14: Make destructors virtual in base classes. +Have @code{operator=} return a reference to @code{*this}. @item -Item 15: Have @code{operator=} return a reference to @code{*this}. +Don't try to return a reference when you must return an object. @item -Item 23: Don't try to return a reference when you must return an object. - -@end itemize - -Also warn about violations of the following style guidelines from -Scott Meyers' @cite{More Effective C++} book: - -@itemize @bullet -@item -Item 6: Distinguish between prefix and postfix forms of increment and +Distinguish between prefix and postfix forms of increment and decrement operators. @item -Item 7: Never overload @code{&&}, @code{||}, or @code{,}. +Never overload @code{&&}, @code{||}, or @code{,}. @end itemize +This option also enables @option{-Wnon-virtual-dtor}, which is also +one of the effective C++ recommendations. + When selecting this option, be aware that the standard library headers do not obey all of these guidelines; use @samp{grep -v} to filter out those warnings. @@ -8664,8 +8659,13 @@ If object files containing GIMPLE bytecode are stored in a library archive, say @file{libfoo.a}, it is possible to extract and use them in an LTO link if you -are using a linker with plugin support. To enable this feature, use -the flag @option{-fuse-linker-plugin} at link time: +are using a linker with plugin support. To create static libraries suitable +for LTO, use @command{gcc-ar} and @command{gcc-ranlib} instead of @command{ar} +and @code{ranlib}; to show the symbols of object files with GIMPLE bytecode, use +@command{gcc-nm}. Those commands require that @command{ar}, @command{ranlib} +and @command{nm} have been compiled with plugin support. At link time, use the the +flag @option{-fuse-linker-plugin} to ensure that the library participates in +the LTO optimization process: @smallexample gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo @@ -8678,7 +8678,9 @@ If you are not using a linker with plugin support and/or do not enable the linker plugin, then the objects inside @file{libfoo.a} are extracted and linked as usual, but they do not participate -in the LTO optimization process. +in the LTO optimization process. In order to make a static library suitable +for both LTO optimization and usual linkage, compile its object files with +@option{-flto} @code{-ffat-lto-objects}. Link-time optimizations do not require the presence of the whole program to operate. If the program does not require any symbols to be exported, it is @@ -20841,8 +20843,9 @@ @opindex mno-app-regs @opindex mapp-regs Specify @option{-mapp-regs} to generate output using the global registers -2 through 4, which the SPARC SVR4 ABI reserves for applications. This -is the default. +2 through 4, which the SPARC SVR4 ABI reserves for applications. Like the +global register 1, each global register 2 through 4 is then treated as an +allocable register that is clobbered by function calls. This is the default. To be fully SVR4 ABI-compliant at the cost of some performance loss, specify @option{-mno-app-regs}. You should compile libraries and system diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/doc/md.texi gcc-snapshot-20140405/=unpacked-tar1=/gcc/doc/md.texi --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/doc/md.texi 2014-01-29 10:48:02.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/doc/md.texi 2014-03-28 19:04:53.000000000 +0000 @@ -2162,6 +2162,9 @@ @item wz Floating point register if the LFIWZX instruction is enabled or NO_REGS. +@item wD +Int constant that is the element number of the 64-bit scalar in a vector. + @item wQ A memory address that will work with the @code{lq} and @code{stq} instructions. @@ -4720,6 +4723,17 @@ must have mode @var{m}. This can be used even on two-address machines, by means of constraints requiring operands 1 and 0 to be the same location. +@cindex @code{addptr@var{m}3} instruction pattern +@item @samp{addptr@var{m}3} +Like @code{add@var{m}3} but is guaranteed to only be used for address +calculations. The expanded code is not allowed to clobber the +condition code. It only needs to be defined if @code{add@var{m}3} +sets the condition code. If adds used for address calculations and +normal adds are not compatible it is required to expand a distinct +pattern (e.g. using an unspec). The pattern is used by LRA to emit +address calculations. @code{add@var{m}3} is used if +@code{addptr@var{m}3} is not defined. + @cindex @code{ssadd@var{m}3} instruction pattern @cindex @code{usadd@var{m}3} instruction pattern @cindex @code{sub@var{m}3} instruction pattern diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/dojump.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/dojump.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/dojump.c 2014-01-05 19:58:16.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/dojump.c 2014-03-27 17:33:35.000000000 +0000 @@ -1103,6 +1103,11 @@ else { + int first_prob = prob; + if (first_code == UNORDERED) + first_prob = REG_BR_PROB_BASE / 100; + else if (first_code == ORDERED) + first_prob = REG_BR_PROB_BASE - REG_BR_PROB_BASE / 100; if (and_them) { rtx dest_label; @@ -1116,11 +1121,13 @@ else dest_label = if_false_label; do_compare_rtx_and_jump (op0, op1, first_code, unsignedp, mode, - size, dest_label, NULL_RTX, prob); + size, dest_label, NULL_RTX, + first_prob); } else do_compare_rtx_and_jump (op0, op1, first_code, unsignedp, mode, - size, NULL_RTX, if_true_label, prob); + size, NULL_RTX, if_true_label, + first_prob); } } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/dwarf2out.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/dwarf2out.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/dwarf2out.c 2014-03-03 01:43:58.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/dwarf2out.c 2014-04-05 08:48:42.000000000 +0000 @@ -11325,8 +11325,18 @@ return 1; } + /* FIXME: Refer to PR60655. It is possible for simplification + of rtl expressions in var tracking to produce such expressions. + We should really identify / validate expressions + enclosed in CONST that can be handled by assemblers on various + targets and only handle legitimate cases here. */ if (GET_CODE (rtl) != SYMBOL_REF) - return 0; + { + if (GET_CODE (rtl) == NOT) + return 1; + + return 0; + } if (CONSTANT_POOL_ADDRESS_P (rtl)) { diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/explow.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/explow.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/explow.c 2014-01-05 19:58:18.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/explow.c 2014-04-05 08:48:43.000000000 +0000 @@ -110,7 +110,7 @@ return immed_double_int_const (v, mode); } - return gen_int_mode (INTVAL (x) + c, mode); + return gen_int_mode (UINTVAL (x) + c, mode); case CONST_DOUBLE: { @@ -1729,6 +1729,9 @@ emit_stack_probe (addr); } } + + /* Make sure nothing is scheduled before we are done. */ + emit_insn (gen_blockage ()); } /* Adjust the stack pointer by minus SIZE (an rtx for a number of bytes) diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/expr.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/expr.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/expr.c 2014-03-21 17:14:28.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/expr.c 2014-03-30 07:40:41.000000000 +0000 @@ -11134,11 +11134,12 @@ GET_MODE_SIZE, because this indicates how large insns are. The other uses should all be Pmode, because they are addresses. This code could fail if addresses and insns are not the same size. */ - index = gen_rtx_PLUS - (Pmode, - gen_rtx_MULT (Pmode, index, - gen_int_mode (GET_MODE_SIZE (CASE_VECTOR_MODE), Pmode)), - gen_rtx_LABEL_REF (Pmode, table_label)); + index = simplify_gen_binary (MULT, Pmode, index, + gen_int_mode (GET_MODE_SIZE (CASE_VECTOR_MODE), + Pmode)); + index = simplify_gen_binary (PLUS, Pmode, index, + gen_rtx_LABEL_REF (Pmode, table_label)); + #ifdef PIC_CASE_VECTOR_ADDRESS if (flag_pic) index = PIC_CASE_VECTOR_ADDRESS (index); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/expr.h gcc-snapshot-20140405/=unpacked-tar1=/gcc/expr.h --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/expr.h 2014-02-07 14:55:24.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/expr.h 2014-03-26 08:19:16.000000000 +0000 @@ -180,10 +180,12 @@ Likewise for subtraction and for just copying. */ extern rtx gen_add2_insn (rtx, rtx); extern rtx gen_add3_insn (rtx, rtx, rtx); +extern rtx gen_addptr3_insn (rtx, rtx, rtx); extern rtx gen_sub2_insn (rtx, rtx); extern rtx gen_sub3_insn (rtx, rtx, rtx); extern rtx gen_move_insn (rtx, rtx); extern int have_add2_insn (rtx, rtx); +extern int have_addptr3_insn (rtx, rtx, rtx); extern int have_sub2_insn (rtx, rtx); /* Emit a pair of rtl insns to compare two rtx's and to jump diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/fortran/ChangeLog gcc-snapshot-20140405/=unpacked-tar1=/gcc/fortran/ChangeLog --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/fortran/ChangeLog 2014-03-20 10:50:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/fortran/ChangeLog 2014-04-05 08:48:42.000000000 +0000 @@ -1,3 +1,48 @@ +2014-04-04 Tobias Burnus + + * check.c (gfc_check_cmplx): Fix typo. + +2014-03-28 Mikael Morin + Tobias Burnus + + PR fortran/60576 + * trans-expr.c (gfc_conv_derived_to_class): Avoid + generation of out-of-bounds range expr. + +2014-03-28 Mikael Morin + + PR fortran/60677 + * trans-intrinsic.c (gfc_conv_intrinsic_ichar): Enlarge argument + list buffer. + +2014-03-27 Thomas Koenig + + PR fortran/60522 + * frontend-passes.c (cfe_code): Do not walk subtrees + for WHERE. + +2014-03-27 Tobias Burnus + + PR fortran/58880 + * trans-expr.c (gfc_conv_scalar_to_descriptor): Fix handling + of nonpointers. + +2014-03-26 Dominique d'Humieres + + PR fortran/34928 + * fortran.texi: Document Volatile COMMON as not supported. + +2014-03-22 Jakub Jelinek + + PR debug/60603 + * cpp.c (gfc_cpp_init): Restore cb_change_file call to + . + +2014-03-21 Jerry DeLisle + + PR fortran/60148 + * gfortran.texi: Add description of namelist DELIM= behavior. + 2014-03-19 Tobias Burnus PR fortran/60543 diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/fortran/check.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/fortran/check.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/fortran/check.c 2014-02-22 13:01:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/fortran/check.c 2014-04-05 08:48:42.000000000 +0000 @@ -1278,12 +1278,12 @@ if (!kind && gfc_option.gfc_warn_conversion && x->ts.type == BT_REAL && x->ts.kind > gfc_default_real_kind) gfc_warning_now ("Conversion from %s to default-kind COMPLEX(%d) at %L " - "might loose precision, consider using the KIND argument", + "might lose precision, consider using the KIND argument", gfc_typename (&x->ts), gfc_default_real_kind, &x->where); else if (y && !kind && gfc_option.gfc_warn_conversion && y->ts.type == BT_REAL && y->ts.kind > gfc_default_real_kind) gfc_warning_now ("Conversion from %s to default-kind COMPLEX(%d) at %L " - "might loose precision, consider using the KIND argument", + "might lose precision, consider using the KIND argument", gfc_typename (&y->ts), gfc_default_real_kind, &y->where); return true; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/fortran/cpp.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/fortran/cpp.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/fortran/cpp.c 2014-01-10 08:27:12.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/fortran/cpp.c 2014-03-22 12:09:06.000000000 +0000 @@ -576,6 +576,7 @@ if (gfc_option.flag_preprocessed) return; + cpp_change_file (cpp_in, LC_RENAME, _("")); if (!gfc_cpp_option.no_predefined) { /* Make sure all of the builtins about to be declared have diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/fortran/frontend-passes.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/fortran/frontend-passes.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/fortran/frontend-passes.c 2014-03-03 01:43:58.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/fortran/frontend-passes.c 2014-03-28 19:04:55.000000000 +0000 @@ -627,12 +627,35 @@ to insert statements as needed. */ static int -cfe_code (gfc_code **c, int *walk_subtrees ATTRIBUTE_UNUSED, - void *data ATTRIBUTE_UNUSED) +cfe_code (gfc_code **c, int *walk_subtrees, void *data ATTRIBUTE_UNUSED) { current_code = c; inserted_block = NULL; changed_statement = NULL; + + /* Do not do anything inside a WHERE statement; scalar assignments, BLOCKs + and allocation on assigment are prohibited inside WHERE, and finally + masking an expression would lead to wrong-code when replacing + + WHERE (a>0) + b = sum(foo(a) + foo(a)) + END WHERE + + with + + WHERE (a > 0) + tmp = foo(a) + b = sum(tmp + tmp) + END WHERE +*/ + + if ((*c)->op == EXEC_WHERE) + { + *walk_subtrees = 0; + return 0; + } + + return 0; } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/fortran/gfortran.texi gcc-snapshot-20140405/=unpacked-tar1=/gcc/fortran/gfortran.texi --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/fortran/gfortran.texi 2014-03-20 10:50:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/fortran/gfortran.texi 2014-03-27 17:33:35.000000000 +0000 @@ -1494,6 +1494,12 @@ / @end smallexample +When writing a namelist, if no @code{DELIM=} is specified, by default a +double quote is used to delimit character strings. If -std=F95, F2003, +or F2008, etc, the delim status is set to 'none'. Defaulting to +quotes ensures that namelists with character strings can be subsequently +read back in accurately. + @node X format descriptor without count field @subsection @code{X} format descriptor without count field @@ -1997,6 +2003,7 @@ @c * CARRIAGECONTROL, DEFAULTFILE, DISPOSE and RECORDTYPE I/O specifiers:: @c * Omitted arguments in procedure call:: * Alternate complex function syntax:: +* Volatile COMMON blocks:: @end menu @@ -2191,6 +2198,18 @@ common, but not the former. +@node Volatile COMMON blocks +@subsection Volatile @code{COMMON} blocks +@cindex @code{VOLATILE} +@cindex @code{COMMON} + +Some Fortran compilers, including @command{g77}, let the user declare +@code{COMMON} with the @code{VOLATILE} attribute. This is +invalid standard Fortran syntax and is not supported by +@command{gfortran}. Note that @command{gfortran} accepts +@code{VOLATILE} variables in @code{COMMON} blocks since revision 4.3. + + @c --------------------------------------------------------------------- @c Mixed-Language Programming diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/fortran/trans-expr.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/fortran/trans-expr.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/fortran/trans-expr.c 2014-03-20 10:50:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/fortran/trans-expr.c 2014-03-30 07:40:41.000000000 +0000 @@ -69,14 +69,16 @@ type = get_scalar_to_descriptor_type (scalar, attr); desc = gfc_create_var (type, "desc"); DECL_ARTIFICIAL (desc) = 1; + + if (!POINTER_TYPE_P (TREE_TYPE (scalar))) + scalar = gfc_build_addr_expr (NULL_TREE, scalar); gfc_add_modify (&se->pre, gfc_conv_descriptor_dtype (desc), gfc_get_dtype (type)); gfc_conv_descriptor_data_set (&se->pre, desc, scalar); /* Copy pointer address back - but only if it could have changed and if the actual argument is a pointer and not, e.g., NULL(). */ - if ((attr.pointer || attr.allocatable) - && attr.intent != INTENT_IN && POINTER_TYPE_P (TREE_TYPE (scalar))) + if ((attr.pointer || attr.allocatable) && attr.intent != INTENT_IN) gfc_add_modify (&se->post, scalar, fold_convert (TREE_TYPE (scalar), gfc_conv_descriptor_data_get (desc))); @@ -424,7 +426,11 @@ gfc_conv_expr_descriptor (parmse, e); if (e->rank != class_ts.u.derived->components->as->rank) - class_array_data_assign (&block, ctree, parmse->expr, true); + { + gcc_assert (class_ts.u.derived->components->as->type + == AS_ASSUMED_RANK); + class_array_data_assign (&block, ctree, parmse->expr, false); + } else { if (gfc_expr_attr (e).codimension) diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/fortran/trans-intrinsic.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/fortran/trans-intrinsic.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/fortran/trans-intrinsic.c 2014-03-20 10:50:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/fortran/trans-intrinsic.c 2014-03-28 19:04:55.000000000 +0000 @@ -4687,7 +4687,7 @@ static void gfc_conv_intrinsic_ichar (gfc_se * se, gfc_expr * expr) { - tree args[2], type, pchartype; + tree args[3], type, pchartype; int nargs; nargs = gfc_intrinsic_argument_list_length (expr); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/fortran/trans-types.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/fortran/trans-types.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/fortran/trans-types.c 2014-03-07 09:59:29.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/fortran/trans-types.c 2014-04-04 14:53:38.000000000 +0000 @@ -2714,11 +2714,11 @@ gfc_get_function_type (gfc_symbol * sym) { tree type; - vec *typelist; + vec *typelist = NULL; gfc_formal_arglist *f; gfc_symbol *arg; - int alternate_return; - bool is_varargs = true, recursive_type = false; + int alternate_return = 0; + bool is_varargs = true; /* Make sure this symbol is a function, a subroutine or the main program. */ @@ -2730,15 +2730,12 @@ if (sym->backend_decl == NULL) sym->backend_decl = error_mark_node; else if (sym->backend_decl == error_mark_node) - recursive_type = true; + goto arg_type_list_done; else if (sym->attr.proc_pointer) return TREE_TYPE (TREE_TYPE (sym->backend_decl)); else return TREE_TYPE (sym->backend_decl); - alternate_return = 0; - typelist = NULL; - if (sym->attr.entry_master) /* Additional parameter for selecting an entry point. */ vec_safe_push (typelist, gfc_array_index_type); @@ -2786,13 +2783,6 @@ if (arg->attr.flavor == FL_PROCEDURE) { - /* We don't know in the general case which argument causes - recursion. But we know that it is a procedure. So we give up - creating the procedure argument type list at the first - procedure argument. */ - if (recursive_type) - goto arg_type_list_done; - type = gfc_get_function_type (arg); type = build_pointer_type (type); } @@ -2846,11 +2836,11 @@ || sym->attr.if_source != IFSRC_UNKNOWN) is_varargs = false; -arg_type_list_done: - - if (!recursive_type && sym->backend_decl == error_mark_node) + if (sym->backend_decl == error_mark_node) sym->backend_decl = NULL_TREE; +arg_type_list_done: + if (alternate_return) type = integer_type_node; else if (!sym->attr.function || gfc_return_by_reference (sym)) @@ -2888,7 +2878,7 @@ else type = gfc_sym_type (sym); - if (is_varargs || recursive_type) + if (is_varargs) type = build_varargs_function_type_vec (type, typelist); else type = build_function_type_vec (type, typelist); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/gcc.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/gcc.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/gcc.c 2014-03-06 14:11:07.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/gcc.c 2014-03-27 17:33:34.000000000 +0000 @@ -766,6 +766,7 @@ %{s} %{t} %{u*} %{z} %{Z} %{!nostdlib:%{!nostartfiles:%S}} " VTABLE_VERIFICATION_SPEC " \ %{static:} %{L*} %(mfwrap) %(link_libgcc) " SANITIZER_EARLY_SPEC " %o\ %{fopenmp|ftree-parallelize-loops=*:%:include(libgomp.spec)%(link_gomp)}\ + %{fcilkplus:%:include(libcilkrts.spec)%(link_cilkrts)}\ %{fgnu-tm:%:include(libitm.spec)%(link_itm)}\ %(mflib) " STACK_SPLIT_SPEC "\ %{fprofile-arcs|fprofile-generate*|coverage:-lgcov} " SANITIZER_SPEC " \ @@ -932,9 +933,15 @@ #define GTM_SELF_SPECS "%{fgnu-tm: -pthread}" #endif +/* Likewise for -fcilkplus. */ +#ifndef CILK_SELF_SPECS +#define CILK_SELF_SPECS "%{fcilkplus: -pthread}" +#endif + static const char *const driver_self_specs[] = { "%{fdump-final-insns:-fdump-final-insns=.} %nsets == 1 + && find_reg_note (s->insn, REG_UNUSED, SET_DEST (s->set)) + && !side_effects_p (s->set)) + s->nsets = 0; + + if (!s->nsets) + { + /* Record this set. */ + s->nsets += 1; + s->set = set; + } + else if (!find_reg_note (s->insn, REG_UNUSED, dest) + || side_effects_p (set)) + s->nsets += 1; + } +} + +static const_rtx +single_set_gcse (rtx insn) +{ + struct set_data s; + rtx pattern; + + gcc_assert (INSN_P (insn)); + + /* Optimize common case. */ + pattern = PATTERN (insn); + if (GET_CODE (pattern) == SET) + return pattern; + + s.insn = insn; + s.nsets = 0; + note_stores (pattern, record_set_data, &s); + + /* Considered invariant insns have exactly one set. */ + gcc_assert (s.nsets == 1); + return s.set; +} + /* Emit move from SRC to DEST noting the equivalence with expression computed in INSN. */ @@ -2509,7 +2568,8 @@ gcse_emit_move_after (rtx dest, rtx src, rtx insn) { rtx new_rtx; - rtx set = single_set (insn), set2; + const_rtx set = single_set_gcse (insn); + rtx set2; rtx note; rtx eqv = NULL_RTX; @@ -3369,13 +3429,12 @@ FOR_EACH_VEC_ELT (occrs_to_hoist, j, occr) { rtx insn; - rtx set; + const_rtx set; gcc_assert (!occr->deleted_p); insn = occr->insn; - set = single_set (insn); - gcc_assert (set); + set = single_set_gcse (insn); /* Create a pseudo-reg to store the result of reaching expressions into. Get the mode for the new pseudo @@ -3456,10 +3515,8 @@ { rtx reg; enum reg_class pressure_class; - rtx set = single_set (insn); + const_rtx set = single_set_gcse (insn); - /* Considered invariant insns have only one set. */ - gcc_assert (set != NULL_RTX); reg = SET_DEST (set); if (GET_CODE (reg) == SUBREG) reg = SUBREG_REG (reg); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/genautomata.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/genautomata.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/genautomata.c 2014-02-12 10:07:36.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/genautomata.c 2014-03-26 08:19:14.000000000 +0000 @@ -3494,7 +3494,7 @@ { reservs_num--; hash_value += ((*reserv_ptr >> i) - | (*reserv_ptr << ((sizeof (set_el_t) * CHAR_BIT) & -i))); + | (*reserv_ptr << (((sizeof (set_el_t) * CHAR_BIT) - 1) & -i))); i++; if (i == sizeof (set_el_t) * CHAR_BIT) i = 0; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/gimple.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/gimple.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/gimple.c 2014-01-09 09:38:41.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/gimple.c 2014-04-04 14:53:38.000000000 +0000 @@ -1464,9 +1464,12 @@ { stmt->bb = bb; + if (gimple_code (stmt) != GIMPLE_LABEL) + return; + /* If the statement is a label, add the label to block-to-labels map so that we can speed up edge creation for GIMPLE_GOTOs. */ - if (cfun->cfg && gimple_code (stmt) == GIMPLE_LABEL) + if (cfun->cfg) { tree t; int uid; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/gimple-expr.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/gimple-expr.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/gimple-expr.c 2014-01-05 19:58:20.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/gimple-expr.c 2014-04-04 14:53:38.000000000 +0000 @@ -527,6 +527,24 @@ return tmp; } +/* Create a new temporary variable declaration of type TYPE by calling + create_tmp_var and if TYPE is a vector or a complex number, mark the new + temporary as gimple register. */ + +tree +create_tmp_reg_fn (struct function *fn, tree type, const char *prefix) +{ + tree tmp; + + tmp = create_tmp_var_raw (type, prefix); + gimple_add_tmp_var_fn (fn, tmp); + if (TREE_CODE (type) == COMPLEX_TYPE + || TREE_CODE (type) == VECTOR_TYPE) + DECL_GIMPLE_REG_P (tmp) = 1; + + return tmp; +} + /* ----- Expression related ----- */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/gimple-expr.h gcc-snapshot-20140405/=unpacked-tar1=/gcc/gimple-expr.h --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/gimple-expr.h 2014-01-05 19:58:20.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/gimple-expr.h 2014-04-04 14:53:38.000000000 +0000 @@ -33,6 +33,7 @@ extern tree create_tmp_var_raw (tree, const char *); extern tree create_tmp_var (tree, const char *); extern tree create_tmp_reg (tree, const char *); +extern tree create_tmp_reg_fn (struct function *, tree, const char *); extern void extract_ops_from_tree_1 (tree, enum tree_code *, tree *, tree *, diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/gimple-fold.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/gimple-fold.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/gimple-fold.c 2014-03-20 10:50:24.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/gimple-fold.c 2014-03-27 17:33:35.000000000 +0000 @@ -1186,13 +1186,56 @@ else if (gimple_call_builtin_p (stmt, BUILT_IN_MD)) changed |= targetm.gimple_fold_builtin (gsi); } - else if (gimple_call_internal_p (stmt) - && gimple_call_internal_fn (stmt) == IFN_BUILTIN_EXPECT) + else if (gimple_call_internal_p (stmt)) { - tree result = fold_builtin_expect (gimple_location (stmt), - gimple_call_arg (stmt, 0), - gimple_call_arg (stmt, 1), - gimple_call_arg (stmt, 2)); + enum tree_code subcode = ERROR_MARK; + tree result = NULL_TREE; + switch (gimple_call_internal_fn (stmt)) + { + case IFN_BUILTIN_EXPECT: + result = fold_builtin_expect (gimple_location (stmt), + gimple_call_arg (stmt, 0), + gimple_call_arg (stmt, 1), + gimple_call_arg (stmt, 2)); + break; + case IFN_UBSAN_CHECK_ADD: + subcode = PLUS_EXPR; + break; + case IFN_UBSAN_CHECK_SUB: + subcode = MINUS_EXPR; + break; + case IFN_UBSAN_CHECK_MUL: + subcode = MULT_EXPR; + break; + default: + break; + } + if (subcode != ERROR_MARK) + { + tree arg0 = gimple_call_arg (stmt, 0); + tree arg1 = gimple_call_arg (stmt, 1); + /* x = y + 0; x = y - 0; x = y * 0; */ + if (integer_zerop (arg1)) + result = subcode == MULT_EXPR + ? build_zero_cst (TREE_TYPE (arg0)) + : arg0; + /* x = 0 + y; x = 0 * y; */ + else if (subcode != MINUS_EXPR && integer_zerop (arg0)) + result = subcode == MULT_EXPR + ? build_zero_cst (TREE_TYPE (arg0)) + : arg1; + /* x = y - y; */ + else if (subcode == MINUS_EXPR && operand_equal_p (arg0, arg1, 0)) + result = build_zero_cst (TREE_TYPE (arg0)); + /* x = y * 1; x = 1 * y; */ + else if (subcode == MULT_EXPR) + { + if (integer_onep (arg1)) + result = arg0; + else if (integer_onep (arg0)) + result = arg1; + } + } if (result) { if (!update_call_from_tree (gsi, result)) @@ -2688,15 +2731,32 @@ default: return NULL_TREE; } - tree op0 = (*valueize) (gimple_call_arg (stmt, 0)); - tree op1 = (*valueize) (gimple_call_arg (stmt, 1)); + tree arg0 = gimple_call_arg (stmt, 0); + tree arg1 = gimple_call_arg (stmt, 1); + tree op0 = (*valueize) (arg0); + tree op1 = (*valueize) (arg1); if (TREE_CODE (op0) != INTEGER_CST || TREE_CODE (op1) != INTEGER_CST) - return NULL_TREE; - tree res = fold_binary_loc (loc, subcode, - TREE_TYPE (gimple_call_arg (stmt, 0)), - op0, op1); + { + switch (subcode) + { + case MULT_EXPR: + /* x * 0 = 0 * x = 0 without overflow. */ + if (integer_zerop (op0) || integer_zerop (op1)) + return build_zero_cst (TREE_TYPE (arg0)); + break; + case MINUS_EXPR: + /* y - y = 0 without overflow. */ + if (operand_equal_p (op0, op1, 0)) + return build_zero_cst (TREE_TYPE (arg0)); + break; + default: + break; + } + } + tree res + = fold_binary_loc (loc, subcode, TREE_TYPE (arg0), op0, op1); if (res && TREE_CODE (res) == INTEGER_CST && !TREE_OVERFLOW (res)) diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/gimple.h gcc-snapshot-20140405/=unpacked-tar1=/gcc/gimple.h --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/gimple.h 2014-01-09 09:38:41.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/gimple.h 2014-04-01 18:05:47.000000000 +0000 @@ -166,6 +166,9 @@ /* Nonzero if this statement contains volatile operands. */ unsigned has_volatile_ops : 1; + /* Padding to get subcode to 16 bit alignment. */ + unsigned pad : 1; + /* The SUBCODE field can be used for tuple-specific flags for tuples that do not require subcodes. Note that SUBCODE should be at least as wide as tree codes, as several tuples store tree codes diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/gimple-low.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/gimple-low.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/gimple-low.c 2014-02-13 12:22:02.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/gimple-low.c 2014-04-04 14:53:38.000000000 +0000 @@ -841,11 +841,6 @@ void record_vars_into (tree vars, tree fn) { - bool change_cfun = fn != current_function_decl; - - if (change_cfun) - push_cfun (DECL_STRUCT_FUNCTION (fn)); - for (; vars; vars = DECL_CHAIN (vars)) { tree var = vars; @@ -860,11 +855,8 @@ continue; /* Record the variable. */ - add_local_decl (cfun, var); + add_local_decl (DECL_STRUCT_FUNCTION (fn), var); } - - if (change_cfun) - pop_cfun (); } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/gimple-ssa-strength-reduction.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/gimple-ssa-strength-reduction.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/gimple-ssa-strength-reduction.c 2014-01-05 19:58:17.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/gimple-ssa-strength-reduction.c 2014-04-02 23:41:00.000000000 +0000 @@ -3001,10 +3001,10 @@ { slsr_cand_t arg_cand = base_cand_from_table (arg); double_int diff = arg_cand->index - basis->index; + basic_block pred = gimple_phi_arg_edge (phi, i)->src; if ((incr == diff) || (!address_arithmetic_p && incr == -diff)) - ncd = ncd_for_two_cands (ncd, gimple_bb (arg_cand->cand_stmt), - *where, arg_cand, where); + ncd = ncd_for_two_cands (ncd, pred, *where, NULL, where); } } } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/gimplify.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/gimplify.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/gimplify.c 2014-03-20 10:50:24.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/gimplify.c 2014-04-04 14:53:38.000000000 +0000 @@ -627,6 +627,25 @@ /* Push the temporary variable TMP into the current binding. */ void +gimple_add_tmp_var_fn (struct function *fn, tree tmp) +{ + gcc_assert (!DECL_CHAIN (tmp) && !DECL_SEEN_IN_BIND_EXPR_P (tmp)); + + /* Later processing assumes that the object size is constant, which might + not be true at this point. Force the use of a constant upper bound in + this case. */ + if (!tree_fits_uhwi_p (DECL_SIZE_UNIT (tmp))) + force_constant_size (tmp); + + DECL_CONTEXT (tmp) = fn->decl; + DECL_SEEN_IN_BIND_EXPR_P (tmp) = 1; + + record_vars_into (tmp, fn->decl); +} + +/* Push the temporary variable TMP into the current binding. */ + +void gimple_add_tmp_var (tree tmp) { gcc_assert (!DECL_CHAIN (tmp) && !DECL_SEEN_IN_BIND_EXPR_P (tmp)); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/gimplify.h gcc-snapshot-20140405/=unpacked-tar1=/gcc/gimplify.h --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/gimplify.h 2014-01-05 19:58:18.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/gimplify.h 2014-04-04 14:53:38.000000000 +0000 @@ -60,6 +60,7 @@ extern tree get_initialized_tmp_var (tree, gimple_seq *, gimple_seq *); extern void declare_vars (tree, gimple, bool); extern void gimple_add_tmp_var (tree); +extern void gimple_add_tmp_var_fn (struct function *, tree); extern tree unshare_expr (tree); extern tree unshare_expr_without_location (tree); extern tree voidify_wrapper_expr (tree, tree); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/gimplify-me.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/gimplify-me.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/gimplify-me.c 2014-01-05 19:58:11.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/gimplify-me.c 2014-03-26 08:19:14.000000000 +0000 @@ -315,6 +315,8 @@ gsi_insert_after (gsi_p, post_stmt, GSI_NEW_STMT); pop_gimplify_context (NULL); + + update_stmt (stmt); } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/go/gofrontend/expressions.cc gcc-snapshot-20140405/=unpacked-tar1=/gcc/go/gofrontend/expressions.cc --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/go/gofrontend/expressions.cc 2014-03-21 17:14:28.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/go/gofrontend/expressions.cc 2014-03-28 19:04:55.000000000 +0000 @@ -4262,8 +4262,12 @@ go_assert(!this->expr_->is_composite_literal() || this->expr_->is_immutable()); - Unary_expression* ue = static_cast(this->expr_); - go_assert(ue == NULL || ue->op() != OPERATOR_AND); + if (this->expr_->classification() == EXPRESSION_UNARY) + { + Unary_expression* ue = + static_cast(this->expr_); + go_assert(ue->op() != OPERATOR_AND); + } } // Build a decl for a constant constructor. diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/graphite-scop-detection.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/graphite-scop-detection.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/graphite-scop-detection.c 2014-01-05 19:58:18.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/graphite-scop-detection.c 2014-04-03 16:42:11.000000000 +0000 @@ -346,13 +346,10 @@ case GIMPLE_COND: { - tree op; - ssa_op_iter op_iter; - enum tree_code code = gimple_cond_code (stmt); - /* We can handle all binary comparisons. Inequalities are also supported as they can be represented with union of polyhedra. */ + enum tree_code code = gimple_cond_code (stmt); if (!(code == LT_EXPR || code == GT_EXPR || code == LE_EXPR @@ -361,11 +358,14 @@ || code == NE_EXPR)) return false; - FOR_EACH_SSA_TREE_OPERAND (op, stmt, op_iter, SSA_OP_ALL_USES) - if (!graphite_can_represent_expr (scop_entry, loop, op) - /* We can not handle REAL_TYPE. Failed for pr39260. */ - || TREE_CODE (TREE_TYPE (op)) == REAL_TYPE) - return false; + for (unsigned i = 0; i < 2; ++i) + { + tree op = gimple_op (stmt, i); + if (!graphite_can_represent_expr (scop_entry, loop, op) + /* We can not handle REAL_TYPE. Failed for pr39260. */ + || TREE_CODE (TREE_TYPE (op)) == REAL_TYPE) + return false; + } return true; } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/internal-fn.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/internal-fn.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/internal-fn.c 2014-03-20 10:50:12.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/internal-fn.c 2014-03-26 08:19:14.000000000 +0000 @@ -221,14 +221,15 @@ res = expand_binop (mode, code == PLUS_EXPR ? add_optab : sub_optab, op0, op1, NULL_RTX, false, OPTAB_LIB_WIDEN); - /* If we can prove one of the arguments is always non-negative - or always negative, we can do just one comparison and - conditional jump instead of 2 at runtime, 3 present in the + /* If we can prove one of the arguments (for MINUS_EXPR only + the second operand, as subtraction is not commutative) is always + non-negative or always negative, we can do just one comparison + and conditional jump instead of 2 at runtime, 3 present in the emitted code. If one of the arguments is CONST_INT, all we need is to make sure it is op1, then the first emit_cmp_and_jump_insns will be just folded. Otherwise try to use range info if available. */ - if (CONST_INT_P (op0)) + if (code == PLUS_EXPR && CONST_INT_P (op0)) { rtx tem = op0; op0 = op1; @@ -236,7 +237,7 @@ } else if (CONST_INT_P (op1)) ; - else if (TREE_CODE (arg0) == SSA_NAME) + else if (code == PLUS_EXPR && TREE_CODE (arg0) == SSA_NAME) { double_int arg0_min, arg0_max; if (get_range_info (arg0, &arg0_min, &arg0_max) == VR_RANGE) diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/ipa.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/ipa.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/ipa.c 2014-03-21 17:14:28.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/ipa.c 2014-04-05 08:48:43.000000000 +0000 @@ -139,7 +139,10 @@ if (node->definition && !node->in_other_partition && ((!DECL_EXTERNAL (node->decl) || node->alias) - || (before_inlining_p + || (((before_inlining_p + && (cgraph_state < CGRAPH_STATE_IPA_SSA + || !lookup_attribute ("always_inline", + DECL_ATTRIBUTES (node->decl))))) /* We use variable constructors during late complation for constant folding. Keep references alive so partitioning knows about potential references. */ @@ -191,7 +194,10 @@ /* Prior inlining, keep alive bodies of possible targets for devirtualization. */ if (n->definition - && before_inlining_p) + && (before_inlining_p + && (cgraph_state < CGRAPH_STATE_IPA_SSA + || !lookup_attribute ("always_inline", + DECL_ATTRIBUTES (n->decl))))) pointer_set_insert (reachable, n); /* Even after inlining we want to keep the possible targets in the @@ -469,7 +475,7 @@ if (!node->aux) { if (file) - fprintf (file, " %s", node->name ()); + fprintf (file, " %s/%i", node->name (), node->order); cgraph_remove_node (node); changed = true; } @@ -483,7 +489,7 @@ if (node->definition) { if (file) - fprintf (file, " %s", node->name ()); + fprintf (file, " %s/%i", node->name (), node->order); node->body_removed = true; node->analyzed = false; node->definition = false; @@ -491,6 +497,12 @@ node->alias = false; node->thunk.thunk_p = false; node->weakref = false; + /* After early inlining we drop always_inline attributes on + bodies of functions that are still referenced (have their + address taken). */ + DECL_ATTRIBUTES (node->decl) + = remove_attribute ("always_inline", + DECL_ATTRIBUTES (node->decl)); if (!node->in_other_partition) node->local.local = false; cgraph_node_remove_callees (node); @@ -531,7 +543,7 @@ && (!flag_ltrans || !DECL_EXTERNAL (vnode->decl))) { if (file) - fprintf (file, " %s", vnode->name ()); + fprintf (file, " %s/%i", vnode->name (), vnode->order); varpool_remove_node (vnode); changed = true; } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/ipa-cp.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/ipa-cp.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/ipa-cp.c 2014-02-26 07:37:38.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/ipa-cp.c 2014-04-03 11:49:37.000000000 +0000 @@ -884,8 +884,9 @@ { if (dump_file) { + dump_symtab (dump_file); fprintf (dump_file, "\nIPA lattices after constant " - "propagation:\n"); + "propagation, before gcc_unreachable:\n"); print_all_lattices (dump_file, true, false); } @@ -1639,11 +1640,18 @@ return NULL_TREE; target = gimple_get_virt_method_for_binfo (token, binfo); } -#ifdef ENABLE_CHECKING - if (target) - gcc_assert (possible_polymorphic_call_target_p - (ie, cgraph_get_node (target))); -#endif + + 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); + } return target; } @@ -2804,9 +2812,7 @@ if (aggvals) ipa_dump_agg_replacement_values (dump_file, aggvals); } - gcc_checking_assert (ipa_node_params_vector.exists () - && (ipa_node_params_vector.length () - > (unsigned) cgraph_max_uid)); + ipa_check_create_node_params (); update_profiling_info (node, new_node); new_info = IPA_NODE_REF (new_node); new_info->ipcp_orig_node = node; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/ipa-devirt.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/ipa-devirt.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/ipa-devirt.c 2014-03-03 01:43:59.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/ipa-devirt.c 2014-04-03 11:49:37.000000000 +0000 @@ -1214,7 +1214,13 @@ not part of outer type. */ if (!contains_type_p (TREE_TYPE (base), context->offset + offset2, *otr_type)) - return base_pointer; + { + /* Use OTR_TOKEN = INT_MAX as a marker of probably type inconsistent + code sequences; we arrange the calls to be builtin_unreachable + later. */ + *otr_token = INT_MAX; + return base_pointer; + } get_polymorphic_call_info_for_decl (context, base, context->offset + offset2); return NULL; @@ -1261,7 +1267,7 @@ } /* If the function is constructor or destructor, then - the type is possibly in consturction, but we know + the type is possibly in construction, but we know it is not derived type. */ if (DECL_CXX_CONSTRUCTOR_P (fndecl) || DECL_CXX_DESTRUCTOR_P (fndecl)) @@ -1288,8 +1294,10 @@ if (!contains_type_p (context->outer_type, context->offset, *otr_type)) { - context->outer_type = NULL; - gcc_unreachable (); + /* Use OTR_TOKEN = INT_MAX as a marker of probably type inconsistent + code sequences; we arrange the calls to be builtin_unreachable + later. */ + *otr_token = INT_MAX; return base_pointer; } context->maybe_derived_type = false; @@ -1389,6 +1397,9 @@ temporarily change to one of base types. INCLUDE_DERIVER_TYPES make us to walk the inheritance graph for all derivations. + OTR_TOKEN == INT_MAX is used to mark calls that are provably + undefined and should be redirected to unreachable. + If COMPLETEP is non-NULL, store true if the list is complete. CACHE_TOKEN (if non-NULL) will get stored to an unique ID of entry in the target cache. If user needs to visit every target list @@ -1422,6 +1433,7 @@ bool complete; bool can_refer; + /* If ODR is not initialized, return empty incomplete list. */ if (!odr_hash.is_created ()) { if (completep) @@ -1431,11 +1443,28 @@ return nodes; } + /* If we hit type inconsistency, just return empty list of targets. */ + if (otr_token == INT_MAX) + { + if (completep) + *completep = true; + if (nonconstruction_targetsp) + *nonconstruction_targetsp = 0; + return nodes; + } + type = get_odr_type (otr_type, true); /* Lookup the outer class type we want to walk. */ - if (context.outer_type) - get_class_context (&context, otr_type); + if (context.outer_type + && !get_class_context (&context, otr_type)) + { + if (completep) + *completep = false; + if (nonconstruction_targetsp) + *nonconstruction_targetsp = 0; + return nodes; + } /* We canonicalize our query, so we do not need extra hashtable entries. */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/ipa-inline-analysis.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/ipa-inline-analysis.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/ipa-inline-analysis.c 2014-03-20 10:50:24.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/ipa-inline-analysis.c 2014-03-30 07:40:41.000000000 +0000 @@ -746,6 +746,20 @@ edge_set_predicate (struct cgraph_edge *e, struct predicate *predicate) { struct inline_edge_summary *es = inline_edge_summary (e); + + /* If the edge is determined to be never executed, redirect it + to BUILTIN_UNREACHABLE to save inliner from inlining into it. */ + if (predicate && false_predicate_p (predicate) && e->callee) + { + struct cgraph_node *callee = !e->inline_failed ? e->callee : NULL; + + cgraph_redirect_edge_callee (e, + cgraph_get_create_node + (builtin_decl_implicit (BUILT_IN_UNREACHABLE))); + e->inline_failed = CIF_UNREACHABLE; + if (callee) + cgraph_remove_node_and_inline_clones (callee, NULL); + } if (predicate && !true_predicate_p (predicate)) { if (!es->predicate) @@ -1383,6 +1397,7 @@ fprintf (f, " global time: %i\n", s->time); fprintf (f, " self size: %i\n", s->self_size); fprintf (f, " global size: %i\n", s->size); + fprintf (f, " min size: %i\n", s->min_size); fprintf (f, " self stack: %i\n", (int) s->estimated_self_stack_size); fprintf (f, " global stack: %i\n", (int) s->estimated_stack_size); @@ -1724,12 +1739,19 @@ FOR_EACH_EDGE (e, ei, bb->succs) { - struct predicate p = add_condition (summary, index, &aggpos, - e->flags & EDGE_TRUE_VALUE - ? code : inverted_code, - gimple_cond_rhs (last)); - e->aux = pool_alloc (edge_predicate_pool); - *(struct predicate *) e->aux = p; + enum tree_code this_code = (e->flags & EDGE_TRUE_VALUE + ? code : inverted_code); + /* invert_tree_comparison will return ERROR_MARK on FP + comparsions that are not EQ/NE instead of returning proper + unordered one. Be sure it is not confused with NON_CONSTANT. */ + if (this_code != ERROR_MARK) + { + struct predicate p = add_condition (summary, index, &aggpos, + this_code, + gimple_cond_rhs (last)); + e->aux = pool_alloc (edge_predicate_pool); + *(struct predicate *) e->aux = p; + } } } @@ -2969,10 +2991,15 @@ return isummary->inlinable; } -/* Increase SIZE and TIME for size and time needed to handle edge E. */ +/* Increase SIZE, MIN_SIZE (if non-NULL) and TIME for size and time needed to + handle edge E with probability PROB. + Set HINTS if edge may be devirtualized. + KNOWN_VALS, KNOWN_AGGS and KNOWN_BINFOS describe context of the call + site. */ static inline void -estimate_edge_size_and_time (struct cgraph_edge *e, int *size, int *time, +estimate_edge_size_and_time (struct cgraph_edge *e, int *size, int *min_size, + int *time, int prob, vec known_vals, vec known_binfos, @@ -2982,12 +3009,16 @@ struct inline_edge_summary *es = inline_edge_summary (e); int call_size = es->call_stmt_size; int call_time = es->call_stmt_time; + int cur_size; if (!e->callee && estimate_edge_devirt_benefit (e, &call_size, &call_time, known_vals, known_binfos, known_aggs) && hints && cgraph_maybe_hot_edge_p (e)) *hints |= INLINE_HINT_indirect_call; - *size += call_size * INLINE_SIZE_SCALE; + cur_size = call_size * INLINE_SIZE_SCALE; + *size += cur_size; + if (min_size) + *min_size += cur_size; *time += apply_probability ((gcov_type) call_time, prob) * e->frequency * (INLINE_TIME_SCALE / CGRAPH_FREQ_BASE); if (*time > MAX_TIME * INLINE_TIME_SCALE) @@ -2996,12 +3027,14 @@ -/* Increase SIZE and TIME for size and time needed to handle all calls in NODE. - POSSIBLE_TRUTHS, KNOWN_VALS and KNOWN_BINFOS describe context of the call - site. */ +/* Increase SIZE, MIN_SIZE and TIME for size and time needed to handle all + calls in NODE. + POSSIBLE_TRUTHS, KNOWN_VALS, KNOWN_AGGS and KNOWN_BINFOS describe context of + the call site. */ static void -estimate_calls_size_and_time (struct cgraph_node *node, int *size, int *time, +estimate_calls_size_and_time (struct cgraph_node *node, int *size, + int *min_size, int *time, inline_hints *hints, clause_t possible_truths, vec known_vals, @@ -3019,12 +3052,15 @@ { /* Predicates of calls shall not use NOT_CHANGED codes, sowe do not need to compute probabilities. */ - estimate_edge_size_and_time (e, size, time, REG_BR_PROB_BASE, + estimate_edge_size_and_time (e, size, + es->predicate ? NULL : min_size, + time, REG_BR_PROB_BASE, known_vals, known_binfos, known_aggs, hints); } else - estimate_calls_size_and_time (e->callee, size, time, hints, + estimate_calls_size_and_time (e->callee, size, min_size, time, + hints, possible_truths, known_vals, known_binfos, known_aggs); @@ -3035,7 +3071,9 @@ struct inline_edge_summary *es = inline_edge_summary (e); if (!es->predicate || evaluate_predicate (es->predicate, possible_truths)) - estimate_edge_size_and_time (e, size, time, REG_BR_PROB_BASE, + estimate_edge_size_and_time (e, size, + es->predicate ? NULL : min_size, + time, REG_BR_PROB_BASE, known_vals, known_binfos, known_aggs, hints); } @@ -3043,8 +3081,13 @@ /* Estimate size and time needed to execute NODE assuming - POSSIBLE_TRUTHS clause, and KNOWN_VALS and KNOWN_BINFOS information - about NODE's arguments. */ + POSSIBLE_TRUTHS clause, and KNOWN_VALS, KNOWN_AGGS and KNOWN_BINFOS + information about NODE's arguments. If non-NULL use also probability + information present in INLINE_PARAM_SUMMARY vector. + Additionally detemine hints determined by the context. Finally compute + minimal size needed for the call that is independent on the call context and + can be used for fast estimates. Return the values in RET_SIZE, + RET_MIN_SIZE, RET_TIME and RET_HINTS. */ static void estimate_node_size_and_time (struct cgraph_node *node, @@ -3052,7 +3095,7 @@ vec known_vals, vec known_binfos, vec known_aggs, - int *ret_size, int *ret_time, + int *ret_size, int *ret_min_size, int *ret_time, inline_hints *ret_hints, vec inline_param_summary) @@ -3061,6 +3104,7 @@ size_time_entry *e; int size = 0; int time = 0; + int min_size = 0; inline_hints hints = 0; int i; @@ -3106,6 +3150,8 @@ gcc_checking_assert (time >= 0); } + gcc_checking_assert (true_predicate_p (&(*info->entry)[0].predicate)); + min_size = (*info->entry)[0].size; gcc_checking_assert (size >= 0); gcc_checking_assert (time >= 0); @@ -3123,12 +3169,13 @@ if (DECL_DECLARED_INLINE_P (node->decl)) hints |= INLINE_HINT_declared_inline; - estimate_calls_size_and_time (node, &size, &time, &hints, possible_truths, + estimate_calls_size_and_time (node, &size, &min_size, &time, &hints, possible_truths, known_vals, known_binfos, known_aggs); gcc_checking_assert (size >= 0); gcc_checking_assert (time >= 0); time = RDIV (time, INLINE_TIME_SCALE); size = RDIV (size, INLINE_SIZE_SCALE); + min_size = RDIV (min_size, INLINE_SIZE_SCALE); if (dump_file && (dump_flags & TDF_DETAILS)) fprintf (dump_file, "\n size:%i time:%i\n", (int) size, (int) time); @@ -3136,6 +3183,8 @@ *ret_time = time; if (ret_size) *ret_size = size; + if (ret_min_size) + *ret_min_size = min_size; if (ret_hints) *ret_hints = hints; return; @@ -3160,7 +3209,7 @@ clause = evaluate_conditions_for_known_args (node, false, known_vals, known_aggs); estimate_node_size_and_time (node, clause, known_vals, known_binfos, - known_aggs, ret_size, ret_time, hints, vNULL); + known_aggs, ret_size, NULL, ret_time, hints, vNULL); } /* Translate all conditions from callee representation into caller @@ -3561,7 +3610,8 @@ if (info->time > MAX_TIME * INLINE_TIME_SCALE) info->time = MAX_TIME * INLINE_TIME_SCALE; } - estimate_calls_size_and_time (node, &info->size, &info->time, NULL, + estimate_calls_size_and_time (node, &info->size, &info->min_size, + &info->time, NULL, ~(clause_t) (1 << predicate_false_condition), vNULL, vNULL, vNULL); info->time = (info->time + INLINE_TIME_SCALE / 2) / INLINE_TIME_SCALE; @@ -3606,6 +3656,7 @@ vec known_binfos; vec known_aggs; struct inline_edge_summary *es = inline_edge_summary (edge); + int min_size; callee = cgraph_function_or_thunk_node (edge->callee, NULL); @@ -3614,7 +3665,7 @@ &clause, &known_vals, &known_binfos, &known_aggs); estimate_node_size_and_time (callee, clause, known_vals, known_binfos, - known_aggs, &size, &time, &hints, es->param); + known_aggs, &size, &min_size, &time, &hints, es->param); known_vals.release (); known_binfos.release (); known_aggs.release (); @@ -3624,6 +3675,7 @@ /* When caching, update the cache entry. */ if (edge_growth_cache.exists ()) { + inline_summary (edge->callee)->min_size = min_size; if ((int) edge_growth_cache.length () <= edge->uid) edge_growth_cache.safe_grow_cleared (cgraph_edge_max_uid); edge_growth_cache[edge->uid].time = time + (time >= 0); @@ -3667,7 +3719,7 @@ &clause, &known_vals, &known_binfos, &known_aggs); estimate_node_size_and_time (callee, clause, known_vals, known_binfos, - known_aggs, &size, NULL, NULL, vNULL); + known_aggs, &size, NULL, NULL, NULL, vNULL); known_vals.release (); known_binfos.release (); known_aggs.release (); @@ -3706,7 +3758,7 @@ &clause, &known_vals, &known_binfos, &known_aggs); estimate_node_size_and_time (callee, clause, known_vals, known_binfos, - known_aggs, NULL, NULL, &hints, vNULL); + known_aggs, NULL, NULL, NULL, &hints, vNULL); known_vals.release (); known_binfos.release (); known_aggs.release (); @@ -3826,6 +3878,55 @@ } +/* Make cheap estimation if growth of NODE is likely positive knowing + EDGE_GROWTH of one particular edge. + We assume that most of other edges will have similar growth + and skip computation if there are too many callers. */ + +bool +growth_likely_positive (struct cgraph_node *node, int edge_growth ATTRIBUTE_UNUSED) +{ + int max_callers; + int ret; + struct cgraph_edge *e; + gcc_checking_assert (edge_growth > 0); + + /* Unlike for functions called once, we play unsafe with + COMDATs. We can allow that since we know functions + in consideration are small (and thus risk is small) and + moreover grow estimates already accounts that COMDAT + functions may or may not disappear when eliminated from + current unit. With good probability making aggressive + choice in all units is going to make overall program + smaller. + + Consequently we ask cgraph_can_remove_if_no_direct_calls_p + instead of + cgraph_will_be_removed_from_program_if_no_direct_calls */ + if (DECL_EXTERNAL (node->decl) + || !cgraph_can_remove_if_no_direct_calls_p (node)) + return true; + + /* If there is cached value, just go ahead. */ + if ((int)node_growth_cache.length () > node->uid + && (ret = node_growth_cache[node->uid])) + return ret > 0; + if (!cgraph_will_be_removed_from_program_if_no_direct_calls (node) + && (!DECL_COMDAT (node->decl) + || !cgraph_can_remove_if_no_direct_calls_p (node))) + return true; + max_callers = inline_summary (node)->size * 4 / edge_growth + 2; + + for (e = node->callers; e; e = e->next_caller) + { + max_callers--; + if (!max_callers) + return true; + } + return estimate_growth (node) > 0; +} + + /* This function performs intraprocedural analysis in NODE that is required to inline indirect calls. */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/ipa-inline.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/ipa-inline.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/ipa-inline.c 2014-02-21 09:32:57.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/ipa-inline.c 2014-04-04 14:53:38.000000000 +0000 @@ -573,6 +573,24 @@ e->inline_failed = CIF_FUNCTION_NOT_INLINE_CANDIDATE; want_inline = false; } + /* Do fast and conservative check if the function can be good + inline cnadidate. At themoment we allow inline hints to + promote non-inline function to inline and we increase + MAX_INLINE_INSNS_SINGLE 16fold for inline functions. */ + else if (!DECL_DECLARED_INLINE_P (callee->decl) + && inline_summary (callee)->min_size - inline_edge_summary (e)->call_stmt_size + > MAX (MAX_INLINE_INSNS_SINGLE, MAX_INLINE_INSNS_AUTO)) + { + e->inline_failed = CIF_MAX_INLINE_INSNS_AUTO_LIMIT; + want_inline = false; + } + else if (DECL_DECLARED_INLINE_P (callee->decl) + && inline_summary (callee)->min_size - inline_edge_summary (e)->call_stmt_size + > 16 * MAX_INLINE_INSNS_SINGLE) + { + e->inline_failed = CIF_MAX_INLINE_INSNS_AUTO_LIMIT; + want_inline = false; + } else { int growth = estimate_edge_growth (e); @@ -585,56 +603,26 @@ hints suggests that inlining given function is very profitable. */ else if (DECL_DECLARED_INLINE_P (callee->decl) && growth >= MAX_INLINE_INSNS_SINGLE - && !big_speedup - && !(hints & (INLINE_HINT_indirect_call - | INLINE_HINT_loop_iterations - | INLINE_HINT_array_index - | INLINE_HINT_loop_stride))) + && ((!big_speedup + && !(hints & (INLINE_HINT_indirect_call + | INLINE_HINT_loop_iterations + | INLINE_HINT_array_index + | INLINE_HINT_loop_stride))) + || growth >= MAX_INLINE_INSNS_SINGLE * 16)) { e->inline_failed = CIF_MAX_INLINE_INSNS_SINGLE_LIMIT; want_inline = false; } - /* Before giving up based on fact that caller size will grow, allow - functions that are called few times and eliminating the offline - copy will lead to overall code size reduction. - Not all of these will be handled by subsequent inlining of functions - called once: in particular weak functions are not handled or funcitons - that inline to multiple calls but a lot of bodies is optimized out. - Finally we want to inline earlier to allow inlining of callbacks. - - This is slightly wrong on aggressive side: it is entirely possible - that function is called many times with a context where inlining - reduces code size and few times with a context where inlining increase - code size. Resoluting growth estimate will be negative even if it - would make more sense to keep offline copy and do not inline into the - call sites that makes the code size grow. - - When badness orders the calls in a way that code reducing calls come - first, this situation is not a problem at all: after inlining all - "good" calls, we will realize that keeping the function around is - better. */ - else if (growth <= MAX_INLINE_INSNS_SINGLE - /* Unlike for functions called once, we play unsafe with - COMDATs. We can allow that since we know functions - in consideration are small (and thus risk is small) and - moreover grow estimates already accounts that COMDAT - functions may or may not disappear when eliminated from - current unit. With good probability making aggressive - choice in all units is going to make overall program - smaller. - - Consequently we ask cgraph_can_remove_if_no_direct_calls_p - instead of - cgraph_will_be_removed_from_program_if_no_direct_calls */ - && !DECL_EXTERNAL (callee->decl) - && cgraph_can_remove_if_no_direct_calls_p (callee) - && estimate_growth (callee) <= 0) - ; else if (!DECL_DECLARED_INLINE_P (callee->decl) && !flag_inline_functions) { - e->inline_failed = CIF_NOT_DECLARED_INLINED; - want_inline = false; + /* growth_likely_positive is expensive, always test it last. */ + if (growth >= MAX_INLINE_INSNS_SINGLE + || growth_likely_positive (callee, growth)) + { + e->inline_failed = CIF_NOT_DECLARED_INLINED; + want_inline = false; + } } /* Apply MAX_INLINE_INSNS_AUTO limit for functions not declared inline Upgrade it to MAX_INLINE_INSNS_SINGLE when hints suggests that @@ -649,11 +637,18 @@ MAX_INLINE_INSNS_SINGLE) : MAX_INLINE_INSNS_AUTO)) { - e->inline_failed = CIF_MAX_INLINE_INSNS_AUTO_LIMIT; - want_inline = false; + /* growth_likely_positive is expensive, always test it last. */ + if (growth >= MAX_INLINE_INSNS_SINGLE + || growth_likely_positive (callee, growth)) + { + e->inline_failed = CIF_MAX_INLINE_INSNS_AUTO_LIMIT; + want_inline = false; + } } /* If call is cold, do not inline when function body would grow. */ - else if (!cgraph_maybe_hot_edge_p (e)) + else if (!cgraph_maybe_hot_edge_p (e) + && (growth >= MAX_INLINE_INSNS_SINGLE + || growth_likely_positive (callee, growth))) { e->inline_failed = CIF_UNLIKELY_CALL; want_inline = false; @@ -1388,7 +1383,7 @@ /* We need original clone to copy around. */ master_clone = cgraph_clone_node (node, node->decl, node->count, CGRAPH_FREQ_BASE, - false, vNULL, true, NULL); + false, vNULL, true, NULL, NULL); for (e = master_clone->callees; e; e = e->next_callee) if (!e->inline_failed) clone_inlined_nodes (e, true, false, NULL, CGRAPH_FREQ_BASE); @@ -1685,7 +1680,7 @@ edge = (struct cgraph_edge *) fibheap_extract_min (edge_heap); gcc_assert (edge->aux); edge->aux = NULL; - if (!edge->inline_failed) + if (!edge->inline_failed || !edge->callee->analyzed) continue; /* Be sure that caches are maintained consistent. @@ -1723,14 +1718,12 @@ inline_summary (callee)->size); fprintf (dump_file, " to be inlined into %s/%i in %s:%i\n" - " Estimated growth after inlined into all is %+i insns.\n" " Estimated badness is %i, frequency %.2f.\n", edge->caller->name (), edge->caller->order, flag_wpa ? "unknown" : gimple_filename ((const_gimple) edge->call_stmt), flag_wpa ? -1 : gimple_lineno ((const_gimple) edge->call_stmt), - estimate_growth (callee), badness, edge->frequency / (double)CGRAPH_FREQ_BASE); if (edge->count) @@ -2318,6 +2311,8 @@ edge->call_stmt, edge->callee->decl, false)) edge->call_stmt_cannot_inline_p = true; } + if (iterations < PARAM_VALUE (PARAM_EARLY_INLINER_MAX_ITERATIONS) - 1) + inline_update_overall_summary (node); timevar_pop (TV_INTEGRATION); iterations++; inlined = false; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/ipa-inline.h gcc-snapshot-20140405/=unpacked-tar1=/gcc/ipa-inline.h --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/ipa-inline.h 2014-02-21 09:32:57.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/ipa-inline.h 2014-03-30 07:40:41.000000000 +0000 @@ -117,6 +117,8 @@ int self_size; /* Time of the function body. */ int self_time; + /* Minimal size increase after inlining. */ + int min_size; /* False when there something makes inlining impossible (such as va_arg). */ unsigned inlinable : 1; @@ -220,6 +222,7 @@ vec, int *, int *, inline_hints *); int do_estimate_growth (struct cgraph_node *); +bool growth_likely_positive (struct cgraph_node *, int); void inline_merge_summary (struct cgraph_edge *edge); void inline_update_overall_summary (struct cgraph_node *node); int do_estimate_edge_size (struct cgraph_edge *edge); @@ -285,7 +288,8 @@ estimate_edge_growth (struct cgraph_edge *edge) { #ifdef ENABLE_CHECKING - gcc_checking_assert (inline_edge_summary (edge)->call_stmt_size); + gcc_checking_assert (inline_edge_summary (edge)->call_stmt_size + || !edge->callee->analyzed); #endif return (estimate_edge_size (edge) - inline_edge_summary (edge)->call_stmt_size); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/ipa-inline-transform.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/ipa-inline-transform.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/ipa-inline-transform.c 2014-02-21 09:32:56.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/ipa-inline-transform.c 2014-04-04 14:53:38.000000000 +0000 @@ -184,7 +184,7 @@ freq_scale = e->frequency; n = cgraph_clone_node (e->callee, e->callee->decl, e->count, freq_scale, update_original, - vNULL, true, inlining_into); + vNULL, true, inlining_into, NULL); cgraph_redirect_edge_callee (e, n); } } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/ipa-pure-const.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/ipa-pure-const.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/ipa-pure-const.c 2014-01-05 19:58:16.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/ipa-pure-const.c 2014-03-26 08:19:16.000000000 +0000 @@ -1327,35 +1327,39 @@ w_l->pure_const_state = this_state; w_l->looping = this_looping; - switch (this_state) - { - case IPA_CONST: - if (!TREE_READONLY (w->decl)) - { - warn_function_const (w->decl, !this_looping); - if (dump_file) - fprintf (dump_file, "Function found to be %sconst: %s\n", - this_looping ? "looping " : "", - w->name ()); - } - cgraph_set_const_flag (w, true, this_looping); - break; + /* Inline clones share declaration with their offline copies; + do not modify their declarations since the offline copy may + be different. */ + if (!w->global.inlined_to) + switch (this_state) + { + case IPA_CONST: + if (!TREE_READONLY (w->decl)) + { + warn_function_const (w->decl, !this_looping); + if (dump_file) + fprintf (dump_file, "Function found to be %sconst: %s\n", + this_looping ? "looping " : "", + w->name ()); + } + cgraph_set_const_flag (w, true, this_looping); + break; - case IPA_PURE: - if (!DECL_PURE_P (w->decl)) - { - warn_function_pure (w->decl, !this_looping); - if (dump_file) - fprintf (dump_file, "Function found to be %spure: %s\n", - this_looping ? "looping " : "", - w->name ()); - } - cgraph_set_pure_flag (w, true, this_looping); - break; + case IPA_PURE: + if (!DECL_PURE_P (w->decl)) + { + warn_function_pure (w->decl, !this_looping); + if (dump_file) + fprintf (dump_file, "Function found to be %spure: %s\n", + this_looping ? "looping " : "", + w->name ()); + } + cgraph_set_pure_flag (w, true, this_looping); + break; - default: - break; - } + default: + break; + } w_info = (struct ipa_dfs_info *) w->aux; w = w_info->next_cycle; } @@ -1448,10 +1452,16 @@ funct_state w_l = get_function_state (w); if (!can_throw && !TREE_NOTHROW (w->decl)) { - cgraph_set_nothrow_flag (w, true); - if (dump_file) - fprintf (dump_file, "Function found to be nothrow: %s\n", - w->name ()); + /* Inline clones share declaration with their offline copies; + do not modify their declarations since the offline copy may + be different. */ + if (!w->global.inlined_to) + { + cgraph_set_nothrow_flag (w, true); + if (dump_file) + fprintf (dump_file, "Function found to be nothrow: %s\n", + w->name ()); + } } else if (can_throw && !TREE_NOTHROW (w->decl)) w_l->can_throw = true; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/ipa-utils.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/ipa-utils.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/ipa-utils.c 2014-01-05 19:58:16.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/ipa-utils.c 2014-03-26 08:19:16.000000000 +0000 @@ -55,7 +55,7 @@ fprintf (out, "\n\n ordered call graph: %s\n", note); for (i = count - 1; i >= 0; i--) - dump_cgraph_node (dump_file, order[i]); + dump_cgraph_node (out, order[i]); fprintf (out, "\n"); fflush (out); } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/ira-color.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/ira-color.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/ira-color.c 2014-01-05 19:58:16.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/ira-color.c 2014-03-26 08:19:16.000000000 +0000 @@ -1505,7 +1505,7 @@ index = ira_class_hard_reg_index[aclass][hard_regno]; if (index < 0) continue; - cost = conflict_costs [i] * mult / div; + cost = (int) ((unsigned) conflict_costs [i] * mult) / div; if (cost == 0) continue; cont_p = true; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/lra-assigns.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/lra-assigns.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/lra-assigns.c 2014-02-28 00:03:07.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/lra-assigns.c 2014-03-28 19:04:53.000000000 +0000 @@ -451,10 +451,16 @@ that register. (If several registers have equal cost, the one with the highest priority wins.) Return -1 on failure. + If FIRST_P, return the first available hard reg ignoring other + criteria, e.g. allocation cost. This approach results in less hard + reg pool fragmentation and permit to allocate hard regs to reload + pseudos in complicated situations where pseudo sizes are different. + If TRY_ONLY_HARD_REGNO >= 0, consider only that hard register, otherwise consider all hard registers in REGNO's class. */ static int -find_hard_regno_for (int regno, int *cost, int try_only_hard_regno) +find_hard_regno_for (int regno, int *cost, int try_only_hard_regno, + bool first_p) { HARD_REG_SET conflict_set; int best_cost = INT_MAX, best_priority = INT_MIN, best_usage = INT_MAX; @@ -467,7 +473,7 @@ enum reg_class rclass; bitmap_iterator bi; bool *rclass_intersect_p; - HARD_REG_SET impossible_start_hard_regs; + HARD_REG_SET impossible_start_hard_regs, available_regs; COPY_HARD_REG_SET (conflict_set, lra_no_alloc_regs); rclass = regno_allocno_class_array[regno]; @@ -580,6 +586,8 @@ biggest_nregs = hard_regno_nregs[hard_regno][biggest_mode]; nregs_diff = (biggest_nregs - hard_regno_nregs[hard_regno][PSEUDO_REGNO_MODE (regno)]); + COPY_HARD_REG_SET (available_regs, reg_class_contents[rclass]); + AND_COMPL_HARD_REG_SET (available_regs, lra_no_alloc_regs); for (i = 0; i < rclass_size; i++) { if (try_only_hard_regno >= 0) @@ -595,9 +603,9 @@ && (nregs_diff == 0 || (WORDS_BIG_ENDIAN ? (hard_regno - nregs_diff >= 0 - && TEST_HARD_REG_BIT (reg_class_contents[rclass], + && TEST_HARD_REG_BIT (available_regs, hard_regno - nregs_diff)) - : TEST_HARD_REG_BIT (reg_class_contents[rclass], + : TEST_HARD_REG_BIT (available_regs, hard_regno + nregs_diff)))) { if (hard_regno_costs_check[hard_regno] @@ -630,7 +638,7 @@ best_usage = lra_hard_reg_usage[hard_regno]; } } - if (try_only_hard_regno >= 0) + if (try_only_hard_regno >= 0 || (first_p && best_hard_regno >= 0)) break; } if (best_hard_regno >= 0) @@ -816,9 +824,15 @@ to be spilled), we take into account not only how REGNO will benefit from the spills but also how other reload pseudos not yet assigned to hard registers benefit from the spills too. In very - rare cases, the function can fail and return -1. */ + rare cases, the function can fail and return -1. + + If FIRST_P, return the first available hard reg ignoring other + criteria, e.g. allocation cost and cost of spilling non-reload + pseudos. This approach results in less hard reg pool fragmentation + and permit to allocate hard regs to reload pseudos in complicated + situations where pseudo sizes are different. */ static int -spill_for (int regno, bitmap spilled_pseudo_bitmap) +spill_for (int regno, bitmap spilled_pseudo_bitmap, bool first_p) { int i, j, n, p, hard_regno, best_hard_regno, cost, best_cost, rclass_size; int reload_hard_regno, reload_cost; @@ -905,7 +919,7 @@ && (ira_reg_classes_intersect_p [rclass][regno_allocno_class_array[reload_regno]]) && live_pseudos_reg_renumber[reload_regno] < 0 - && find_hard_regno_for (reload_regno, &cost, -1) < 0) + && find_hard_regno_for (reload_regno, &cost, -1, first_p) < 0) sorted_reload_pseudos[n++] = reload_regno; EXECUTE_IF_SET_IN_BITMAP (&spill_pseudos_bitmap, 0, spill_regno, bi) { @@ -914,7 +928,7 @@ fprintf (lra_dump_file, " spill %d(freq=%d)", spill_regno, lra_reg_info[spill_regno].freq); } - hard_regno = find_hard_regno_for (regno, &cost, -1); + hard_regno = find_hard_regno_for (regno, &cost, -1, first_p); if (hard_regno >= 0) { assign_temporarily (regno, hard_regno); @@ -926,7 +940,7 @@ lra_assert (live_pseudos_reg_renumber[reload_regno] < 0); if ((reload_hard_regno = find_hard_regno_for (reload_regno, - &reload_cost, -1)) >= 0) + &reload_cost, -1, first_p)) >= 0) { if (lra_dump_file != NULL) fprintf (lra_dump_file, " assign %d(cost=%d)", @@ -1148,8 +1162,8 @@ regno, hard_regno, another_regno, another_hard_regno); update_lives (another_regno, true); lra_setup_reg_renumber (another_regno, -1, false); - if (hard_regno - == find_hard_regno_for (another_regno, &cost, hard_regno)) + if (hard_regno == find_hard_regno_for (another_regno, &cost, + hard_regno, false)) assign_hard_regno (hard_regno, another_regno); else assign_hard_regno (another_hard_regno, another_regno); @@ -1166,15 +1180,50 @@ /* All pseudos whose allocation was changed. */ static bitmap_head changed_pseudo_bitmap; + +/* Add to LIVE_RANGE_HARD_REG_PSEUDOS all pseudos conflicting with + REGNO and whose hard regs can be assigned to REGNO. */ +static void +find_all_spills_for (int regno) +{ + int p; + lra_live_range_t r; + unsigned int k; + bitmap_iterator bi; + enum reg_class rclass; + bool *rclass_intersect_p; + + rclass = regno_allocno_class_array[regno]; + rclass_intersect_p = ira_reg_classes_intersect_p[rclass]; + for (r = lra_reg_info[regno].live_ranges; r != NULL; r = r->next) + { + EXECUTE_IF_SET_IN_BITMAP (&live_hard_reg_pseudos[r->start], 0, k, bi) + if (rclass_intersect_p[regno_allocno_class_array[k]]) + sparseset_set_bit (live_range_hard_reg_pseudos, k); + for (p = r->start + 1; p <= r->finish; p++) + { + lra_live_range_t r2; + + for (r2 = start_point_ranges[p]; + r2 != NULL; + r2 = r2->start_next) + { + if (live_pseudos_reg_renumber[r2->regno] >= 0 + && rclass_intersect_p[regno_allocno_class_array[r2->regno]]) + sparseset_set_bit (live_range_hard_reg_pseudos, r2->regno); + } + } + } +} + /* Assign hard registers to reload pseudos and other pseudos. */ static void assign_by_spills (void) { int i, n, nfails, iter, regno, hard_regno, cost, restore_regno; rtx insn; - basic_block bb; bitmap_head changed_insns, do_not_assign_nonreload_pseudos; - unsigned int u; + unsigned int u, conflict_regno; bitmap_iterator bi; bool reload_p; int max_regno = max_reg_num (); @@ -1211,10 +1260,10 @@ ORIGINAL_REGNO (regno_reg_rtx[regno]), lra_reg_info[regno].freq, regno_assign_info[regno].first, regno_assign_info[regno_assign_info[regno].first].freq); - hard_regno = find_hard_regno_for (regno, &cost, -1); + hard_regno = find_hard_regno_for (regno, &cost, -1, iter == 1); reload_p = ! bitmap_bit_p (&non_reload_pseudos, regno); if (hard_regno < 0 && reload_p) - hard_regno = spill_for (regno, &all_spilled_pseudos); + hard_regno = spill_for (regno, &all_spilled_pseudos, iter == 1); if (hard_regno < 0) { if (reload_p) @@ -1286,61 +1335,41 @@ lra_assert (asm_p); break; } - /* This is a very rare event. We can not assign a hard - register to reload pseudo because the hard register was - assigned to another reload pseudo on a previous - assignment pass. For x86 example, on the 1st pass we - assigned CX (although another hard register could be used - for this) to reload pseudo in an insn, on the 2nd pass we - need CX (and only this) hard register for a new reload - pseudo in the same insn. */ + /* This is a very rare event. We can not assign a hard register + to reload pseudo because the hard register was assigned to + another reload pseudo on a previous assignment pass. For x86 + example, on the 1st pass we assigned CX (although another + hard register could be used for this) to reload pseudo in an + insn, on the 2nd pass we need CX (and only this) hard + register for a new reload pseudo in the same insn. Another + possible situation may occur in assigning to multi-regs + reload pseudos when hard regs pool is too fragmented even + after spilling non-reload pseudos. + + We should do something radical here to succeed. Here we + spill *all* conflicting pseudos and reassign them. */ if (lra_dump_file != NULL) fprintf (lra_dump_file, " 2nd iter for reload pseudo assignments:\n"); + sparseset_clear (live_range_hard_reg_pseudos); for (i = 0; i < nfails; i++) { if (lra_dump_file != NULL) fprintf (lra_dump_file, " Reload r%d assignment failure\n", sorted_pseudos[i]); - bitmap_ior_into (&changed_insns, - &lra_reg_info[sorted_pseudos[i]].insn_bitmap); + find_all_spills_for (sorted_pseudos[i]); + } + EXECUTE_IF_SET_IN_SPARSESET (live_range_hard_reg_pseudos, conflict_regno) + { + if ((int) conflict_regno >= lra_constraint_new_regno_start) + sorted_pseudos[nfails++] = conflict_regno; + if (lra_dump_file != NULL) + fprintf (lra_dump_file, " Spill %s r%d(hr=%d, freq=%d)\n", + pseudo_prefix_title (conflict_regno), conflict_regno, + reg_renumber[conflict_regno], + lra_reg_info[conflict_regno].freq); + update_lives (conflict_regno, true); + lra_setup_reg_renumber (conflict_regno, -1, false); } - - /* FIXME: Look up the changed insns in the cached LRA insn data using - an EXECUTE_IF_SET_IN_BITMAP over changed_insns. */ - FOR_EACH_BB_FN (bb, cfun) - FOR_BB_INSNS (bb, insn) - if (bitmap_bit_p (&changed_insns, INSN_UID (insn))) - { - lra_insn_recog_data_t data; - struct lra_insn_reg *r; - - data = lra_get_insn_recog_data (insn); - for (r = data->regs; r != NULL; r = r->next) - { - regno = r->regno; - /* A reload pseudo did not get a hard register on the - first iteration because of the conflict with - another reload pseudos in the same insn. So we - consider only reload pseudos assigned to hard - registers. We shall exclude inheritance pseudos as - they can occur in original insns (not reload ones). - We can omit the check for split pseudos because - they occur only in move insns containing non-reload - pseudos. */ - if (regno < lra_constraint_new_regno_start - || bitmap_bit_p (&lra_inheritance_pseudos, regno) - || reg_renumber[regno] < 0) - continue; - sorted_pseudos[nfails++] = regno; - if (lra_dump_file != NULL) - fprintf (lra_dump_file, - " Spill reload r%d(hr=%d, freq=%d)\n", - regno, reg_renumber[regno], - lra_reg_info[regno].freq); - update_lives (regno, true); - lra_setup_reg_renumber (regno, -1, false); - } - } n = nfails; } improve_inheritance (&changed_pseudo_bitmap); @@ -1382,7 +1411,7 @@ for (i = 0; i < n; i++) { regno = sorted_pseudos[i]; - hard_regno = find_hard_regno_for (regno, &cost, -1); + hard_regno = find_hard_regno_for (regno, &cost, -1, false); if (hard_regno >= 0) { assign_hard_regno (hard_regno, regno); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/lra.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/lra.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/lra.c 2014-02-28 00:03:07.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/lra.c 2014-03-26 08:19:14.000000000 +0000 @@ -254,6 +254,19 @@ rtx insn, last; last = get_last_insn (); + + if (have_addptr3_insn (x, y, z)) + { + insn = gen_addptr3_insn (x, y, z); + + /* If the target provides an "addptr" pattern it hopefully does + for a reason. So falling back to the normal add would be + a bug. */ + lra_assert (insn != NULL_RTX); + emit_insn (insn); + return insn; + } + insn = emit_insn (gen_rtx_SET (VOIDmode, x, gen_rtx_PLUS (GET_MODE (y), y, z))); if (recog_memoized (insn) < 0) diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/lra-constraints.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/lra-constraints.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/lra-constraints.c 2014-03-20 10:50:24.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/lra-constraints.c 2014-04-02 23:41:00.000000000 +0000 @@ -1747,12 +1747,27 @@ [GET_MODE (*curr_id->operand_loc[m])]); } - /* We prefer no matching alternatives because - it gives more freedom in RA. */ - if (operand_reg[nop] == NULL_RTX - || (find_regno_note (curr_insn, REG_DEAD, - REGNO (operand_reg[nop])) - == NULL_RTX)) + /* Prefer matching earlyclobber alternative as + it results in less hard regs required for + the insn than a non-matching earlyclobber + alternative. */ + if (curr_static_id->operand[m].early_clobber) + { + if (lra_dump_file != NULL) + fprintf + (lra_dump_file, + " %d Matching earlyclobber alt:" + " reject--\n", + nop); + reject--; + } + /* Otherwise we prefer no matching + alternatives because it gives more freedom + in RA. */ + else if (operand_reg[nop] == NULL_RTX + || (find_regno_note (curr_insn, REG_DEAD, + REGNO (operand_reg[nop])) + == NULL_RTX)) { if (lra_dump_file != NULL) fprintf @@ -2143,7 +2158,7 @@ } /* If the operand is dying, has a matching constraint, and satisfies constraints of the matched operand - which failed to satisfy the own constraints, probably + which failed to satisfy the own constraints, most probably the reload for this operand will be gone. */ if (this_alternative_matches >= 0 && !curr_alt_win[this_alternative_matches] @@ -2631,6 +2646,20 @@ return new_reg; } +/* Make reload of index part of address AD. Return the new + pseudo. */ +static rtx +index_part_to_reg (struct address_info *ad) +{ + rtx new_reg; + + new_reg = lra_create_new_reg (GET_MODE (*ad->index), NULL_RTX, + INDEX_REG_CLASS, "index term"); + expand_mult (GET_MODE (*ad->index), *ad->index_term, + GEN_INT (get_index_scale (ad)), new_reg, 1); + return new_reg; +} + /* Return true if we can add a displacement to address AD, even if that makes the address invalid. The fix-up code requires any new address to be the sum of the BASE_TERM, INDEX and DISP_TERM fields. */ @@ -2935,7 +2964,7 @@ emit_insn (insns); *ad.inner = new_reg; } - else + else if (ad.disp_term != NULL) { /* base + scale * index + disp => new base + scale * index, case (1) above. */ @@ -2943,6 +2972,18 @@ *ad.inner = simplify_gen_binary (PLUS, GET_MODE (new_reg), new_reg, *ad.index); } + else + { + /* base + scale * index => base + new_reg, + case (1) above. + Index part of address may become invalid. For example, we + changed pseudo on the equivalent memory and a subreg of the + pseudo onto the memory of different mode for which the scale is + prohibitted. */ + new_reg = index_part_to_reg (&ad); + *ad.inner = simplify_gen_binary (PLUS, GET_MODE (new_reg), + *ad.base_term, new_reg); + } *before = get_insns (); end_sequence (); return true; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/lto-cgraph.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/lto-cgraph.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/lto-cgraph.c 2014-02-07 14:55:24.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/lto-cgraph.c 2014-04-05 08:48:42.000000000 +0000 @@ -500,6 +500,7 @@ bp_pack_value (&bp, node->force_output, 1); bp_pack_value (&bp, node->forced_by_abi, 1); bp_pack_value (&bp, node->unique_name, 1); + bp_pack_value (&bp, node->body_removed, 1); bp_pack_value (&bp, node->address_taken, 1); bp_pack_value (&bp, tag == LTO_symtab_analyzed_node && symtab_get_symbol_partitioning_class (node) == SYMBOL_PARTITION @@ -560,6 +561,7 @@ bp_pack_value (&bp, node->force_output, 1); bp_pack_value (&bp, node->forced_by_abi, 1); bp_pack_value (&bp, node->unique_name, 1); + bp_pack_value (&bp, node->body_removed, 1); bp_pack_value (&bp, node->definition, 1); alias_p = node->alias && (!boundary_p || node->weakref); bp_pack_value (&bp, alias_p, 1); @@ -969,6 +971,7 @@ node->force_output = bp_unpack_value (bp, 1); node->forced_by_abi = bp_unpack_value (bp, 1); node->unique_name = bp_unpack_value (bp, 1); + node->body_removed = bp_unpack_value (bp, 1); node->address_taken = bp_unpack_value (bp, 1); node->used_from_other_partition = bp_unpack_value (bp, 1); node->lowered = bp_unpack_value (bp, 1); @@ -998,6 +1001,9 @@ node->thunk.thunk_p = bp_unpack_value (bp, 1); node->resolution = bp_unpack_enum (bp, ld_plugin_symbol_resolution, LDPR_NUM_KNOWN); + gcc_assert (flag_ltrans + || (!node->in_other_partition + && !node->used_from_other_partition)); } /* Return string alias is alias of. */ @@ -1039,7 +1045,7 @@ { node = cgraph_clone_node (cgraph (nodes[clone_ref]), fn_decl, 0, CGRAPH_FREQ_BASE, false, - vNULL, false, NULL); + vNULL, false, NULL, NULL); } else { @@ -1147,6 +1153,7 @@ node->force_output = bp_unpack_value (&bp, 1); node->forced_by_abi = bp_unpack_value (&bp, 1); node->unique_name = bp_unpack_value (&bp, 1); + node->body_removed = bp_unpack_value (&bp, 1); node->definition = bp_unpack_value (&bp, 1); node->alias = bp_unpack_value (&bp, 1); node->weakref = bp_unpack_value (&bp, 1); @@ -1165,6 +1172,9 @@ node->same_comdat_group = (symtab_node *) (intptr_t) ref; node->resolution = streamer_read_enum (ib, ld_plugin_symbol_resolution, LDPR_NUM_KNOWN); + gcc_assert (flag_ltrans + || (!node->in_other_partition + && !node->used_from_other_partition)); return node; } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/lto-streamer-in.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/lto-streamer-in.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/lto-streamer-in.c 2014-03-20 10:50:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/lto-streamer-in.c 2014-04-03 16:42:11.000000000 +0000 @@ -1365,8 +1365,7 @@ data_in->strings = strings; data_in->strings_len = len; data_in->globals_resolution = resolutions; - data_in->reader_cache = streamer_tree_cache_create (false, false); - + data_in->reader_cache = streamer_tree_cache_create (false, false, true); return data_in; } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/lto-streamer-out.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/lto-streamer-out.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/lto-streamer-out.c 2014-02-14 18:22:14.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/lto-streamer-out.c 2014-04-03 16:42:11.000000000 +0000 @@ -79,7 +79,7 @@ ob->decl_state = lto_get_out_decl_state (); ob->main_stream = XCNEW (struct lto_output_stream); ob->string_stream = XCNEW (struct lto_output_stream); - ob->writer_cache = streamer_tree_cache_create (!flag_wpa, true); + ob->writer_cache = streamer_tree_cache_create (!flag_wpa, true, false); if (section_type == LTO_section_function_body) ob->cfg_stream = XCNEW (struct lto_output_stream); @@ -1277,7 +1277,6 @@ ??? We still wrap these in LTO_tree_scc so at the input side we can properly identify the tree we want to ultimatively return. */ - size_t old_len = ob->writer_cache->nodes.length (); if (size == 1) lto_output_tree_1 (ob, expr, scc_hash, ref_p, this_ref_p); else @@ -1315,7 +1314,6 @@ streamer_write_zero (ob); } } - gcc_assert (old_len + size == ob->writer_cache->nodes.length ()); /* Finally truncate the vector. */ sccstack.truncate (first); @@ -2423,10 +2421,18 @@ gcc_assert (!alias_pairs); - /* Write the global symbols. */ + /* Get rid of the global decl state hash tables to save some memory. */ out_state = lto_get_out_decl_state (); - num_fns = lto_function_decl_states.length (); + for (int i = 0; i < LTO_N_DECL_STREAMS; i++) + if (out_state->streams[i].tree_hash_table) + { + delete out_state->streams[i].tree_hash_table; + out_state->streams[i].tree_hash_table = NULL; + } + + /* Write the global symbols. */ lto_output_decl_state_streams (ob, out_state); + num_fns = lto_function_decl_states.length (); for (idx = 0; idx < num_fns; idx++) { fn_out_state = diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/lto-wrapper.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/lto-wrapper.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/lto-wrapper.c 2014-03-20 10:50:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/lto-wrapper.c 2014-03-26 08:19:16.000000000 +0000 @@ -406,6 +406,7 @@ /* Fallthru. */ case OPT_fPIC: case OPT_fpic: + case OPT_fPIE: case OPT_fpie: case OPT_fcommon: case OPT_fexceptions: @@ -671,6 +672,7 @@ { case OPT_fPIC: case OPT_fpic: + case OPT_fPIE: case OPT_fpie: case OPT_fcommon: case OPT_fexceptions: diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/Makefile.in gcc-snapshot-20140405/=unpacked-tar1=/gcc/Makefile.in --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/Makefile.in 2014-03-06 14:12:57.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/Makefile.in 2014-04-04 08:45:22.000000000 +0000 @@ -2653,7 +2653,7 @@ $(mkinstalldirs) $(DESTDIR)$(gcc_tooldir) macro_list: s-macro_list; @true -s-macro_list : $(GCC_PASSES) +s-macro_list : $(GCC_PASSES) cc1$(exeext) echo | $(GCC_FOR_TARGET) -E -dM - | \ sed -n -e 's/^#define \([^_][a-zA-Z0-9_]*\).*/\1/p' \ -e 's/^#define \(_[^_A-Z][a-zA-Z0-9_]*\).*/\1/p' | \ @@ -3205,10 +3205,13 @@ install-driver: installdirs xgcc$(exeext) -rm -f $(DESTDIR)$(bindir)/$(GCC_INSTALL_NAME)$(exeext) -$(INSTALL_PROGRAM) xgcc$(exeext) $(DESTDIR)$(bindir)/$(GCC_INSTALL_NAME)$(exeext) - -rm -f $(DESTDIR)$(bindir)/$(target_noncanonical)-gcc-$(version)$(exeext) - -( cd $(DESTDIR)$(bindir) && \ - $(LN) $(GCC_INSTALL_NAME)$(exeext) $(target_noncanonical)-gcc-$(version)$(exeext) ) - -if [ ! -f gcc-cross$(exeext) ] ; then \ + -if [ "$(GCC_INSTALL_NAME)" != "$(target_noncanonical)-gcc-$(version)" ]; then \ + rm -f $(DESTDIR)$(bindir)/$(target_noncanonical)-gcc-$(version)$(exeext); \ + ( cd $(DESTDIR)$(bindir) && \ + $(LN) $(GCC_INSTALL_NAME)$(exeext) $(target_noncanonical)-gcc-$(version)$(exeext) ); \ + fi + -if [ ! -f gcc-cross$(exeext) ] \ + && [ "$(GCC_INSTALL_NAME)" != "$(GCC_TARGET_INSTALL_NAME)" ]; then \ rm -f $(DESTDIR)$(bindir)/$(target_noncanonical)-gcc-tmp$(exeext); \ ( cd $(DESTDIR)$(bindir) && \ $(LN) $(GCC_INSTALL_NAME)$(exeext) $(target_noncanonical)-gcc-tmp$(exeext) && \ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/mode-switching.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/mode-switching.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/mode-switching.c 2014-01-05 19:58:16.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/mode-switching.c 2014-03-28 19:04:55.000000000 +0000 @@ -45,20 +45,20 @@ and finding all the insns which require a specific mode. Each insn gets a unique struct seginfo element. These structures are inserted into a list for each basic block. For each entity, there is an array of bb_info over - the flow graph basic blocks (local var 'bb_info'), and contains a list + the flow graph basic blocks (local var 'bb_info'), which contains a list of all insns within that basic block, in the order they are encountered. For each entity, any basic block WITHOUT any insns requiring a specific - mode are given a single entry, without a mode. (Each basic block - in the flow graph must have at least one entry in the segment table.) + mode are given a single entry without a mode (each basic block in the + flow graph must have at least one entry in the segment table). The LCM algorithm is then run over the flow graph to determine where to - place the sets to the highest-priority value in respect of first the first + place the sets to the highest-priority mode with respect to the first insn in any one block. Any adjustments required to the transparency vectors are made, then the next iteration starts for the next-lower priority mode, till for each entity all modes are exhausted. - More details are located in the code for optimize_mode_switching(). */ + More details can be found in the code of optimize_mode_switching. */ /* This structure contains the information for each insn which requires either single or double mode to be set. diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/omp-low.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/omp-low.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/omp-low.c 2014-03-20 10:50:12.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/omp-low.c 2014-03-27 17:33:34.000000000 +0000 @@ -10124,7 +10124,20 @@ if ((ctx || task_shared_vars) && walk_gimple_op (stmt, lower_omp_regimplify_p, ctx ? NULL : &wi)) - gimple_regimplify_operands (stmt, gsi_p); + { + /* Just remove clobbers, this should happen only if we have + "privatized" local addressable variables in SIMD regions, + the clobber isn't needed in that case and gimplifying address + of the ARRAY_REF into a pointer and creating MEM_REF based + clobber would create worse code than we get with the clobber + dropped. */ + if (gimple_clobber_p (stmt)) + { + gsi_replace (gsi_p, gimple_build_nop (), true); + break; + } + gimple_regimplify_operands (stmt, gsi_p); + } break; } } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/optabs.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/optabs.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/optabs.c 2014-02-07 14:55:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/optabs.c 2014-04-02 10:43:28.000000000 +0000 @@ -3384,7 +3384,8 @@ { rtx temp; - if (! flag_trapv) + if (GET_MODE_CLASS (mode) != MODE_INT + || ! flag_trapv) result_unsignedp = 1; /* First try to do it with a special abs instruction. */ @@ -3407,7 +3408,8 @@ { rtx last = get_last_insn (); - temp = expand_unop (mode, neg_optab, op0, NULL_RTX, 0); + temp = expand_unop (mode, result_unsignedp ? neg_optab : negv_optab, + op0, NULL_RTX, 0); if (temp != 0) temp = expand_binop (mode, smax_optab, op0, temp, target, 0, OPTAB_WIDEN); @@ -3449,7 +3451,8 @@ { rtx temp, op1; - if (! flag_trapv) + if (GET_MODE_CLASS (mode) != MODE_INT + || ! flag_trapv) result_unsignedp = 1; temp = expand_abs_nojump (mode, op0, target, result_unsignedp); @@ -4753,6 +4756,43 @@ return 0; return 1; +} + +/* Generate and return an insn body to add Y to X. */ + +rtx +gen_addptr3_insn (rtx x, rtx y, rtx z) +{ + enum insn_code icode = optab_handler (addptr3_optab, GET_MODE (x)); + + gcc_assert (insn_operand_matches (icode, 0, x)); + gcc_assert (insn_operand_matches (icode, 1, y)); + gcc_assert (insn_operand_matches (icode, 2, z)); + + return GEN_FCN (icode) (x, y, z); +} + +/* Return true if the target implements an addptr pattern and X, Y, + and Z are valid for the pattern predicates. */ + +int +have_addptr3_insn (rtx x, rtx y, rtx z) +{ + enum insn_code icode; + + gcc_assert (GET_MODE (x) != VOIDmode); + + icode = optab_handler (addptr3_optab, GET_MODE (x)); + + if (icode == CODE_FOR_nothing) + return 0; + + if (!insn_operand_matches (icode, 0, x) + || !insn_operand_matches (icode, 1, y) + || !insn_operand_matches (icode, 2, z)) + return 0; + + return 1; } /* Generate and return an insn body to subtract Y from X. */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/optabs.def gcc-snapshot-20140405/=unpacked-tar1=/gcc/optabs.def --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/optabs.def 2014-01-05 19:58:11.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/optabs.def 2014-03-26 08:19:14.000000000 +0000 @@ -191,6 +191,7 @@ OPTAB_D (subv4_optab, "subv$I$a4") OPTAB_D (mulv4_optab, "mulv$I$a4") OPTAB_D (negv3_optab, "negv$I$a3") +OPTAB_D (addptr3_optab, "addptr$a3") OPTAB_D (smul_highpart_optab, "smul$a3_highpart") OPTAB_D (umul_highpart_optab, "umul$a3_highpart") diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/po/ChangeLog gcc-snapshot-20140405/=unpacked-tar1=/gcc/po/ChangeLog --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/po/ChangeLog 2014-03-20 10:50:24.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/po/ChangeLog 2014-03-31 14:27:30.000000000 +0000 @@ -1,3 +1,11 @@ +2014-03-31 Joseph Myers + + * sv.po: Update. + +2014-03-24 Joseph Myers + + * sv.po: Update. + 2014-03-17 Joseph Myers * sv.po: Update. diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/po/sv.po gcc-snapshot-20140405/=unpacked-tar1=/gcc/po/sv.po --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/po/sv.po 2014-03-20 10:50:24.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/po/sv.po 2014-03-31 14:27:30.000000000 +0000 @@ -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-16 11:02+0100\n" +"PO-Revision-Date: 2014-03-30 20:23+0200\n" "Last-Translator: Göran Uddeborg \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -15033,7 +15033,7 @@ #: cgraph.c:2820 #, gcc-internal-format msgid "Thunk is not supposed to have body" -msgstr "Snuttar skall inte ha en kropp" +msgstr "Snuttar får inte ha en kropp" #: cgraph.c:2856 #, gcc-internal-format @@ -27884,9 +27884,9 @@ msgstr "identifierare eller %<(%> förväntades" #: c/c-parser.c:3349 c/c-parser.c:3378 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "array notations cannot be used in declaration" -msgstr "Varna för föråldrad användning i en deklaration" +msgstr "vektornotation kan inte användas i en deklaration" #: c/c-parser.c:3517 #, gcc-internal-format @@ -28073,24 +28073,24 @@ msgstr "kan inte ta adressen till %qs" #: c/c-parser.c:6727 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "ISO C99 does not support %<_Generic%>" -msgstr "ISO C99 stödjer inte %<_Noreturn%>" +msgstr "ISO C99 stödjer inte %<_Generic%>" #: c/c-parser.c:6730 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "ISO C90 does not support %<_Generic%>" -msgstr "ISO C90 stödjer inte %<_Noreturn%>" +msgstr "ISO C90 stödjer inte %<_Generic%>" #: c/c-parser.c:6797 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<_Generic%> association has function type" -msgstr "typkonvertering anger funktionstyp" +msgstr "%<_Generic%>-association har funktionstyp" #: c/c-parser.c:6800 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<_Generic%> association has incomplete type" -msgstr "uttryckssats har ofullständig typ" +msgstr "%<_Generic%>-association har ofullständig typ" #: c/c-parser.c:6804 #, gcc-internal-format @@ -28103,9 +28103,9 @@ msgstr "dubblerat %-fall i %<_Generic%>" #: c/c-parser.c:6829 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "original % is here" -msgstr "ursprungligen definierad här" +msgstr "ursprungligt % finns här" #: c/c-parser.c:6837 #, gcc-internal-format @@ -28113,14 +28113,14 @@ msgstr "%<_Generic%> anger två kompatibla typer" #: c/c-parser.c:6838 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "compatible type is here" -msgstr "inkompatibla typer i send" +msgstr "kompatibla typen finns här" #: c/c-parser.c:6861 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<_Generic> selector matches multiple associations" -msgstr "Generera load/store multiple-instruktioner" +msgstr "%<_Generic%>-väljare matchar flera associationer" #: c/c-parser.c:6863 #, gcc-internal-format @@ -28288,14 +28288,14 @@ msgstr "%<#pragma omp taskyield%> får bara användas i sammansatta satser" #: c/c-parser.c:9433 cp/parser.c:31396 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<#pragma omp cancel%> may only be used in compound statements" -msgstr "%<#pragma omp taskyield%> får bara användas i sammansatta satser" +msgstr "%<#pragma omp cancel%> får bara användas i sammansatta satser" #: c/c-parser.c:9444 cp/parser.c:31412 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<#pragma omp cancellation point%> may only be used in compound statements" -msgstr "%<#pragma omp taskwait%> får bara användas i sammansatta satser" +msgstr "%<#pragma omp cancellation point%> får bara användas i sammansatta satser" #: c/c-parser.c:9464 cp/parser.c:31455 #, gcc-internal-format @@ -28303,9 +28303,9 @@ msgstr "%<#pragma omp section%> får bara användas i %<#pragma omp sections%>-konstruktion" #: c/c-parser.c:9479 cp/parser.c:31468 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "for, while or do statement expected" -msgstr "for-sats förväntades" +msgstr "for-, while- eller do-sats förväntades" #: c/c-parser.c:9491 cp/parser.c:31323 #, gcc-internal-format @@ -28359,19 +28359,19 @@ msgstr "ogiltig schedule-sort" #: c/c-parser.c:10410 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "% value must be positive" -msgstr "%-värdet måste vara positivt" +msgstr "%-värdet måste vara positivt" #: c/c-parser.c:10454 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "% value must be positive" -msgstr "%-värdet måste vara positivt" +msgstr "%-värdet måste vara positivt" #: c/c-parser.c:10496 cp/semantics.c:5589 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "% clause alignment expression must be positive constant integer expression" -msgstr "collapse-argument behöver ett positivt konstant heltalsuttryck" +msgstr "%-klausulens justeringsuttryck måste vara ett positivt konstant heltalsuttryck" #: c/c-parser.c:10533 cp/parser.c:27754 #, gcc-internal-format @@ -28379,49 +28379,49 @@ msgstr "att använda parametrar för %-steg stödjs inte än" #: c/c-parser.c:10538 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "% clause step expression must be integral" -msgstr "uttryck för styckesstorlek för schemaläggning måste vara heltal" +msgstr "%-klausulens steguttryck måste vara heltal" #: c/c-parser.c:10575 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "% clause expression must be positive constant integer expression" -msgstr "collapse-argument behöver ett positivt konstant heltalsuttryck" +msgstr "%-klausulens uttryck måste vara ett positivt konstant heltalsuttryck" #: c/c-parser.c:10611 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "% clause expression must be positive constant integer expression" -msgstr "collapse-argument behöver ett positivt konstant heltalsuttryck" +msgstr "%-klausulens uttryck måste vara ett positivt konstant heltalsuttryck" #: c/c-parser.c:10673 cp/parser.c:27875 cp/parser.c:28058 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid depend kind" -msgstr "ogiltig schedule-sort" +msgstr "ogiltig depend-sort" #: c/c-parser.c:10710 cp/parser.c:27915 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid map kind" -msgstr "ogiltigt mask" +msgstr "ogiltig map-sort" #: c/c-parser.c:10775 cp/parser.c:28005 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid dist_schedule kind" -msgstr "ogiltig schedule-sort" +msgstr "ogiltig dist_schedule-sort" #: c/c-parser.c:10844 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid proc_bind kind" -msgstr "ogiltig schedule-sort" +msgstr "ogiltig proc_bind-sort" #: c/c-parser.c:10999 cp/parser.c:28194 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qs must be the first clause of %qs" -msgstr "%qs måste användas tillsammans med %qs" +msgstr "%qs måste vara den första klausulen i %qs" #: c/c-parser.c:11091 cp/parser.c:28293 #, gcc-internal-format msgid "expected %<#pragma omp%> clause" -msgstr "förväntade %<#pragma omp%>-klausul" +msgstr "%<#pragma omp%>-klausul förväntades" #: c/c-parser.c:11102 cp/parser.c:28304 #, gcc-internal-format @@ -28439,9 +28439,9 @@ msgstr "ogiltig operator för %<#pragma omp atomic%>" #: c/c-parser.c:11507 cp/semantics.c:6574 cp/semantics.c:6584 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<#pragma omp atomic capture%> uses two different expressions for memory" -msgstr "%<#pragma omp atomic capture%> använder två olika variabler till minne" +msgstr "%<#pragma omp atomic capture%> använder två olika uttryck till minne" #: c/c-parser.c:11560 c/c-parser.c:11581 #, gcc-internal-format @@ -28474,19 +28474,19 @@ msgstr "iterationsvariabel %qD får inte vara firstprivate" #: c/c-parser.c:12219 cp/parser.c:29731 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "expected % after %qs" -msgstr "% förväntades" +msgstr "% förväntades efter %qs" #: c/c-parser.c:12411 cp/parser.c:29918 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "expected %" -msgstr "% förväntades" +msgstr "% förväntades" #: c/c-parser.c:12615 cp/parser.c:30140 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<#pragma omp target update%> may only be used in compound statements" -msgstr "%<#pragma omp taskwait%> får bara användas i sammansatta satser" +msgstr "%<#pragma omp target update%> får bara användas i sammansatta satser" #: c/c-parser.c:12628 cp/parser.c:30153 #, gcc-internal-format @@ -28499,9 +28499,9 @@ msgstr "%<#pragma omp declare simd%> måste följas av funktionsdeklaration eller -definition eller en annan %<#pragma omp declare simd%>" #: c/c-parser.c:12817 c/c-parser.c:12845 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<#pragma omp declare simd%> must be followed by function declaration or definition" -msgstr "%<#pragma align%> måste förekomma före deklarationen av %D, ignorerar" +msgstr "%<#pragma omp declare simd%> måste följas av en funktionsdeklaration eller -definition" #: c/c-parser.c:12864 cp/parser.c:30326 #, gcc-internal-format @@ -28519,29 +28519,29 @@ msgstr "%<#pragma omp declare simd%> som inte omedelbart flöjs av en ensam funktionsdeklaration eller -definition" #: c/c-parser.c:12983 cp/parser.c:30450 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "expected %" -msgstr "% förväntades" +msgstr "% förväntades" #: c/c-parser.c:12990 cp/parser.c:30457 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "expected %" -msgstr "% förväntades" +msgstr "% förväntades" #: c/c-parser.c:12996 cp/parser.c:30464 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<#pragma omp end declare target%> without corresponding %<#pragma omp declare target%>" -msgstr "%<#pragma GCC pop_options%> utan en motsvarande %<#pragma GCC push_options%>" +msgstr "%<#pragma omp end declare target%> utan en motsvarande %<#pragma omp declare target%>" #: c/c-parser.c:13024 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<#pragma omp declare reduction%> not at file or block scope" -msgstr "en malldeklaration får inte förekomma på blocknivå" +msgstr "%<#pragma omp declare reduction%> inte på file- eller blockräckvidd" #: c/c-parser.c:13074 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%>, % or identifier" -msgstr "%<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%>, % eller % förväntades" +msgstr "%<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%>, % eller identifierare förväntades" #: c/c-parser.c:13101 #, gcc-internal-format @@ -28564,19 +28564,19 @@ msgstr "omdeklaration av %qs %<#pragma omp declare reduction%> för typen %qT" #: c/c-parser.c:13125 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "previous %<#pragma omp declare reduction%>" -msgstr "tidigare deklaration" +msgstr "tidigare %<#pragma omp declare reduction%>" #: c/c-parser.c:13242 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "expected % or function-name" -msgstr "%<(%> eller filslut förväntades" +msgstr "% eller funktionsnamn förväntades" #: c/c-parser.c:13253 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "expected function-name %<(%>" -msgstr "en funktion förväntades" +msgstr "funktionsnamn %<(%> förväntades" #: c/c-parser.c:13268 #, gcc-internal-format @@ -28584,9 +28584,9 @@ msgstr "en av initierarens anropsargument skall vara %<&omp_priv%>" #: c/c-parser.c:13388 cp/parser.c:30900 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "expected % or % or %" -msgstr "%<#pragma omp section%> eller %<}%> förväntades" +msgstr "% eller % eller % förväntades" #: c/c-parser.c:13491 #, gcc-internal-format @@ -28614,29 +28614,29 @@ msgstr "pragma simd ignoreras för att -fcilkplus inte är aktiverat" #: c/c-parser.c:13536 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "pragma simd must be inside a function" -msgstr "#pragma GCC optimize tillåts inte inuti funktioner" +msgstr "pragma simd måste vara inuti en funktion" #: c/c-parser.c:13580 cp/parser.c:31586 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "vectorlength must be an integer constant" -msgstr "selektor måste vara en heltalskonstant i intervallet 0..%wi" +msgstr "vektorlängd måste vara en heltalskonstant" #: c/c-parser.c:13582 cp/parser.c:31589 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "vectorlength must be a power of 2" -msgstr "stackstorlek måste vara en exakt potens av 2" +msgstr "vektorlängd måste vara en potens av 2" #: c/c-parser.c:13665 cp/parser.c:31696 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "step size must be an integer constant expression or an integer variable" -msgstr "selektor måste vara en heltalskonstant i intervallet 0..%wi" +msgstr "stegstorleken måste vara ett konstant heltalsuttryck eller en heltalsvariabel" #: c/c-parser.c:13764 cp/parser.c:31789 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "expected %<#pragma simd%> clause" -msgstr "förväntade %<#pragma omp%>-klausul" +msgstr "%<#pragma simd%>-klausul förväntades" #: c/c-parser.c:13966 cp/parser.c:31218 #, gcc-internal-format @@ -28664,9 +28664,9 @@ msgstr "%<__transaction_cancel%> inte inom %<__transaction_atomic%>" #: c/c-parser.c:14059 cp/parser.c:6263 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "expected %<:%> or numeral" -msgstr "%<:%> eller %<::%> förväntades" +msgstr "%<:%> eller tal förväntades" #: c/c-parser.c:14070 #, gcc-internal-format @@ -28674,9 +28674,9 @@ msgstr "startindex och längdfält är nödvändiga för att använda vektornotationer i pekare" #: c/c-parser.c:14077 c/c-parser.c:14120 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "array notations cannot be used with function type" -msgstr "new kan inte användas på en funktionstyp" +msgstr "vektornotationer kan inte användas med en funktionstyp" #: c/c-parser.c:14086 #, gcc-internal-format @@ -28689,9 +28689,9 @@ msgstr "startindex och längdfält är nödvändiga för att använda vektornotationer i vektorer med variabel längd" #: c/c-parser.c:14148 c/c-parser.c:14151 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "expected array notation expression" -msgstr "booleskt uttryck förväntades" +msgstr "vektornotationsuttryck förväntades" #: c/c-typeck.c:220 #, gcc-internal-format @@ -28795,9 +28795,9 @@ msgstr "derefererar %-pekare" #: c/c-typeck.c:2434 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "rank of the array's index is greater than 1" -msgstr "justeringen av vektorelement är större än elementstorleken" +msgstr "ordningen på vektorns index är större än 1" #: c/c-typeck.c:2448 #, gcc-internal-format @@ -28953,9 +28953,9 @@ msgstr "pekare till funktion använd i subtraktion" #: c/c-typeck.c:3515 cp/typeck.c:5054 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "arithmetic on pointer to an empty aggregate" -msgstr "aritmetik på pekare till ofullständig typ" +msgstr "aritmetik på pekare till ett tomt aggregat" #: c/c-typeck.c:3829 #, gcc-internal-format @@ -29078,9 +29078,9 @@ msgstr "vänster operand av kommauttryck har ingen effekt" #: c/c-typeck.c:4777 c/c-typeck.c:9666 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "right-hand operand of comma expression has no effect" -msgstr "vänster operand av kommauttryck har ingen effekt" +msgstr "höger operand av kommauttryck har ingen effekt" #: c/c-typeck.c:4846 msgid "cast adds %q#v qualifier to function type" @@ -29171,9 +29171,9 @@ msgstr "definition av en typ i en typkonvertering är ogiltigt i C++" #: c/c-typeck.c:5214 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "assignment to expression with array type" -msgstr "utelämnad tilldelning" +msgstr "tilldelning till uttryck med vektortyp" #: c/c-typeck.c:5338 c/c-typeck.c:5672 #, gcc-internal-format @@ -29628,14 +29628,14 @@ msgstr "funktion deklarerad % har en %-sats" #: c/c-typeck.c:9132 cp/cp-array-notation.c:1088 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "array notation expression cannot be used as a return value" -msgstr "uttryck kan inte användas som en funktion" +msgstr "vektornotationsuttryck kan inte användas som ett returvärde" #: c/c-typeck.c:9139 cp/typeck.c:8333 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "use of %<_Cilk_spawn%> in a return statement is not allowed" -msgstr "Logiskt intervall CASE-sats vid %L är inte tillåtet" +msgstr "användning av %<_Cilk_spawn%> i en retursats är inte tillåtet" #: c/c-typeck.c:9164 #, gcc-internal-format @@ -29698,9 +29698,9 @@ msgstr "föreslår uttryckliga klamrar för att undvika tvetydighet i %" #: c/c-typeck.c:9515 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "array notation expression cannot be used in a loop%'s condition" -msgstr "uttryck kan inte användas som en funktion" +msgstr "vektornotationsuttryck kan inte användas i en slingas villkor" #: c/c-typeck.c:9609 cp/parser.c:10626 #, gcc-internal-format @@ -29718,14 +29718,14 @@ msgstr "break-sats använd med OpenMP-for-slinga" #: c/c-typeck.c:9621 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "break statement within %<#pragma simd%> loop body" -msgstr "break-sats som inte är i en loop eller switch" +msgstr "break-sats i en %<#pragma simd%>-slingas kropp" #: c/c-typeck.c:9623 cp/parser.c:10656 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "continue statement within %<#pragma simd%> loop body" -msgstr "continue-sats som inte är i en loop" +msgstr "continue-sats i en %<#pragma simd%>-slingas kropp" #: c/c-typeck.c:9649 cp/cp-gimplify.c:438 #, gcc-internal-format @@ -29839,31 +29839,31 @@ msgstr "%<#pragma omp cancellation point måste ange en av klausulerna %, %, % eller %" #: c/c-typeck.c:11269 cp/semantics.c:4222 cp/semantics.c:5655 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qD is not a variable in %qs clause" -msgstr "%qD är inte en variabel i klausul %qs" +msgstr "%qD är inte en variabel i en %qs-klausul" #: c/c-typeck.c:11273 c/c-typeck.c:12044 cp/semantics.c:4226 #: cp/semantics.c:5658 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qE is not a variable in %qs clause" -msgstr "%qE är inte en variabel i klausul %qs" +msgstr "%qE är inte en variabel i en %qs-klausul" #: c/c-typeck.c:11281 c/c-typeck.c:12051 cp/semantics.c:4234 #: cp/semantics.c:5664 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qD is threadprivate variable in %qs clause" -msgstr "%qD är inte en variabel i klausul %qs" +msgstr "%qD är en trådprivat variabel i en %qs-klausul" #: c/c-typeck.c:11303 cp/semantics.c:4260 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "low bound %qE of array section does not have integral type" -msgstr "storlek i vektor-new måste ha heltalstyp" +msgstr "undre gränsen %qE i vektorsektion har inte heltalstyp" #: c/c-typeck.c:11310 cp/semantics.c:4267 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "length %qE of array section does not have integral type" -msgstr "storlek i vektor-new måste ha heltalstyp" +msgstr "längden %qE i vektorsektion har inte heltalstyp" #: c/c-typeck.c:11342 cp/semantics.c:4299 #, gcc-internal-format @@ -29876,9 +29876,9 @@ msgstr "negativ nedre gräns i vektorsektion i %qs-klausul" #: c/c-typeck.c:11359 cp/semantics.c:4316 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "negative length in array section in %qs clause" -msgstr "vektor med variabel längd används" +msgstr "negativ längd i vektorsektion i en %qs-klausul" #: c/c-typeck.c:11376 cp/semantics.c:4333 #, gcc-internal-format @@ -29896,20 +29896,20 @@ msgstr "övre gräns %qE ovanför storleken på vektorsektionen i en %qs-klausul" #: c/c-typeck.c:11447 cp/semantics.c:4404 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "for pointer type length expression must be specified" -msgstr "for-ökningsuttryck har ingen effekt" +msgstr "för pekartyper måste ett längduttryck anges" #: c/c-typeck.c:11456 c/c-typeck.c:11571 cp/semantics.c:4413 #: cp/semantics.c:4524 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "array section is not contiguous in %qs clause" -msgstr "Kopiera vektorsektioner till sammanhängande block vid procedurstart" +msgstr "vektorsektionen är inte sammanhängande i %qs-klausulen" #: c/c-typeck.c:11464 cp/semantics.c:4421 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qE does not have pointer or array type" -msgstr "%qD har inte heltals- eller uppräkningstyp" +msgstr "%qE har inte pekar- eller vektortyp" #: c/c-typeck.c:11784 #, gcc-internal-format @@ -29957,54 +29957,54 @@ msgstr "%qE är inte en variabel i klausul %" #: c/c-typeck.c:11975 cp/semantics.c:5545 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qE is not a variable in % clause" -msgstr "%qE är inte en variabel i klausul %qs" +msgstr "%qE är inte en variabel i %-klausul" #: c/c-typeck.c:11982 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qE in % clause is neither a pointer nor an array" -msgstr "typ till vektor-delete är varken pekar- eller vektortyp" +msgstr "%qE i %-klausul är varken en pekare eller en vektor" #: c/c-typeck.c:11989 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qE appears more than once in % clauses" -msgstr "%qE förekommer mer än en gång i dataklausuler" +msgstr "%qE förekommer mer än en gång i %-klausuler" #: c/c-typeck.c:12010 cp/semantics.c:5615 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qE is not a variable in % clause" -msgstr "%qE är inte en variabel i klausul %qs" +msgstr "%qE är inte en variabel i en %-klausul" #: c/c-typeck.c:12031 cp/semantics.c:5637 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "array section does not have mappable type in %qs clause" -msgstr "En vektorsektion är inte tillåten i anrop av ”%s” vid %L" +msgstr "vektorsektionen har inte en avbildbar typ i %qs-klausulen" #: c/c-typeck.c:12062 cp/semantics.c:5680 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qD does not have a mappable type in %qs clause" -msgstr "%qD är inte en variabel i klausul %qs" +msgstr "%qD har inte en avbildbar typ i %qs-klausul" #: c/c-typeck.c:12069 cp/semantics.c:5687 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qD appears more than once in motion clauses" -msgstr "%qD förekommer mer än en gång i dataklausuler" +msgstr "%qD förekommer mer än en gång i rörelseklausuler" #: c/c-typeck.c:12071 cp/semantics.c:5689 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qD appears more than once in map clauses" -msgstr "%qD förekommer mer än en gång i dataklausuler" +msgstr "%qD förekommer mer än en gång i avbildningsklausuler" #: c/c-typeck.c:12084 cp/semantics.c:5703 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qD is not an argument in % clause" -msgstr "%qD är inte en variabel i klausul %qs" +msgstr "%qD är inte en ett argument i en %-klausul" #: c/c-typeck.c:12087 cp/semantics.c:5705 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qE is not an argument in % clause" -msgstr "%qE är inte en variabel i klausul %qs" +msgstr "%qE är inte ett argument i en %-klausul" #: c/c-typeck.c:12134 cp/semantics.c:5728 #, gcc-internal-format @@ -30343,9 +30343,9 @@ msgstr "ogiltig konvertering från %qT till %qT" #: cp/call.c:5975 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "initializing argument %P of %qD" -msgstr " initierar argument %P till %qD" +msgstr "initierar argument %P till %qD" #: cp/call.c:6000 #, gcc-internal-format @@ -30353,9 +30353,9 @@ msgstr "att konvertera till %qT från initierarlista skulle använda den explicita konstrueraren %qD" #: cp/call.c:6080 cp/call.c:6219 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "initializing argument %P of %q+D" -msgstr " initierar argument %P till %q+D" +msgstr "initierar argument %P till %q+D" #: cp/call.c:6202 #, gcc-internal-format @@ -30449,9 +30449,9 @@ msgstr "kunde inte hitta class$-fält i java-gränssnittstyp %qT" #: cp/call.c:7524 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "constructor delegates to itself" -msgstr "konstant refererar till sig själv" +msgstr "konstruerare delegerar till sig själv" #: cp/call.c:7614 #, gcc-internal-format @@ -30464,9 +30464,9 @@ msgstr "kan inte anropa konstrueraren %<%T::%D%> direkt" #: cp/call.c:7662 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "for a function-style cast, remove the redundant %<::%D%>" -msgstr " för en typkonvertering i funktionsstil, ta bort det överflödiga %<::%D%>" +msgstr "för en typkonvertering i funktionsstil, ta bort det överflödiga %<::%D%>" #: cp/call.c:7783 #, gcc-internal-format @@ -30554,24 +30554,24 @@ msgstr "ogiltig initiering av referens av typ %qT från uttryck av typ %qT" #: cp/class.c:302 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "cannot convert from pointer to base class %qT to pointer to derived class %qT because the base is virtual" -msgstr "kan inte konvertera från basen %qT till härledd typ %qT via virtuell bas %qT" +msgstr "kan inte konvertera från pekare till basklassen %qT till pekare till den härledda klassen %qT eftersom basen är virtuell" #: cp/class.c:306 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "cannot convert from base class %qT to derived class %qT because the base is virtual" -msgstr "kan inte konvertera från basen %qT till härledd typ %qT via virtuell bas %qT" +msgstr "kan inte konvertera från basklassen %qT till den härledda klassen %qT eftersom basen är virtuell" #: cp/class.c:313 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "cannot convert from pointer to base class %qT to pointer to derived class %qT via virtual base %qT" -msgstr "kan inte konvertera från basen %qT till härledd typ %qT via virtuell bas %qT" +msgstr "kan inte konvertera från pekare till basklassen %qT till pekare till den härledda klassen %qT via den virtuella basen %qT" #: cp/class.c:318 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "cannot convert from base class %qT to derived class %qT via virtual base %qT" -msgstr "kan inte konvertera från basen %qT till härledd typ %qT via virtuell bas %qT" +msgstr "kan inte konvertera från basklassen %qT till den härledda klassen %qT via den virtuella basen %qT" #: cp/class.c:1022 #, gcc-internal-format @@ -30810,14 +30810,14 @@ msgstr "ignorerar attributet packed på grund av opackat icke-POD-fält %q+#D" #: cp/class.c:3594 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "member %q+D cannot be declared both % and %" -msgstr "icke-medlem %qs kan inte deklareras %" +msgstr "medlemmen %q+D kan inte både deklareras % och %" #: cp/class.c:3600 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "member %q+D cannot be declared as a % reference" -msgstr "icke-medlem %qs kan inte deklareras %" +msgstr "medlem %q+D kan inte deklareras som en % referens" #: cp/class.c:3659 #, gcc-internal-format @@ -31047,9 +31047,9 @@ msgstr "byter betydelse av %qD från %q+#D" #: cp/cp-array-notation.c:605 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qD cannot be scalar when %qD is not" -msgstr "%q+#D kan inte deklareras" +msgstr "%qD kan inte vara en skalär när %qD inte är det" #: cp/cp-array-notation.c:818 cp/cp-array-notation.c:824 #: cp/cp-array-notation.c:849 cp/cp-array-notation.c:855 @@ -31088,9 +31088,9 @@ msgstr "startindex och längdfält är nödvändiga för att använda vektornotation med vektorer med okänd gräns" #: cp/cp-array-notation.c:1422 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "array notation cannot be used with function type" -msgstr "new kan inte användas på en funktionstyp" +msgstr "vektornotation kan inte användas användas med en funktionstyp" #: cp/cp-array-notation.c:1432 #, gcc-internal-format @@ -31108,14 +31108,14 @@ msgstr "ordningen på en vektornotations trippels steg är inte noll" #: cp/cp-cilkplus.c:53 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "throw expressions are not allowed inside loops marked with pragma simd" -msgstr "satsuttryck är inte tillåtna utanför funktioner eller i mallargumentlistor" +msgstr "throw-uttryck är inte tillåtna inuti slingor markerade med pragma simd" #: cp/cp-cilkplus.c:60 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "try statements are not allowed inside loops marked with #pragma simd" -msgstr "%s-sats är inte tillåten inuti BLOCK vid %C" +msgstr "try-satser är inte tillåtna inuti slingor markerade med #pragma simd" #: cp/cp-gimplify.c:1600 #, gcc-internal-format @@ -31443,9 +31443,9 @@ msgstr "konvertera av NULL till icke-pekartyp" #: cp/cvt.c:1644 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "default type conversion can't deduce template argument for %qD" -msgstr " kunde inte härleda mallparametrar %qD" +msgstr "standardtypkonvertering kan inte härleda mallargumentet för %qD" #: cp/cvt.c:1659 #, gcc-internal-format @@ -31514,9 +31514,9 @@ msgstr "funktionen %q+D omdeklarerad som ”inline”" #: cp/decl.c:1304 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "previous declaration of %qD with attribute noinline" -msgstr "tidigare deklaration av %q+D med attributet noinline" +msgstr "tidigare deklaration av %qD med attributet noinline" #: cp/decl.c:1311 #, gcc-internal-format @@ -31524,9 +31524,9 @@ msgstr "funktionen %q+D omdeklarerad med attributet noinline" #: cp/decl.c:1314 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "previous declaration of %qD was inline" -msgstr "tidigare deklaration av %q+D var inline" +msgstr "tidigare deklaration av %qD var inline" #: cp/decl.c:1338 cp/decl.c:1415 #, gcc-internal-format @@ -31544,24 +31544,24 @@ msgstr "biblioteksfunktion %q#D omdeklarerad som icke-funktion %q#D" #: cp/decl.c:1349 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "declaration of %q#D conflicts with built-in declaration %q#D" -msgstr "står i konflikt med inbyggd deklaration %q#D" +msgstr "deklaration av %q#D står i konflikt med inbyggd deklaration %q#D" #: cp/decl.c:1357 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "redeclaration of %" -msgstr "deklaration av %qD skuggar en global deklaration" +msgstr "omdeklaration av %" #: cp/decl.c:1359 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "previous % declaration" -msgstr "tidigare icke-funktions-deklaration av %q+#D" +msgstr "tidigare %-deklaration" #: cp/decl.c:1410 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "new declaration %q#D ambiguates built-in declaration %q#D" -msgstr "gör inbyggd deklaration %q#D tvetydig" +msgstr "ny deklaration av %q#D gör inbyggd deklaration %q#D tvetydig" #: cp/decl.c:1501 #, gcc-internal-format @@ -31569,34 +31569,34 @@ msgstr "%q#D omdeklarerad som en annan sorts symbol" #: cp/decl.c:1505 cp/decl.c:1526 cp/decl.c:1553 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "previous declaration %q#D" -msgstr "tidigare deklaration %q+#D" +msgstr "tidigare deklaration %q#D" #: cp/decl.c:1524 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "conflicting declaration of template %q#D" -msgstr "omdeklaration av mallen %q#D" +msgstr "motstridig deklaration av mallen %q#D" #: cp/decl.c:1540 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "ambiguating new declaration %q#D" -msgstr "gör gammal deklaration %q+#D tvetydig" +msgstr "ny deklaration %q#D som skapar tvetydighet" #: cp/decl.c:1542 cp/decl.c:1565 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "old declaration %q#D" -msgstr "global deklaration av %q+#D" +msgstr "gammal deklaration av %q#D" #: cp/decl.c:1550 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "conflicting declaration of C function %q#D" -msgstr "motstridande deklaration av %q#D" +msgstr "motstridande deklaration av C-funktionen %q#D" #: cp/decl.c:1563 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "ambiguating new declaration of %q#D" -msgstr "gör gammal deklaration %q+#D tvetydig" +msgstr "ny deklaration av %q#D som skapar tvetydighet" #: cp/decl.c:1573 #, gcc-internal-format @@ -31604,9 +31604,9 @@ msgstr "motstridande deklaration av %q#D" #: cp/decl.c:1575 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "previous declaration as %q#D" -msgstr "tidigare deklaration %q+#D" +msgstr "tidigare deklaration som %q#D" #. [namespace.alias] #. @@ -31616,14 +31616,14 @@ #. declared as the name of any other entity in any global scope #. of the program. #: cp/decl.c:1627 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "conflicting declaration of namespace %qD" -msgstr "motstridande deklaration av %q#D" +msgstr "motstridande deklaration av namnrymden %qD" #: cp/decl.c:1629 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "previous declaration of namespace %qD here" -msgstr "tidigare deklaration av namnrymden %q+D här" +msgstr "tidigare deklaration av namnrymden %qD här" #: cp/decl.c:1641 #, gcc-internal-format @@ -31636,29 +31636,29 @@ msgstr "%q+#D tidigare deklarerad här" #: cp/decl.c:1652 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "prototype specified for %q#D" -msgstr "prototyp för %q+#D" +msgstr "prototyp angiven för %q#D" #: cp/decl.c:1654 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "previous non-prototype definition here" -msgstr "följer på definition som inte är en prototyp här" +msgstr "tidigare definition som inte är en prototyp här" #: cp/decl.c:1693 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "conflicting declaration of %q#D with %qL linkage" -msgstr "står i konflikt med ny deklaration med länkklass %qL" +msgstr "motstridig deklaration av %q#D med länkklass %qL" #: cp/decl.c:1696 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "previous declaration with %qL linkage" -msgstr "tidigare deklaration av %q+#D med länkklass %qL" +msgstr "tidigare deklaration med länkklass %qL" #: cp/decl.c:1723 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "redeclaration of %q#D may not have default arguments" -msgstr "omdeklaration av vän %q#D kan inte ha standardmallargument" +msgstr "omdeklaration av %q#D kan inte ha standardargument" #: cp/decl.c:1738 cp/decl.c:1746 #, gcc-internal-format @@ -31666,9 +31666,9 @@ msgstr "standardargumentet angivet för parameter %d till %q#D" #: cp/decl.c:1741 cp/decl.c:1749 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "previous specification in %q#D here" -msgstr "efter tidigare specifikation i %q+#D" +msgstr "tidigare specifikation i %q#D här" #: cp/decl.c:1812 #, gcc-internal-format @@ -31676,9 +31676,9 @@ msgstr "överflödig omdeklaration av %qD i samma definitionsområde" #: cp/decl.c:1815 cp/decl.c:1825 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "previous declaration of %qD" -msgstr "tidigare deklaration av %q+D" +msgstr "tidigare deklaration av %qD" #: cp/decl.c:1823 #, gcc-internal-format @@ -32381,9 +32381,9 @@ msgstr "% är inte tillåtet i deklaration av vänmallspecialisering %qD" #: cp/decl.c:7499 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "% is not allowed in declaration of friend template specialization %qD" -msgstr "% är inte tillåtet i deklaration av vänmallspecialisering %qD" +msgstr "% är inte tillåtet i deklaration av vänmallspecialisering %qD" #: cp/decl.c:7543 #, gcc-internal-format @@ -32396,9 +32396,9 @@ msgstr "det går inte att deklarera %<::main%> som inline" #: cp/decl.c:7547 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "cannot declare %<::main%> to be constexpr" -msgstr "det går inte att deklarera %<::main%> som inline" +msgstr "det går inte att deklarera %<::main%> som constexpr" #: cp/decl.c:7549 #, gcc-internal-format @@ -32431,14 +32431,14 @@ msgstr "icke-medlemsfunktion %qD kan inte ha cv-kvalificerare" #: cp/decl.c:7620 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "static member function %qD cannot have ref-qualifier" -msgstr "statisk medlemsfunktion %qD kan inte ha cv-kvalificerare" +msgstr "statisk medlemsfunktion %qD kan inte ha ref-kvalificerare" #: cp/decl.c:7621 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "non-member function %qD cannot have ref-qualifier" -msgstr "icke-medlemsfunktion %qD kan inte ha cv-kvalificerare" +msgstr "icke-medlemsfunktion %qD kan inte ha ref-kvalificerare" #: cp/decl.c:7638 #, gcc-internal-format @@ -32650,9 +32650,9 @@ msgstr "flerdimensionell vektor måste ha gränser för alla dimensioner utom den första" #: cp/decl.c:8578 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "array of array of runtime bound" -msgstr "skapar vektor av funktioner" +msgstr "vektor av vektor av körtidsgräns" #: cp/decl.c:8609 #, gcc-internal-format @@ -32905,14 +32905,14 @@ msgstr "funktionen %qs använder typspecificeraren % utan avslutande returtyp" #: cp/decl.c:9611 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "deduced return type only available with -std=c++1y or -std=gnu++1y" -msgstr "avslutande returtyp är endast tillgänglig med -std=c++11 eller -std=gnu++11" +msgstr "härledd returtyp är endast tillgänglig med -std=c++1y eller -std=gnu++1y" #: cp/decl.c:9616 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "virtual function cannot have deduced return type" -msgstr "virtuella funktioner kan inte vara vänner" +msgstr "en virtuell funktion kan inte ha härledd returtyp" #: cp/decl.c:9621 #, gcc-internal-format @@ -32952,9 +32952,9 @@ msgstr "konstruerare får inte vara cv-kvalificerade" #: cp/decl.c:9683 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "destructors may not be ref-qualified" -msgstr "destruerare får inte vara cv-kvalificerade" +msgstr "destruerare får inte vara ref-kvalificerade" #: cp/decl.c:9701 #, gcc-internal-format @@ -33013,14 +33013,14 @@ msgstr "det går inte att deklarera en pekare till en kvalificerad funktionstyp %qT" #: cp/decl.c:9829 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "reference to array of runtime bound" -msgstr "Vektorreferens utanför gränserna" +msgstr "referens till vektor av körtidsgräns" #: cp/decl.c:9830 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "pointer to array of runtime bound" -msgstr "pekare till funktion använd i subtraktion" +msgstr "pekare till vektor av körtidsgräns" #: cp/decl.c:9899 #, gcc-internal-format @@ -33125,9 +33125,9 @@ msgstr "typedef deklarerad %" #: cp/decl.c:10176 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "typedef naming array of runtime bound" -msgstr "skapar vektor av funktioner" +msgstr "typedef som namnger vektor av körtidsgräns" #: cp/decl.c:10184 #, gcc-internal-format @@ -33185,9 +33185,9 @@ msgstr "det går inte att använda %<::%> i parameterdeklaration" #: cp/decl.c:10420 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "% parameter not permitted in this context" -msgstr "% kan inte användas i detta sammanhang" +msgstr "en %-parameter är tillåten i detta sammanhang" #: cp/decl.c:10422 #, gcc-internal-format @@ -33241,9 +33241,9 @@ msgstr "kvalificerat namn förväntades i vändeklaration för konstruerare %qD" #: cp/decl.c:10608 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "field %qD has incomplete type %qT" -msgstr "fält %qD har ofullständig typ" +msgstr "fältet %qD har den ofullständiga typen %qT" #: cp/decl.c:10611 #, gcc-internal-format @@ -33685,9 +33685,9 @@ msgstr "överspill i uppräkningsvärden vid %qD" #: cp/decl.c:12960 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "enumerator value %E is outside the range of underlying type %<%T%>" -msgstr "uppräkningsvärde %E är för stort för den underliggande typen %<%T%>" +msgstr "uppräkningsvärdet %E är utanför intervallet för den underliggande typen %<%T%>" #: cp/decl.c:13050 #, gcc-internal-format @@ -33883,9 +33883,9 @@ msgstr "bredden på bitfältet %qD har icke-heltalstyp %qT" #: cp/decl2.c:1388 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%q+D static data member inside of declare target directive" -msgstr "%qD är inte en statisk datamedlem i en klassmall" +msgstr "den statiska datamedlemmen %q+D är inuti deklarationsmålsdirektiv" #: cp/decl2.c:1438 #, gcc-internal-format @@ -34009,9 +34009,9 @@ msgstr "lambdauttryck är endast tillgängliga med -std=c++11 eller -std=gnu++11" #: cp/error.c:3494 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "C++11 auto only available with -std=c++11 or -std=gnu++11" -msgstr "C++0x auto är endast tillgängligt med -std=c++11 eller -std=gnu++11" +msgstr "C++11 auto är endast tillgängligt med -std=c++11 eller -std=gnu++11" #: cp/error.c:3498 #, gcc-internal-format @@ -34059,9 +34059,9 @@ msgstr "c++11-attribut är endast tillgängligt med -std=c++11 eller -std=gnu++11" #: cp/error.c:3542 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "ref-qualifiers only available with -std=c++11 or -std=gnu++11" -msgstr "användardefinierade literaler är endast tillgängliga med -std=c++11 eller -std=gnu++11" +msgstr "ref-kvalificerare är endast tillgängliga med -std=c++11 eller -std=gnu++11" #: cp/error.c:3591 #, gcc-internal-format @@ -34136,14 +34136,14 @@ msgstr "det går inte att deklarera en fångstparameter att vara av rvalue-referenstyp %qT" #: cp/except.c:994 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "cannot throw expression of type %qT because it involves types of variable size" -msgstr "det går inte att skapa typinformation för typen %qT eftersom typer av variabel storlek är inblandade" +msgstr "det går inte att kasta ett uttryck av typen %qT eftersom typer av variabel storlek är inblandade" #: cp/except.c:997 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "cannot catch type %qT because it involves types of variable size" -msgstr "det går inte att skapa typinformation för typen %qT eftersom typer av variabel storlek är inblandade" +msgstr "det går inte att fånga typen %qT eftersom typer av variabel storlek är inblandade" #: cp/except.c:1083 #, gcc-internal-format @@ -34430,14 +34430,14 @@ msgstr "oinitierad referensmedlem i %q#T" #: cp/init.c:2143 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "uninitialized reference member in base %q#T of %q#T using % without new-initializer" -msgstr "oinitierad referensmedlem i %q#T använder % utan new-initierare" +msgstr "oinitierad referensmedlem i basen %q#T till %q#T använder % utan new-initierare" #: cp/init.c:2147 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "uninitialized reference member in base %q#T of %q#T" -msgstr "oinitierad referensmedlem i %q#T" +msgstr "oinitierad referensmedlem i basen %q#T till %q#T" #: cp/init.c:2163 #, gcc-internal-format @@ -34450,14 +34450,14 @@ msgstr "oinitierad const-medlem i %q#T" #: cp/init.c:2171 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "uninitialized const member in base %q#T of %q#T using % without new-initializer" -msgstr "oinitierad const-medlem i %q#T använder % utan new-initierare" +msgstr "oinitierad const-medlem i basen %q#T till %q#T använder % utan new-initierare" #: cp/init.c:2175 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "uninitialized const member in base %q#T of %q#T" -msgstr "oinitierad const-medlem i %q#T" +msgstr "oinitierad const-medlem i basen %q#T till %q#T" #: cp/init.c:2317 #, gcc-internal-format @@ -34490,9 +34490,9 @@ msgstr "oinitierad const i % av %q#T" #: cp/init.c:2477 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qT isn%'t a valid Java class type" -msgstr "inte en giltig Java-.class-fil." +msgstr "%qT är inte en giltig Javaklasstyp" #: cp/init.c:2490 #, gcc-internal-format @@ -34545,14 +34545,14 @@ msgstr "kan inte hitta % i %qT" #: cp/init.c:3158 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "possible problem detected in invocation of delete [] operator:" -msgstr "möjligt problem upptäckt vid anrop av delete-operatorn:" +msgstr "möjligt problem upptäckt vid anrop av operatorn delete []:" #: cp/init.c:3162 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "neither the destructor nor the class-specific operator delete [] will be called, even if they are declared when the class is defined" -msgstr "varken destrueraren eller den klasspecifika operatorn delete kommer anropas, även om de är deklarerade när klassen definieras" +msgstr "varken destrueraren eller den klasspecifika operatorn delete [] kommer anropas, även om de är deklarerade när klassen definieras" #: cp/init.c:3661 #, gcc-internal-format @@ -34572,7 +34572,7 @@ #: cp/init.c:3913 #, gcc-internal-format msgid "possible problem detected in invocation of delete operator:" -msgstr "möjligt problem upptäckt vid anrop av delete-operatorn:" +msgstr "möjligt problem upptäckt vid anrop av operatorn delete:" #: cp/init.c:3918 #, gcc-internal-format @@ -34600,14 +34600,14 @@ msgstr "vektor- och körtidsgränser kan inte fångas av kopiering, endast via referens" #: cp/lambda.c:473 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "capture of variable-size type %qT that is not a C++1y array of runtime bound" -msgstr " vektortypen %qT med variabel storlek är inte ett giltigt mallargument" +msgstr "fångst av typen %qT med variabel storlek som inte är en C++1y-vektor av körtidsgräns" #: cp/lambda.c:477 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "because the array element type %qT has variable size" -msgstr "sammansatt literal har variabel storlek" +msgstr "eftersom vektorelementtypen %qT har variabel storlek" #: cp/lambda.c:485 #, gcc-internal-format @@ -34775,9 +34775,9 @@ msgstr "den standarddefinierade standardkonstrueraren initierar inte %q+#D" #: cp/method.c:1128 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "copying non-static data member %q#D of rvalue reference type" -msgstr "icke-statisk datamedlem %qD har Javaklasstyp" +msgstr "kopierar icke-statisk datamedlem %q#D med rvärdereferenstyp" #. A trivial constructor doesn't have any NSDMI. #: cp/method.c:1286 @@ -34825,9 +34825,9 @@ msgstr "stämmer inte med förväntad signatur %qD" #: cp/method.c:1814 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "function %q+D defaulted on its redeclaration with an exception-specification that differs from the implicit declaration %q#D" -msgstr "funktionen %q+D standarddefinierades i sin första deklaration med en undantagsspecifikation som skiljer från den implicita deklarationen %q#D" +msgstr "funktionen %q+D standarddefinierades i sin omdeklaration med en undantagsspecifikation som skiljer från den implicita deklarationen %q#D" #: cp/method.c:1838 #, gcc-internal-format @@ -35358,9 +35358,9 @@ msgstr "(kanske % avsågs)" #: cp/parser.c:2948 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qE in namespace %qE does not name a template type" -msgstr "%qE i namnrymden %qE är inte namnet på en typ" +msgstr "%qE i namnrymden %qE är inte namnet på en malltyp" #: cp/parser.c:2952 #, gcc-internal-format @@ -35384,9 +35384,9 @@ msgstr "% behövs före %<%T::%E%> för att %qT är en beroende räckvidd" #: cp/parser.c:2974 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qE in %q#T does not name a template type" -msgstr "%qE i %q#T är inte namnet på en typ" +msgstr "%qE i %q#T är inte namnet på en malltyp" #: cp/parser.c:2978 #, gcc-internal-format @@ -35499,9 +35499,9 @@ msgstr "räckvidd %qT före %<~%> är inte ett klassnamn" #: cp/parser.c:4935 cp/parser.c:6785 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<~auto%> only available with -std=c++1y or -std=gnu++1y" -msgstr "C++0x auto är endast tillgängligt med -std=c++11 eller -std=gnu++11" +msgstr "%<~auto%> är endast tillgängligt med -std=c++1y eller -std=gnu++1y" #: cp/parser.c:5039 #, gcc-internal-format @@ -35569,9 +35569,9 @@ msgstr "två på varandra följande %<[%> får bara introducera ett attribut" #: cp/parser.c:6368 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "braced list index is not allowed with array notation" -msgstr "-client_name är inte tillåten med -dynamiclib" +msgstr "klammerlistindex är inte tillåtet med vektornotation" #: cp/parser.c:6460 #, gcc-internal-format @@ -35664,9 +35664,9 @@ msgstr "explicit fångst via kopiering av % överflödigt med standardfall av fångst via kopiering" #: cp/parser.c:8901 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "lambda capture initializers only available with -std=c++1y or -std=gnu++1y" -msgstr "lambdauttryck är endast tillgängliga med -std=c++11 eller -std=gnu++11" +msgstr "lambdafångstinitierare är endast tillgängliga med -std=c++1y eller -std=gnu++1y" #: cp/parser.c:8908 #, gcc-internal-format @@ -35699,9 +35699,9 @@ msgstr "explicit fångst via referens av %qD överflödigt med standardfångst via referens" #: cp/parser.c:9027 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "lambda templates are only available with -std=c++1y or -std=gnu++1y" -msgstr "variadiska mallar är endast tillgängliga med -std=c++11 eller -std=gnu++11" +msgstr "lambdamallar är endast tillgängliga med -std=c++1y eller -std=gnu++1y" #: cp/parser.c:9057 #, gcc-internal-format @@ -35779,9 +35779,9 @@ msgstr "intervallbaserade %-slingor är inte tillåtna i C++98-läge" #: cp/parser.c:10642 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "break statement used with Cilk Plus for loop" -msgstr "break-sats använd med OpenMP-for-slinga" +msgstr "break-sats använd med Cilk Plus-for-slinga" #. Issue a warning about this use of a GNU extension. #: cp/parser.c:10699 @@ -35847,9 +35847,9 @@ msgstr "typer får inte definieras i %-uttryck" #: cp/parser.c:12122 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "types may not be defined in a conversion-type-id" -msgstr "typer får inte definieras i en new-type-id" +msgstr "typer får inte definieras i en conversion-type-id" #: cp/parser.c:12149 #, gcc-internal-format @@ -35892,9 +35892,9 @@ msgstr "nyckelordet % är inte tillåtet i detta sammanhang (en kvalificerat medlemsinitierare är implicit en typ)" #: cp/parser.c:12732 cp/parser.c:12777 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid encoding prefix in literal operator" -msgstr "ogiltiga operander treställig operation" +msgstr "ogiltigt kodningsprefix i literal operator" #: cp/parser.c:12737 cp/parser.c:12784 #, gcc-internal-format @@ -35902,9 +35902,9 @@ msgstr "en tom sträng förväntades efter nyckelordet %" #: cp/parser.c:12755 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "unexpected keyword; remove space between quotes and suffix identifier" -msgstr "mellanrum saknas mellan %<\"\"%> och suffixidentifierare" +msgstr "oväntat nyckelord; ta bort mellanrum mellan citationstecken och suffixidentifierare" #: cp/parser.c:12761 #, gcc-internal-format @@ -35965,7 +35965,7 @@ #: cp/parser.c:13480 #, gcc-internal-format msgid "parse error in template argument list" -msgstr "syntaxfel i argumentlista till mall" +msgstr "parsningsfel i mallargumentlista" #. The name does not name a template. #: cp/parser.c:13549 cp/parser.c:13664 cp/parser.c:13876 @@ -36020,19 +36020,19 @@ msgstr "typspecificerare förväntades" #: cp/parser.c:14510 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "use of % in lambda parameter declaration only available with -std=c++1y or -std=gnu++1y" -msgstr "standarddefinierade och raderade funktioner är endast tillgängliga med -std=c++11 eller -std=gnu++11" +msgstr "användning av % i lambdaparameterdeklarationer är endast tillgängligt med -std=c++1y eller -std=gnu++1y" #: cp/parser.c:14516 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "use of % in parameter declaration only available with -std=c++1y or -std=gnu++1y" -msgstr "standarddefinierade och raderade funktioner är endast tillgängliga med -std=c++11 eller -std=gnu++11" +msgstr "använding av % i parameterdeklarationer är endast tillgängligt med -std=c++1y eller -std=gnu++1y" #: cp/parser.c:14521 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "ISO C++ forbids use of % in parameter declaration" -msgstr "ISO C förbjuder framåtdeklaration av parametrar" +msgstr "ISO C++ förbjuder användning av % i en parameterdeklaration" #: cp/parser.c:14656 #, gcc-internal-format @@ -36110,9 +36110,9 @@ msgstr "fler definitioner av %q#T" #: cp/parser.c:15524 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "ISO C++ forbids empty anonymous enum" -msgstr "ISO C++ förbjuder ökning av enum" +msgstr "ISO C++ förbjuder tomma anonyma enum" #: cp/parser.c:15544 #, gcc-internal-format @@ -36232,9 +36232,9 @@ #. But declarations with qualified-ids can't appear in a #. function. #: cp/parser.c:17476 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "qualified-id in declaration" -msgstr "%q+D aliasad deklaration" +msgstr "kvalificerad id i deklaration" #: cp/parser.c:17500 #, gcc-internal-format @@ -36262,9 +36262,9 @@ msgstr "upprepade cv-kvalificerare" #: cp/parser.c:17739 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "multiple ref-qualifiers" -msgstr "upprepade cv-kvalificerare" +msgstr "upprepade ref-kvalificerare" #: cp/parser.c:17797 #, gcc-internal-format @@ -36526,9 +36526,9 @@ msgstr "ogiltig explicit specifikation" #: cp/parser.c:22991 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "literal operator template %qD has invalid parameter list. Expected non-type template argument pack or " -msgstr "den literala operatormallen %qD har ogiltig parameterlista. Ett mallargument som inte är en typ pack förväntades" +msgstr "den literala operatormallen %qD har ogiltig parameterlista. Ett mallargument som inte är en typ pack eller förväntades" #: cp/parser.c:23065 #, gcc-internal-format @@ -36807,9 +36807,9 @@ msgstr "ogiltigt typ på egenskap" #: cp/parser.c:27475 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid reduction-identifier" -msgstr "ogiltig initierare" +msgstr "ogiltig reduktionsidentifierare" #: cp/parser.c:29042 #, gcc-internal-format @@ -36817,9 +36817,9 @@ msgstr "initiering i parenteser är inte tillåtet i en OpenMP-%-slinga" #: cp/parser.c:29045 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "parenthesized initialization is not allowed in for-loop" -msgstr "initiering i parenteser är inte tillåtet i en OpenMP-%-slinga" +msgstr "initiering i parenteser är inte tillåtet i en for-slinga" #: cp/parser.c:29270 cp/pt.c:13107 #, gcc-internal-format @@ -36832,19 +36832,19 @@ msgstr "inte tillräcklig kollapsat för slingor" #: cp/parser.c:30334 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "vector attribute not immediately followed by a single function declaration or definition" -msgstr "attribut är inte tillåtna vid en funktionsdefinition" +msgstr "vektorattribut som inte omedelbart följs av en ensam funktionsdeklaration eller -definition" #: cp/parser.c:30561 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid initializer clause" -msgstr "ogiltig initierare" +msgstr "ogiltig initierarklausul" #: cp/parser.c:30589 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "expected id-expression (arguments)" -msgstr "id-uttryck förväntades" +msgstr "id-uttryck förväntades (argument)" #: cp/parser.c:30601 #, gcc-internal-format @@ -36852,14 +36852,14 @@ msgstr "en av initieraranropets argument skall vara % eller %<&omp_priv%>" #: cp/parser.c:30678 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "expected %<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%> or identifier" -msgstr "%<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%>, % eller % förväntades" +msgstr "%<+%>, %<*%>, %<-%>, %<&%>, %<^%>, %<|%>, %<&&%>, %<||%> eller identifierare förväntades" #: cp/parser.c:30697 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "types may not be defined in declare reduction type list" -msgstr "nya typer får inte definieras i en returtyp" +msgstr "typer får inte definieras i en declare reduction-typlista" #: cp/parser.c:30719 cp/semantics.c:4906 #, gcc-internal-format @@ -36897,9 +36897,9 @@ msgstr "skräp vid slutet av %<#pragma GCC pch_preprocess%>" #: cp/parser.c:31479 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<#pragma simd%> must be inside a function" -msgstr "#pragma GCC optimize tillåts inte inuti funktioner" +msgstr "%<#pragma simd%> måste vara inuti en funktion" #: cp/parser.c:31538 #, gcc-internal-format @@ -36907,19 +36907,19 @@ msgstr "intermoduloptimeringar inte implementerade för C++" #: cp/parser.c:31650 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "expected variable-name" -msgstr "Variabelnamn förväntades vid %C" +msgstr "variabelnamn förväntades" #: cp/parser.c:31714 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "expected %<,%> or %<)%> after %qE" -msgstr "%<,%> eller %<)%> förväntades" +msgstr "%<,%> eller %<)%> förväntades efter %qE" #: cp/parser.c:31996 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "implicit templates may not be %" -msgstr "mallar får inte vara %" +msgstr "implicita mallar får inte vara %" #: cp/pt.c:285 #, gcc-internal-format @@ -37479,9 +37479,9 @@ msgstr "%qD är inte ett giltigt mallargument för att %qD är en variabel, inte adressen till en variabel" #: cp/pt.c:5747 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qE is not a valid template argument for %qT because it is not the address of a variable" -msgstr "%qD är inte ett giltigt mallargument för att %qD är en variabel, inte adressen till en variabel" +msgstr "%qE är inte ett giltigt mallargument till %qT för det är inte adressen till en variabel" #: cp/pt.c:5764 #, gcc-internal-format @@ -37631,9 +37631,9 @@ msgstr "angivna till %q+D" #: cp/pt.c:6754 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "pack expansion argument for non-pack parameter %qD of alias template %qD" -msgstr "standardargumentet för mallparameter för klass om omsluter %qD" +msgstr "pack-expansionsargument för icke-pack-parametern %qD till aliasmall %qD" #: cp/pt.c:7085 #, gcc-internal-format @@ -37733,24 +37733,24 @@ msgstr "formar referens till en referenstyp %qT" #: cp/pt.c:11791 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "forming pointer to qualified function type %qT" -msgstr "det går inte att deklarera en pekare till en kvalificerad funktionstyp %qT" +msgstr "formerar en pekare till en kvalificerad funktionstyp %qT" #: cp/pt.c:11794 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "forming reference to qualified function type %qT" -msgstr "det går inte att deklarera en referens till en kvalificerad funktionstyp %qT" +msgstr "formerar en referens till en kvalificerad funktionstyp %qT" #: cp/pt.c:11831 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "cannot declare reference to array of runtime bound" -msgstr "det går inte att deklarera en referens till en kvalificerad funktionstyp %qT" +msgstr "det går inte att deklarera en referens till en vektor av körtidsgräns" #: cp/pt.c:11832 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "cannot declare pointer to array of runtime bound" -msgstr "det går inte att deklarera pekare medlem av %q#T" +msgstr "det går inte att deklarera en pekare till en vektor av körtidsgräns" #: cp/pt.c:11856 #, gcc-internal-format @@ -38035,9 +38035,9 @@ msgstr "måste ha#include för användande av typeid" #: cp/rtti.c:399 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "typeid of array of runtime bound" -msgstr "skapar vektor av funktioner" +msgstr "type-id till vektor av av körtidsgräns" #: cp/rtti.c:401 #, gcc-internal-format @@ -38045,9 +38045,9 @@ msgstr "det går inte att skapa typinformation för typen %qT eftersom typer av variabel storlek är inblandade" #: cp/rtti.c:491 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "typeid of qualified function type %qT" -msgstr "det går inte att deklarera en pekare till en kvalificerad funktionstyp %qT" +msgstr "type-id till en kvalificerad funktionstyp %qT" #: cp/rtti.c:670 cp/rtti.c:685 #, gcc-internal-format @@ -38075,9 +38075,9 @@ msgstr "%qT är en oåtkomlig bas till %qT" #: cp/search.c:1899 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid covariant return type for %q#D" -msgstr "ogiltig kovariant returtyp för %q+#D" +msgstr "ogiltig kovariant returtyp för %q#D" #: cp/search.c:1901 cp/search.c:1915 cp/search.c:1920 cp/search.c:1944 #, gcc-internal-format @@ -38252,9 +38252,9 @@ msgstr "ogiltig basklasspecifikation" #: cp/semantics.c:3218 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "cannot capture member %qD of anonymous union" -msgstr "skyddad medlem %q+#D i anonym union" +msgstr "kan inte fånga medlemmen %qD i anonym union" #: cp/semantics.c:3229 cp/semantics.c:10657 #, gcc-internal-format @@ -38334,9 +38334,9 @@ msgstr "det går inte att använda % på medlemsfunktion %qD" #: cp/semantics.c:4772 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "user defined reduction lookup is ambiguous" -msgstr "referens till %qD är tvetydig" +msgstr "användardefinierad reduktionsuppslagning är tvetydig" #: cp/semantics.c:5058 #, gcc-internal-format @@ -38354,9 +38354,9 @@ msgstr "linjär klausul tillämpad på en variabel som inte är heltal och inte pekare med typen %qT" #: cp/semantics.c:5267 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "linear step expression must be integral" -msgstr "num_threads-uttryck måste vara heltal" +msgstr "ett linjärt steguttryck måste vara ett heltal" #: cp/semantics.c:5304 #, gcc-internal-format @@ -38389,39 +38389,39 @@ msgstr "uttryck för styckesstorlek för schemaläggning måste vara heltal" #: cp/semantics.c:5434 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qs length expression must be integral" -msgstr "num_threads-uttryck måste vara heltal" +msgstr "%qs-längduttryck måste vara ett heltal" #: cp/semantics.c:5447 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qs length expression must be positive constant integer expression" -msgstr "collapse-argument behöver ett positivt konstant heltalsuttryck" +msgstr "%qs längduttryck måste vara ett positivt konstant heltalsuttryck" #: cp/semantics.c:5464 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "% expression must be integral" -msgstr "num_threads-uttryck måste vara heltal" +msgstr "%-uttryck måste vara heltal" #: cp/semantics.c:5483 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "% expression must be integral" -msgstr "num_threads-uttryck måste vara heltal" +msgstr "%-uttryck måste vara heltal" #: cp/semantics.c:5502 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "% id must be integral" -msgstr "skivslut måste vara ett heltal" +msgstr "%-id måste vara ett heltal" #: cp/semantics.c:5523 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "% chunk size expression must be integral" -msgstr "uttryck för styckesstorlek för schemaläggning måste vara heltal" +msgstr "% styckesstorleksuttryck måste vara heltal" #: cp/semantics.c:5543 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qD is not a variable in % clause" -msgstr "%qD är inte en variabel i klausul %qs" +msgstr "%qD är inte en variabel i %-klausul" #: cp/semantics.c:5557 #, gcc-internal-format @@ -38429,19 +38429,19 @@ msgstr "%qE i %-klausul är varken en pekare eller en vektor eller en referens till pekare eller vektor" #: cp/semantics.c:5563 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qD appears more than once in % clauses" -msgstr "%qD förekommer mer än en gång i dataklausuler" +msgstr "%qD förekommer mer än en gång i %-klausuler" #: cp/semantics.c:5576 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "% clause alignment expression must be integral" -msgstr "uttryck för styckesstorlek för schemaläggning måste vara heltal" +msgstr "%-klausuls justeringsuttryck måste vara heltal" #: cp/semantics.c:5613 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qD is not a variable in % clause" -msgstr "%qD är inte en variabel i klausul %qs" +msgstr "%qD är inte en variabel i %-klausul" #: cp/semantics.c:5849 #, gcc-internal-format @@ -38464,14 +38464,14 @@ msgstr "skillnaden mellan %qE och %qD har inte heltalstyp" #: cp/semantics.c:6415 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<#pragma omp simd%> used with class iteration variable %qE" -msgstr "%<#pragma omp atomic update%> använder två olika variabler till minne" +msgstr "%<#pragma omp simd%> använd med klassiterationsvariabeln %qE" #: cp/semantics.c:6571 cp/semantics.c:6581 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%<#pragma omp atomic update%> uses two different expressions for memory" -msgstr "%<#pragma omp atomic update%> använder två olika variabler till minne" +msgstr "%<#pragma omp atomic update%> använder två olika uttryck för minne" #. Report the error. #: cp/semantics.c:6870 @@ -38596,9 +38596,9 @@ msgstr "vektorindex är utanför gränserna" #: cp/semantics.c:8682 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "negative array subscript" -msgstr "Förväntade vektorindex vid %C" +msgstr "negativt vektorindex" #: cp/semantics.c:8728 cp/semantics.c:8790 cp/semantics.c:9476 #, gcc-internal-format @@ -38666,9 +38666,9 @@ msgstr "temporär av den ej literala typen %qT i ett konstant uttryck" #: cp/semantics.c:9735 cp/semantics.c:10146 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "reinterpret_cast from integer to pointer" -msgstr "reinterpret_cast från typ %qT till typ %qT slänger bort kvalificerare" +msgstr "reinterpret_cast från heltal till pekare" #: cp/semantics.c:9781 cp/semantics.c:10253 cp/semantics.c:10533 #, gcc-internal-format @@ -38706,9 +38706,9 @@ msgstr "adress-av på ett objekt %qE med trådlokal eller automatisk lagring är inte ett konstant uttryck" #: cp/semantics.c:10200 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "use of % in a constant expression" -msgstr "%qE är inte ett konstant uttryck" +msgstr "% används i ett konstant uttryck" #: cp/semantics.c:10265 #, gcc-internal-format @@ -38752,9 +38752,9 @@ msgstr "%qV-kvalificerare kan inte tillämpas på %qT" #: cp/tree.c:1464 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "lambda-expression in a constant expression" -msgstr "uttrycket %qE är inte ett konstantuttryck" +msgstr "lambdauttryck i ett konstantuttryck" #: cp/tree.c:3197 #, gcc-internal-format @@ -38897,9 +38897,9 @@ msgstr "ogiltig användning av %qs på en medlemsfunktion" #: cp/typeck.c:1559 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "taking sizeof array of runtime bound" -msgstr "skapar vektor av funktioner" +msgstr "tar sizeof på vektor av körtidsgräns" #: cp/typeck.c:1617 #, gcc-internal-format @@ -39027,9 +39027,9 @@ msgstr "index saknas i vektorreferens" #: cp/typeck.c:3029 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "rank of the array%'s index is greater than 1" -msgstr "justeringen av vektorelement är större än elementstorleken" +msgstr "ordningen på vektorns index är större än 1" #: cp/typeck.c:3115 #, gcc-internal-format @@ -39187,9 +39187,9 @@ msgstr "operandtyper är %qT och %qT" #: cp/typeck.c:4596 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "could not find an integer type of the same size as %qT" -msgstr "det går inte att hitta gränssnitt för klassen %qE" +msgstr "det går inte att hitta en heltalstyp med samma storlek som %qT" #: cp/typeck.c:4660 #, gcc-internal-format @@ -39284,9 +39284,9 @@ msgstr "kan inte skapa pekare till referensmedlem %qD" #: cp/typeck.c:5473 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "taking address of array of runtime bound" -msgstr "tar adressen till uttryck av typ %" +msgstr "tar adressen till vektor av körtidsgräns" #: cp/typeck.c:5740 #, gcc-internal-format @@ -39414,9 +39414,9 @@ msgstr "typkonvertering från %qT till %qT ökar kravet på justering för måltypen" #: cp/typeck.c:6850 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "casting between pointer-to-function and pointer-to-object is conditionally-supported" -msgstr "ISO C++ förbjuder konvertering mellan pekare-till-funktion och pekare-till-objekt" +msgstr "typkonvertering mellan pekare-till-funktion och pekare-till-objekt stödjs villkorligt" #: cp/typeck.c:6864 #, gcc-internal-format @@ -39689,9 +39689,9 @@ msgstr "det går inte att deklarera parametern %q+D att vara av abstrakt typ %qT" #: cp/typeck2.c:333 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "cannot declare parameter to be of abstract type %qT" -msgstr "det går inte att deklarera parametern %q+D att vara av abstrakt typ %qT" +msgstr "det går inte att deklarera en parameter till att vara av abstrakt typ %qT" #: cp/typeck2.c:337 #, gcc-internal-format @@ -39725,29 +39725,29 @@ msgstr "skapar vektor av %qT, som är en abstrakt klasstyp" #: cp/typeck2.c:356 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid cast to abstract class type %qT" -msgstr "ogiltig konvertering till funktionstyp %qT" +msgstr "ogiltig typkonvertering till en abstrakt klasstyp %qT" #: cp/typeck2.c:359 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid new-expression of abstract class type %qT" -msgstr "ogiltig typkonvertering av ett rvärdeuttryck av typ %qT till typ %qT" +msgstr "ogiltigt new-uttryck av abstrakt klasstyp %qT" #: cp/typeck2.c:362 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid abstract return type %qT" -msgstr "ogiltig parametertyp %qT" +msgstr "ogiltig abstrakt returtyp %qT" #: cp/typeck2.c:365 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "invalid abstract parameter type %qT" -msgstr "ogiltig parametertyp %qT" +msgstr "ogiltig abstrakt parametertyp %qT" #: cp/typeck2.c:368 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "expression of abstract class type %qT cannot be used in throw-expression" -msgstr "uttrycket %qE med abstrakt klasstyp %qT kan inte användas i throw-uttryck" +msgstr "ett uttryck med abstrakt klasstyp %qT kan inte användas i throw-uttryck" #: cp/typeck2.c:372 #, gcc-internal-format @@ -39950,14 +39950,14 @@ msgstr "pekare-på-medlemstyp %qT är inkompatibel med objekttyp %qT" #: cp/typeck2.c:1759 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "pointer-to-member-function type %qT requires an rvalue" -msgstr "pekare till medlemsfunktion använd i aritmetik" +msgstr "pekare-till-medlemsfunktionstyp %qT kräver ett r-värde" #: cp/typeck2.c:1766 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "pointer-to-member-function type %qT requires an lvalue" -msgstr "pekare till medlemsfunktion använd i aritmetik" +msgstr "pekare-till-medlemsfunktiontyp %qT kräver ett l-värde" #: cp/typeck2.c:1807 #, gcc-internal-format @@ -40569,19 +40569,19 @@ msgstr "Inbyggd ”%s” vid %L måste ha åtminstone två argument" #: fortran/check.c:2384 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Missing '%s' argument to the %s intrinsic at %L" -msgstr "COMPLEX-argumentet ”%s” till inbyggd ”%s” vid %L" +msgstr "Saknat argument ”%s” till inbyggd ”%s” vid %L" #: fortran/check.c:2399 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Duplicate argument '%s' at %L to intrinsic %s" -msgstr "argumenten ”%s” och ”%s” för inbyggd %s" +msgstr "Dubblerat argument ”%s” vid %L till inbyggd %s" #: fortran/check.c:2404 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Unknown argument '%s' at %L to intrinsic %s" -msgstr "argumenten ”%s” och ”%s” för inbyggd %s" +msgstr "Okänt argument ”%s” vid %L till inbyggd %s" #: fortran/check.c:2433 #, gcc-internal-format, gfc-internal-format @@ -40754,59 +40754,59 @@ msgstr "”source”-argumentet till inbyggd ”shape” vid %L får inte vara en vektor med antagen storlek" #: fortran/check.c:3679 fortran/check.c:5705 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L shall not be a procedure" msgstr "Argument ”%s” till inbyggd ”%s” vid %L får inte vara en procedur" #: fortran/check.c:3687 fortran/check.c:3826 fortran/check.c:5697 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L shall not be TYPE(*)" -msgstr "argumentet ”%s” till inbyggd ”%s” vid %L skall inte vara co-indexerat" +msgstr "argumentet ”%s” till inbyggd ”%s” vid %L skall inte vara TYPE(*)" #: fortran/check.c:3698 fortran/check.c:3838 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L shall not be an assumed-size array" -msgstr "”source”-argumentet till inbyggd ”shape” vid %L får inte vara en vektor med antagen storlek" +msgstr "Argumentet ”%s” till inbyggd ”%s” vid %L får inte vara en vektor med antagen storlek" #: fortran/check.c:3817 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "'%s' argument of '%s' intrinsic at %L must be an interoperable data entity: %s" -msgstr "Argumentet ”%s” till inbyggd ”%s” vid %L måste vara en interoperabel dataenhet" +msgstr "Argumentet ”%s” till inbyggd ”%s” vid %L måste vara en interoperabel dataenhet: %s" #: fortran/check.c:3856 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Argument C_PTR_1 at %L to C_ASSOCIATED shall have the type TYPE(C_PTR) or TYPE(C_FUNPTR)" -msgstr "Argumentet vid %L till C_F_FUNPOINTER skall ha typen C_FUNPTR" +msgstr "Argumentet C_PTR_1 vid %L till C_ASSOCIATED skall ha typen TYPE(C_PTR) eller TYPE(C_FUNPTR)" #: fortran/check.c:3870 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Argument C_PTR_2 at %L to C_ASSOCIATED shall have the same type as C_PTR_1: %s instead of %s" -msgstr "Argumentet vid %L till C_F_FUNPOINTER skall ha typen C_FUNPTR" +msgstr "Argumentet C_PTR_2 vid %L till C_ASSOCIATED skall ha samma typ som C_PTR_1: %s istället för %s" #: fortran/check.c:3894 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Argument CPTR at %L to C_F_POINTER shall have the type TYPE(C_PTR)" -msgstr "Argumentet vid %L till C_F_FUNPOINTER skall ha typen C_FUNPTR" +msgstr "Argumentet CPTR vid %L till C_F_FUNPOINTER skall ha typen TYPE(C_PTR)" #: fortran/check.c:3906 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Argument FPTR at %L to C_F_POINTER must be a pointer" -msgstr "Argumentet FPTR till C_F_POINTER vid %L får inte vara polymorft" +msgstr "Argumentet FPTR vid %L till C_F_POINTER måste vara en pekare" #: fortran/check.c:3913 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "FPTR argument at %L to C_F_POINTER shall not be polymorphic" -msgstr "Argumentet FPTR till C_F_POINTER vid %L får inte vara polymorft" +msgstr "Argumentet FPTR vid %L till C_F_POINTER får inte vara polymorft" #: fortran/check.c:3920 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Argument FPTR at %L to C_F_POINTER shall not be coindexed" -msgstr "Argumentet FPTR till C_F_POINTER vid %L får inte vara polymorft" +msgstr "Argumentet FPTR vid %L till C_F_POINTER skall inte vara co-indexerat" #: fortran/check.c:3927 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Unexpected SHAPE argument at %L to C_F_POINTER with scalar FPTR" -msgstr "Argumentet vid %L till C_F_FUNPOINTER skall ha typen C_FUNPTR" +msgstr "Oväntat SHAPE-argumentet vid %L till C_F_POINTER med skalär FPTR" #: fortran/check.c:3933 #, gcc-internal-format, gfc-internal-format @@ -40814,9 +40814,9 @@ msgstr "SHAPE-argument förväntades till C_F_POINTER med vektor FPTR vid %L" #: fortran/check.c:3952 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "SHAPE argument at %L to C_F_POINTER must have the same size as the RANK of FPTR" -msgstr "Argumentet vid %L till C_F_FUNPOINTER skall ha typen C_FUNPTR" +msgstr "SHAPE-argumentet vid %L till C_F_POINTER måste ha samma storlek som FPTR:s RANK" #: fortran/check.c:3961 #, gcc-internal-format, gfc-internal-format @@ -40824,39 +40824,39 @@ msgstr "Polymorf FPTR vid %L till C_F_POINTER" #: fortran/check.c:3966 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Noninteroperable array FPTR at %L to C_F_POINTER: %s" -msgstr "Ickeinteroperabel procedurpekare vid %L till C_F_FUNPOINTER" +msgstr "Ej interoperabel vektor-FPTR vid %L till C_F_POINTER: %s" #: fortran/check.c:3982 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Argument CPTR at %L to C_F_PROCPOINTER shall have the type TYPE(C_FUNPTR)" -msgstr "Argumentet vid %L till C_F_FUNPOINTER skall ha typen C_FUNPTR" +msgstr "Argumentet CPTR vid %L till C_F_PROCPOINTER skall ha typen TYPE(C_FUNPTR)" #: fortran/check.c:3994 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Argument FPTR at %L to C_F_PROCPOINTER shall be a procedure pointer" -msgstr "Argumentet vid %L till C_F_FUNPOINTER skall ha typen C_FUNPTR" +msgstr "Argumentet FPTR vid %L till C_F_PROCPOINTER skall vara en procedurpekare" #: fortran/check.c:4001 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Argument FPTR at %L to C_F_PROCPOINTER shall not be coindexed" -msgstr "Argumentet FPTR till C_F_POINTER vid %L får inte vara polymorft" +msgstr "Argumentet FPTR vid %L till C_F_PROCPOINTER får inte vara co-indexerat" #: fortran/check.c:4007 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Noninteroperable procedure pointer at %L to C_F_PROCPOINTER" -msgstr "Ickeinteroperabel procedurpekare vid %L till C_F_FUNPOINTER" +msgstr "Ej interoperabel procedurpekare vid %L till C_F_PROCPOINTER" #: fortran/check.c:4021 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Argument X at %L to C_FUNLOC shall not be coindexed" -msgstr "Argumentet TO till MOVE_ALLOC %L skall inte vara co-indexerat" +msgstr "Argumentet X vid %L till C_FUNLOC får inte vara co-indexerat" #: fortran/check.c:4036 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Function result '%s' at %L is invalid as X argument to C_FUNLOC" -msgstr "Funktionsresultatet ”%s” är ogiltigt i proc-mål i procedurpekartilldelning vid %L" +msgstr "Funktionsresultatet ”%s” vid %L är ogiltigt som X-argument till C_FUNLOC" #: fortran/check.c:4044 #, gcc-internal-format, gfc-internal-format @@ -40864,39 +40864,39 @@ msgstr "Argumentet X vid %L till C_FUNLOC skall vara en procedur eller en procedurpekare" #: fortran/check.c:4050 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Noninteroperable procedure at %L to C_FUNLOC" -msgstr "Ickeinteroperabel procedurpekare vid %L till C_F_FUNPOINTER" +msgstr "Ej interoperabel procedur vid %L till C_FUNLOC" #: fortran/check.c:4064 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Argument X at %L to C_LOC shall not be coindexed" -msgstr "Argumentet TO till MOVE_ALLOC %L skall inte vara co-indexerat" +msgstr "Argumentet X vid %L till C_LOC får inte vara co-indexerat" #: fortran/check.c:4070 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "X argument at %L to C_LOC shall not be polymorphic" -msgstr "Aktuellt argument till ”%s” vid %L måste vara polymorft" +msgstr "X-argumentet vir %L till C_LOC får inte vara polymorft" #: fortran/check.c:4081 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Argument X at %L to C_LOC shall have either the POINTER or the TARGET attribute" -msgstr "Komponent vid %C måste ha attributet POINTER" +msgstr "Argumentet X vid %L till C_LOC skall antingen ha attributet POINTER eller TARGET" #: fortran/check.c:4089 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Argument X at %L to C_LOC shall be not be a zero-sized string" -msgstr "Argument ”S” till NEAREST vid %L får inte vara noll" +msgstr "Argumentet X vid %L till C_LOC får inte vara en sträng med längden noll" #: fortran/check.c:4098 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Argument at %L to C_LOC shall not be polymorphic" -msgstr "Aktuellt argument till ”%s” vid %L måste vara polymorft" +msgstr "Argumentet vid %L till C_LOC får inte vara polymorft" #: fortran/check.c:4105 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Noninteroperable array at %L as argument to C_LOC: %s" -msgstr "Ej interoperabelt argument ”%s” till ”%s” vid %L" +msgstr "Ej interoperabel vektor vid %L som argument till C_LOC: %s" #: fortran/check.c:4116 #, gcc-internal-format, gfc-internal-format @@ -40904,9 +40904,9 @@ msgstr "Vektor med interoperabla typer vid %L till C_LOC som inte är allokerbar och varken antagen storlek eller explicit storlek" #: fortran/check.c:4121 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Array section at %L to C_LOC" -msgstr "Vektorsektion i anrop av ”%s” vid %L" +msgstr "Vektorsektion vid %L till C_LOC" #: fortran/check.c:4149 #, gcc-internal-format, gfc-internal-format @@ -41146,19 +41146,19 @@ msgstr "Teckenargument ”%s” vid %L måste ha längden 1 eftersom proceduren ”%s” är BIND(C)" #: fortran/decl.c:1066 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Variable '%s' at %L with ALLOCATABLE attribute in procedure '%s' with BIND(C)" -msgstr "Variabeln ”%s” vid %L med attributet OPTIONAL i proceduren ”%s” som är BIND(C)" +msgstr "Variabeln ”%s” vid %L med attributet ALLOCATABLE i proceduren ”%s” med BIND(C)" #: fortran/decl.c:1074 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Variable '%s' at %L with POINTER attribute in procedure '%s' with BIND(C)" -msgstr "Variabeln ”%s” vid %L med attributet OPTIONAL i proceduren ”%s” som är BIND(C)" +msgstr "Variabeln ”%s” vid %L med attributet POINTER i proceduren ”%s” med BIND(C)" #: fortran/decl.c:1083 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Scalar variable '%s' at %L with POINTER or ALLOCATABLE in procedure '%s' with BIND(C) is not yet supported" -msgstr "Variabeln ”%s” vid %L med attributet OPTIONAL i proceduren ”%s” som är BIND(C)" +msgstr "Den skalära Variabeln ”%s” vid %L med POINTER eller ALLOCATABLE i proceduren ”%s” med BIND(C) stödjs inte ännu" #: fortran/decl.c:1092 #, gcc-internal-format, gfc-internal-format @@ -41590,9 +41590,9 @@ msgstr "Entitets- eller common-blocknamn saknas till attributspecifikationssats vid %C" #: fortran/decl.c:4212 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "BIND(C) statement at %C" -msgstr "SYNC-sats vid %C" +msgstr "BIND(C)-sats vid %C" #: fortran/decl.c:4290 #, gcc-internal-format, gfc-internal-format @@ -41615,9 +41615,9 @@ msgstr "PURE och IMPURE får inte båda finnas vid %C" #: fortran/decl.c:4475 fortran/primary.c:1717 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Alternate-return argument at %C" -msgstr "Alternativ returetikett förväntades vid %C" +msgstr "Alternativt returargument vid %C" #: fortran/decl.c:4521 #, gcc-internal-format, gfc-internal-format @@ -41843,14 +41843,14 @@ msgstr "%s-sats förväntades vid %L" #: fortran/decl.c:6144 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Expecting %s statement at %L" -msgstr "%s-sats förväntades vid %C" +msgstr "%s-sats förväntades vid %L" #: fortran/decl.c:6162 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Expected block name of '%s' in %s statement at %L" -msgstr "Blocknamn på ”%s” i %s-sats förväntades vid %C" +msgstr "Blocknamn på ”%s” i %s-sats förväntades vid %L" #: fortran/decl.c:6179 #, gcc-internal-format, gfc-internal-format @@ -42067,11 +42067,10 @@ msgid "Ambiguous symbol in TYPE definition at %C" msgstr "Tvetydig symbol i TYPE-definition vid %C" -# Vad är "host associated"? #: fortran/decl.c:7416 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Symbol '%s' at %C has not been previously defined" -msgstr "Symbolen ”%s” vid %C har redan blivit host-associerad" +msgstr "Symbolen ”%s” vid %C har inte definierats tidigare" #: fortran/decl.c:7422 #, gcc-internal-format, gfc-internal-format @@ -42709,9 +42708,9 @@ msgstr "Det stämmer inte i procedurpekartilldelningen vid %L: anropskonventionen stämmer inte" #: fortran/expr.c:3564 fortran/expr.c:3571 fortran/resolve.c:2430 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Explicit interface required for '%s' at %L: %s" -msgstr "NOPASS eller explicit gränssnitt krävs vid %C" +msgstr "Explicit gränssnitt krävs för ”%s” vid %L: %s" #: fortran/expr.c:3579 #, gcc-internal-format, gfc-internal-format @@ -42879,9 +42878,9 @@ msgstr "Associationsnamn ”%s” kan inte förekomma i ett variabeldefinitionssammanhang (%s) vid %L eftersom dess mål vid %L inte heller kan" #: fortran/expr.c:4949 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Elements with the same value at %L and %L in vector subscript in a variable definition context (%s)" -msgstr "”%s” vid %L som är associerad med uttryck kan inte användas i ett variabeldefinitionssammanhang (%s)" +msgstr "Element med samma värde vid %L och %L i vektorindex i ett variabeldefinitionssammanhang (%s)" #: fortran/f95-lang.c:224 #, gcc-internal-format, gfc-internal-format @@ -43121,9 +43120,9 @@ msgstr "Typ stämmer inte i argument ”%s” vid %L; skickade %s till %s" #: fortran/interface.c:2007 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Assumed-type actual argument at %L requires that dummy argument '%s' is of assumed type" -msgstr "Vektor med antagen ordning vid %L kräver att attrappargumentet ”%s” har antagen ordning" +msgstr "Aktuellt argument med antagen typ vid %L kräver att attrappargumentet ”%s” har antagen typ" #: fortran/interface.c:2023 #, gcc-internal-format, gfc-internal-format @@ -43161,9 +43160,9 @@ msgstr "Aktuellt argument till icke-INTENT(INOUT)-attrappen ”%s” vid %L, som är LOCK_TYPE eller har en LOCK_TYPE-komponent" #: fortran/interface.c:2130 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Dummy argument '%s' has to be a pointer, assumed-shape or assumed-rank array without CONTIGUOUS attribute - as actual argument at %L is not simply contiguous and both are ASYNCHRONOUS or VOLATILE" -msgstr "Attrappargument ”%s” måste vara en pekare eller vektor med antagen form utan attributet CONTIGUOUS - eftersom det aktuella argumentet vid %L inte är enkelt sammanhängande och båda är ASYNCHRONOUS eller VOLATILE" +msgstr "Attrappargument ”%s” måste vara en pekare, vektor med antagen form eller ordning utan attributet CONTIGUOUS - eftersom det aktuella argumentet vid %L inte är enkelt sammanhängande och båda är ASYNCHRONOUS eller VOLATILE" #: fortran/interface.c:2143 #, gcc-internal-format, gfc-internal-format @@ -43516,29 +43515,29 @@ msgstr "Attrappargument för pass-objekt till ”%s” vid %L måste vara på samma position som attrappargumentet för pass-objektet i den åsidosatta proceduren" #: fortran/intrinsic.c:196 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Variable with NO_ARG_CHECK attribute at %L is only permitted as argument to the intrinsic functions C_LOC and PRESENT" -msgstr "NULL-pekare vid %L är inte tillåtet som aktuellt argument till inbyggd funktion ”%s”" +msgstr "Variabeln med attributet NO_ARG_CHECK vid %L är endast tillåtet som argument till de inbyggda funktionerna C_LOC och PRESENT" #: fortran/intrinsic.c:210 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Assumed-type argument at %L is not permitted as actual argument to the intrinsic %s" -msgstr "NULL-pekare vid %L är inte tillåtet som aktuellt argument till inbyggd funktion ”%s”" +msgstr "Argumentet med antagen typ vid %L är inte tillåtet som aktuellt argument till den inbyggda %s" #: fortran/intrinsic.c:217 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Assumed-type argument at %L is only permitted as first actual argument to the intrinsic %s" -msgstr "NULL-pekare vid %L är inte tillåtet som aktuellt argument till inbyggd funktion ”%s”" +msgstr "Argumentet med antagen typ vid %L är endast tillåtet som aktuellt argument till den inbyggda funktionen ”%s”" #: fortran/intrinsic.c:224 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Assumed-rank argument at %L is only permitted as actual argument to intrinsic inquiry functions" -msgstr "NULL-pekare vid %L är inte tillåtet som aktuellt argument till inbyggd funktion ”%s”" +msgstr "Argumentet med antagen ordning vid %L är endast tillåtet som aktuellt argument till inbyggda frågefunktioner" #: fortran/intrinsic.c:231 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Assumed-rank argument at %L is only permitted as first actual argument to the intrinsic inquiry function %s" -msgstr "NULL-pekare vid %L är inte tillåtet som aktuellt argument till inbyggd funktion ”%s”" +msgstr "Argumentet med antagen ordning vid %L är endast tillåtet som första aktuella argument till den inbyggda frågefunktionen %s" #: fortran/intrinsic.c:1054 #, gcc-internal-format, gfc-internal-format @@ -43596,9 +43595,9 @@ msgstr "Elementär funktion som initieraruttryck med argument som inte är heltal/tecken vid %L" #: fortran/intrinsic.c:4402 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Subroutine call to intrinsic '%s' in DO CONCURRENT block at %L is not PURE" -msgstr "Subrutinanrop till ”%s” i DO CONCURRENT-block vid %L är inte PURE" +msgstr "Subrutinanrop till inbyggda ”%s” i DO CONCURRENT-block vid %L är inte PURE" #: fortran/intrinsic.c:4409 #, gcc-internal-format, gfc-internal-format @@ -44147,9 +44146,9 @@ msgstr "Namn vid %C är för långt" #: fortran/match.c:560 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Invalid character '$' at %L. Use -fdollar-ok to allow it as an extension" -msgstr "Ogiltigt tecken ”$” vid %C. Använd -fdollar-ok för att tillåta det som en utökning" +msgstr "Ogiltigt tecken ”$” vid %L. Använd -fdollar-ok för att tillåta det som en utökning" #: fortran/match.c:610 fortran/match.c:657 #, gcc-internal-format, gfc-internal-format @@ -44758,9 +44757,9 @@ msgstr "Blocknamnet ”%s” förväntades av SELECT-konstruktionen vid %C" #: fortran/match.c:5339 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "parse error in SELECT TYPE statement at %C" -msgstr "Syntaxfel i PROTECTED-sats vid %C" +msgstr "parsningsfel i SELECT TYPE-sats vid %C" #: fortran/match.c:5363 #, gcc-internal-format, gfc-internal-format @@ -45236,9 +45235,9 @@ msgstr "!$OMP ATOMIC CAPTURE-fångstsats läser från en annan variabel än uppdateringssatsen skriver till vid %L" #: fortran/openmp.c:1282 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "!$OMP ATOMIC assignment operator must be binary +, *, -, /, .AND., .OR., .EQV. or .NEQV. at %L" -msgstr "!$OMP ATOMIC-tilldelningsoperator måste vara +, *, -, /, .AND., .OR., .EQV. eller .NEQV. vid %L" +msgstr "!$OMP ATOMIC-tilldelningsoperator måste vara binärt +, *, -, /, .AND., .OR., .EQV. eller .NEQV. vid %L" #: fortran/openmp.c:1330 #, gcc-internal-format, gfc-internal-format @@ -45381,9 +45380,9 @@ msgstr "Argumentet till -ffpe-trap är inte giltigt: %s" #: fortran/options.c:564 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Argument to -ffpe-summary is not valid: %s" -msgstr "Argumentet till -ffpe-trap är inte giltigt: %s" +msgstr "Argumentet till -ffpe-summary är inte giltigt: %s" #: fortran/options.c:580 #, gcc-internal-format, gfc-internal-format @@ -45661,9 +45660,9 @@ msgstr "%s-sats är inte tillåten inuti BLOCK vid %C" #: fortran/parse.c:2653 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "%s statement is not allowed inside of BLOCK DATA at %C" -msgstr "%s-sats är inte tillåten inuti BLOCK vid %C" +msgstr "%s-sats är inte tillåten inuti BLOCK DATA vid %C" #: fortran/parse.c:2737 #, gcc-internal-format, gfc-internal-format @@ -45801,9 +45800,9 @@ msgstr "CONTAINS-sats vid %C är redan i en innesluten programenhet" #: fortran/parse.c:4263 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Global binding name '%s' at %L is already being used as a %s at %L" -msgstr "Globalt namn ”%s” vid %L används redan som en %s vid %L" +msgstr "Globalt bindningsnamn ”%s” vid %L används redan som en %s vid %L" #: fortran/parse.c:4266 #, gcc-internal-format, gfc-internal-format @@ -46204,9 +46203,9 @@ msgstr "Alternativ returspecifierare i funktionen ”%s” vid %L är inte tillåten" #: fortran/resolve.c:311 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Self-referential argument '%s' at %L is not allowed" -msgstr "Nyckelordsargument ”%s” vid %L finns inte i proceduren" +msgstr "Det självrefererande agumentet ”%s” vid %L är inte tillåtet" #: fortran/resolve.c:383 #, gcc-internal-format, gfc-internal-format @@ -46364,9 +46363,9 @@ msgstr "I Fortran 2003 är COMMON ”%s”-block vid %L en global identifierare och måste således ha samma bindningsnamn som COMMON-blocket med samma namn vid %L: %s resp %s" #: fortran/resolve.c:1001 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "COMMON block '%s' at %L uses the same global identifier as entity at %L" -msgstr "COMMON-block ”%s” vid %L används som PARAMETER vid %L" +msgstr "COMMON-block ”%s” vid %L använder samma globala identifierare som en enhet vid %L" #: fortran/resolve.c:1009 #, gcc-internal-format, gfc-internal-format @@ -46554,9 +46553,9 @@ msgstr "Returtypen stämmer inte för funktionen ”%s” vid %L (%s/%s)" #: fortran/resolve.c:2442 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Interface mismatch in global procedure '%s' at %L: %s " -msgstr "Gränssnitt stämmer inte överens i attrapprocedur ”%s” vid %L: %s" +msgstr "Gränssnitt stämmer inte överens i den globala proceduren ”%s” vid %L: %s" #: fortran/resolve.c:2550 #, gcc-internal-format, gfc-internal-format @@ -46830,9 +46829,9 @@ msgstr "Två eller flera delreferenser med ordning skild från noll får inte anges vid %L" #: fortran/resolve.c:4756 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Variable %s at %L with NO_ARG_CHECK attribute may only be used as actual argument" -msgstr "Variabeln %s med antagen typ vid %L får bara användas som ett aktuellt argument" +msgstr "Variabeln %s vid %L med attributet NO_ARG_CHECK får bara användas som ett aktuellt argument" #: fortran/resolve.c:4766 #, gcc-internal-format, gfc-internal-format @@ -46863,9 +46862,9 @@ msgstr "Variabel med antagen ordning %s vid %L som aktuellt argument till en frågefunktion skall vara det första argumentet" #: fortran/resolve.c:4812 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Variable %s at %L with NO_ARG_CHECK attribute shall not have a subobject reference" -msgstr "Variabeln %s med antagen typ vid %L skall inte ha en subobjektreferens" +msgstr "Variabeln %s vid %L med attributet NO_ARG_CHECK skall inte ha en subobjektreferens" #: fortran/resolve.c:4821 #, gcc-internal-format, gfc-internal-format @@ -46954,9 +46953,9 @@ msgstr "Steguttryck i DO-slinga vid %L får inte vara noll" #: fortran/resolve.c:6292 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "DO loop at %L will be executed zero times (use -Wno-zerotrip to suppress)" -msgstr "DO-slinga vid %L kommer köras noll gånger" +msgstr "DO-slinga vid %L kommer köras noll gånger (använd -Wno-zerotrip för att undertrycka)" #: fortran/resolve.c:6354 #, gcc-internal-format, gfc-internal-format @@ -47213,9 +47212,9 @@ msgstr "Dubbelt CLASS IS-block i SELECT TYPE-sats vid %L" #: fortran/resolve.c:8256 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Invalid context for NULL () intrinsic at %L" -msgstr "Ogiltigt sammanhang för NULL()-pekare vid %%L" +msgstr "Ogiltigt sammanhang för inbyggd NULL () vid %L" #. FIXME: Test for defined input/output. #: fortran/resolve.c:8284 @@ -47374,9 +47373,9 @@ msgstr "Tilldelning till en polymorf co-vektor vid %L är inte tillåtet" #: fortran/resolve.c:9196 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Assignment to an allocatable polymorphic variable at %L" -msgstr "Tilldelning till en FORALL-indexvariabel vid %L" +msgstr "Tilldelning till en allokerbar polymorf variabel vid %L" #: fortran/resolve.c:9201 #, gcc-internal-format, gfc-internal-format @@ -47385,14 +47384,14 @@ #. See PR 43366. #: fortran/resolve.c:9206 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Assignment to an allocatable polymorphic variable at %L is not yet supported" -msgstr "Tilldelning till en co-indexerad variabel vid %L i en PURE-procedur" +msgstr "Tilldelning till allokerbar polymorf variabel vid %L stödjs inte ännu" #: fortran/resolve.c:9212 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Nonallocatable variable must not be polymorphic in intrinsic assignment at %L - check that there is a matching specific subroutine for '=' operator" -msgstr "Variabeln får inte vara polymorf i inbyggd tilldelning vid %L - kontrollera att det finns en matchande specifik subrutin för operatorn ”=”" +msgstr "Ej allokerbar variabel får inte vara polymorf i inbyggd tilldelning vid %L - kontrollera att det finns en matchande specifik subrutin för operatorn ”=”" #: fortran/resolve.c:9221 #, gcc-internal-format, gfc-internal-format @@ -47440,9 +47439,9 @@ msgstr "FORALL-maskklausul vid %L kräver ett skalärt LOGICAL-uttryck" #: fortran/resolve.c:10180 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Variable %s with binding label %s at %L uses the same global identifier as entity at %L" -msgstr "Bindning av etikett ”%s” vid %L kolliderar med den globala entiteten ”%s” vid %L" +msgstr "Variabeln %s med bindningsetiketten ”%s” vid %L använder samma globala identifierare som en enhet vid %L" #. This can only happen if the variable is defined in a module - if it #. isn't the same module, reject it. @@ -47455,9 +47454,9 @@ #. exclude references to the same procedure via module association or #. multiple checks for the same procedure. #: fortran/resolve.c:10210 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Procedure %s with binding label %s at %L uses the same global identifier as entity at %L" -msgstr "Bindning av etikett ”%s” vid %L kolliderar med den globala entiteten ”%s” vid %L" +msgstr "Proceduren %s med bindningsetiketten ”%s” vid %L använder samma globala identifierare som enheten vid %L" #: fortran/resolve.c:10280 #, gcc-internal-format, gfc-internal-format @@ -47627,14 +47626,14 @@ msgstr "CHARACTER(*)-funktionen ”%s” vid %L" #: fortran/resolve.c:11102 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Procedure pointer '%s' at %L shall not be elemental" -msgstr "Procedurpekarkomponent ”%s” med PASS vid %L måste ha åtminstone ett argument" +msgstr "Procedurpekaren ”%s” vid %L skall inte vara elementär" #: fortran/resolve.c:11108 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Dummy procedure '%s' at %L shall not be elemental" -msgstr "Attrapprocedur ”%s” vid %C kan inte ha generiskt gränssnitt" +msgstr "Attrapprocedur ”%s” vid %L skall inte vara elementär" #: fortran/resolve.c:11164 #, gcc-internal-format, gfc-internal-format @@ -48049,14 +48048,14 @@ msgstr "Variabeln %s vid %L med attributet NO_ARG_CHECK skall ha typen TYPE(*) eller en numerisk inbyggd typ" #: fortran/resolve.c:12990 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Variable %s at %L with NO_ARG_CHECK attribute may not have the ALLOCATABLE, CODIMENSION, POINTER or VALUE attribute" -msgstr "Variabeln ”%s” med antagen typ vid %L får inte ha attributet ALLOCATABLE, CODIMENSION, POINTER eller VALUE" +msgstr "Variabeln ”%s” vid %L med attributet NO_ARG_CHECK får inte ha attributet ALLOCATABLE, CODIMENSION, POINTER eller VALUE" #: fortran/resolve.c:12998 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Variable %s at %L with NO_ARG_CHECK attribute may not have the INTENT(OUT) attribute" -msgstr "Variabeln ”%s” med antagen typ vid %L får inte ha attributet INTENT(OUT)" +msgstr "Variabeln ”%s” vid %L får inte ha attributet INTENT(OUT)" #: fortran/resolve.c:13005 #, gcc-internal-format, gfc-internal-format @@ -48119,9 +48118,9 @@ msgstr "Variabeln ”%s” vid %L av TYPE(C_PTR) eller TYPE(C_FUNPTR) får inte vara en co-vektor" #: fortran/resolve.c:13229 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, 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" +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" #: fortran/resolve.c:13244 #, gcc-internal-format, gfc-internal-format @@ -49056,9 +49055,9 @@ msgstr "bakändedeklaration för modulvariabel %s finns redan" #: fortran/trans-decl.c:4257 -#, fuzzy, gcc-internal-format, gfc-internal-format +#, gcc-internal-format, gfc-internal-format msgid "Unused PRIVATE module variable '%s' declared at %L" -msgstr "Oanvänd variabel ”%s” deklarerad vid %L" +msgstr "Oanvänd PRIVATE modulvariabel ”%s” deklarerad vid %L" #: fortran/trans-decl.c:4809 #, gcc-internal-format, gfc-internal-format @@ -50628,358 +50627,3 @@ #, gcc-internal-format msgid "creating selector for nonexistent method %qE" msgstr "skapar selektor för icke existerande metod %qE" - -#~ msgid "\tThis switch is deprecated. Use -fopt-info instead." -#~ msgstr "-ftree-vectorizer-verbose=\tDenna flagga bör undvikas. Använd -fopt-info istället." - -#~ msgid "Enable use of cost model in vectorization" -#~ msgstr "Aktivera användning av kostnadsmodell vid vektorisering" - -#~ msgid "Enable loop versioning when doing loop vectorization on trees" -#~ msgstr "Aktivera slingversioner när slingvektorisering i träd görs" - -#~ msgid "insn %d inside basic block %d but block_for_insn is NULL" -#~ msgstr "instruktion %d inuti grundblock %d men block_for_inst är NULL" - -#~ msgid "insn %d inside basic block %d but block_for_insn is %i" -#~ msgstr "instruktion %d inuti grundblock %d men block_for_insn är %i" - -#~ msgid "use -Wno-error=coverage-mismatch to tolerate the mismatch but performance may drop if the function is hot" -#~ msgstr "använd -Wno-error=coverage-mismatch för att tolerera bristen på överensstämmelse men prestandan kan sjunka om funktionen är het" - -#~ msgid "coverage mismatch ignored" -#~ msgstr "täckning som inte stämmer ignoreras" - -#~ msgid "this can result in poorly optimized code" -#~ msgstr "detta kan resultera i dåligt optimerad kod" - -#~ msgid "multiple accesses to volatile structure member because of packed attribute" -#~ msgstr "flera åtkomster av flyktig postmedlem på grund av attributet packed" - -#~ msgid "multiple accesses to volatile structure bitfield because of packed attribute" -#~ msgstr "flera åtkomster av flyktigt postbitfält på grund av attributet packed" - -#~ msgid "mis-aligned access used for structure member" -#~ msgstr "feljusterad åtkomst använd för postmedlem" - -#~ msgid "mis-aligned access used for structure bitfield" -#~ msgstr "feljusterad åtkomst använd för postbitfält" - -#~ msgid "when a volatile object spans multiple type-sized locations, the compiler must choose between using a single mis-aligned access to preserve the volatility, or using multiple aligned accesses to avoid runtime faults; this code may fail at runtime if the hardware does not allow this access" -#~ msgstr "när ett flyktigt objekt sträcker sig över flera typstora platser måste kompilatorn välja mellan att använda en enda feljusterad åtkomst för att bevara flyktigheten, eller använder flera justerade åtkomster för att undvika fel vid körtillfället; denna kod kan misslyckas vid körning om maskinvaran inte tillåter denna åtkomst" - -#~ msgid "use of type %<%E%> with two mismatching declarations at field %<%E%>" -#~ msgstr "användning av typen %<%E%> med två deklarationer vid fält %<%E%> som inte stämmer överens" - -#~ msgid "original type declared here" -#~ msgstr "orginaltypen är deklarerad här" - -#~ msgid "field in mismatching type declared here" -#~ msgstr "fält i typ som inte stämmer överens deklareras här" - -#~ msgid "type of field declared here" -#~ msgstr "typen på fältet är deklarerad här" - -#~ msgid "type of mismatching field declared here" -#~ msgstr "typen på fältet som inte stämmer är deklarerad här" - -#~ msgid "malformed option -fplugin-arg-%s (multiple '=' signs)" -#~ msgstr "felformaterad flagga -fplugin-arg-%s (flera ”=”-tecken)" - -#~ msgid "corrupted profile info: edge count exceeds maximal count" -#~ msgstr "trasig profileringsinformation: bågeantalet överskrider maximalt antal" - -#~ msgid "corrupted profile info: run_max * runs < sum_max" -#~ msgstr "trasig profileringsinformation: run_max · runs < sum_max" - -#~ msgid "correcting inconsistent profile data" -#~ msgstr "korrigerar inkonsistent profildata" - -#~ msgid "mudflap cannot be used together with link-time optimization" -#~ msgstr "mudflap kan inte användas tillsammans med optimering vid länkning" - -#~ msgid "unwind tables currently require a frame pointer for correctness" -#~ msgstr "at rulla ut tabeller kräver för närvarande en rampekare för att bli rätt" - -#~ msgid "mudflap checking not yet implemented for ARRAY_RANGE_REF" -#~ msgstr "mudflap-kontroll ännu inte implementerad för ARRAY_RANGE_REF" - -#~ msgid "mudflap cannot track %qE in stub function" -#~ msgstr "mudflap kan inte följa %qE i stubbfunktion" - -#~ msgid "mudflap cannot track unknown size extern %qE" -#~ msgstr "mudflap kan inte följa extern %qE av okänd storlek" - -#~ msgid "mudflap: this language is not supported" -#~ msgstr "mudflap: detta språk stödjs inte" - -# BB -> basic block -> grundblock -> GB -#~ msgid "correcting inconsistent value profile: %s profiler overall count (%d) does not match BB count (%d)" -#~ msgstr "rättar inkonsekvent värdeprofil: %s-profilerarens totala antal (%d) stämmer inte med GB-antalet (%d)" - -#~ msgid "Inconsistent profile: indirect call target (%d) does not exist" -#~ msgstr "Inkonsistent profil: målet för indirekt anrop (%d) finns inte" - -#~ msgid "Skipping target %s with mismatching types for icall " -#~ msgstr "Hoppar över målet %s med typer som inte stämmer för icall " - -#~ msgid "function profiling" -#~ msgstr "funktionsprofilering" - -#~ msgid "unwind tables currently require either a frame pointer or %saccumulate-outgoing-args%s for correctness" -#~ msgstr "utrullning av tabeller kräver antingen en rampekare eller %saccumulate-outgoing-args%s för att bli korrekt" - -#~ msgid "RETURN_ADDRESS_OFFSET not supported" -#~ msgstr "RETURN_ADDRESS_OFFSET stödjs inte" - -#~ msgid "-mcall-aixdesc must be big endian" -#~ msgstr "-mcall-aixdesc måste ha rak byteordning" - -#~ msgid "useless %<__thread%> in empty declaration" -#~ msgstr "oanvändbar %<__thread%> i tom deklaration" - -#~ msgid "function definition declared %<__thread%>" -#~ msgstr "funktionsdefinition deklarerad som %<__thread%>" - -#~ msgid "%<__thread%> used with %qE" -#~ msgstr "%<__thread%> använd med %qE" - -#~ msgid "at least one operand of a vector conditional operator must be a vector" -#~ msgstr "åtminstone en operand i en vektorsvillkorsoperator måste vara en vektor" - -#~ msgid " candidate conversions include %qD" -#~ msgstr " kandidat till konvertering är %qD" - -#~ msgid "new declaration %q#D" -#~ msgstr "ny deklaration av %q#D" - -#~ msgid "previous declaration of %q+#D" -#~ msgstr "tidigare deklaration av %q+#D" - -#~ msgid "declaration of C function %q#D conflicts with" -#~ msgstr "deklaration av C-funktion %q#D står i konflikt med" - -#~ msgid "previous declaration %q+#D here" -#~ msgstr "tidigare deklaration av %q+#D här" - -#~ msgid "ambiguates old declaration with deduced return type" -#~ msgstr "gör gammal deklaration med härledd returtyp tvetydig" - -#~ msgid "%q+D has a previous declaration as %q#D" -#~ msgstr "%q+D har en tidigare deklaration som %q#D" - -#~ msgid "declaration of namespace %qD conflicts with" -#~ msgstr "deklaration av namnrymden %qD står i konflikt med" - -#~ msgid "after previous declaration %q+D" -#~ msgstr "efter tidigare deklaration %q+D" - -#~ msgid "variable-sized object %qD may not be initialized" -#~ msgstr "objekt %qD med variabel storlek kan inte initieras" - -#~ msgid "%qD cannot be initialized by a non-constant expression when being declared" -#~ msgstr "%qD kan inte initieras från ett icke-konstant uttryck vid deklarationen" - -#~ msgid "type %qT is not derived from type %qT" -#~ msgstr "typ %qT är inte härledd från typen %qT" - -#~ msgid "%qs declared as function returning an abstract class type" -#~ msgstr "%qs är deklarerad som en funktion som returnerar en abstrakt klasstyp" - -#~ msgid "qualified function types cannot be used to declare static member functions" -#~ msgstr "kvalificerade funktiontyper kan inte användas för att deklarera statiska medlemsfunktioner" - -#~ msgid "qualified function types cannot be used to declare free functions" -#~ msgstr "kvalificerade funktiontyper kan inte användas för att deklarera fria funktioner" - -#~ msgid " in instantiation of template %qT" -#~ msgstr " i instansiering av mallen %qT" - -#~ msgid "field initializer is not constant" -#~ msgstr "fältinitierare är ej konstant" - -#~ msgid "non-constant array size in new, unable to verify length of initializer-list" -#~ msgstr "ickekonstant vektorstorlek i new, kan inte verifiera längden på initierarlistan" - -#~ msgid "%q#D conflicts with previous using declaration %q#D" -#~ msgstr "%q#D står i konflikt med tidigare using-deklaration %q#D" - -#~ msgid "ISO C++ does not allow initializers in lambda expression capture lists" -#~ msgstr "ISO C++ tillåter inte initierare i lambdauttrycks fångstlistor" - -#~ msgid "instantiation of %q+D as type %qT" -#~ msgstr "instansiering av %q+D som typ %qT" - -#~ msgid "deprecated covariant return type for %q+#D" -#~ msgstr "kovariant returtyp för %q+#D bör undvikas" - -#~ msgid " %q+#D declared here" -#~ msgstr " %q+#D deklarerades här" - -#~ msgid " since type %qT has pure virtual functions" -#~ msgstr " eftersom typen %qT har rent virtuella funktioner" - -#~ msgid "Variable '%s' at %L cannot have the ALLOCATABLE attribute because procedure '%s' is BIND(C)" -#~ msgstr "Variabeln ”%s” vid %L kan inte ha attributet ALLOCATABLE eftersom proceduren ”%s” är BIND(C)" - -#~ msgid "Variable '%s' at %L cannot have the POINTER attribute because procedure '%s' is BIND(C)" -#~ msgstr "Variabeln ”%s” vid %L kan inte ha attributet POINTER eftersom proceduren ”%s” är BIND(C)" - -#~ msgid "No such symbol in TYPE definition at %C" -#~ msgstr "Ingen sådan symbol i TYPE-definition vid %C" - -#~ msgid "Alternate RETURN at %C" -#~ msgstr "Alternativt RETURN vid %C" - -#~ msgid "Symbol '%s' at %C is already an external symbol that is not COMMON" -#~ msgstr "Symbolen ”%s” vid %C är redan en extern symbol som inte är COMMON" - -#~ msgid "Can't delete module file '%s': %s" -#~ msgstr "Kan inte radera modulfil ”%s”: %s" - -#~ msgid "Components of structure constructor '%s' at %L are PRIVATE" -#~ msgstr "Komponenter i postkonstruerare ”%s” vid %L är PRIVATE" - -#~ msgid "Character length mismatch in return type of function '%s' at %L (%ld/%ld)" -#~ msgstr "Teckenlängd stämmer inte i returtypen för funktion ”%s” vid %L (%ld/%ld)" - -#~ msgid "Dummy argument '%s' of procedure '%s' at %L has an attribute that requires an explicit interface for this procedure" -#~ msgstr "Attrappargument ”%s” till proceduren ”%s” vid %L har ett attribut som kräver ett explicit gränssnitt för denna procedur" - -#~ msgid "Procedure '%s' at %L with assumed-shape dummy argument '%s' must have an explicit interface" -#~ msgstr "Proceduren ”%s” vid %L med attrappargument ”%s” med antagen form måsta ha ett explicit gränssnitt" - -#~ msgid "Procedure '%s' at %L with assumed-rank dummy argument '%s' must have an explicit interface" -#~ msgstr "Proceduren ”%s” vid %L med attrappargument ”%s” med antagen ordning måste ha ett explicit gränssnitt" - -#~ msgid "Procedure '%s' at %L with coarray dummy argument '%s' must have an explicit interface" -#~ msgstr "Proceduren ”%s” vid %L med ett co-vektorattrappargument ”%s” måste ha ett explicit gränssnitt" - -#~ msgid "Procedure '%s' at %L with parametrized derived type argument '%s' must have an explicit interface" -#~ msgstr "Proceduren ”%s” vid %L med parametriserat härlett typargument ”%s” måste ha ett explicit gränssnitt" - -#~ msgid "Procedure '%s' at %L with polymorphic dummy argument '%s' must have an explicit interface" -#~ msgstr "Proceduren ”%s” vid %L med polymorft attrappargument ”%s” måste ha ett explicit gränssnitt" - -#~ msgid "Procedure '%s' at %L with assumed-type dummy argument '%s' must have an explicit interface" -#~ msgstr "Proceduren ”%s” vid %L med attrappargument ”%s” med antagen typ måste ha ett explicit gränssnitt" - -#~ msgid "The reference to function '%s' at %L either needs an explicit INTERFACE or the rank is incorrect" -#~ msgstr "Referensen till funktionen ”%s” vid %L behöver antingen ett explicit INTERFACE eller så är ordningen fel" - -#~ msgid "Function '%s' at %L with a POINTER or ALLOCATABLE result must have an explicit interface" -#~ msgstr "Funktionen ”%s” vid %L med ett POINTER eller ALLOCATABLE-resultat måste ha ett explicit gränssnitt" - -#~ msgid "Nonconstant character-length function '%s' at %L must have an explicit interface" -#~ msgstr "Ej konstant teckenlängdsfunktion ”%s” vid %L måste ha ett explicit gränssnitt" - -#~ msgid "ELEMENTAL procedure '%s' at %L must have an explicit interface" -#~ msgstr "ELEMENTAL-proceduren ”%s” vid %L måste ha ett explicit gränssnitt" - -#~ msgid "Procedure '%s' at %L with BIND(C) attribute must have an explicit interface" -#~ msgstr "Proceduren ”%s” vid %L med attributet BIND(C) måste ha ett explicit gränssnitt" - -#~ msgid "Argument to '%s' at %L is not a variable" -#~ msgstr "Argument till ”%s” vid %L är inte en variabel" - -#~ msgid "More actual than formal arguments in '%s' call at %L" -#~ msgstr "Fler aktuella än formella argument i anrop av ”%s” vid %L" - -#~ msgid "Parameter '%s' to '%s' at %L must be either a TARGET or an associated pointer" -#~ msgstr "Parameter ”%s” till ”%s” vid %L måste antingen vara en TARGET eller en associerad pekare" - -#~ msgid "Coindexed argument not permitted in '%s' call at %L" -#~ msgstr "Co-indexerat argument är inte tillåtet i anrop av ”%s” vid %L" - -#~ msgid "Allocatable variable '%s' used as a parameter to '%s' at %L must not be an array of zero size" -#~ msgstr "Allokerbar variabel ”%s” använd som en parameter till ”%s” vid %L får inte vara en vektor av storlek noll" - -#~ msgid "Assumed-shape array '%s' at %L cannot be an argument to the procedure '%s' because it is not C interoperable" -#~ msgstr "Vektor ”%s” med antagen form vid %L får inte vara ett argument till proceduren ”%s” eftersom den inte är C-interoperativ" - -#~ msgid "Deferred-shape array '%s' at %L cannot be an argument to the procedure '%s' because it is not C interoperable" -#~ msgstr "Vektor ”%s” med fördröjd form vid %L får inte vara ett argument till proceduren ”%s” eftersom den inte är C-interoperativ" - -#~ msgid "CHARACTER argument '%s' to '%s' at %L must have a length of 1" -#~ msgstr "CHARACTER-argument ”%s” till ”%s” vid %L måste ha längden 1" - -#~ msgid "Argument '%s' to '%s' at %L must be an associated scalar POINTER" -#~ msgstr "Argument ”%s” till ”%s” vid %L måste vara en associerad skalär POINTER" - -#~ msgid "Parameter '%s' to '%s' at %L must be a scalar" -#~ msgstr "Parameter ”%s” till ”%s” vid %L måste vara en skalär" - -#~ msgid "Parameter '%s' to '%s' at %L must not be polymorphic" -#~ msgstr "Parametern ”%s” till ”%s” vid %L får inte vara polymorf" - -#~ msgid "Argument '%s' to '%s' at %L must be a procedure" -#~ msgstr "Argumentet ”%s” till ”%s” vid %L måste vara en procedur" - -#~ msgid "Argument CPTR to C_F_POINTER at %L shall have the type C_PTR" -#~ msgstr "Argumentet CPTR till C_F_POINTER vid %L skall ha typen C_PTR" - -#~ msgid "SHAPE argument for call to %s at %L must be a rank 1 INTEGER array" -#~ msgstr "SHAPE-argument för anrop till %s vid %L måste vara en INTEGER-vektor av ordning 1" - -#~ msgid "NULL intrinsic at %L in data transfer statement requires MOLD=" -#~ msgstr "Inbyggd NULL vid %L i dataöverföringssats kräver MOLD=" - -#~ msgid "Binding label '%s' for common block '%s' at %L collides with the global entity '%s' at %L" -#~ msgstr "Bindande av etikett ”%s” för common-block ”%s” vid %L kolliderar med den globala entiteten ”%s” vid %L" - -#~ msgid "Binding label '%s' for common block '%s' at %L does not match the binding label '%s' for common block '%s' at %L" -#~ msgstr "Bindning av etikett ”%s” för common-block ”%s” vid %L stämmer inte överens med bindningen av etikett ”%s” för common-block ”%s” vid %L" - -#~ msgid "Binding label '%s' for common block '%s' at %L collides with global entity '%s' at %L" -#~ msgstr "Bindning av etikett ”%s” för common-block ”%s” vid %L kolliderar med global entitet ”%s” vid %L" - -#~ msgid "Binding label '%s' in interface body at %L collides with the global entity '%s' at %L" -#~ msgstr "Bindning av etikett ”%s” i gränssnittskropp vid %L kolliderar med den globala entiteten ”%s” vid %L" - -#~ msgid "Binding label '%s' at %L collides with global entity '%s' at %L" -#~ msgstr "Bindning av etikett ”%s” vid %L kolliderar med global entitet ”%s” vid %L" - -#~ msgid "Finalization at %L is not yet implemented" -#~ msgstr "Avslutningen vid %L är inte implementerad ännu" - -#~ msgid "Possible front-end bug: Deferred array size without pointer, allocatable attribute or derived type without allocatable components." -#~ msgstr "Möjligt fel i framänden: Fördröjd vektorstorlek utan pekare, attributet allocatable eller härledd typ utan allokerbara komponenter." - -#~ msgid "Derived type '%s' at %L has PRIVATE components" -#~ msgstr "Härledd typ ”%s” vid %L har PRIVATE-komponenter" diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/real.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/real.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/real.c 2014-01-05 19:58:12.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/real.c 2014-03-27 17:33:34.000000000 +0000 @@ -1377,7 +1377,8 @@ const REAL_VALUE_TYPE *r) { REAL_VALUE_TYPE t; - HOST_WIDE_INT low, high; + unsigned HOST_WIDE_INT low; + HOST_WIDE_INT high; int exp; switch (r->cl) diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/recog.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/recog.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/recog.c 2014-02-04 12:24:51.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/recog.c 2014-04-01 18:05:47.000000000 +0000 @@ -1023,6 +1023,19 @@ && MEM_P (sub)) return 0; +#ifdef CANNOT_CHANGE_MODE_CLASS + if (REG_P (sub) + && REGNO (sub) < FIRST_PSEUDO_REGISTER + && REG_CANNOT_CHANGE_MODE_P (REGNO (sub), GET_MODE (sub), mode) + && GET_MODE_CLASS (GET_MODE (sub)) != MODE_COMPLEX_INT + && GET_MODE_CLASS (GET_MODE (sub)) != MODE_COMPLEX_FLOAT + /* LRA can generate some invalid SUBREGS just for matched + operand reload presentation. LRA needs to treat them as + valid. */ + && ! LRA_SUBREG_P (op)) + return 0; +#endif + /* FLOAT_MODE subregs can't be paradoxical. Combine will occasionally create such rtl, and we must reject it. */ if (SCALAR_FLOAT_MODE_P (GET_MODE (op)) @@ -1083,9 +1096,6 @@ int register_operand (rtx op, enum machine_mode mode) { - if (GET_MODE (op) != mode && mode != VOIDmode) - return 0; - if (GET_CODE (op) == SUBREG) { rtx sub = SUBREG_REG (op); @@ -1096,41 +1106,12 @@ (Ideally, (SUBREG (MEM)...) should not exist after reload, but currently it does result from (SUBREG (REG)...) where the reg went on the stack.) */ - if (! reload_completed && MEM_P (sub)) - return general_operand (op, mode); - -#ifdef CANNOT_CHANGE_MODE_CLASS - if (REG_P (sub) - && REGNO (sub) < FIRST_PSEUDO_REGISTER - && REG_CANNOT_CHANGE_MODE_P (REGNO (sub), GET_MODE (sub), mode) - && GET_MODE_CLASS (GET_MODE (sub)) != MODE_COMPLEX_INT - && GET_MODE_CLASS (GET_MODE (sub)) != MODE_COMPLEX_FLOAT - /* LRA can generate some invalid SUBREGS just for matched - operand reload presentation. LRA needs to treat them as - valid. */ - && ! LRA_SUBREG_P (op)) - return 0; -#endif - - /* FLOAT_MODE subregs can't be paradoxical. Combine will occasionally - create such rtl, and we must reject it. */ - if (SCALAR_FLOAT_MODE_P (GET_MODE (op)) - /* LRA can use subreg to store a floating point value in an - integer mode. Although the floating point and the - integer modes need the same number of hard registers, the - size of floating point mode can be less than the integer - mode. */ - && ! lra_in_progress - && GET_MODE_SIZE (GET_MODE (op)) > GET_MODE_SIZE (GET_MODE (sub))) + if (!REG_P (sub) && (reload_completed || !MEM_P (sub))) return 0; - - op = sub; } - - return (REG_P (op) - && (REGNO (op) >= FIRST_PSEUDO_REGISTER - || in_hard_reg_set_p (operand_reg_set, - GET_MODE (op), REGNO (op)))); + else if (!REG_P (op)) + return 0; + return general_operand (op, mode); } /* Return 1 for a register in Pmode; ignore the tested mode. */ @@ -1232,27 +1213,7 @@ { if (CONSTANT_P (op)) return immediate_operand (op, mode); - - if (GET_MODE (op) != mode && mode != VOIDmode) - return 0; - - if (GET_CODE (op) == SUBREG) - { - /* Before reload, we can allow (SUBREG (MEM...)) as a register operand - because it is guaranteed to be reloaded into one. - Just make sure the MEM is valid in itself. - (Ideally, (SUBREG (MEM)...) should not exist after reload, - but currently it does result from (SUBREG (REG)...) where the - reg went on the stack.) */ - if (! reload_completed && MEM_P (SUBREG_REG (op))) - return general_operand (op, mode); - op = SUBREG_REG (op); - } - - return (REG_P (op) - && (REGNO (op) >= FIRST_PSEUDO_REGISTER - || in_hard_reg_set_p (operand_reg_set, - GET_MODE (op), REGNO (op)))); + return register_operand (op, mode); } /* Return 1 if OP is a valid operand that stands for pushing a diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/REVISION gcc-snapshot-20140405/=unpacked-tar1=/gcc/REVISION --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/REVISION 2014-03-21 17:17:52.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/REVISION 2014-04-05 09:06:35.000000000 +0000 @@ -1 +1 @@ -[trunk revision 208753] +[trunk revision 209146] diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/rtlanal.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/rtlanal.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/rtlanal.c 2014-01-29 10:48:03.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/rtlanal.c 2014-03-26 08:19:14.000000000 +0000 @@ -224,10 +224,10 @@ return 0; } -/* Return nonzero if the use of X as an address in a MEM can cause a trap. - MODE is the mode of the MEM (not that of X) and UNALIGNED_MEMS controls - whether nonzero is returned for unaligned memory accesses on strict - alignment machines. */ +/* Return nonzero if the use of X+OFFSET as an address in a MEM with SIZE + bytes can cause a trap. MODE is the mode of the MEM (not that of X) and + UNALIGNED_MEMS controls whether nonzero is returned for unaligned memory + references on strict alignment machines. */ static int rtx_addr_can_trap_p_1 (const_rtx x, HOST_WIDE_INT offset, HOST_WIDE_INT size, @@ -235,11 +235,12 @@ { enum rtx_code code = GET_CODE (x); - if (STRICT_ALIGNMENT - && unaligned_mems - && GET_MODE_SIZE (mode) != 0) + /* The offset must be a multiple of the mode size if we are considering + unaligned memory references on strict alignment machines. */ + if (STRICT_ALIGNMENT && unaligned_mems && GET_MODE_SIZE (mode) != 0) { HOST_WIDE_INT actual_offset = offset; + #ifdef SPARC_STACK_BOUNDARY_HACK /* ??? The SPARC port may claim a STACK_BOUNDARY higher than the real alignment of %sp. However, when it does this, the @@ -298,8 +299,27 @@ return 0; case REG: - /* As in rtx_varies_p, we have to use the actual rtx, not reg number. */ - if (x == frame_pointer_rtx || x == hard_frame_pointer_rtx + /* Stack references are assumed not to trap, but we need to deal with + nonsensical offsets. */ + if (x == frame_pointer_rtx) + { + HOST_WIDE_INT adj_offset = offset - STARTING_FRAME_OFFSET; + if (size == 0) + size = GET_MODE_SIZE (mode); + if (FRAME_GROWS_DOWNWARD) + { + if (adj_offset < frame_offset || adj_offset + size - 1 >= 0) + return 1; + } + else + { + if (adj_offset < 0 || adj_offset + size - 1 >= frame_offset) + return 1; + } + return 0; + } + /* ??? Need to add a similar guard for nonsensical offsets. */ + if (x == hard_frame_pointer_rtx || x == stack_pointer_rtx /* The arg pointer varies if it is not a fixed register. */ || (x == arg_pointer_rtx && fixed_regs[ARG_POINTER_REGNUM])) @@ -320,9 +340,7 @@ if (XEXP (x, 0) == pic_offset_table_rtx && CONSTANT_P (XEXP (x, 1))) return 0; - /* - or it is an address that can't trap plus a constant integer, - with the proper remainder modulo the mode size if we are - considering unaligned memory references. */ + /* - or it is an address that can't trap plus a constant integer. */ if (CONST_INT_P (XEXP (x, 1)) && !rtx_addr_can_trap_p_1 (XEXP (x, 0), offset + INTVAL (XEXP (x, 1)), size, mode, unaligned_mems)) diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/pr60689.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/pr60689.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/pr60689.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/pr60689.c 2014-03-28 19:04:54.000000000 +0000 @@ -0,0 +1,10 @@ +/* PR c++/60689 */ +/* { dg-do compile } */ + +struct S { char x[9]; }; + +void +foo (struct S *x, struct S *y, struct S *z) +{ + __atomic_exchange (x, y, z, __ATOMIC_SEQ_CST); +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/div-by-zero-4.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/div-by-zero-4.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/div-by-zero-4.c 2013-09-03 08:32:38.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/div-by-zero-4.c 2014-03-26 08:19:15.000000000 +0000 @@ -1,7 +1,7 @@ /* { dg-do run } */ /* { dg-options "-fsanitize=integer-divide-by-zero -Wno-overflow" } */ -#include +#define INT_MIN (-__INT_MAX__ - 1) int main (void) diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/overflow-1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/overflow-1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/overflow-1.c 2014-03-20 10:50:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/overflow-1.c 2014-03-26 08:19:15.000000000 +0000 @@ -1,6 +1,8 @@ /* { dg-do run } */ /* { dg-options "-fsanitize=signed-integer-overflow" } */ +#include + #ifndef ASM1 # define ASM1(a) /* Nothing */ #endif @@ -51,6 +53,8 @@ int main (void) { + fputs ("UBSAN TEST START\n", stderr); + CHECK (FN1 (char, char, +), 23); CHECK (FN1 (char, char, -), 5); CHECK (FN1 (char, char, *), 126); @@ -258,5 +262,8 @@ CHECK (FN5 (long long int), -77); CHECK (FN5 (unsigned long long int), -77); + fputs ("UBSAN TEST END\n", stderr); return 0; } + +/* { dg-output "UBSAN TEST START(\n|\r\n|\r)UBSAN TEST END" } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/overflow-add-1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/overflow-add-1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/overflow-add-1.c 2014-03-20 10:50:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/overflow-add-1.c 2014-03-26 08:19:15.000000000 +0000 @@ -1,6 +1,8 @@ /* { dg-do run } */ /* { dg-options "-fsanitize=signed-integer-overflow -Wno-unused-variable" } */ +#include + #define SCHAR_MAX __SCHAR_MAX__ #define SHRT_MAX __SHRT_MAX__ #define INT_MAX __INT_MAX__ @@ -16,6 +18,8 @@ int main (void) { + fputs ("UBSAN TEST START\n", stderr); + #if __INT_MAX__ == 2147483647 /* Here, nothing should fail. */ volatile int j = INT_MAX; @@ -56,5 +60,8 @@ check (d, -32768); #endif + fputs ("UBSAN TEST END\n", stderr); return 0; } + +/* { dg-output "UBSAN TEST START(\n|\r\n|\r)UBSAN TEST END" } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/overflow-mul-1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/overflow-mul-1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/overflow-mul-1.c 2014-03-20 10:50:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/overflow-mul-1.c 2014-03-26 08:19:15.000000000 +0000 @@ -1,6 +1,8 @@ /* { dg-do run } */ /* { dg-options "-fsanitize=signed-integer-overflow -Wno-unused-variable" } */ +#include + #define SCHAR_MAX __SCHAR_MAX__ #define SHRT_MAX __SHRT_MAX__ #define INT_MAX __INT_MAX__ @@ -16,6 +18,8 @@ int main (void) { + fputs ("UBSAN TEST START\n", stderr); + /* Test integer promotion. */ #if __SCHAR_MAX__ == 127 volatile signed char a = -2; @@ -42,5 +46,8 @@ check (o, INT_MIN); #endif + fputs ("UBSAN TEST END\n", stderr); return 0; } + +/* { dg-output "UBSAN TEST START(\n|\r\n|\r)UBSAN TEST END" } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/overflow-mul-3.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/overflow-mul-3.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/overflow-mul-3.c 2014-03-20 10:50:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/overflow-mul-3.c 2014-03-26 08:19:15.000000000 +0000 @@ -1,6 +1,8 @@ /* { dg-do run } */ /* { dg-options "-fsanitize=signed-integer-overflow" } */ +#include + __attribute__((noinline, noclone)) long long mul (long long x, long long y) { @@ -29,10 +31,16 @@ int main () { + fputs ("UBSAN TEST START\n", stderr); + unsigned int i; for (i = 0; i < sizeof (tab) / sizeof (long long); i += 3) if (mul (tab[i], tab[i + 1]) != tab[i + 2] || mul (tab[i + 1], tab[i]) != tab[i + 2]) __builtin_abort (); + + fputs ("UBSAN TEST END\n", stderr); return 0; } + +/* { dg-output "UBSAN TEST START(\n|\r\n|\r)UBSAN TEST END" } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/overflow-negate-2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/overflow-negate-2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/overflow-negate-2.c 2014-03-20 10:50:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/overflow-negate-2.c 2014-03-26 08:19:15.000000000 +0000 @@ -1,6 +1,8 @@ /* { dg-do run } */ /* { dg-options "-fsanitize=signed-integer-overflow -Wno-unused-variable" } */ +#include + #define SCHAR_MIN (-__SCHAR_MAX__ - 1) #define SHRT_MIN (-__SHRT_MAX__ - 1) #define INT_MIN (-__INT_MAX__ - 1) @@ -12,6 +14,8 @@ int main (void) { + fputs ("UBSAN TEST START\n", stderr); + volatile signed char c = -SCHAR_MIN; CHECK (c, -128); @@ -34,5 +38,8 @@ lli = -(unsigned long long) lli; CHECK (lli, -0x8000000000000000L); + fputs ("UBSAN TEST END\n", stderr); return 0; } + +/* { dg-output "UBSAN TEST START(\n|\r\n|\r)UBSAN TEST END" } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/overflow-sub-1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/overflow-sub-1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/overflow-sub-1.c 2014-03-20 10:50:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/overflow-sub-1.c 2014-03-26 08:19:15.000000000 +0000 @@ -1,6 +1,8 @@ /* { dg-do run } */ /* { dg-options "-fsanitize=signed-integer-overflow -Wno-unused-variable" } */ +#include + #define SCHAR_MAX __SCHAR_MAX__ #define SCHAR_MIN (-__SCHAR_MAX__ - 1) #define SHRT_MAX __SHRT_MAX__ @@ -18,6 +20,8 @@ int main (void) { + fputs ("UBSAN TEST START\n", stderr); + #if __INT_MAX__ == 2147483647 /* Here, nothing should fail. */ volatile int i = -1; @@ -58,5 +62,8 @@ check (d, 32767); #endif + fputs ("UBSAN TEST END\n", stderr); return 0; } + +/* { dg-output "UBSAN TEST START(\n|\r\n|\r)UBSAN TEST END" } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/pr59503.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/pr59503.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/pr59503.c 2014-03-20 10:50:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/pr59503.c 2014-03-26 08:19:15.000000000 +0000 @@ -1,13 +1,21 @@ /* { dg-do run } */ /* { dg-options "-fsanitize=signed-integer-overflow" } */ +#include + int main (void) { + fputs ("UBSAN TEST START\n", stderr); + long long int a = 14; long int b = 9; asm volatile ("" : "+r" (a), "+r" (b)); if ((a - b) != 5) __builtin_abort (); + + fputs ("UBSAN TEST END\n", stderr); return 0; } + +/* { dg-output "UBSAN TEST START(\n|\r\n|\r)UBSAN TEST END" } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/pr60613-1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/pr60613-1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/pr60613-1.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/pr60613-1.c 2014-03-26 08:19:15.000000000 +0000 @@ -0,0 +1,41 @@ +/* PR sanitizer/60613 */ +/* { dg-do run } */ +/* { dg-options "-fsanitize=undefined" } */ + +#include + +long long y; + +__attribute__((noinline, noclone)) long long +foo (long long x) +{ + asm (""); + if (x >= 0 || x < -2040) + return 23; + x += 2040; + return x - y; +} + +__attribute__((noinline, noclone)) long long +bar (long long x) +{ + asm (""); + return 8LL - x; +} + +int +main () +{ + fputs ("UBSAN TEST START\n", stderr); + + y = 1; + if (foo (8 - 2040) != 8 - 1) + __builtin_abort (); + if (bar (1) != 8 - 1) + __builtin_abort (); + + fputs ("UBSAN TEST END\n", stderr); + return 0; +} + +/* { dg-output "UBSAN TEST START(\n|\r\n|\r)UBSAN TEST END" } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/pr60613-2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/pr60613-2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/pr60613-2.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/pr60613-2.c 2014-03-26 08:19:15.000000000 +0000 @@ -0,0 +1,36 @@ +/* PR sanitizer/60613 */ +/* { dg-do run } */ +/* { dg-options "-fsanitize=undefined" } */ + +long long y; + +__attribute__((noinline, noclone)) long long +foo (long long x) +{ + asm (""); + if (x >= 0 || x < -2040) + return 23; + x += 2040; + return x - y; +} + +__attribute__((noinline, noclone)) long long +bar (long long x) +{ + asm (""); + return 8LL - x; +} + +int +main () +{ + y = -__LONG_LONG_MAX__ + 6; + if (foo (8 - 2040) != -__LONG_LONG_MAX__) + __builtin_abort (); + if (bar (-__LONG_LONG_MAX__ + 5) != -__LONG_LONG_MAX__ + 1) + __builtin_abort (); + return 0; +} + +/* { dg-output "signed integer overflow: 8 \\- -9223372036854775801 cannot be represented in type 'long long int'(\n|\r\n|\r)" } */ +/* { dg-output "\[^\n\r]*signed integer overflow: 8 \\- -9223372036854775802 cannot be represented in type 'long long int'" } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/pr60636.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/pr60636.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/pr60636.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/pr60636.c 2014-03-27 17:33:35.000000000 +0000 @@ -0,0 +1,15 @@ +/* PR sanitizer/60636 */ +/* { dg-do run } */ +/* { dg-options "-fsanitize=undefined" } */ + +volatile long long int a; + +int +main () +{ + long long int u = -__LONG_LONG_MAX__ - 1; + a = u > 0 ? u : -u; + return 0; +} + +/* { dg-output "negation of -9223372036854775808 cannot be represented in type 'long long int'" } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/save-expr-1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/save-expr-1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/save-expr-1.c 2013-09-03 08:32:38.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/save-expr-1.c 2014-03-26 08:19:15.000000000 +0000 @@ -1,11 +1,19 @@ /* { dg-do compile } */ /* { dg-options "-fsanitize=shift -Wall -Werror -O" } */ +#include + static int x; int main (void) { + fputs ("UBSAN TEST START\n", stderr); + int o = 1; int y = x << o; + + fputs ("UBSAN TEST END\n", stderr); return y; } + +/* { dg-output "UBSAN TEST START(\n|\r\n|\r)UBSAN TEST END" } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/shift-3.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/shift-3.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/shift-3.c 2013-09-03 08:32:38.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/shift-3.c 2014-03-26 08:19:15.000000000 +0000 @@ -1,11 +1,19 @@ /* { dg-do run } */ /* { dg-options "-fsanitize=shift -w" } */ +#include + int main (void) { + fputs ("UBSAN TEST START\n", stderr); + unsigned int a = 1; a <<= 31; a <<= 1; + + fputs ("UBSAN TEST END\n", stderr); return 0; } + +/* { dg-output "UBSAN TEST START(\n|\r\n|\r)UBSAN TEST END" } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/shift-6.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/shift-6.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/shift-6.c 2013-09-26 09:45:50.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/shift-6.c 2014-03-26 08:19:15.000000000 +0000 @@ -2,10 +2,14 @@ /* { dg-do run { target int32plus } } */ /* { dg-options "-fsanitize=shift -w" } */ +#include + int x = 7; int main (void) { + fputs ("UBSAN TEST START\n", stderr); + /* All of the following should pass. */ int A[128 >> 5] = {}; int B[128 << 5] = {}; @@ -26,5 +30,9 @@ case 128 >> (4 + 1): return 1; } + + fputs ("UBSAN TEST END\n", stderr); return 0; } + +/* { dg-output "UBSAN TEST START(\n|\r\n|\r)UBSAN TEST END" } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/undefined-1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/undefined-1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/undefined-1.c 2014-03-20 10:50:23.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/undefined-1.c 2014-03-26 08:19:15.000000000 +0000 @@ -1,6 +1,8 @@ /* { dg-do run } */ /* { dg-options "-fsanitize=undefined" } */ +#include + int foo (int x, int y) { @@ -19,7 +21,13 @@ int main (void) { + fputs ("UBSAN TEST START\n", stderr); + foo (3, 2); bar (12, 42); + + fputs ("UBSAN TEST END\n", stderr); return 0; } + +/* { dg-output "UBSAN TEST START(\n|\r\n|\r)UBSAN TEST END" } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/vla-2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/vla-2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/vla-2.c 2013-12-01 15:28:31.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/vla-2.c 2014-03-26 08:19:15.000000000 +0000 @@ -1,9 +1,13 @@ /* { dg-do run } */ /* { dg-options "-fsanitize=vla-bound -Wall -Wno-unused-variable" } */ +#include + int main (void) { + fputs ("UBSAN TEST START\n", stderr); + const int t = 0; struct s { int x; @@ -11,5 +15,8 @@ int g[t]; }; + fputs ("UBSAN TEST END\n", stderr); return 0; } + +/* { dg-output "UBSAN TEST START(\n|\r\n|\r)UBSAN TEST END" } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/vla-3.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/vla-3.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/vla-3.c 2013-12-01 15:28:31.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/vla-3.c 2014-03-26 08:19:15.000000000 +0000 @@ -1,6 +1,8 @@ /* { dg-do run } */ /* { dg-options "-fsanitize=vla-bound" } */ +#include + /* Don't instrument the arrays here. */ int foo (int n, int a[]) @@ -11,6 +13,13 @@ int main (void) { + fputs ("UBSAN TEST START\n", stderr); + int a[6] = { }; - return foo (3, a); + int ret = foo (3, a); + + fputs ("UBSAN TEST END\n", stderr); + return ret; } + +/* { dg-output "UBSAN TEST START(\n|\r\n|\r)UBSAN TEST END" } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/vla-4.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/vla-4.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/vla-4.c 2013-11-03 20:55:51.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/c-c++-common/ubsan/vla-4.c 2014-03-26 08:19:15.000000000 +0000 @@ -1,13 +1,21 @@ /* { dg-do run } */ /* { dg-options "-fsanitize=vla-bound" } */ +#include + int main (void) { + fputs ("UBSAN TEST START\n", stderr); + int x = 1; /* Check that the size of an array is evaluated only once. */ int a[++x]; if (x != 2) __builtin_abort (); + + fputs ("UBSAN TEST END\n", stderr); return 0; } + +/* { dg-output "UBSAN TEST START(\n|\r\n|\r)UBSAN TEST END" } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/ChangeLog gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/ChangeLog --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/ChangeLog 2014-03-21 17:14:28.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/ChangeLog 2014-04-05 08:48:42.000000000 +0000 @@ -1,3 +1,470 @@ +2014-05-04 Pitchumani Sivanupandi + + * gcc.target/avr/dev-specific-rmw.c: New test. + +2014-04-04 Cong Hou + + PR tree-optimization/60656 + * gcc.dg/vect/pr60656.c: New test. + +2014-04-04 Andreas Krebbel + + * gcc.dg/builtin-bswap-6.c: Adjust return value to disable GCC + optimization. + * gcc.dg/builtin-bswap-7.c: Likewise. + +2014-04-04 Paolo Carlini + + PR c++/58207 + * g++.dg/cpp0x/constexpr-ice15.C: New. + +2014-04-04 Jan Hubicka + + PR ipa/59626 + testcase by Richard Biener + * gcc.dg/lto/pr59626_0.c: New testcase. + * gcc.dg/lto/pr59626_1.c: New testcase. + +2014-04-04 Ramana Radhakrishnan + + PR debug/60655 + * gcc.c-torture/compile/pr60655-1.c: New test. + +2014-04-04 Martin Jambor + + 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. + +2014-04-04 Jeff Law + + PR target/60657 + * gcc.target/arm/pr60657.c: New test. + +2014-04-04 Richard Biener + + PR ipa/60746 + * g++.dg/torture/pr60746.C: New testcase. + +2014-04-04 Fabien Chêne + + * g++.old-deja/g++.robertl/eb121.C: Adjust. + * g++.old-deja/g++.jason/overload21.C: Likewise. + * g++.old-deja/g++.law/init5.C: Likewise. + +2014-04-03 Cong Hou + + PR tree-optimization/60505 + * gcc.dg/vect/pr60505.c: New test. + +2014-04-03 Richard Biener + + PR tree-optimization/60740 + * gcc.dg/graphite/pr60740.c: New testcase. + +2014-04-03 Nathan Sidwell + + * 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-02 Jan Hubicka + + PR ipa/60659 + * testsuite/g++.dg/torture/pr60659.C: New testcase. + +2014-04-02 Bill Schmidt + + PR tree-optimization/60733 + * gcc.dg/torture/pr60733.c: New test. + +2014-04-02 Vladimir Makarov + + PR rtl-optimization/60650 + * gcc.target/arm/pr60650-2.c: New. + +2014-04-02 Joseph Myers + + * gcc.target/i386/avx2-vpand-3.c, + gcc.target/i386/avx256-unaligned-load-2.c: Use -mno-prefer-avx128. + +2014-04-02 Joseph Myers + + * gcc.target/i386/funcspec-2.c, gcc.target/i386/funcspec-3.c, + gcc.target/i386/funcspec-9.c, gcc.target/i386/isa-1.c, + gcc.target/i386/memcpy-strategy-1.c, + gcc.target/i386/memcpy-strategy-2.c, + gcc.target/i386/memcpy-vector_loop-1.c, + gcc.target/i386/memcpy-vector_loop-2.c, + gcc.target/i386/memset-vector_loop-1.c, + gcc.target/i386/memset-vector_loop-2.c, + gcc.target/i386/sse2-init-v2di-2.c, gcc.target/i386/ssetype-1.c, + gcc.target/i386/ssetype-2.c, gcc.target/i386/ssetype-5.c: Skip for + -march= options different from those in dg-options. + +2014-04-02 Joseph Myers + + * gcc.target/i386/387-3.c, gcc.target/i386/387-4.c, + gcc.target/i386/pr30970.c: Use -mtune=generic. + * gcc.target/i386/avx2-vpaddb-3.c, + gcc.target/i386/avx2-vpaddd-3.c, gcc.target/i386/avx2-vpaddq-3.c, + gcc.target/i386/avx2-vpaddw-3.c, gcc.target/i386/avx2-vpmulld-3.c, + gcc.target/i386/avx2-vpmullw-3.c, gcc.target/i386/avx2-vpsrad-3.c, + gcc.target/i386/avx2-vpsraw-3.c, gcc.target/i386/avx2-vpsrld-3.c, + gcc.target/i386/avx2-vpsrlw-3.c, gcc.target/i386/avx2-vpsubb-3.c, + gcc.target/i386/avx2-vpsubd-3.c, gcc.target/i386/avx2-vpsubq-3.c, + gcc.target/i386/avx2-vpsubw-3.c, + gcc.target/i386/avx256-unaligned-load-1.c, + gcc.target/i386/avx256-unaligned-load-4.c, + gcc.target/i386/avx256-unaligned-store-1.c, + gcc.target/i386/avx256-unaligned-store-2.c, + gcc.target/i386/avx256-unaligned-store-4.c: Use + -mno-prefer-avx128. + +2014-03-26 Dominique d'Humieres + Iain Sandoe + + PR target/54083 + * gcc.dg/attr-weakref-1.c: Allow the test on darwin + with the additional options -Wl,-undefined,dynamic_lookup + and -Wl,-flat_namespace. + * gcc.dg/torture/pr53922.c: Additional option + -Wl,-flat_namespace for darwin[89]. + * gcc.dg/torture/pr60092.c: Additional options + -Wl,-undefined,dynamic_lookup and -Wl,-flat_namespace + for darwin[89]. + +2014-03-26 Dominique d'Humieres + + PR target/43751 + * lib/prune.exp: Modify the regular express to prune + the new warnings introduced by r205679 on darwin9. + +2014-04-01 Fabien Chêne + + * g++.dg/init/ctor4.C: Adjust. + * g++.dg/init/ctor4-1.C: New. + * g++.dg/cpp0x/defaulted2.C: Adjust. + +2014-04-01 Richard Henderson + + PR target/60704 + * gcc.dg/pr60704.c: New file. + +2014-04-01 Bin Cheng + + PR target/60363 + * gcc.dg/tree-ssa/ssa-dom-thread-4.c: Xfail for + logical_op_short_circuit targets. + +2014-04-01 Dominique d'Humieres + + PR libfortran/60128 + * gfortran.dg/fmt_en.f90: Skip unsupported rounding tests. + XFAIL for i?86-*-solaris2.9* and hppa*-*-hpux*. + +2014-03-31 H.J. Lu + + PR rtl-optimization/60700 + * gcc.target/i386/pr60700.c: New test. + +2014-03-31 Ramana Radhakrishnan + + PR target/60650 + * gcc.target/arm/pr60650.c: Adjust command line options. + +2014-03-31 Martin Jambor + + PR middle-end/60647 + * gcc.dg/pr60647-1.c: New test. + * gcc.dg/pr60647-2.c: Likewise. + +2014-03-31 Richard Biener + + * gcc.dg/lto/pr55113_0.c: Skip also for 32bit multilib on x86_64. + +2014-03-31 Kugan Vivekanandarajah + + PR target/60034 + * gcc.target/aarch64/pr60034.c: New file. + +2014-03-29 Adam Butcher + + PR c++/60626 + * g++.dg/cpp1y/pr60626.C: New testcase. + +2014-03-29 Joseph Myers + + * gcc.dg/pr45416.c: Allow bextr on x86. + * gcc.target/i386/fma4-builtin.c, gcc.target/i386/fma4-fma-2.c, + gcc.target/i386/fma4-fma.c, gcc.target/i386/fma4-vector-2.c, + gcc.target/i386/fma4-vector.c: Use -mno-fma. + * gcc.target/i386/l_fma_double_1.c, + gcc.target/i386/l_fma_double_2.c, + gcc.target/i386/l_fma_double_3.c, + gcc.target/i386/l_fma_double_4.c, + gcc.target/i386/l_fma_double_5.c, + gcc.target/i386/l_fma_double_6.c, gcc.target/i386/l_fma_float_1.c, + gcc.target/i386/l_fma_float_2.c, gcc.target/i386/l_fma_float_3.c, + gcc.target/i386/l_fma_float_4.c, gcc.target/i386/l_fma_float_5.c, + gcc.target/i386/l_fma_float_6.c: Use -mno-fma4. + * gcc.target/i386/pr27971.c: Use -mno-tbm. + * gcc.target/i386/pr42542-4a.c: Use -mno-avx. + * gcc.target/i386/pr59390.c: Use -mno-fma -mno-fma4. + +2014-03-29 Jakub Jelinek + + PR target/60648 + * g++.dg/pr60648.C: Move test to... + * g++.dg/torture/pr60648.C: ... here. Run on all targets, remove + dg-options, add for fpic targets dg-additional-options -fPIC. + +2014-03-28 Eric Botcazou + + * gnat.dg/opt33.adb: New testcase. + +2014-03-28 Vladimir Makarov + + PR target/60697 + * gcc.target/aarch64/pr60697.c: New. + +2014-03-27 Jeff Law + + PR target/60648 + * g++.dg/pr60648.C: New test. + +2014-03-28 Adam Butcher + + PR c++/60573 + * g++.dg/cpp1y/pr60573.C: New testcase. + +2014-03-28 Jakub Jelinek + + PR target/60693 + * gcc.target/i386/pr60693.c: New test. + +2014-03-28 Vishnu K S + + * gcc.dg/pr59940.c (si): Use 32-bit SI mode instead of int. + +2014-03-28 Jakub Jelinek + + PR c++/60689 + * c-c++-common/pr60689.c: New test. + + PR c++/58678 + * g++.dg/abi/thunk6.C: Scan assembler for _ZTv0_n32_N1CD1Ev + only for lp64 targets and scan for _ZTv0_n16_N1CD1Ev for ilp32 + targets. + +2014-03-28 Vladimir Makarov + + PR target/60675 + * gcc.target/aarch64/pr60675.C: New. + +2014-03-28 Andreas Krebbel + + * 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. + +2014-03-28 Kirill Yukhin + + * 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. + * gcc.target/i386/avx512f-vshufi64x2-2.c: Ditto. + +2014-03-28 Jakub Jelinek + + PR ipa/60315 + * g++.dg/torture/pr60315.C: Add -std=c++11 to dg-options. + +2014-03-28 Tobias Burnus + + * lib/cilk-plus-dg.exp: New. + * g++.dg/cilk-plus/cilk-plus.exp: Use it. + * gcc.dg/cilk-plus/cilk-plus.exp: Use it. + +2014-03-27 Thomas Koenig + + PR fortran/60522 + * gfortran.dg/where_4.f90: New test case. + +2014-03-27 Tobias Burnus + + PR fortran/58880 + * gfortran.dg/finalize_24.f90: New. + +2014-03-27 Michael Meissner + + * gcc.target/powerpc/p8vector-vbpermq.c: New test to test the + vbpermq builtin. + + * gcc.target/powerpc/vsx-extract-1.c: New test to test VSX + vec_select optimizations. + * gcc.target/powerpc/vsx-extract-2.c: Likewise. + * gcc.target/powerpc/vsx-extract-3.c: Likewise. + + PR target/60672 + * gcc.target/powerpc/pr60676.c: New file, make sure xxsldwi and + xxpermdi builtins are supported. + +2014-03-27 Vladimir Makarov + + PR rtl-optimization/60650 + * gcc.target/arm/pr60650.c: New. + +2014-03-27 Andreas Krebbel + + * gcc.target/s390/20140327-1.c: New testcase. + +2014-03-27 Jakub Jelinek + + PR middle-end/60682 + * g++.dg/gomp/pr60682.C: New test. + +2014-03-27 John David Anglin + + * gcc.dg/torture/pr60092.c: Remove default dg-skip-if arguments. + +2014-03-27 Marcus Shawcroft + + PR target/60580 + * gcc.target/aarch64/pr60580_1.c: New. + * gcc.target/aarch64/test_fp_attribute_1.c: New. + * gcc.target/aarch64/test_fp_attribute_2.c: New. + +2014-03-26 Dehao Chen + + * gcc.dg/predict-8.c: New test. + +2014-03-26 Fabien Chêne + + PR c++/52369 + * g++.dg/init/const10.C: New. + * g++.dg/init/const11.C: New. + * g++.dg/init/pr25811.C: Adjust. + * g++.dg/init/pr29043.C: Likewise. + * g++.dg/init/pr43719.C: Likewise. + * g++.dg/init/pr44086.C: Likewise. + * g++.dg/init/ctor8.C: Likewise. + * g++.dg/init/uninitialized1.C: Likewise. + +2014-03-26 Jakub Jelinek + + PR sanitizer/60636 + * c-c++-common/ubsan/pr60636.c: New test. + +2014-03-26 Andreas Schwab + + * g++.dg/torture/pr60315.C: Remove duplication. + +2014-03-26 Eric Botcazou + + * gcc.c-torture/execute/20140326-1.c: New test. + +2014-03-25 Jan Hubicka + + PR ipa/60315 + * g++.dg/torture/pr60315.C: New testcase. + +2014-03-25 Martin Jambor + + PR ipa/60600 + * g++.dg/ipa/pr60600.C: New test. + +2014-03-25 John David Anglin + + PR testsuite/58013 + * g++.dg/opt/pr56999.C: Pop hidden visibility. + +2014-03-25 Richard Biener + + PR middle-end/60635 + * gfortran.dg/lto/pr60635_0.f90: New testcase. + * gfortran.dg/lto/pr60635_1.c: Likewise. + +2014-03-24 Adam Butcher + + PR c++/60627 + * g++.dg/cpp1y/pr60627.C: New testcase. + +2014-03-24 Alex Velenko + + * gcc.target/aarch64/ushr64_1.c: New. + +2014-03-24 James Greenhalgh + + * gcc.target/aarch64/vect-abs.c (dg-options): Add -std=c99. + (LONG_LONG): Use LLONG. + (set_rvector_long): Explicitly return void. + (set_vector_long): Likewise. + (check_vector_long): Likewise. + +2014-03-24 Marek Polacek + + * 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. + * c-c++-common/ubsan/overflow-mul-3.c: Likewise. + * c-c++-common/ubsan/overflow-negate-2.c: Likewise. + * c-c++-common/ubsan/overflow-sub-1.c: Likewise. + * c-c++-common/ubsan/pr59503.c: Likewise. + * c-c++-common/ubsan/pr60613-1.c: Likewise. + * c-c++-common/ubsan/save-expr-1.c: Likewise. + * c-c++-common/ubsan/shift-3.c: Likewise. + * c-c++-common/ubsan/shift-6.c: Likewise. + * c-c++-common/ubsan/undefined-1.c: Likewise. + * c-c++-common/ubsan/vla-2.c: Likewise. + * c-c++-common/ubsan/vla-3.c: Likewise. + * c-c++-common/ubsan/vla-4.c: Likewise. + * g++.dg/ubsan/cxx11-shift-1.C: Likewise. + * g++.dg/ubsan/return-2.C: Likewise. + +2014-03-23 John David Anglin + + * gcc.dg/tree-prof/pr59003.c: Add -fno-common to dg-options on + hppa*-*-hpux*. + + * gcc.dg/torture/pr60092.c: Skip on 32-bit hpux. + + PR libfortran/59313 + PR libfortran/58015 + * gfortran.dg/erf_3.F90: Skip on hppa*-*-hpux*. + * gfortran.dg/round_4.f90: Likewise. + +2014-03-23 Dominique d'Humieres + + PR libfortran/60128 + * gfortran.dg/fmt_en.f90: Update test. XFAIL for + i?86-*-solaris2.9*. + +2014-03-22 Jakub Jelinek + + PR sanitizer/60613 + * c-c++-common/ubsan/pr60613-1.c: New test. + * c-c++-common/ubsan/pr60613-2.c: New test. + +2014-03-22 Matthias Klose + + * g++.dg/cpp0x/regress: Remove empty directory. + +2014-03-22 Jakub Jelinek + + PR debug/60603 + * gcc.dg/debug/dwarf2/dwarf2-macro2.c: New test. + 2014-03-21 Paolo Carlini * g++.dg/cpp1y/pr60033.C: Use target c++1y. @@ -16,7 +483,7 @@ 2014-03-21 Martin Jambor PR ipa/59176 - * g++.dg/torture/pr59176.C: New test. + * g++.dg/torture/pr59176.C: New test. 2014-03-21 Martin Jambor diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/ChangeLog-2008 gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/ChangeLog-2008 --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/ChangeLog-2008 2013-02-25 13:50:41.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/ChangeLog-2008 2014-04-02 04:32:23.000000000 +0000 @@ -1814,7 +1814,7 @@ * gcc.dg/Warray-bounds-5.c: New test. * gcc.dg/Warray-bounds-6.c: New test. -2008-11-05 Fabien Chene +2008-11-05 Fabien Chene PR c++/32519 * g++.dg/template/pr32519.C: New test. diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/ChangeLog-2010 gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/ChangeLog-2010 --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/ChangeLog-2010 2013-02-25 13:50:41.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/ChangeLog-2010 2014-04-02 04:32:24.000000000 +0000 @@ -11264,7 +11264,7 @@ * g++.dg/cpp0x/initlist26.C: Adjust. * g++.dg/cpp0x/initlist28.C: Adjust. -2010-05-10 Fabien Chêne +2010-05-10 Fabien Chêne PR c++/43719 * g++.dg/init/pr43719.C: New. @@ -11389,7 +11389,7 @@ * gnat.dg/sizetype3.ad[sb]: New test. * gnat.dg/sizetype3_pkg.ads: New helper. -2010-05-07 Fabien Chêne +2010-05-07 Fabien Chêne PR c++/43951 * g++.dg/init/new29.C: New. @@ -11738,12 +11738,6 @@ * gcc.dg/tree-ssa/builtin-free.c: New testcase. -2010-04-29 Fabien Chêne - - PR c++/43890 - * init.c (diagnose_uninitialized_cst_or_ref_member): check for - user-provided constructor while recursing. - 2010-04-29 Janus Weil PR fortran/42274 @@ -11866,7 +11860,7 @@ * g++.dg/template/pr23510.C: Update. * lib/prune.exp: Filter out 'recursively instantiated'. -2010-04-27 Fabien Chêne +2010-04-27 Fabien Chêne PR c++/29043 * g++.dg/init/pr29043.C: New. @@ -11898,7 +11892,7 @@ * g++.dg/template/sfinae17.C: New. * g++.dg/template/sfinae18.C: New. -2010-04-27 Fabien Chêne +2010-04-27 Fabien Chêne * g++.dg/init/pr42844.C: New. * g++.dg/cpp0x/pr42844-2.C: New. @@ -12500,7 +12494,7 @@ * g++.dg/cpp0x/lambda/lambda-conv4.C: New. * g++.dg/cpp0x/lambda/lambda-deduce2.C: New. -2010-04-12 Fabien Chene +2010-04-12 Fabien Chene PR c++/25811 * g++.dg/init/pr25811.C: New test. diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.c-torture/compile/pr60655-1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.c-torture/compile/pr60655-1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.c-torture/compile/pr60655-1.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.c-torture/compile/pr60655-1.c 2014-04-05 08:48:42.000000000 +0000 @@ -0,0 +1,31 @@ +/* { dg-options "-fdata-sections" } */ + +typedef unsigned char unit; +typedef unit *unitptr; +extern short global_precision; +typedef unsigned int size_t; +extern void *memcpy (void *dest, const void *src, size_t n); + +short mp_compare(const unit* r1, const unit* r2) +{ + register short precision; + precision = global_precision; + (r1) = ((r1)+(precision)-1); + (r2) = ((r2)+(precision)-1); + do + { if (*r1 < *r2) + return(-1); + if (*((r1)--) > *((r2)--)) + return(1); + } while (--precision); +} + +static unit modulus[((1280+(2*8))/8)]; +static unit d_data[((1280+(2*8))/8)*2]; + +int upton_modmult (unitptr prod, unitptr multiplicand, unitptr multiplier) +{ + unitptr d = d_data; + while (mp_compare(d,modulus) > 0) + memcpy((void*)(prod), (const void*)(d), (global_precision)); +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.c-torture/execute/20140326-1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.c-torture/execute/20140326-1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.c-torture/execute/20140326-1.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.c-torture/execute/20140326-1.c 2014-03-26 08:19:14.000000000 +0000 @@ -0,0 +1,10 @@ +int a; + +int +main (void) +{ + char e[2] = { 0, 0 }, f = 0; + if (a == 131072) + f = e[a]; + return f; +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/attr-weakref-1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/attr-weakref-1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/attr-weakref-1.c 2013-09-17 11:18:40.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/attr-weakref-1.c 2014-04-02 10:43:28.000000000 +0000 @@ -4,12 +4,14 @@ // This test requires support for undefined weak symbols. This support // is not available on hppa*-*-hpux*. The test is skipped rather than // xfailed to suppress the warning that would otherwise arise. -// { dg-skip-if "" { "*-*-darwin*" "hppa*-*-hpux*" "*-*-aix*" } "*" { "" } } +// { dg-skip-if "" { "hppa*-*-hpux*" "*-*-aix*" } "*" { "" } } // For kernel modules and static RTPs, the loader treats undefined weak // symbols in the same way as undefined strong symbols. The test // therefore fails to load, so skip it. // { dg-skip-if "" { "*-*-vxworks*" && nonpic } "*" { "-non-static" } } // { dg-options "-O2" } +// { dg-additional-options "-Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } +// { dg-additional-options "-Wl,-flat_namespace" { target *-*-darwin[89]* } } // { dg-additional-sources "attr-weakref-1a.c" } // Copyright 2005 Free Software Foundation, Inc. diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/builtin-bswap-6.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/builtin-bswap-6.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/builtin-bswap-6.c 2013-05-26 10:19:20.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/builtin-bswap-6.c 2014-04-05 08:48:42.000000000 +0000 @@ -3,6 +3,10 @@ /* { dg-options "-O -fdump-rtl-combine" } */ /* { dg-options "-O -fdump-rtl-combine -march=z900" { target s390-*-* } } */ +/* The test intentionally returns 1/2 instead of the obvious 0/1 to + prevent GCC from calculating the return value with arithmetic + instead of a comparison. */ + #include #define BS(X) __builtin_bswap32(X) @@ -11,28 +15,28 @@ { if (BS (a) == 0xA0000) return 1; - return 0; + return 2; } int foo2 (uint32_t a) { if (BS (a) != 0xA0000) return 1; - return 0; + return 2; } int foo3 (uint32_t a, uint32_t b) { if (BS (a) == BS (b)) return 1; - return 0; + return 2; } int foo4 (uint32_t a, uint32_t b) { if (BS (a) != BS (b)) return 1; - return 0; + return 2; } /* { dg-final { scan-rtl-dump-not "bswapsi" "combine" } } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/builtin-bswap-7.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/builtin-bswap-7.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/builtin-bswap-7.c 2013-05-24 08:12:50.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/builtin-bswap-7.c 2014-04-05 08:48:42.000000000 +0000 @@ -3,6 +3,10 @@ /* { dg-require-effective-target lp64 } */ /* { dg-options "-O -fdump-rtl-combine" } */ +/* The test intentionally returns 1/2 instead of the obvious 0/1 to + prevent GCC from calculating the return value with arithmetic + instead of a comparison. */ + #include #define BS(X) __builtin_bswap64(X) @@ -11,28 +15,28 @@ { if (BS (a) == 0xA00000000) return 1; - return 0; + return 2; } int foo2 (uint64_t a) { if (BS (a) != 0xA00000000) return 1; - return 0; + return 2; } int foo3 (uint64_t a, uint64_t b) { if (BS (a) == BS (b)) return 1; - return 0; + return 2; } int foo4 (uint64_t a, uint64_t b) { if (BS (a) != BS (b)) return 1; - return 0; + return 2; } /* { dg-final { scan-rtl-dump-not "bswapdi" "combine" } } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/cilk-plus/cilk-plus.exp gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/cilk-plus/cilk-plus.exp --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/cilk-plus/cilk-plus.exp 2014-01-09 16:20:29.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/cilk-plus/cilk-plus.exp 2014-03-28 19:04:54.000000000 +0000 @@ -19,53 +19,45 @@ load_lib gcc-dg.exp load_lib lto.exp +load_lib cilk-plus-dg.exp if { ![check_effective_target_cilkplus] } { return; } -set library_var [get_multilibs] -# Pointing the ld_library_path to the Cilk Runtime library binaries. -append ld_library_path ":${library_var}/libcilkrts/.libs" -set_ld_library_path_env_vars - -global TEST_EXTRA_LIBS -set TEST_EXTRA_LIBS "-L${library_var}/libcilkrts/.libs" - dg-init - -# Run the tests that are shared with C++. -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/PS/*.c]] " -ftree-vectorize -fcilkplus -std=c99" " " -# Run the C-only tests. -dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.c]] \ - "-ftree-vectorize -fcilkplus -std=c99" " " - -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -O1 -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -O2 -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -O3 -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -g -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -g -O2 -ftree-vectorize -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -fcilkplus -std=c99" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -fcilkplus -O2 -std=c99" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -fcilkplus -O3 -std=c99" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -fcilkplus -g -O0 -std=c99" " " - -if { [check_libcilkrts_available] } { - dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -g " " " - dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O1 " " " - dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O2 -std=c99 " " " - dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O2 -ftree-vectorize " " " - dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O3 -g " " " - if { [check_effective_target_lto] } { - dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O3 -flto -g " " " - } +if [cilkplus_init] { + # Run the tests that are shared with C++. + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/PS/*.c]] " -ftree-vectorize -fcilkplus -std=c99" " " + # Run the C-only tests. + dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.c]] \ + "-ftree-vectorize -fcilkplus -std=c99" " " + + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -O1 -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -O2 -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -O3 -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -g -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -g -O2 -ftree-vectorize -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -fcilkplus -std=c99" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -fcilkplus -O2 -std=c99" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -fcilkplus -O3 -std=c99" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -fcilkplus -g -O0 -std=c99" " " + + if { [check_libcilkrts_available] } { + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -g " " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O1 " " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O2 -std=c99 " " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O2 -ftree-vectorize " " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O3 -g " " " + if { [check_effective_target_lto] } { + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O3 -flto -g " " " + } + } + + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/SE/*.c]] " -g" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/SE/*.c]] " -O3 -std=c99" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/SE/*.c]] " -O3 -g" " " } - -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/SE/*.c]] " -g" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/SE/*.c]] " -O3 -std=c99" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/SE/*.c]] " -O3 -g" " " - +cilkplus_finish dg-finish - -unset TEST_EXTRA_LIBS diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro2.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro2.c 2014-03-22 12:09:06.000000000 +0000 @@ -0,0 +1,7 @@ +/* Test to make sure the macro info includes the predefined macros with line number 0. */ +/* { dg-do compile } */ +/* { dg-options "-g3 -gdwarf -dA -fverbose-asm" } */ +/* { dg-final { scan-assembler "At line number 0" } } */ + +#define FOO 1 +int i; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/graphite/pr60740.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/graphite/pr60740.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/graphite/pr60740.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/graphite/pr60740.c 2014-04-03 16:42:11.000000000 +0000 @@ -0,0 +1,16 @@ +/* { dg-options "-O2 -floop-interchange" } */ + +int **db6 = 0; + +void +k26(void) +{ + static int geb = 0; + int *a22 = &geb; + int **l30 = &a22; + int *c4b; + int ndf; + for (ndf = 0; ndf <= 1; ++ndf) + *c4b = (db6 == l30) && (*a22)--; +} + diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/lto/pr55113_0.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/lto/pr55113_0.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/lto/pr55113_0.c 2014-03-20 10:50:13.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/lto/pr55113_0.c 2014-03-31 14:27:29.000000000 +0000 @@ -1,7 +1,7 @@ /* PR 55113 */ /* { dg-lto-do link } */ /* { dg-lto-options { { -flto -fshort-double -O0 } } }*/ -/* { dg-skip-if "PR60410" { { x86_64-*-* i?86-*-* } && lp64 } } */ +/* { dg-skip-if "PR60410" { x86_64-*-* || { i?86-*-* && lp64 } } } */ int main(void) diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/lto/pr59626_0.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/lto/pr59626_0.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/lto/pr59626_0.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/lto/pr59626_0.c 2014-04-05 08:48:42.000000000 +0000 @@ -0,0 +1,15 @@ +/* { dg-lto-do run } */ + +int __atoi (const char *) __asm__("atoi"); +extern inline __attribute__((always_inline,gnu_inline)) +int atoi (const char *x) +{ + return __atoi (x); +} + +int bar (int (*)(const char *)); + +int main() +{ + return bar (atoi); +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/lto/pr59626_1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/lto/pr59626_1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/lto/pr59626_1.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/lto/pr59626_1.c 2014-04-05 08:48:42.000000000 +0000 @@ -0,0 +1,4 @@ +int bar (int (*fn)(const char *)) +{ + return fn ("0"); +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/pr45416.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/pr45416.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/pr45416.c 2013-06-10 18:11:37.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/pr45416.c 2014-03-30 07:40:40.000000000 +0000 @@ -9,7 +9,7 @@ return 0; } -/* { dg-final { scan-assembler "andl" { target i?86-*-linux* i?86-*-gnu* x86_64-*-linux* } } } " */ +/* { dg-final { scan-assembler "andl|bextr" { target i?86-*-linux* i?86-*-gnu* x86_64-*-linux* } } } " */ /* { dg-final { scan-assembler-not "setne" { target i?86-*-linux* i?86-*-gnu* x86_64-*-linux* } } }" */ /* { dg-final { scan-assembler "and|ubfx" { target arm*-*-* } } } */ /* { dg-final { scan-assembler-not "moveq" { target arm*-*-* } } }" */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/pr59940.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/pr59940.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/pr59940.c 2014-01-31 11:04:51.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/pr59940.c 2014-03-30 07:40:40.000000000 +0000 @@ -3,11 +3,12 @@ /* { dg-options "-Wconversion -Woverflow" } */ int f (unsigned int); +typedef sitype __attribute__((mode(SI))); int g (void) { - int si = 12; + sitype si = 12; unsigned int ui = -1; /* { dg-warning "21:negative integer implicitly converted to unsigned type" } */ unsigned char uc; ui = si; /* { dg-warning "8:conversion" } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/pr60647-1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/pr60647-1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/pr60647-1.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/pr60647-1.c 2014-03-31 14:27:29.000000000 +0000 @@ -0,0 +1,26 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +struct _wincore +{ + int y; + int width; +}; +int a; +static fn1 (dpy, winInfo) struct _XDisplay *dpy; +struct _wincore *winInfo; +{ + a = winInfo->width; + fn2 (); +} + +static fn3 (dpy, winInfo, visrgn) struct _XDisplay *dpy; +{ + int b = fn1 (0, winInfo); + fn4 (0, 0, visrgn); +} + +fn5 (event) struct _XEvent *event; +{ + fn3 (0, 0, 0); +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/pr60647-2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/pr60647-2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/pr60647-2.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/pr60647-2.c 2014-03-31 14:27:29.000000000 +0000 @@ -0,0 +1,26 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +struct _wincore +{ + int width, height; +}; + +static void +foo (void *dpy, struct _wincore *winInfo, int offset) +{ + fn1 (winInfo->height); +} + +static void +bar (void *dpy, int winInfo, int *visrgn) +{ + ((void (*) (void *, int, int)) foo) ((void *) 0, winInfo, 0); /* { dg-warning "function called through a non-compatible type" } */ + fn2 (0, 0, visrgn); +} + +void +baz (void *dpy, int win, int prop) +{ + bar ((void *) 0, 0, (int *) 0); +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/pr60704.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/pr60704.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/pr60704.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/pr60704.c 2014-04-01 18:05:46.000000000 +0000 @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-flive-range-shrinkage" } */ +/* { dg-additional-options "-march=amdfam10" { target { i?86-*-* x86_64-*-* } } } */ + +struct S +{ + int n; +}; + +int +foo (struct S s, double a) +{ + return s.n * a; +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/predict-8.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/predict-8.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/predict-8.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/predict-8.c 2014-03-27 17:33:34.000000000 +0000 @@ -0,0 +1,12 @@ +/* { dg-do compile { target { i?86-*-* x86_64-*-* } } } */ +/* { dg-options "-O2 -fdump-rtl-expand" } */ + +int foo(float a, float b) { + if (a == b) + return 1; + else + return 2; +} + +/* { dg-final { scan-rtl-dump-times "REG_BR_PROB 100" 1 "expand"} } */ +/* { dg-final { cleanup-rtl-dump "expand" } } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/torture/pr53922.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/torture/pr53922.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/torture/pr53922.c 2013-09-17 11:18:41.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/torture/pr53922.c 2014-04-02 10:43:28.000000000 +0000 @@ -4,6 +4,7 @@ /* { dg-skip-if "No undefined weak" { *-*-aix* } { "*" } { "" } } */ /* { dg-skip-if "No undefined weak" { hppa*-*-hpux* && { ! lp64 } } { "*" } { "" } } */ /* { dg-options "-Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } */ +/* { dg-additional-options "-Wl,-flat_namespace" { target *-*-darwin[89]* } } */ int x(int a) { diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/torture/pr60092.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/torture/pr60092.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/torture/pr60092.c 2014-02-21 09:32:56.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/torture/pr60092.c 2014-04-02 10:43:28.000000000 +0000 @@ -1,5 +1,8 @@ /* { dg-do run } */ /* { dg-require-weak "" } */ +/* { dg-skip-if "No undefined weak" { hppa*-*-hpux* && { ! lp64 } } } */ +/* { dg-additional-options "-Wl,-undefined,dynamic_lookup" { target *-*-darwin* } } */ +/* { dg-additional-options "-Wl,-flat_namespace" { target *-*-darwin[89]* } } */ /* { dg-xfail-run-if "posix_memalign modifies first arg on error" { *-*-solaris2.11* } { "-O0" } } */ typedef __SIZE_TYPE__ size_t; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/torture/pr60733.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/torture/pr60733.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/torture/pr60733.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/torture/pr60733.c 2014-04-02 23:41:00.000000000 +0000 @@ -0,0 +1,36 @@ +/* { dg-do run } */ + +int a, d, e, f, g, h, i, j, k; +unsigned short b; + +short +fn1 (int p1, int p2) +{ + return p1 * p2; +} + +int +main () +{ + for (; a; a--) + { + int l = 0; + if (f >= 0) + { + for (; h;) + e = 0; + for (; l != -6; l--) + { + j = fn1 (b--, d); + for (g = 0; g; g = 1) + ; + k = e ? 2 : 0; + } + i = 0; + for (;;) + ; + } + } + d = 0; + return 0; +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/tree-prof/pr59003.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/tree-prof/pr59003.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/tree-prof/pr59003.c 2014-01-22 14:47:57.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/tree-prof/pr59003.c 2014-03-26 08:19:14.000000000 +0000 @@ -1,6 +1,7 @@ /* PR target/59003 */ /* { dg-options "-O2" } */ /* { dg-options "-O2 -mtune=amdfam10" { target i?86-*-* x86_64-*-* } } */ +/* { dg-options "-O2 -fno-common" { target hppa*-*-hpux* } } */ __attribute__((noinline, noclone)) void * foo (void *p, unsigned int q) diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-4.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-4.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-4.c 2014-02-17 12:27:11.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/tree-ssa/ssa-dom-thread-4.c 2014-04-01 18:05:46.000000000 +0000 @@ -1,6 +1,5 @@ /* { dg-do compile } */ /* { dg-options "-O2 -fdump-tree-dom1-details" } */ -/* { dg-additional-options "-mbranch-cost=2" { target s390*-*-* } } */ struct bitmap_head_def; typedef struct bitmap_head_def *bitmap; typedef const struct bitmap_head_def *const_bitmap; @@ -76,6 +75,6 @@ -> "kill_elt->indx == b_elt->indx" in the second condition, skipping the known-true "b_elt && kill_elt" in the second condition. */ -/* { dg-final { scan-tree-dump-times "Threaded" 4 "dom1" { target logical_op_short_circuit } } } */ +/* { dg-final { scan-tree-dump-times "Threaded" 4 "dom1" { target logical_op_short_circuit xfail logical_op_short_circuit } } } */ /* { dg-final { cleanup-tree-dump "dom1" } } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/vect/pr60505.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/vect/pr60505.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/vect/pr60505.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/vect/pr60505.c 2014-04-03 23:30:24.000000000 +0000 @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-Wall -Werror" } */ + +void foo(char *in, char *out, int num) +{ + int i; + char ovec[16] = {0}; + + for(i = 0; i < num ; ++i) + out[i] = (ovec[i] = in[i]); + out[num] = ovec[num/2]; +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/vect/pr60656.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/vect/pr60656.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.dg/vect/pr60656.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.dg/vect/pr60656.c 2014-04-05 08:48:42.000000000 +0000 @@ -0,0 +1,45 @@ +/* { dg-require-effective-target vect_int } */ + +#include "tree-vect.h" + +__attribute__ ((noinline)) long +foo () +{ + int v[] = {5000, 5001, 5002, 5003}; + long s = 0; + int i; + + for(i = 0; i < 4; ++i) + { + long P = v[i]; + s += P*P*P; + } + return s; +} + +long +bar () +{ + int v[] = {5000, 5001, 5002, 5003}; + long s = 0; + int i; + + for(i = 0; i < 4; ++i) + { + long P = v[i]; + s += P*P*P; + __asm__ volatile (""); + } + return s; +} + +int main() +{ + if (foo () != bar ()) + abort (); + return 0; +} + +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */ +/* { dg-final { cleanup-tree-dump "vect" } } */ + diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/pr60034.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/pr60034.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/pr60034.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/pr60034.c 2014-03-31 14:27:29.000000000 +0000 @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-std=gnu99 -O" } */ + +static unsigned long global_max_fast; + +void __libc_mallopt (int param_number, int value) +{ + __asm__ __volatile__ ("# %[_SDT_A21]" :: [_SDT_A21] "nor" ((global_max_fast))); + global_max_fast = 1; +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/pr60580_1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/pr60580_1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/pr60580_1.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/pr60580_1.c 2014-03-27 17:33:34.000000000 +0000 @@ -0,0 +1,45 @@ +/* { dg-do compile } */ +/* { dg-options "-O0 -fomit-frame-pointer -fno-inline --save-temps" } */ + +void +func_leaf (void) +{ + int a = 0; +} + +void +func_no_leaf (void) +{ + int a = 0; + func_leaf (); +} + +void +func1 (void) +{ + int a = 0; + func_no_leaf (); +} + +/* + * This function calls XXX(), which modifies SP. This is incompatible to + * -fomit-frame-pointer generated code as SP is used to access the frame. + */ +__attribute__ ((optimize("no-omit-frame-pointer"))) +void +func2 (void) +{ + int a = 0; + func_no_leaf (); +} + +void +func3 (void) +{ + int a = 0; + func_no_leaf (); +} + +/* { dg-final { scan-assembler-times "stp\tx29, x30, \\\[sp, -\[0-9\]+\\\]!" 1 } } */ + +/* { dg-final { cleanup-saved-temps } } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/pr60675.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/pr60675.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/pr60675.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/pr60675.C 2014-03-28 19:04:54.000000000 +0000 @@ -0,0 +1,277 @@ +/* { dg-do compile } */ +/* { dg-options "-std=c++11 -w -O2 -fPIC" } */ +namespace CLHEP { + static const double meter = 1000.*10; + static const double meter2 = meter*meter; + static const double megaelectronvolt = 1. ; + static const double gigaelectronvolt = 1.e+3; + static const double GeV = gigaelectronvolt; + static const double megavolt = megaelectronvolt; + static const double volt = 1.e-6*megavolt; + static const double tesla = volt*1.e+9/meter2; + } + using CLHEP::GeV; + using CLHEP::tesla; + namespace std { + typedef long int ptrdiff_t; + } + extern "C" { + extern double cos (double __x) throw (); + extern double sin (double __x) throw (); + extern double sqrt (double __x) throw (); + } + namespace std __attribute__ ((__visibility__ ("default"))) { + using ::cos; + using ::sin; + using ::sqrt; + template struct char_traits; + template > struct basic_ostream; + typedef basic_ostream ostream; + template struct iterator_traits { }; + template struct iterator_traits<_Tp*> { + typedef ptrdiff_t difference_type; + typedef _Tp& reference; + }; + } + namespace __gnu_cxx __attribute__ ((__visibility__ ("default"))) { + using std::iterator_traits; + template struct __normal_iterator { + _Iterator _M_current; + typedef iterator_traits<_Iterator> __traits_type; + typedef typename __traits_type::difference_type difference_type; + typedef typename __traits_type::reference reference; + explicit __normal_iterator(const _Iterator& __i) : _M_current(__i) { } + reference operator*() const { + return *_M_current; + } + __normal_iterator operator+(difference_type __n) const { + return __normal_iterator(_M_current + __n); + } + }; + template struct new_allocator { + }; + } + namespace std __attribute__ ((__visibility__ ("default"))) { + template struct allocator: public __gnu_cxx::new_allocator<_Tp> { + }; + struct ios_base { }; + template struct basic_ios : public ios_base { }; + template struct basic_ostream : virtual public basic_ios<_CharT, _Traits> { + typedef basic_ostream<_CharT, _Traits> __ostream_type; + __ostream_type& operator<<(__ostream_type& (*__pf)(__ostream_type&)) { } + __ostream_type& operator<<(const void* __p) { + return _M_insert(__p); + } + template __ostream_type& _M_insert(_ValueT __v); + }; + template inline basic_ostream<_CharT, _Traits>& endl(basic_ostream<_CharT, _Traits>& __os) { + } + } + typedef double G4double; + typedef int G4int; + extern __thread std::ostream *G4cout_p; + struct G4Field; + struct G4FieldManager { + inline G4Field* GetDetectorField() ; + }; + namespace CLHEP { + struct Hep3Vector { + Hep3Vector(double x, double y, double z); + inline ~Hep3Vector(); + inline double x() const; + inline double y() const; + inline double z() const; + inline double mag() const; + inline Hep3Vector cross(const Hep3Vector &) const; + double dx; + double dy; + double dz; + }; + Hep3Vector operator / (const Hep3Vector &, double a); + inline double Hep3Vector::x() const { + return dx; + } + inline double Hep3Vector::y() const { + return dy; + } + inline double Hep3Vector::z() const { + return dz; + } + inline Hep3Vector operator + (const Hep3Vector & a, const Hep3Vector & b) { } + inline Hep3Vector operator * (const Hep3Vector & p, double a) { } + inline double operator * (const Hep3Vector & a, const Hep3Vector & b) { } + inline Hep3Vector::Hep3Vector(double x1, double y1, double z1) : dx(x1), dy(y1), dz(z1) { + } + inline Hep3Vector::~Hep3Vector() { } + inline Hep3Vector Hep3Vector::cross(const Hep3Vector & p) const { + return Hep3Vector(dy*p.dz-p.dy*dz, dz*p.dx-p.dz*dx, dx*p.dy-p.dx*dy); + } + } + typedef CLHEP::Hep3Vector G4ThreeVector; + namespace std __attribute__ ((__visibility__ ("default"))) { + template > struct vector + { + typedef _Tp *pointer; + typedef __gnu_cxx::__normal_iterator iterator; + iterator begin() { } + }; + } + struct G4TransportationManager { + static G4TransportationManager* GetTransportationManager(); + inline G4FieldManager* GetFieldManager() const; + }; + struct G4ErrorMatrix { + G4ErrorMatrix(G4int p, G4int q, G4int i); + virtual ~G4ErrorMatrix(); + struct G4ErrorMatrix_row { + inline G4ErrorMatrix_row(G4ErrorMatrix&,G4int); + G4double & operator[](G4int); + G4ErrorMatrix& _a; + G4int _r; + }; + inline G4ErrorMatrix_row operator[] (G4int); + std::vector m; + G4int nrow, ncol; + }; + inline G4ErrorMatrix::G4ErrorMatrix_row G4ErrorMatrix::operator[] (G4int r) { + G4ErrorMatrix_row b(*this,r); + return b; + } + inline G4double &G4ErrorMatrix::G4ErrorMatrix_row::operator[](G4int c) { + return *(_a.m.begin()+_r*_a.ncol+c); + } + inline G4ErrorMatrix:: G4ErrorMatrix_row::G4ErrorMatrix_row(G4ErrorMatrix&a, G4int r) : _a(a) { + _r = r; + }; + struct G4DynamicParticle { + G4double GetCharge() const; + }; + struct G4Step; + struct G4Track { + const G4DynamicParticle* GetDynamicParticle() const; + const G4ThreeVector& GetPosition() const; + G4ThreeVector GetMomentum() const; + const G4Step* GetStep() const; + }; + struct G4StepPoint { + const G4ThreeVector& GetPosition() const; + G4ThreeVector GetMomentum() const; + }; + struct G4Step { + G4StepPoint* GetPreStepPoint() const; + G4double GetStepLength() const; + }; + namespace HepGeom { + template struct BasicVector3D { + T v_[3]; + BasicVector3D(T x1, T y1, T z1) { } + operator T * () { + return v_; + } + T x() const { + return v_[0]; + } + T y() const { + return v_[1]; + } + T z() const { + return v_[2]; + } + T perp2() const { } + T perp() const { + return std::sqrt(perp2()); + } + T mag2() const { } + T mag() const { + return std::sqrt(mag2()); + } + T theta() const { } + }; + inline BasicVector3D operator-(const BasicVector3D & a,const BasicVector3D & b) { } + inline BasicVector3D operator*(const BasicVector3D & v, double a) { } + template struct Point3D : public BasicVector3D { + explicit Point3D(const double * a) : BasicVector3D(a[0],a[1],a[2]) { } + Point3D(const CLHEP::Hep3Vector & v) : BasicVector3D(v.dx,v.dy,v.dz) { } + }; + } + typedef HepGeom::Point3D G4Point3D; + namespace HepGeom { + template struct Vector3D : public BasicVector3D { + Vector3D(const BasicVector3D & v) : BasicVector3D(v) { } + Vector3D(const CLHEP::Hep3Vector & v) : BasicVector3D(v.dx,v.dy,v.dz) { } + operator CLHEP::Hep3Vector () const { } + }; + } + typedef HepGeom::Vector3D G4Vector3D; + struct G4ErrorFreeTrajState +{ + virtual G4int PropagateError( const G4Track* aTrack ); + G4int PropagateErrorMSC( const G4Track* aTrack ); + }; + G4int G4ErrorFreeTrajState::PropagateError( const G4Track* aTrack ) { + G4double stepLengthCm = aTrack->GetStep()->GetStepLength()/10.; + G4Point3D vposPost = aTrack->GetPosition()/10.; + G4Vector3D vpPost = aTrack->GetMomentum()/GeV; + G4Point3D vposPre = aTrack->GetStep()->GetPreStepPoint()->GetPosition()/10.; + G4Vector3D vpPre = aTrack->GetStep()->GetPreStepPoint()->GetMomentum()/GeV; + G4double pPre = vpPre.mag(); + G4double pPost = vpPost.mag(); + G4double pInvPre = 1./pPre; + G4double pInvPost = 1./pPost; + G4double deltaPInv = pInvPost - pInvPre; + G4Vector3D vpPreNorm = vpPre * pInvPre; + G4Vector3D vpPostNorm = vpPost * pInvPost; + (*G4cout_p) << "G4EP: vpPreNorm " << vpPreNorm << " vpPostNorm " << vpPostNorm << std::endl; + G4double sinpPre = std::sin( vpPreNorm.theta() ); + G4double sinpPostInv = 1./std::sin( vpPreNorm.theta() ); + G4ErrorMatrix transf(5, 5, 0 ); + G4double charge = aTrack->GetDynamicParticle()->GetCharge(); + G4double h1[3], h2[3]; + G4Field* field += G4TransportationManager::GetTransportationManager()->GetFieldManager()->GetDetectorField() +; + if( charge != 0. && field ) + { + G4ThreeVector HPre = G4ThreeVector( h1[0], h1[1], h1[2] ) / tesla *10.; + G4ThreeVector HPost= G4ThreeVector( h2[0], h2[1], h2[2] ) / tesla *10.; + { + G4double pInvAver = 1./(pInvPre + pInvPost ); + G4double CFACT8 = 2.997925E-4; + G4ThreeVector vHAverNorm( (HPre*pInvPre + HPost*pInvPost ) * pInvAver * charge * CFACT8 ); + G4double HAver = vHAverNorm.mag(); + G4double pAver = (pPre+pPost)*0.5; + G4double QAver = -HAver/pAver; + G4double thetaAver = QAver * stepLengthCm; + G4double sinThetaAver = std::sin(thetaAver); + G4double cosThetaAver = std::cos(thetaAver); + G4double gamma = vHAverNorm * vpPostNorm; + G4ThreeVector AN2 = vHAverNorm.cross( vpPostNorm ); + G4double AU = 1./vpPreNorm.perp(); + G4ThreeVector vUPre( -AU*vpPreNorm.y(), AU*vpPreNorm.x(), 0. ); + G4ThreeVector vVPre( -vpPreNorm.z()*vUPre.y(), vpPreNorm.z()*vUPre.x(), vpPreNorm.x()*vUPre.y() - vpPreNorm.y()*vUPre.x() ); + AU = 1./vpPostNorm.perp(); + G4ThreeVector vUPost( -AU*vpPostNorm.y(), AU*vpPostNorm.x(), 0. ); + G4ThreeVector vVPost( -vpPostNorm.z()*vUPost.y(), vpPostNorm.z()*vUPost.x(), vpPostNorm.x()*vUPost.y() - vpPostNorm.y()*vUPost.x() ); + G4Point3D deltaPos( vposPre - vposPost ); + G4double QP = QAver * pAver; + G4double ANV = -( vHAverNorm.x()*vUPost.x() + vHAverNorm.y()*vUPost.y() ); + G4double ANU = ( vHAverNorm.x()*vVPost.x() + vHAverNorm.y()*vVPost.y() + vHAverNorm.z()*vVPost.z() ); + G4double OMcosThetaAver = 1. - cosThetaAver; + G4double TMSINT = thetaAver - sinThetaAver; + G4ThreeVector vHUPre( -vHAverNorm.z() * vUPre.y(), vHAverNorm.z() * vUPre.x(), vHAverNorm.x() * vUPre.y() - vHAverNorm.y() * vUPre.x() ); + G4ThreeVector vHVPre( vHAverNorm.y() * vVPre.z() - vHAverNorm.z() * vVPre.y(), vHAverNorm.z() * vVPre.x() - vHAverNorm.x() * vVPre.z(), vHAverNorm.x() * vVPre.y() - vHAverNorm.y() * vVPre.x() ); + transf[0][1] = -deltaPInv/thetaAver* ( TMSINT*gamma*(vHAverNorm.x()*vVPre.x()+vHAverNorm.y()*vVPre.y()+vHAverNorm.z()*vVPre.z()) + sinThetaAver*(vVPre.x()*vpPostNorm.x()+vVPre.y()*vpPostNorm.y()+vVPre.z()*vpPostNorm.z()) + OMcosThetaAver*(vHVPre.x()*vpPostNorm.x()+vHVPre.y()*vpPostNorm.y()+vHVPre.z()*vpPostNorm.z()) ); + transf[0][2] = -sinpPre*deltaPInv/thetaAver* ( TMSINT*gamma*(vHAverNorm.x()*vUPre.x()+vHAverNorm.y()*vUPre.y() ) + sinThetaAver*(vUPre.x()*vpPostNorm.x()+vUPre.y()*vpPostNorm.y() ) + OMcosThetaAver*(vHUPre.x()*vpPostNorm.x()+vHUPre.y()*vpPostNorm.y()+vHUPre.z()*vpPostNorm.z()) ); + transf[0][3] = -deltaPInv/stepLengthCm*(vUPre.x()*vpPostNorm.x()+vUPre.y()*vpPostNorm.y() ); + transf[1][1] = cosThetaAver*(vVPre.x()*vVPost.x()+vVPre.y()*vVPost.y()+vVPre.z()*vVPost.z()) + sinThetaAver*(vHVPre.x()*vVPost.x()+vHVPre.y()*vVPost.y()+vHVPre.z()*vVPost.z()) + OMcosThetaAver*(vHAverNorm.x()*vVPre.x()+vHAverNorm.y()*vVPre.y()+vHAverNorm.z()*vVPre.z())* (vHAverNorm.x()*vVPost.x()+vHAverNorm.y()*vVPost.y()+vHAverNorm.z()*vVPost.z()) + ANV*( -sinThetaAver*(vVPre.x()*vpPostNorm.x()+vVPre.y()*vpPostNorm.y()+vVPre.z()*vpPostNorm.z()) + OMcosThetaAver*(vVPre.x()*AN2.x()+vVPre.y()*AN2.y()+vVPre.z()*AN2.z()) - TMSINT*gamma*(vHAverNorm.x()*vVPre.x()+vHAverNorm.y()*vVPre.y()+vHAverNorm.z()*vVPre.z()) ); + transf[1][2] = cosThetaAver*(vUPre.x()*vVPost.x()+vUPre.y()*vVPost.y() ) + sinThetaAver*(vHUPre.x()*vVPost.x()+vHUPre.y()*vVPost.y()+vHUPre.z()*vVPost.z()) + OMcosThetaAver*(vHAverNorm.x()*vUPre.x()+vHAverNorm.y()*vUPre.y() )* (vHAverNorm.x()*vVPost.x()+vHAverNorm.y()*vVPost.y()+vHAverNorm.z()*vVPost.z()) + ANV*( -sinThetaAver*(vUPre.x()*vpPostNorm.x()+vUPre.y()*vpPostNorm.y() ) + OMcosThetaAver*(vUPre.x()*AN2.x()+vUPre.y()*AN2.y() ) - TMSINT*gamma*(vHAverNorm.x()*vUPre.x()+vHAverNorm.y()*vUPre.y() ) ); + transf[2][0] = -QP*ANU*(vpPostNorm.x()*deltaPos.x()+vpPostNorm.y()*deltaPos.y()+vpPostNorm.z()*deltaPos.z())*sinpPostInv *(1.+deltaPInv*pAver); + transf[2][3] = -QAver*ANU*(vUPre.x()*vpPostNorm.x()+vUPre.y()*vpPostNorm.y() )*sinpPostInv; + transf[3][4] = (vVPre.x()*vUPost.x()+vVPre.y()*vUPost.y() ); + transf[4][0] = pAver*(vVPost.x()*deltaPos.x()+vVPost.y()*deltaPos.y()+vVPost.z()*deltaPos.z()) *(1.+deltaPInv*pAver); + transf[4][1] = ( sinThetaAver*(vVPre.x()*vVPost.x()+vVPre.y()*vVPost.y()+vVPre.z()*vVPost.z()) + OMcosThetaAver*(vHVPre.x()*vVPost.x()+vHVPre.y()*vVPost.y()+vHVPre.z()*vVPost.z()) + TMSINT*(vHAverNorm.x()*vVPost.x()+vHAverNorm.y()*vVPost.y()+vHAverNorm.z()*vVPost.z())* (vHAverNorm.x()*vVPre.x()+vHAverNorm.y()*vVPre.y()+vHAverNorm.z()*vVPre.z()) )/QAver; + transf[4][2] = ( sinThetaAver*(vUPre.x()*vVPost.x()+vUPre.y()*vVPost.y() ) + OMcosThetaAver*(vHUPre.x()*vVPost.x()+vHUPre.y()*vVPost.y()+vHUPre.z()*vVPost.z()) + TMSINT*(vHAverNorm.x()*vVPost.x()+vHAverNorm.y()*vVPost.y()+vHAverNorm.z()*vVPost.z())* (vHAverNorm.x()*vUPre.x()+vHAverNorm.y()*vUPre.y() ) )*sinpPre/QAver; + } + } + PropagateErrorMSC( aTrack ); + } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/pr60697.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/pr60697.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/pr60697.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/pr60697.c 2014-03-30 07:40:38.000000000 +0000 @@ -0,0 +1,638 @@ +/* { dg-do compile } */ +/* { dg-options "-w -O3 -mcpu=cortex-a53" } */ +typedef struct __sFILE __FILE; +typedef __FILE FILE; +typedef int atom_id; +typedef float real; +typedef real rvec[3]; +typedef real matrix[3][3]; +enum { + ebCGS,ebMOLS,ebSBLOCKS,ebNR +}; +enum { + efepNO, efepYES, efepNR +}; +enum { + esolNO, esolMNO, esolWATER, esolWATERWATER, esolNR +}; +typedef struct { + int nr; + atom_id *index; + atom_id *a; +} t_block; +enum { + F_LJ, + F_LJLR, + F_SR, + F_LR, + F_DVDL, +}; +typedef struct { + t_block excl; +} t_atoms; +typedef struct { + t_atoms atoms; + t_block blocks[ebNR]; +} t_topology; +typedef struct { +} t_nsborder; +extern FILE *debug; +typedef struct { +} t_nrnb; +typedef struct { + int nri,maxnri; + int nrj,maxnrj; + int maxlen; + int solvent; + int *gid; + int *jindex; + atom_id *jjnr; + int *nsatoms; +} t_nblist; +typedef struct { + int nrx,nry,nrz; +} t_grid; +typedef struct { +} t_commrec; +enum { eNL_VDWQQ, eNL_VDW, eNL_QQ, + eNL_VDWQQ_FREE, eNL_VDW_FREE, eNL_QQ_FREE, + eNL_VDWQQ_SOLMNO, eNL_VDW_SOLMNO, eNL_QQ_SOLMNO, + eNL_VDWQQ_WATER, eNL_QQ_WATER, + eNL_VDWQQ_WATERWATER, eNL_QQ_WATERWATER, + eNL_NR }; +typedef struct { + real rlist,rlistlong; + real rcoulomb_switch,rcoulomb; + real rvdw_switch,rvdw; + int efep; + int cg0,hcg; + int *solvent_type; + int *mno_index; + rvec *cg_cm; + t_nblist nlist_sr[eNL_NR]; + t_nblist nlist_lr[eNL_NR]; + int bTwinRange; + rvec *f_twin; + int *eg_excl; +} t_forcerec; +typedef struct { + real *chargeA,*chargeB,*chargeT; + int *bPerturbed; + int *typeA,*typeB; + unsigned short *cTC,*cENER,*cACC,*cFREEZE,*cXTC,*cVCM; +} t_mdatoms; +enum { egCOUL, egLJ, egBHAM, egLR, egLJLR, egCOUL14, egLJ14, egNR }; +typedef struct { + real *ee[egNR]; +} t_grp_ener; +typedef struct { + t_grp_ener estat; +} t_groups; +typedef unsigned long t_excl; +static void reset_nblist(t_nblist *nl) +{ + nl->nri = 0; + nl->nrj = 0; + nl->maxlen = 0; + if (nl->maxnri > 0) { + nl->gid[0] = -1; + if (nl->maxnrj > 1) { + nl->jindex[0] = 0; + nl->jindex[1] = 0; + } + } +} +static void reset_neighbor_list(t_forcerec *fr,int bLR,int eNL) +{ + reset_nblist(&(fr->nlist_lr[eNL])); +} +static void close_i_nblist(t_nblist *nlist) +{ + int nri = nlist->nri; + int len; + nlist->jindex[nri+1] = nlist->nrj; + len=nlist->nrj - nlist->jindex[nri]; + if (nlist->solvent==esolMNO) + len *= nlist->nsatoms[3*nri]; + if(len > nlist->maxlen) + nlist->maxlen = len; +} +static void close_nblist(t_nblist *nlist) +{ + if (nlist->maxnri > 0) { + int nri = nlist->nri; + if ((nlist->jindex[nri+1] > nlist->jindex[nri]) && + (nlist->gid[nri] != -1)) { + nlist->nri++; + nlist->jindex[nri+2] = nlist->nrj; + } + } +} +static void close_neighbor_list(t_forcerec *fr,int bLR,int eNL) +{ + close_nblist(&(fr->nlist_lr[eNL])); +} +static void add_j_to_nblist(t_nblist *nlist,atom_id j_atom) +{ + int nrj=nlist->nrj; + nlist->jjnr[nrj] = j_atom; + nlist->nrj ++; +} +static void put_in_list(int bHaveLJ[], + int ngid,t_mdatoms *md, + int icg,int jgid,int nj,atom_id jjcg[], + atom_id index[], + t_excl bExcl[],int shift, + t_forcerec *fr,int bLR, + int bVDWOnly,int bCoulOnly) +{ + t_nblist *vdwc,*vdw,*coul; + t_nblist *vdwc_ww=((void *)0),*coul_ww=((void *)0); + t_nblist *vdwc_free=((void *)0),*vdw_free=((void *)0),*coul_free=((void *)0); + int i,j,jcg,igid,gid,ind_ij; + atom_id jj,jj0,jj1,i_atom; + int i0,nicg,len; + int *type,*typeB; + unsigned short *cENER; + real *charge,*chargeB; + real qi,qiB,qq,rlj; + int bWater,bMNO,bFree,bFreeJ,bNotEx,*bPert; + charge = md->chargeA; + chargeB = md->chargeB; + type = md->typeA; + typeB = md->typeB; + cENER = md->cENER; + bPert = md->bPerturbed; + i0 = index[icg]; + nicg = index[icg+1]-i0; + bMNO = (fr->solvent_type[icg] == esolMNO); + if (bLR) { + if (bWater) { + vdw = &fr->nlist_lr[eNL_VDW]; + coul = &fr->nlist_lr[eNL_QQ_WATER]; + vdwc_ww = &fr->nlist_lr[eNL_VDWQQ_WATERWATER]; + } else if(bMNO) { + vdwc = &fr->nlist_lr[eNL_VDWQQ_SOLMNO]; + } + if (fr->efep != efepNO) { + vdw_free = &fr->nlist_lr[eNL_VDW_FREE]; + coul_free = &fr->nlist_lr[eNL_QQ_FREE]; + } + } + else { + if (bWater) { + } else if(bMNO) { + vdwc = &fr->nlist_sr[eNL_VDWQQ_SOLMNO]; + } + if (fr->efep != efepNO) { + vdwc_free = &fr->nlist_sr[eNL_VDWQQ_FREE]; + } + } + if (fr->efep==efepNO) { + if (bWater) { + igid = cENER[i_atom]; + gid = ((igid < jgid) ? (igid*ngid+jgid) : (jgid*ngid+igid)); + if (!bCoulOnly && !bVDWOnly) { + new_i_nblist(vdwc,bLR ? F_LJLR : F_LJ,i_atom,shift,gid,((void *)0)); + new_i_nblist(vdwc_ww,bLR ? F_LJLR : F_LJ,i_atom,shift,gid,((void *)0)); + } + if (!bCoulOnly) + new_i_nblist(vdw,bLR ? F_LJLR : F_LJ,i_atom,shift,gid,((void *)0)); + if (!bVDWOnly) { + new_i_nblist(coul,bLR ? F_LR : F_SR,i_atom,shift,gid,((void *)0)); + new_i_nblist(coul_ww,bLR ? F_LR : F_SR,i_atom,shift,gid,((void *)0)); + } + for(j=0; (jsolvent_type[jcg] == esolWATER)) { + if (bVDWOnly) + add_j_to_nblist(vdw,jj0); + else { + add_j_to_nblist(coul_ww,jj0); + add_j_to_nblist(vdwc_ww,jj0); + } + } else { + jj1 = index[jcg+1]; + if (bCoulOnly) { + for(jj=jj0; (jj 1.2e-38) + add_j_to_nblist(coul,jj); + } + } else if (bVDWOnly) { + for(jj=jj0; (jj 1.2e-38) + add_j_to_nblist(vdwc,jj); + add_j_to_nblist(vdw,jj); + } else if (fabs(charge[jj]) > 1.2e-38) + add_j_to_nblist(coul,jj); + } + } + } + } + close_i_nblist(vdw); + close_i_nblist(coul); + close_i_nblist(vdwc); + close_i_nblist(coul_ww); + close_i_nblist(vdwc_ww); + } else if (bMNO) { + igid = cENER[i_atom]; + gid = ((igid < jgid) ? (igid*ngid+jgid) : (jgid*ngid+igid)); + if (!bCoulOnly && !bVDWOnly) + new_i_nblist(vdwc,bLR ? F_LJLR : F_LJ,i_atom,shift,gid, + &(fr->mno_index[icg*3])); + if (!bCoulOnly) + new_i_nblist(vdw,bLR ? F_LR : F_SR,i_atom,shift,gid, + &(fr->mno_index[icg*3])); + if (!bVDWOnly) + new_i_nblist(coul,bLR ? F_LR : F_SR,i_atom,shift,gid, + &(fr->mno_index[icg*3])); + for(j=0; (j 1.2e-38) + add_j_to_nblist(coul,jj); + } else if (bVDWOnly) { + if (bHaveLJ[type[jj]]) + add_j_to_nblist(vdw,jj); + } else { + if (bHaveLJ[type[jj]]) { + if (fabs(charge[jj]) > 1.2e-38) + add_j_to_nblist(vdwc,jj); + add_j_to_nblist(vdw,jj); + } else if (fabs(charge[jj]) > 1.2e-38) + add_j_to_nblist(coul,jj); + } + } + close_i_nblist(vdw); + close_i_nblist(coul); + close_i_nblist(vdwc); + } + } else { + for(i=0; i 1.2e-38) + add_j_to_nblist(coul,jj); + } else if (bVDWOnly) { + if (bHaveLJ[type[jj]]) + add_j_to_nblist(vdw,jj); + } else { + if (bHaveLJ[type[jj]]) { + if (fabs(qi) > 1.2e-38 && (fabs(charge[jj]) > 1.2e-38)) + add_j_to_nblist(vdwc,jj); + add_j_to_nblist(vdw,jj); + } else if (fabs(qi) > 1.2e-38 && (fabs(charge[jj]) > 1.2e-38)) + add_j_to_nblist(coul,jj); + } + } + } + } + } + close_i_nblist(vdw); + close_i_nblist(coul); + close_i_nblist(vdwc); + } + } + } else { + for(i=0; imno_index[icg*3]) : ((void *)0)); + if (!bCoulOnly) + new_i_nblist(vdw,bLR ? F_LR : F_SR,i_atom,shift,gid, + bMNO ? &(fr->mno_index[icg*3]) : ((void *)0)); + new_i_nblist(coul,bLR ? F_LR : F_SR,i_atom,shift,gid, + bMNO ? &(fr->mno_index[icg*3]) : ((void *)0)); + new_i_nblist(vdw_free,F_DVDL,i_atom,shift,gid,((void *)0)); + new_i_nblist(coul_free,F_DVDL,i_atom,shift,gid,((void *)0)); + new_i_nblist(vdwc_free,F_DVDL,i_atom,shift,gid,((void *)0)); + if (!(bVDWOnly || (fabs(qi)<1.2e-38 && fabs(qiB)<1.2e-38)) || + !(bCoulOnly || (!bHaveLJ[type[i_atom]] && !bHaveLJ[typeB[i_atom]]))) { + for(j=0; (j 1.2e-38 && (fabs(charge[jj]) > 1.2e-38)) + add_j_to_nblist(vdwc,jj); + add_j_to_nblist(vdw,jj); + } else if (fabs(qi) > 1.2e-38 && (fabs(charge[jj]) > 1.2e-38)) + add_j_to_nblist(coul,jj); + } + } + } + } + } + } + close_i_nblist(vdw); + close_i_nblist(coul); + close_i_nblist(vdwc); + if (bWater && (i==0)) { + close_i_nblist(coul_ww); + close_i_nblist(vdwc_ww); + } + close_i_nblist(vdw_free); + close_i_nblist(coul_free); + close_i_nblist(vdwc_free); + } + } +} +static void setexcl(atom_id start,atom_id end,t_block *excl,int b, + t_excl bexcl[]) +{ + atom_id i,k; + if (b) { + for(i=start; iindex[i]; kindex[i+1]; k++) { + (bexcl)[((atom_id) (excl->a[k]))] |= (1<<((atom_id) (i-start))); + } + } + } +} +int calc_naaj(int icg,int cgtot) +{ + int naaj; + if ((cgtot % 2) == 1) { + naaj = 1+(cgtot/2); + } + else if ((cgtot % 4) == 0) { + if (icg < cgtot/2) { + if ((icg % 2) == 0) + naaj=1+(cgtot/2); + } + else { + if ((icg % 2) == 1) + naaj=1+(cgtot/2); + } + } + else { + if ((icg % 2) == 0) + naaj=1+(cgtot/2); + else + naaj=cgtot/2; + } + return naaj; +} +static void get_dx(int Nx,real gridx,real grid_x,real rc2,real x, + int *dx0,int *dx1,real *dcx2) +{ + real dcx,tmp; + int xgi,xgi0,xgi1,i; + xgi = (int)(Nx+x*grid_x)-Nx; + if (xgi < 0) { + *dx0 = 0; + *dx1 = -1; + } else if (xgi >= Nx) { + *dx0 = Nx; + *dx1 = Nx-1; + } else { + dcx2[xgi] = 0; + *dx0 = xgi; + xgi0 = xgi-1; + *dx1 = xgi; + xgi1 = xgi+1; + } + for(i=xgi0; i>=0; i--) { + dcx = (i+1)*gridx-x; + tmp = dcx*dcx; + if (tmp >= rc2) + *dx0 = i; + dcx2[i] = tmp; + } + for(i=xgi1; i= rc2) + *dx1 = i; + dcx2[i] = tmp; + } +} +static void do_longrange(FILE *log,t_commrec *cr,t_topology *top,t_forcerec *fr, + int ngid,t_mdatoms *md,int icg, + int jgid,int nlr, + atom_id lr[],t_excl bexcl[],int shift, + rvec x[],rvec box_size,t_nrnb *nrnb, + real lambda,real *dvdlambda, + t_groups *grps,int bVDWOnly,int bCoulOnly, + int bDoForces,int bHaveLJ[]) +{ + int i; + for(i=0; (inlist_lr[i].nri > fr->nlist_lr[i].maxnri-32) || bDoForces) { + close_neighbor_list(fr,1,i); + do_fnbf(log,cr,fr,x,fr->f_twin,md, + grps->estat.ee[egLJLR],grps->estat.ee[egLR],box_size, + nrnb,lambda,dvdlambda,1,i); + reset_neighbor_list(fr,1,i); + } + } + if (!bDoForces) { + put_in_list(bHaveLJ,ngid,md,icg,jgid,nlr,lr,top->blocks[ebCGS].index, + bexcl,shift,fr, + 1,bVDWOnly,bCoulOnly); + } +} +static int ns5_core(FILE *log,t_commrec *cr,t_forcerec *fr,int cg_index[], + matrix box,rvec box_size,int ngid, + t_topology *top,t_groups *grps, + t_grid *grid,rvec x[],t_excl bexcl[],int *bExcludeAlleg, + t_nrnb *nrnb,t_mdatoms *md, + real lambda,real *dvdlambda, + int bHaveLJ[]) +{ + static atom_id **nl_lr_ljc,**nl_lr_one,**nl_sr=((void *)0); + static int *nlr_ljc,*nlr_one,*nsr; + static real *dcx2=((void *)0),*dcy2=((void *)0),*dcz2=((void *)0); + t_block *cgs=&(top->blocks[ebCGS]); + unsigned short *gid=md->cENER; + int tx,ty,tz,dx,dy,dz,cj; + int dx0,dx1,dy0,dy1,dz0,dz1; + int Nx,Ny,Nz,shift=-1,j,nrj,nns,nn=-1; + real gridx,gridy,gridz,grid_x,grid_y,grid_z; + int icg=-1,iicg,cgsnr,i0,nri,naaj,min_icg,icg_naaj,jjcg,cgj0,jgid; + int bVDWOnly,bCoulOnly; + rvec xi,*cgcm; + real r2,rs2,rvdw2,rcoul2,rm2,rl2,XI,YI,ZI,dcx,dcy,dcz,tmp1,tmp2; + int *i_eg_excl; + int use_twinrange,use_two_cutoffs; + cgsnr = cgs->nr; + rs2 = ((fr->rlist)*(fr->rlist)); + if (fr->bTwinRange) { + rvdw2 = ((fr->rvdw)*(fr->rvdw)); + rcoul2 = ((fr->rcoulomb)*(fr->rcoulomb)); + } else { + } + rm2 = (((rvdw2) < (rcoul2)) ? (rvdw2) : (rcoul2) ); + rl2 = (((rvdw2) > (rcoul2)) ? (rvdw2) : (rcoul2) ); + use_twinrange = (rs2 < rm2); + use_two_cutoffs = (rm2 < rl2); + bVDWOnly = (rvdw2 > rcoul2); + bCoulOnly = !bVDWOnly; + if (nl_sr == ((void *)0)) { + (nl_sr)=save_calloc("nl_sr","ns.c",1341, (ngid),sizeof(*(nl_sr))); + (nsr)=save_calloc("nsr","ns.c",1343, (ngid),sizeof(*(nsr))); + (nlr_ljc)=save_calloc("nlr_ljc","ns.c",1344, (ngid),sizeof(*(nlr_ljc))); + (nlr_one)=save_calloc("nlr_one","ns.c",1345, (ngid),sizeof(*(nlr_one))); + if (use_twinrange) + (nl_lr_ljc)=save_calloc("nl_lr_ljc","ns.c",1349, (ngid),sizeof(*(nl_lr_ljc))); + if (use_two_cutoffs) + (nl_lr_one)=save_calloc("nl_lr_one","ns.c",1353, (ngid),sizeof(*(nl_lr_one))); + for(j=0; (jcg_cm; + Nx = grid->nrx; + Ny = grid->nry; + if (dcx2 == ((void *)0)) { + (dcx2)=save_calloc("dcx2","ns.c",1379, (Nx*2),sizeof(*(dcx2))); + (dcy2)=save_calloc("dcy2","ns.c",1380, (Ny*2),sizeof(*(dcy2))); + (dcz2)=save_calloc("dcz2","ns.c",1381, (Nz*2),sizeof(*(dcz2))); + } + gridx = box[0][0]/grid->nrx; + gridy = box[1][1]/grid->nry; + gridz = box[2][2]/grid->nrz; + grid_x = 1/gridx; + grid_y = 1/gridy; + grid_z = 1/gridz; + for(iicg=fr->cg0; (iicg < fr->hcg); iicg++) { + icg = cg_index[iicg]; + if (icg != iicg) + fatal_error(0,"icg = %d, iicg = %d, file %s, line %d",icg,iicg,"ns.c", + 1408); + if(bExcludeAlleg[icg]) + i_eg_excl = fr->eg_excl + ngid*gid[cgs->index[icg]]; + setexcl(cgs->index[icg],cgs->index[icg+1],&top->atoms.excl,1,bexcl); + naaj = calc_naaj(icg,cgsnr); + icg_naaj = icg+naaj; + for (tz=-1; tz<=1; tz++) { + ZI = cgcm[icg][2]+tz*box[2][2]; + get_dx(Nz,gridz,grid_z,rcoul2,ZI,&dz0,&dz1,dcz2); + if (dz0 > dz1) + for (ty=-1; ty<=1; ty++) { + YI = cgcm[icg][1]+ty*box[1][1]+tz*box[2][1]; + get_dx(Ny,gridy,grid_y,rcoul2,YI,&dy0,&dy1,dcy2); + for (tx=-1; tx<=1; tx++) { + get_dx(Nx,gridx,grid_x,rcoul2,XI,&dx0,&dx1,dcx2); + shift=((2*1 +1)*((2*1 +1)*((tz)+1)+(ty)+1)+(tx)+1); + for (dx=dx0; (dx<=dx1); dx++) { + for (dy=dy0; (dy<=dy1); dy++) { + for (dz=dz0; (dz<=dz1); dz++) { + if (tmp2 > dcz2[dz]) { + for (j=0; (j= icg) && (jjcg < icg_naaj)) || + ((jjcg < min_icg))) { + if (r2 < rl2) { + if (!i_eg_excl[jgid]) { + if (r2 < rs2) { + if (nsr[jgid] >= 1024) { + put_in_list(bHaveLJ,ngid,md,icg,jgid, + nsr[jgid],nl_sr[jgid], + cgs->index, bexcl, + shift,fr,0,0,0); + } + } else if (r2 < rm2) { + } else if (use_two_cutoffs) { + if (nlr_one[jgid] >= 1024) { + do_longrange(log,cr,top,fr,ngid,md,icg,jgid, + nlr_one[jgid], + nl_lr_one[jgid],bexcl,shift,x, + box_size,nrnb, + lambda,dvdlambda,grps, + bVDWOnly,bCoulOnly,0, + bHaveLJ); + } + } + } + } + } + } + } + } + } + } + } + } + } + } +} +int search_neighbours(FILE *log,t_forcerec *fr, + rvec x[],matrix box, + t_topology *top,t_groups *grps, + t_commrec *cr,t_nsborder *nsb, + t_nrnb *nrnb,t_mdatoms *md, + real lambda,real *dvdlambda) +{ + static t_grid *grid=((void *)0); + static t_excl *bexcl; + static int *bHaveLJ; + static int *cg_index=((void *)0),*slab_index=((void *)0); + static int *bExcludeAlleg; + rvec box_size; + int i,j,m,ngid; + int nsearch; + nsearch = ns5_core(log,cr,fr,cg_index,box,box_size,ngid,top,grps, + grid,x,bexcl,bExcludeAlleg,nrnb,md,lambda,dvdlambda,bHaveLJ); +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/test_fp_attribute_1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/test_fp_attribute_1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/test_fp_attribute_1.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/test_fp_attribute_1.c 2014-03-27 17:33:34.000000000 +0000 @@ -0,0 +1,26 @@ +/* { dg-do compile } */ +/* { dg-options "-O0 -fno-omit-frame-pointer -fno-inline --save-temps" } */ + +void +leaf (void) +{ + int a = 0; +} + +__attribute__ ((optimize("omit-frame-pointer"))) +void +non_leaf_1 (void) +{ + leaf (); +} + +__attribute__ ((optimize("omit-frame-pointer"))) +void +non_leaf_2 (void) +{ + leaf (); +} + +/* { dg-final { scan-assembler-times "str\tx30, \\\[sp\\\]" 2 } } */ + +/* { dg-final { cleanup-saved-temps } } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/test_fp_attribute_2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/test_fp_attribute_2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/test_fp_attribute_2.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/test_fp_attribute_2.c 2014-03-27 17:33:34.000000000 +0000 @@ -0,0 +1,26 @@ +/* { dg-do compile } */ +/* { dg-options "-O0 -fomit-frame-pointer -fno-inline --save-temps" } */ + +void +leaf (void) +{ + int a = 0; +} + +__attribute__ ((optimize("no-omit-frame-pointer"))) +void +non_leaf_1 (void) +{ + leaf (); +} + +__attribute__ ((optimize("no-omit-frame-pointer"))) +void +non_leaf_2 (void) +{ + leaf (); +} + +/* { dg-final { scan-assembler-times "stp\tx29, x30, \\\[sp, -\[0-9\]+\\\]!" 2 } } */ + +/* { dg-final { cleanup-saved-temps } } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/ushr64_1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/ushr64_1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/ushr64_1.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/ushr64_1.c 2014-03-26 08:19:14.000000000 +0000 @@ -0,0 +1,84 @@ +/* Test logical SIMD shift works correctly. */ +/* { dg-do run } */ +/* { dg-options "--save-temps" } */ + +#include "arm_neon.h" + +extern void abort (void); + +int __attribute__ ((noinline)) +test_vshr_n_u64_64 (uint64x1_t passed, uint64_t expected) +{ + return vget_lane_u64 (vshr_n_u64 (passed, 64), 0) != expected; +} + +int __attribute__ ((noinline)) +test_vshr_n_u64_4 (uint64x1_t passed, uint64_t expected) +{ + return vget_lane_u64 (vshr_n_u64 (passed, 4), 0) != expected; +} + +int __attribute__ ((noinline)) +test_vshr_n_u64_0 (uint64x1_t passed, uint64_t expected) +{ + return vget_lane_u64 (vshr_n_u64 (passed, 0), 0) != expected; +} + +int __attribute__ ((noinline)) +test_vshrd_n_u64_64 (uint64_t passed, uint64_t expected) +{ + return vshrd_n_u64 (passed, 64) != expected; +} + +int __attribute__ ((noinline)) +test_vshrd_n_u64_4 (uint64_t passed, uint64_t expected) +{ + return vshrd_n_u64 (passed, 4) != expected; +} + +int __attribute__ ((noinline)) +test_vshrd_n_u64_0 (uint64_t passed, uint64_t expected) +{ + return vshrd_n_u64 (passed, 0) != expected; +} + +/* { dg-final { scan-assembler-times "ushr\\td\[0-9\]+, d\[0-9\]+, 64" 2 } } */ +/* { dg-final { (scan-assembler-times "ushr\\td\[0-9\]+, d\[0-9\]+, 4" 2) || \ + (scan-assembler-times "lsr\\tx\[0-9\]+, x\[0-9\]+, 4" 2) } } */ +/* { dg-final { scan-assembler-not "ushr\\td\[0-9\]+, d\[0-9\]+, 0" } } */ + +int +main (int argc, char *argv[]) +{ + /* Testing vshr_n_u64. */ + if (test_vshr_n_u64_64 (vcreate_u64 (0x0000000080000000), 0)) + abort (); + if (test_vshr_n_u64_64 (vcreate_u64 (0xffffffff80000000), 0)) + abort (); + + if (test_vshr_n_u64_4 (vcreate_u64 (0x0000000080000000), 0x0000000008000000)) + abort (); + if (test_vshr_n_u64_4 (vcreate_u64 (0xffffffff80000000), 0x0ffffffff8000000)) + abort (); + + if (test_vshr_n_u64_0 (vcreate_u64 (0x0000000080000000), 0x0000000080000000)) + abort (); + + /* Testing vshrd_n_u64. */ + if (test_vshrd_n_u64_64 (0x0000000080000000, 0)) + abort (); + if (test_vshrd_n_u64_64 (0xffffffff80000000, 0)) + abort (); + + if (test_vshrd_n_u64_4 (0x0000000080000000, 0x0000000008000000)) + abort (); + if (test_vshrd_n_u64_4 (0xffffffff80000000, 0x0ffffffff8000000)) + abort (); + + if (test_vshrd_n_u64_0 (0x0000000080000000, 0x0000000080000000)) + abort (); + + return 0; +} + +/* { dg-final { cleanup-saved-temps } } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/vect-abs.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/vect-abs.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/vect-abs.c 2013-02-25 13:42:27.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/aarch64/vect-abs.c 2014-03-26 08:19:14.000000000 +0000 @@ -1,6 +1,6 @@ /* { dg-do run } */ -/* { dg-options "-O3" } */ +/* { dg-options "-O3 -std=c99" } */ #include "limits.h" @@ -37,8 +37,9 @@ SET_RVEC (8, SCHAR) SET_RVEC (16, SHRT) SET_RVEC (32, INT) -SET_RVEC (64, LONG_LONG) +SET_RVEC (64, LLONG) +void set_rvector_long (pRLONG a) { int i; @@ -49,8 +50,9 @@ SET_VEC (8, SCHAR) SET_VEC (16, SHRT) SET_VEC (32, INT) -SET_VEC (64, LONG_LONG) +SET_VEC (64, LLONG) +void set_vector_long (long *__restrict__ a) { long i; @@ -63,6 +65,7 @@ CHECK_VEC (32) CHECK_VEC (64) +void check_vector_long (long *__restrict__ a, long *__restrict__ b) { long i; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/arm/pr60650-2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/arm/pr60650-2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/arm/pr60650-2.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/arm/pr60650-2.c 2014-04-02 23:40:59.000000000 +0000 @@ -0,0 +1,37 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fno-omit-frame-pointer -march=armv7-a" } */ + +int a, h, j; +long long d, e, i; +int f; +fn1 (void *p1, int p2) +{ + switch (p2) + case 8: +{ + register b = *(long long *) p1, c asm ("r2"); + asm ("%0": "=r" (a), "=r" (c):"r" (b), "r" (0)); + *(long long *) p1 = c; + } +} + +fn2 () +{ + int k; + k = f; + while (1) + { + fn1 (&i, sizeof i); + e = d + k; + switch (d) + case 0: + ( + { + register l asm ("r4"); + register m asm ("r0"); + asm (" .err .endif\n\t": "=r" (h), "=r" (j):"r" (m), + "r" + (l));; + }); + } +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/arm/pr60650.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/arm/pr60650.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/arm/pr60650.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/arm/pr60650.c 2014-03-31 14:27:29.000000000 +0000 @@ -0,0 +1,41 @@ +/* { dg-do compile } */ +/* { dg-skip-if "do not override -mfloat-abi" { *-*-* } { "-mfloat-abi=*" } {"-mfloat-abi=softfp" } } */ +/* { dg-options "-O2 -fno-omit-frame-pointer -mabi=apcs-gnu -mfloat-abi=softfp" } */ + + +struct super_block +{ + int s_blocksize_bits; +}; +struct btrfs_fs_info +{ + struct super_block *sb; +}; +struct btrfs_root +{ + struct btrfs_fs_info *fs_info; +} *b; + + +int a, c, d; +long long e; + +truncate_one_csum (struct btrfs_root *p1, long long p2, long long p3) +{ + int f, g, i = p1->fs_info->sb->s_blocksize_bits; + g = a; + long long h = p2 + p3; + f = foo1 (b, 0, c, 0); + e = f / g; + e <<= p1->fs_info->sb->s_blocksize_bits; + if (d < p2) + { + int j = e - h >> i; + foo2 (p1, 0, j); + } + else + { + asm ("1\t.long "); + __builtin_unreachable (); + } +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/arm/pr60657.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/arm/pr60657.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/arm/pr60657.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/arm/pr60657.c 2014-04-04 14:53:38.000000000 +0000 @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -march=armv7-a" } */ + + +void foo (void); + +void +bar (int x, int y) +{ + y = 9999; + if (x & (1 << y)) + foo (); + diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/avr/dev-specific-rmw.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/avr/dev-specific-rmw.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/avr/dev-specific-rmw.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/avr/dev-specific-rmw.c 2014-04-05 08:48:42.000000000 +0000 @@ -0,0 +1,13 @@ +/* Verify that rmw instructions supported */ +/* { dg-do assemble } */ + +int main() +{ + #ifdef __AVR_ISA_RMW__ + __asm("xch Z, r12"); + __asm("las Z, r12"); + __asm("lac Z, r12"); + __asm("lat Z, r12"); + #endif + return 0; +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/387-3.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/387-3.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/387-3.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/387-3.c 2014-04-02 10:43:28.000000000 +0000 @@ -1,6 +1,6 @@ /* Verify that 387 mathematical constants are recognized. */ /* { dg-do compile } */ -/* { dg-options "-O2 -mfpmath=387 -mfancy-math-387" } */ +/* { dg-options "-O2 -mfpmath=387 -mfancy-math-387 -mtune=generic" } */ /* { dg-final { scan-assembler "fldpi" } } */ /* { dg-require-effective-target large_long_double } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/387-4.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/387-4.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/387-4.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/387-4.c 2014-04-02 10:43:28.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2 -mfancy-math-387" } */ +/* { dg-options "-O2 -mfancy-math-387 -mtune=generic" } */ /* { dg-final { scan-assembler "fldpi" } } */ /* { dg-require-effective-target large_long_double } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-1.c 2013-10-30 22:48:58.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-1.c 2014-04-02 10:43:28.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -dp -mavx -mavx256-split-unaligned-load" } */ +/* { dg-options "-O3 -dp -mavx -mavx256-split-unaligned-load -mno-prefer-avx128" } */ #define N 1024 diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-2.c 2013-10-30 22:48:58.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-2.c 2014-04-02 23:41:00.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do compile { target { ! ia32 } } } */ -/* { dg-options "-O3 -dp -mavx -mavx256-split-unaligned-load" } */ +/* { dg-options "-O3 -dp -mavx -mavx256-split-unaligned-load -mno-prefer-avx128" } */ void avx_test (char **cp, char **ep) diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-4.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-4.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-4.c 2013-10-30 22:48:58.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx256-unaligned-load-4.c 2014-04-02 10:43:28.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -dp -mavx -mno-avx256-split-unaligned-load -mno-avx256-split-unaligned-store -fno-common" } */ +/* { dg-options "-O3 -dp -mavx -mno-avx256-split-unaligned-load -mno-avx256-split-unaligned-store -mno-prefer-avx128 -fno-common" } */ #define N 1024 diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-1.c 2013-06-10 18:11:37.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-1.c 2014-04-02 10:43:28.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -dp -mavx -mavx256-split-unaligned-store -fno-common" } */ +/* { dg-options "-O3 -dp -mavx -mavx256-split-unaligned-store -mno-prefer-avx128 -fno-common" } */ #define N 1024 diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-2.c 2013-10-14 11:47:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-2.c 2014-04-02 10:43:28.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do compile { target { ! ia32 } } } */ -/* { dg-options "-O3 -dp -mavx -mavx256-split-unaligned-store" } */ +/* { dg-options "-O3 -dp -mavx -mavx256-split-unaligned-store -mno-prefer-avx128" } */ #define N 1024 diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-4.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-4.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-4.c 2013-06-10 18:11:37.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx256-unaligned-store-4.c 2014-04-02 10:43:28.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -dp -mavx -mno-avx256-split-unaligned-load -mno-avx256-split-unaligned-store -fno-common" } */ +/* { dg-options "-O3 -dp -mavx -mno-avx256-split-unaligned-load -mno-avx256-split-unaligned-store -mno-prefer-avx128 -fno-common" } */ #define N 1024 diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpaddb-3.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpaddb-3.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpaddb-3.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpaddb-3.c 2014-04-02 10:43:28.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */ +/* { dg-options "-mavx2 -mno-prefer-avx128 -O2 -ftree-vectorize -save-temps" } */ /* { dg-require-effective-target avx2 } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpaddd-3.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpaddd-3.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpaddd-3.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpaddd-3.c 2014-04-02 10:43:28.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */ +/* { dg-options "-mavx2 -mno-prefer-avx128 -O2 -ftree-vectorize -save-temps" } */ /* { dg-require-effective-target avx2 } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpaddq-3.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpaddq-3.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpaddq-3.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpaddq-3.c 2014-04-02 10:43:28.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */ +/* { dg-options "-mavx2 -mno-prefer-avx128 -O2 -ftree-vectorize -save-temps" } */ /* { dg-require-effective-target avx2 } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpaddw-3.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpaddw-3.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpaddw-3.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpaddw-3.c 2014-04-02 10:43:28.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */ +/* { dg-options "-mavx2 -mno-prefer-avx128 -O2 -ftree-vectorize -save-temps" } */ /* { dg-require-effective-target avx2 } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpand-3.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpand-3.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpand-3.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpand-3.c 2014-04-02 23:41:00.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */ +/* { dg-options "-mavx2 -mno-prefer-avx128 -O2 -ftree-vectorize -save-temps" } */ /* { dg-require-effective-target avx2 } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpmulld-3.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpmulld-3.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpmulld-3.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpmulld-3.c 2014-04-02 10:43:28.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */ +/* { dg-options "-mavx2 -mno-prefer-avx128 -O2 -ftree-vectorize -save-temps" } */ /* { dg-require-effective-target avx2 } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpmullw-3.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpmullw-3.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpmullw-3.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpmullw-3.c 2014-04-02 10:43:28.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */ +/* { dg-options "-mavx2 -mno-prefer-avx128 -O2 -ftree-vectorize -save-temps" } */ /* { dg-require-effective-target avx2 } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsrad-3.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsrad-3.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsrad-3.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsrad-3.c 2014-04-02 10:43:28.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */ +/* { dg-options "-mavx2 -mno-prefer-avx128 -O2 -ftree-vectorize -save-temps" } */ /* { dg-require-effective-target avx2 } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsraw-3.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsraw-3.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsraw-3.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsraw-3.c 2014-04-02 10:43:28.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */ +/* { dg-options "-mavx2 -mno-prefer-avx128 -O2 -ftree-vectorize -save-temps" } */ /* { dg-require-effective-target avx2 } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsrld-3.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsrld-3.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsrld-3.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsrld-3.c 2014-04-02 10:43:28.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */ +/* { dg-options "-mavx2 -mno-prefer-avx128 -O2 -ftree-vectorize -save-temps" } */ /* { dg-require-effective-target avx2 } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsrlw-3.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsrlw-3.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsrlw-3.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsrlw-3.c 2014-04-02 10:43:28.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */ +/* { dg-options "-mavx2 -mno-prefer-avx128 -O2 -ftree-vectorize -save-temps" } */ /* { dg-require-effective-target avx2 } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsubb-3.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsubb-3.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsubb-3.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsubb-3.c 2014-04-02 10:43:28.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */ +/* { dg-options "-mavx2 -mno-prefer-avx128 -O2 -ftree-vectorize -save-temps" } */ /* { dg-require-effective-target avx2 } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsubd-3.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsubd-3.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsubd-3.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsubd-3.c 2014-04-02 10:43:28.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */ +/* { dg-options "-mavx2 -mno-prefer-avx128 -O2 -ftree-vectorize -save-temps" } */ /* { dg-require-effective-target avx2 } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsubq-3.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsubq-3.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsubq-3.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsubq-3.c 2014-04-02 10:43:28.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */ +/* { dg-options "-mavx2 -mno-prefer-avx128 -O2 -ftree-vectorize -save-temps" } */ /* { dg-require-effective-target avx2 } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsubw-3.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsubw-3.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsubw-3.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx2-vpsubw-3.c 2014-04-02 10:43:28.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-mavx2 -O2 -ftree-vectorize -save-temps" } */ +/* { dg-options "-mavx2 -mno-prefer-avx128 -O2 -ftree-vectorize -save-temps" } */ /* { dg-require-effective-target avx2 } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx512f-vshuff32x4-2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx512f-vshuff32x4-2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx512f-vshuff32x4-2.c 2014-01-01 03:00:05.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx512f-vshuff32x4-2.c 2014-03-28 19:04:54.000000000 +0000 @@ -43,7 +43,7 @@ for (i = 0; i < SIZE; i++) { s1.a[i] = 1.2 / (i + 0.378); - s1.a[i] = 91.02 / (i + 4.3578); + s2.a[i] = 91.02 / (i + 4.3578); u1.a[i] = DEFAULT_VALUE; u2.a[i] = DEFAULT_VALUE; u3.a[i] = DEFAULT_VALUE; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx512f-vshuff64x2-2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx512f-vshuff64x2-2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx512f-vshuff64x2-2.c 2014-01-01 03:00:05.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx512f-vshuff64x2-2.c 2014-03-28 19:04:54.000000000 +0000 @@ -43,7 +43,7 @@ for (i = 0; i < SIZE; i++) { s1.a[i] = 1.2 / (i + 0.378); - s1.a[i] = 91.02 / (i + 4.3578); + s2.a[i] = 91.02 / (i + 4.3578); u1.a[i] = DEFAULT_VALUE; u2.a[i] = DEFAULT_VALUE; u3.a[i] = DEFAULT_VALUE; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx512f-vshufi32x4-2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx512f-vshufi32x4-2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx512f-vshufi32x4-2.c 2014-01-01 03:00:05.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx512f-vshufi32x4-2.c 2014-03-28 19:04:54.000000000 +0000 @@ -43,7 +43,7 @@ for (i = 0; i < SIZE; i++) { s1.a[i] = 1.2 / (i + 0.378); - s1.a[i] = 91.02 / (i + 4.3578); + s2.a[i] = 91.02 / (i + 4.3578); u1.a[i] = DEFAULT_VALUE; u2.a[i] = DEFAULT_VALUE; u3.a[i] = DEFAULT_VALUE; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx512f-vshufi64x2-2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx512f-vshufi64x2-2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx512f-vshufi64x2-2.c 2014-01-01 03:00:05.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/avx512f-vshufi64x2-2.c 2014-03-28 19:04:54.000000000 +0000 @@ -43,7 +43,7 @@ for (i = 0; i < SIZE; i++) { s1.a[i] = 1.2 / (i + 0.378); - s1.a[i] = 91.02 / (i + 4.3578); + s2.a[i] = 91.02 / (i + 4.3578); u1.a[i] = DEFAULT_VALUE; u2.a[i] = DEFAULT_VALUE; u3.a[i] = DEFAULT_VALUE; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/fma4-builtin.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/fma4-builtin.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/fma4-builtin.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/fma4-builtin.c 2014-03-30 07:40:40.000000000 +0000 @@ -2,7 +2,7 @@ and add instructions FMA4 systems. */ /* { dg-do compile { target { ! { ia32 } } } } */ -/* { dg-options "-O2 -mfma4" } */ +/* { dg-options "-O2 -mfma4 -mno-fma" } */ #ifndef __FP_FAST_FMAF # error "__FP_FAST_FMAF should be defined" diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/fma4-fma-2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/fma4-fma-2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/fma4-fma-2.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/fma4-fma-2.c 2014-03-30 07:40:40.000000000 +0000 @@ -3,7 +3,7 @@ vfnmsubss on FMA4 systems. */ /* { dg-do compile { target { ! { ia32 } } } } */ -/* { dg-options "-O2 -funsafe-math-optimizations -mfma4" } */ +/* { dg-options "-O2 -funsafe-math-optimizations -mfma4 -mno-fma" } */ extern void exit (int); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/fma4-fma.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/fma4-fma.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/fma4-fma.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/fma4-fma.c 2014-03-30 07:40:40.000000000 +0000 @@ -3,7 +3,7 @@ vfnmsubss on FMA4 systems. */ /* { dg-do compile { target { ! { ia32 } } } } */ -/* { dg-options "-O2 -mfma4" } */ +/* { dg-options "-O2 -mfma4 -mno-fma" } */ extern void exit (int); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/fma4-vector-2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/fma4-vector-2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/fma4-vector-2.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/fma4-vector-2.c 2014-03-30 07:40:40.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do compile { target { ! { ia32 } } } } */ -/* { dg-options "-O2 -mfma4 -ftree-vectorize -mtune=generic" } */ +/* { dg-options "-O2 -mfma4 -ftree-vectorize -mtune=generic -mno-fma" } */ float r[256], s[256]; float x[256]; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/fma4-vector.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/fma4-vector.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/fma4-vector.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/fma4-vector.c 2014-03-30 07:40:40.000000000 +0000 @@ -2,7 +2,7 @@ instructions vector into vfmaddps on FMA4 systems. */ /* { dg-do compile { target { ! { ia32 } } } } */ -/* { dg-options "-O2 -mfma4 -ftree-vectorize -mtune=generic" } */ +/* { dg-options "-O2 -mfma4 -ftree-vectorize -mtune=generic -mno-fma" } */ extern void exit (int); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/funcspec-2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/funcspec-2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/funcspec-2.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/funcspec-2.c 2014-04-02 23:41:00.000000000 +0000 @@ -1,5 +1,6 @@ /* Test whether using target specific options, we can generate FMA4 code. */ /* { dg-do compile { target { ! { ia32 } } } } */ +/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=k8" } } */ /* { dg-options "-O2 -march=k8" } */ extern void exit (int); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/funcspec-3.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/funcspec-3.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/funcspec-3.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/funcspec-3.c 2014-04-02 23:41:00.000000000 +0000 @@ -2,6 +2,7 @@ setting the architecture. */ /* { dg-do compile } */ /* { dg-require-effective-target lp64 } */ +/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=k8" } } */ /* { dg-options "-O2 -march=k8 -mno-sse3" } */ extern void exit (int); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/funcspec-9.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/funcspec-9.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/funcspec-9.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/funcspec-9.c 2014-04-02 23:41:00.000000000 +0000 @@ -1,5 +1,6 @@ /* Test whether using target specific options, we can generate FMA4 code. */ /* { dg-do compile } */ +/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=k8" } } */ /* { dg-options "-O2 -march=k8 -mfpmath=sse -msse2" } */ extern void exit (int); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/isa-1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/isa-1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/isa-1.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/isa-1.c 2014-04-02 23:41:00.000000000 +0000 @@ -1,4 +1,5 @@ /* { dg-do run } */ +/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=x86-64" } } */ /* { dg-options "-march=x86-64 -msse4" } */ extern void abort (void); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_double_1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_double_1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_double_1.c 2013-10-30 22:48:58.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_double_1.c 2014-03-30 07:40:40.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic" } */ +/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic -mno-fma4" } */ /* Test that the compiler properly optimizes floating point multiply and add instructions into FMA3 instructions. */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_double_2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_double_2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_double_2.c 2013-10-30 22:48:58.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_double_2.c 2014-03-30 07:40:40.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic" } */ +/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic -mno-fma4" } */ /* Test that the compiler properly optimizes floating point multiply and add instructions into FMA3 instructions. */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_double_3.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_double_3.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_double_3.c 2013-10-30 22:48:58.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_double_3.c 2014-03-30 07:40:40.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic" } */ +/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic -mno-fma4" } */ /* Test that the compiler properly optimizes floating point multiply and add instructions into FMA3 instructions. */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_double_4.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_double_4.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_double_4.c 2013-10-30 22:48:58.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_double_4.c 2014-03-30 07:40:40.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic" } */ +/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic -mno-fma4" } */ /* Test that the compiler properly optimizes floating point multiply and add instructions into FMA3 instructions. */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_double_5.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_double_5.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_double_5.c 2013-10-30 22:48:58.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_double_5.c 2014-03-30 07:40:40.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic" } */ +/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic -mno-fma4" } */ /* Test that the compiler properly optimizes floating point multiply and add instructions into FMA3 instructions. */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_double_6.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_double_6.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_double_6.c 2013-10-30 22:48:58.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_double_6.c 2014-03-30 07:40:40.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic" } */ +/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic -mno-fma4" } */ /* Test that the compiler properly optimizes floating point multiply and add instructions into FMA3 instructions. */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_float_1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_float_1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_float_1.c 2013-10-30 22:48:58.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_float_1.c 2014-03-30 07:40:40.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic" } */ +/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic -mno-fma4" } */ /* Test that the compiler properly optimizes floating point multiply and add instructions into FMA3 instructions. */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_float_2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_float_2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_float_2.c 2013-10-30 22:48:58.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_float_2.c 2014-03-30 07:40:40.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic" } */ +/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic -mno-fma4" } */ /* Test that the compiler properly optimizes floating point multiply and add instructions into FMA3 instructions. */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_float_3.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_float_3.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_float_3.c 2013-10-30 22:48:58.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_float_3.c 2014-03-30 07:40:40.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic" } */ +/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic -mno-fma4" } */ /* Test that the compiler properly optimizes floating point multiply and add instructions into FMA3 instructions. */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_float_4.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_float_4.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_float_4.c 2013-10-30 22:48:58.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_float_4.c 2014-03-30 07:40:40.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic" } */ +/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic -mno-fma4" } */ /* Test that the compiler properly optimizes floating point multiply and add instructions into FMA3 instructions. */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_float_5.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_float_5.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_float_5.c 2013-10-30 22:48:58.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_float_5.c 2014-03-30 07:40:40.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic" } */ +/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic -mno-fma4" } */ /* Test that the compiler properly optimizes floating point multiply and add instructions into FMA3 instructions. */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_float_6.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_float_6.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_float_6.c 2013-10-30 22:48:58.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/l_fma_float_6.c 2014-03-30 07:40:40.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic" } */ +/* { dg-options "-O3 -Wno-attributes -mfpmath=sse -mfma -mtune=generic -mno-fma4" } */ /* Test that the compiler properly optimizes floating point multiply and add instructions into FMA3 instructions. */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/memcpy-strategy-1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/memcpy-strategy-1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/memcpy-strategy-1.c 2013-08-12 07:48:05.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/memcpy-strategy-1.c 2014-04-02 23:41:00.000000000 +0000 @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=atom" } } */ /* { dg-options "-O2 -march=atom -mmemcpy-strategy=vector_loop:-1:align" } */ /* { dg-final { scan-assembler-times "movdqa" 8 { target { ! { ia32 } } } } } */ /* { dg-final { scan-assembler-times "movdqa" 4 { target { ia32 } } } } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/memcpy-strategy-2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/memcpy-strategy-2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/memcpy-strategy-2.c 2013-08-12 07:48:05.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/memcpy-strategy-2.c 2014-04-02 23:41:00.000000000 +0000 @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=atom" } } */ /* { dg-options "-O2 -march=atom -mmemcpy-strategy=vector_loop:3000:align,libcall:-1:align" } */ /* { dg-final { scan-assembler-times "movdqa" 8 { target { ! { ia32 } } } } } */ /* { dg-final { scan-assembler-times "movdqa" 4 { target { ia32 } } } } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/memcpy-vector_loop-1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/memcpy-vector_loop-1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/memcpy-vector_loop-1.c 2013-07-08 14:23:44.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/memcpy-vector_loop-1.c 2014-04-02 23:41:00.000000000 +0000 @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=atom" } } */ /* { dg-options "-O2 -march=atom -minline-all-stringops -mstringop-strategy=vector_loop" } */ /* { dg-final { scan-assembler-times "movdqa" 8 { target { ! { ia32 } } } } } */ /* { dg-final { scan-assembler-times "movdqa" 4 { target { ia32 } } } } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/memcpy-vector_loop-2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/memcpy-vector_loop-2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/memcpy-vector_loop-2.c 2013-07-08 14:23:44.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/memcpy-vector_loop-2.c 2014-04-02 23:41:00.000000000 +0000 @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=atom" } } */ /* { dg-options "-O2 -march=atom -minline-all-stringops -mstringop-strategy=vector_loop" } */ /* { dg-final { scan-assembler-times "movdqa" 4} } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/memset-vector_loop-1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/memset-vector_loop-1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/memset-vector_loop-1.c 2013-10-21 16:22:56.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/memset-vector_loop-1.c 2014-04-02 23:41:00.000000000 +0000 @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=atom" } } */ /* { dg-options "-O2 -march=atom -minline-all-stringops -mstringop-strategy=vector_loop" } */ /* { dg-final { scan-assembler-times "movdqa" 4 } } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/memset-vector_loop-2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/memset-vector_loop-2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/memset-vector_loop-2.c 2013-10-21 16:22:56.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/memset-vector_loop-2.c 2014-04-02 23:41:00.000000000 +0000 @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=atom" } } */ /* { dg-options "-O2 -march=atom -minline-all-stringops -mstringop-strategy=vector_loop" } */ /* { dg-final { scan-assembler-times "movdqa" 4} } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/pr27971.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/pr27971.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/pr27971.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/pr27971.c 2014-03-30 07:40:40.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O2" } */ +/* { dg-options "-O2 -mno-tbm" } */ unsigned array[4]; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/pr30970.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/pr30970.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/pr30970.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/pr30970.c 2014-04-02 10:43:28.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do compile } -/* { dg-options "-msse2 -O2 -ftree-vectorize" } */ +/* { dg-options "-msse2 -O2 -ftree-vectorize -mtune=generic" } */ #define N 256 int b[N]; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/pr42542-4a.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/pr42542-4a.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/pr42542-4a.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/pr42542-4a.c 2014-03-30 07:40:40.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O1 -msse4.2 -ftree-vectorize" } */ +/* { dg-options "-O1 -msse4.2 -ftree-vectorize -mno-avx" } */ #include "pr42542-4.c" diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/pr59390.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/pr59390.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/pr59390.c 2014-01-09 09:38:39.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/pr59390.c 2014-03-30 07:40:40.000000000 +0000 @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-std=c99 -O3" } */ +/* { dg-options "-std=c99 -O3 -mno-fma -mno-fma4" } */ extern double fma (double, double, double); void fun() __attribute__((target("fma"))); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/pr60693.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/pr60693.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/pr60693.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/pr60693.c 2014-03-30 07:40:40.000000000 +0000 @@ -0,0 +1,13 @@ +/* PR target/60693 */ +/* { dg-do compile } */ +/* { dg-options "-O0" } */ + +void bar (char *); + +void +foo (void) +{ + char buf[4096]; + __builtin_memcpy (buf, (void *) 0x8000, 4096); + bar (buf); +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/pr60700.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/pr60700.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/pr60700.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/pr60700.c 2014-04-01 18:05:46.000000000 +0000 @@ -0,0 +1,59 @@ +/* PR rtl-optimization/60700 */ +/* { dg-do run { target ia32 } } */ +/* { dg-options "-O3 -march=i686" } */ + +int +__attribute__((noinline)) +foo (void) +{ + return 0; +} + +void *g = (void *)1; + +struct st { + char data[36]; /* must be greater than 32. */ +}; + +int +__attribute__((noinline)) +repro(struct st **out) +{ + int status = 0; + + *out = 0; + + status = foo(); + if (status != 0) { + return status; + } + + if (0 == g) { + status = 999; + return status; + } + + *out = (struct st *)__builtin_malloc(sizeof(struct st)); + if (0 == *out) { + status = 42; + return status; + } + + __builtin_memset(*out, 0, sizeof(struct st)); + + return status; +} + +int +main () +{ + struct st *p; + int ret = repro (&p); + unsigned int i; + + for (i = 0; i < sizeof (p->data)/sizeof (p->data[0]); i++) + if (p->data[i] != 0) + __builtin_abort (); + + return ret; +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/sse2-init-v2di-2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/sse2-init-v2di-2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/sse2-init-v2di-2.c 2013-05-07 09:30:52.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/sse2-init-v2di-2.c 2014-04-02 23:41:00.000000000 +0000 @@ -1,4 +1,5 @@ /* { dg-do compile { target { ! { ia32 } } } } */ +/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=core2" } } */ /* { dg-options "-O2 -msse4 -march=core2 -dp" } */ #include diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/ssetype-1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/ssetype-1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/ssetype-1.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/ssetype-1.c 2014-04-02 23:41:00.000000000 +0000 @@ -1,6 +1,7 @@ /* { dg-do compile } */ /* This test checks for absolute memory operands. */ /* { dg-require-effective-target nonpic } */ +/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=k8" } } */ /* { dg-options "-O2 -msse2 -march=k8" } */ /* { dg-final { scan-assembler "andpd\[^\\n\]*magic" } } */ /* { dg-final { scan-assembler "andnpd\[^\\n\]*magic" } } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/ssetype-2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/ssetype-2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/ssetype-2.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/ssetype-2.c 2014-04-02 23:41:00.000000000 +0000 @@ -1,4 +1,5 @@ /* { dg-do compile } */ +/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=k8" } } */ /* { dg-options "-O2 -msse2 -march=k8" } */ /* { dg-final { scan-assembler "andpd" } } */ /* { dg-final { scan-assembler "andnpd" } } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/ssetype-5.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/ssetype-5.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/ssetype-5.c 2013-02-25 13:44:32.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/i386/ssetype-5.c 2014-04-02 23:41:00.000000000 +0000 @@ -1,6 +1,7 @@ /* { dg-do compile } */ /* This test checks for absolute memory operands. */ /* { dg-require-effective-target nonpic } */ +/* { dg-skip-if "" { i?86-*-* x86_64-*-* } { "-march=*" } { "-march=k8" } } */ /* { dg-options "-O2 -msse2 -march=k8" } */ /* { dg-final { scan-assembler "pand\[^\\n\]*magic" } } */ /* { dg-final { scan-assembler "pandn\[^\\n\]*magic" } } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/powerpc/p8vector-vbpermq.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/powerpc/p8vector-vbpermq.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/powerpc/p8vector-vbpermq.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/powerpc/p8vector-vbpermq.c 2014-03-28 19:04:54.000000000 +0000 @@ -0,0 +1,27 @@ +/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */ +/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ +/* { dg-require-effective-target powerpc_p8vector_ok } */ +/* { dg-options "-O3 -mcpu=power8" } */ +/* { dg-final { scan-assembler "vbpermq" } } */ +/* { dg-final { scan-assembler "mfvsrd" } } */ +/* { dg-final { scan-assembler-not "stfd" } } */ +/* { dg-final { scan-assembler-not "stxvd2x" } } */ + +#include + +#if __LITTLE_ENDIAN__ +#define OFFSET 1 +#else +#define OFFSET 0 +#endif + +long foos (vector signed char a, vector signed char b) +{ + return vec_extract (vec_vbpermq (a, b), OFFSET); +} + +long foou (vector unsigned char a, vector unsigned char b) +{ + return vec_extract (vec_vbpermq (a, b), OFFSET); +} + diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/powerpc/pr60676.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/powerpc/pr60676.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/powerpc/pr60676.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/powerpc/pr60676.c 2014-03-28 19:04:54.000000000 +0000 @@ -0,0 +1,128 @@ +/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ +/* { dg-require-effective-target powerpc_vsx_ok } */ +/* { dg-options "-O3 -mcpu=power7" } */ +/* { dg-final { scan-assembler "xxsldwi" } } */ +/* { dg-final { scan-assembler "xxpermdi" } } */ + +#include + +vector double +v2df_shift (vector double a, vector double b) +{ + return vec_xxsldwi (a, b, 1); +} + +vector float +v4sf_shift (vector float a, vector float b) +{ + return vec_xxsldwi (a, b, 1); +} + +vector long long +v2di_shift (vector long long a, vector long long b) +{ + return vec_xxsldwi (a, b, 1); +} + +vector unsigned long long +v2diu_shift (vector unsigned long long a, vector unsigned long long b) +{ + return vec_xxsldwi (a, b, 1); +} + +vector int +v4si_shift (vector int a, vector int b) +{ + return vec_xxsldwi (a, b, 1); +} + +vector unsigned int +v4siu_shift (vector unsigned int a, vector unsigned int b) +{ + return vec_xxsldwi (a, b, 1); +} + +vector short +v8hi_shift (vector short a, vector short b) +{ + return vec_xxsldwi (a, b, 1); +} + +vector unsigned short +v8hiu_shift (vector unsigned short a, vector unsigned short b) +{ + return vec_xxsldwi (a, b, 1); +} + +vector signed char +v16qi_shift (vector signed char a, vector signed char b) +{ + return vec_xxsldwi (a, b, 1); +} + +vector unsigned char +v16qiu_shift (vector unsigned char a, vector unsigned char b) +{ + return vec_xxsldwi (a, b, 1); +} + +vector double +v2df_permute (vector double a, vector double b) +{ + return vec_xxpermdi (a, b, 1); +} + +vector float +v4sf_permute (vector float a, vector float b) +{ + return vec_xxpermdi (a, b, 1); +} + +vector long long +v2di_permute (vector long long a, vector long long b) +{ + return vec_xxpermdi (a, b, 1); +} + +vector unsigned long long +v2diu_permute (vector unsigned long long a, vector unsigned long long b) +{ + return vec_xxpermdi (a, b, 1); +} + +vector int +v4si_permute (vector int a, vector int b) +{ + return vec_xxpermdi (a, b, 1); +} + +vector unsigned int +v4siu_permute (vector unsigned int a, vector unsigned int b) +{ + return vec_xxpermdi (a, b, 1); +} + +vector short +v8hi_permute (vector short a, vector short b) +{ + return vec_xxpermdi (a, b, 1); +} + +vector unsigned short +v8hiu_permute (vector unsigned short a, vector unsigned short b) +{ + return vec_xxpermdi (a, b, 1); +} + +vector signed char +v16qi_permute (vector signed char a, vector signed char b) +{ + return vec_xxpermdi (a, b, 1); +} + +vector unsigned char +v16qiu_permute (vector unsigned char a, vector unsigned char b) +{ + return vec_xxpermdi (a, b, 1); +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/powerpc/vsx-extract-1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/powerpc/vsx-extract-1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/powerpc/vsx-extract-1.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/powerpc/vsx-extract-1.c 2014-03-28 19:04:54.000000000 +0000 @@ -0,0 +1,16 @@ +/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */ +/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ +/* { dg-require-effective-target powerpc_vsx_ok } */ +/* { dg-options "-O3 -mcpu=power7" } */ +/* { dg-final { scan-assembler "lfd" } } */ +/* { dg-final { scan-assembler-not "lxvd2x" } } */ + +#include + +#if __LITTLE_ENDIAN__ +#define OFFSET 1 +#else +#define OFFSET 0 +#endif + +double get_value (vector double *p) { return vec_extract (*p, OFFSET); } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/powerpc/vsx-extract-2.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/powerpc/vsx-extract-2.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/powerpc/vsx-extract-2.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/powerpc/vsx-extract-2.c 2014-03-28 19:04:54.000000000 +0000 @@ -0,0 +1,17 @@ +/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */ +/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ +/* { dg-require-effective-target powerpc_vsx_ok } */ +/* { dg-options "-O3 -mcpu=power7" } */ +/* { dg-final { scan-assembler "xxlor" } } */ +/* { dg-final { scan-assembler-not "lfd" } } */ +/* { dg-final { scan-assembler-not "lxvd2x" } } */ + +#include + +#if __LITTLE_ENDIAN__ +#define OFFSET 1 +#else +#define OFFSET 0 +#endif + +double get_value (vector double v) { return vec_extract (v, OFFSET); } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/powerpc/vsx-extract-3.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/powerpc/vsx-extract-3.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/powerpc/vsx-extract-3.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/powerpc/vsx-extract-3.c 2014-03-28 19:04:54.000000000 +0000 @@ -0,0 +1,17 @@ +/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */ +/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ +/* { dg-require-effective-target powerpc_p8vector_ok } */ +/* { dg-options "-O3 -mcpu=power8" } */ +/* { dg-final { scan-assembler "mfvsrd" } } */ +/* { dg-final { scan-assembler-not "stfd" } } */ +/* { dg-final { scan-assembler-not "stxvd2x" } } */ + +#include + +#if __LITTLE_ENDIAN__ +#define OFFSET 1 +#else +#define OFFSET 0 +#endif + +long get_value (vector long v) { return vec_extract (v, OFFSET); } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/s390/20140327-1.c gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/s390/20140327-1.c --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/gcc.target/s390/20140327-1.c 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/gcc.target/s390/20140327-1.c 2014-03-27 17:33:34.000000000 +0000 @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -m31 -mzarch" } */ + +void +foo () +{ + asm ("" ::: "%f4"); +} + +/* { dg-final { scan-assembler "ld" } } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/abi/abi-tag3.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/abi/abi-tag3.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/abi/abi-tag3.C 2013-02-25 13:50:28.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/abi/abi-tag3.C 2014-04-01 18:05:46.000000000 +0000 @@ -1,5 +1,4 @@ -// An explicit specialization doesn't get the tag from its template unless -// it is specified there, too. +// An explicit specialization gets the tag from its template. // { dg-final { scan-assembler "_ZN3FooB5cxx11IcE1fEv" } } template @@ -12,12 +11,12 @@ template<> struct __attribute ((abi_tag("cxx11"))) -Foo +Foo // { dg-warning "attribute" } { int f(); }; -// { dg-final { scan-assembler "_ZN3FooIdE1fEv" } } +// { dg-final { scan-assembler "_ZN3FooB5cxx11IdE1fEv" } } template<> struct Foo diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/abi/abi-tag6.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/abi/abi-tag6.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/abi/abi-tag6.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/abi/abi-tag6.C 2014-04-01 18:05:46.000000000 +0000 @@ -0,0 +1,25 @@ +// PR c++/60642 + +struct __attribute((abi_tag("test"))) foo +{ + void f(); + virtual ~foo(); +}; + +template +struct __attribute((abi_tag("test"))) bar +{ + void f(); + virtual ~bar(); +}; + +int main() +{ + foo f; + f.f(); + + bar b; + b.f(); +} + +// { dg-final { scan-assembler "_ZTV3barB4testIiE" } } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/abi/abi-tag7.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/abi/abi-tag7.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/abi/abi-tag7.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/abi/abi-tag7.C 2014-04-01 18:05:46.000000000 +0000 @@ -0,0 +1,9 @@ +// PR c++/60642 + +template +class __attribute((abi_tag("foo"))) test{ }; + +template class __attribute((abi_tag("foo"))) test; // { dg-warning "attribute" } + +void f(test*) {} +// { dg-final { scan-assembler "_Z1fP4testB3fooIcE" } } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/abi/thunk6.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/abi/thunk6.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/abi/thunk6.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/abi/thunk6.C 2014-03-28 19:04:54.000000000 +0000 @@ -0,0 +1,19 @@ +// PR c++/60566 +// We need to emit the construction vtable thunk for ~C even if we aren't +// going to use it. + +struct A +{ + virtual void f() = 0; + virtual ~A() {} +}; + +struct B: virtual A { int i; }; +struct C: virtual A { int i; ~C(); }; + +C::~C() {} + +int main() {} + +// { dg-final { scan-assembler "_ZTv0_n32_N1CD1Ev" { target lp64 } } } +// { dg-final { scan-assembler "_ZTv0_n16_N1CD1Ev" { target ilp32 } } } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cilk-plus/cilk-plus.exp gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cilk-plus/cilk-plus.exp --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cilk-plus/cilk-plus.exp 2014-01-24 11:57:51.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cilk-plus/cilk-plus.exp 2014-03-28 19:04:54.000000000 +0000 @@ -17,62 +17,55 @@ # Written by Balaji V. Iyer load_lib g++-dg.exp +load_lib cilk-plus-dg.exp if { ![check_effective_target_cilkplus] } { return; } -set library_var [get_multilibs] -# Pointing the ld_library_path to the Cilk Runtime library binaries. -append ld_library_path ":${library_var}/libcilkrts/.libs" -set_ld_library_path_env_vars - -global TEST_EXTRA_LIBS -set TEST_EXTRA_LIBS "-L${library_var}/libcilkrts/.libs" - -dg-init -# Run the tests that are shared with C. -g++-dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/PS/*.c]] "" -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/SE/*.c]] "-O3" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/SE/*.c]] " " " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/SE/*.c]] "-g -O2" " " -# Run the C++ only tests. -g++-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C]] "" -dg-finish - dg-init -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -O1 -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -O2 -ftree-vectorize -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -O3 -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -g -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -g -O1 -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -g -O2 -ftree-vectorize -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -g -O3 -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -O3 -ftree-vectorize -fcilkplus -g" " " - -dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -O0 -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -O1 -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -O2 -ftree-vectorize -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -O3 -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -g -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -g -O0 -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -g -O1 -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -g -O2 -ftree-vectorize -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -g -O3 -fcilkplus" " " -dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -O3 -ftree-vectorize -fcilkplus -g" " " - -if { [check_libcilkrts_available] } { - dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/CK/*.cc]] " -O1 -fcilkplus" " " - dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/CK/*.cc]] " -O3 -fcilkplus" " " - dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/CK/*.cc]] " -g -fcilkplus" " " - dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/CK/*.cc]] " -g -O2 -fcilkplus" " " - - dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O1" " " - dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O3" " " - dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -g" " " - dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -g -O2" " " - } +if [cilkplus_init] { + # Run the tests that are shared with C. + g++-dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/PS/*.c]] "" + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/SE/*.c]] "-O3" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/SE/*.c]] " " " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/SE/*.c]] "-g -O2" " " + # Run the C++ only tests. + g++-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C]] "" + + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -O1 -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -O2 -ftree-vectorize -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -O3 -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -g -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -g -O1 -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -g -O2 -ftree-vectorize -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -g -O3 -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/AN/*.c]] " -O3 -ftree-vectorize -fcilkplus -g" " " + + dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -O0 -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -O1 -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -O2 -ftree-vectorize -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -O3 -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -g -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -g -O0 -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -g -O1 -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -g -O2 -ftree-vectorize -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -g -O3 -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/AN/*.cc]] " -O3 -ftree-vectorize -fcilkplus -g" " " + + if { [check_libcilkrts_available] } { + dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/CK/*.cc]] " -O1 -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/CK/*.cc]] " -O3 -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/CK/*.cc]] " -g -fcilkplus" " " + dg-runtest [lsort [glob -nocomplain $srcdir/g++.dg/cilk-plus/CK/*.cc]] " -g -O2 -fcilkplus" " " + + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O1" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -O3" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -g" " " + dg-runtest [lsort [glob -nocomplain $srcdir/c-c++-common/cilk-plus/CK/*.c]] " -g -O2" " " + } +} +cilkplus_finish dg-finish -unset TEST_EXTRA_LIBS diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/auto42.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/auto42.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/auto42.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/auto42.C 2014-03-26 08:19:14.000000000 +0000 @@ -0,0 +1,9 @@ +// PR c++/60628 +// { dg-do compile { target c++11 } } + +#include + +void foo(int i) +{ + auto x[1] = { 0 }; // { dg-error "array of .auto" } +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/constexpr-ice15.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/constexpr-ice15.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/constexpr-ice15.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/constexpr-ice15.C 2014-04-05 08:48:42.000000000 +0000 @@ -0,0 +1,12 @@ +// PR c++/58207 +// { dg-do compile { target c++11 } } + +struct A +{ + virtual bool foo (); +}; + +struct B : public A +{ + constexpr B () : A (&::n) {} // { dg-error "declared" } +}; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/defaulted2.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/defaulted2.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/defaulted2.C 2014-03-20 10:50:22.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/defaulted2.C 2014-04-02 04:32:23.000000000 +0000 @@ -35,7 +35,7 @@ struct E { - const B b; + const B b; // { dg-message "should be initialized" } E() { } // { dg-error "uninitialized" } }; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/initlist81.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/initlist81.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/initlist81.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/initlist81.C 2014-04-02 04:32:23.000000000 +0000 @@ -0,0 +1,25 @@ +// PR c++/60713 +// { dg-options "-O" } +// { dg-do compile { target c++11 } } + +template < class x0, class x1, class x2, class x3, class x4 > +int *x5 (x0 *, x2 (x1::*)(x3, x4)); + +class x6 +{ + void x7 (); + struct x8 + { + int *x9; + }; + void x10 (x8); + void x11 (int *, int *); +}; + +void +x6::x7 () +{ + x10 ({ + x5 (this, &x6::x11) + }); +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/initlist82.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/initlist82.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/initlist82.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/initlist82.C 2014-04-02 04:32:23.000000000 +0000 @@ -0,0 +1,20 @@ +// PR c++/60708 +// { dg-do compile { target c++11 } } + +template struct mypair { + mypair(T, U) {} +}; + +template struct S { + mypair get_pair() noexcept { + return mypair(nullptr, 0); + } +}; + +static void foo(const mypair (&a)[2]) noexcept { } + +int main() +{ + S s; + foo({s.get_pair(), s.get_pair()}); +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-uneval2.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-uneval2.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-uneval2.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-uneval2.C 2014-03-26 08:19:14.000000000 +0000 @@ -0,0 +1,7 @@ +// PR c++/60375 +// { dg-do compile { target c++11 } } + +struct A +{ + decltype( [](){ return this; }() ) x; // { dg-error "unevaluated" } +}; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-uneval.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-uneval.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-uneval.C 2014-03-20 10:50:18.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-uneval.C 2014-03-26 08:19:14.000000000 +0000 @@ -5,3 +5,5 @@ struct A { }; A a; // { dg-error "lambda.*unevaluated context" } +// { dg-prune-output "template argument" } +// { dg-prune-output "invalid type" } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/pr31439.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/pr31439.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/pr31439.C 2014-03-20 10:50:18.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/pr31439.C 2014-04-02 04:32:23.000000000 +0000 @@ -1,7 +1,7 @@ // { dg-do compile { target c++11 } } template struct A; -template struct A<> {}; // { dg-error "not used in partial specialization|anonymous|declaration" } +template struct A<> {}; // { dg-error "not deducible|anonymous|declaration" } template struct A : A {}; // { dg-error "incomplete type" } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/variadic154.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/variadic154.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/variadic154.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/variadic154.C 2014-04-02 04:32:23.000000000 +0000 @@ -0,0 +1,8 @@ +// PR c++/60374 +// { dg-do compile { target c++11 } } + +template struct A {}; + +template struct A {}; // { dg-error "typename|partial|T" } + +A a; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/variadic155.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/variadic155.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/variadic155.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/variadic155.C 2014-04-02 04:32:23.000000000 +0000 @@ -0,0 +1,4 @@ +// { dg-do compile { target c++11 } } + +template struct A {}; +template struct B: A {}; // { dg-error "type" } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/vt-33964.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/vt-33964.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/vt-33964.C 2014-03-20 10:50:22.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp0x/vt-33964.C 2014-04-02 04:32:23.000000000 +0000 @@ -6,7 +6,7 @@ }; template -struct foo< typename Args::is_applied... > // { dg-error "not used|Args" } +struct foo< typename Args::is_applied... > // { dg-error "not deducible|Args" } { static bool const value = false; }; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp1y/auto-fn25.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp1y/auto-fn25.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp1y/auto-fn25.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp1y/auto-fn25.C 2014-03-26 08:19:14.000000000 +0000 @@ -0,0 +1,15 @@ +// PR c++/60574 +// { dg-options "-flto" } +// { dg-do compile { target c++1y } } + +struct A +{ + virtual auto foo() {} // { dg-error "virtual.*deduced" } +}; + +struct B : A +{ + auto foo(); +}; + +B b; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp1y/pr60573.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp1y/pr60573.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp1y/pr60573.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp1y/pr60573.C 2014-03-30 07:40:40.000000000 +0000 @@ -0,0 +1,28 @@ +// PR c++/60573 +// { dg-do compile { target c++1y } } +// { dg-options "" } + +struct A +{ + struct B + { + void foo(auto); + }; + + void B::foo(auto) {} // { dg-error "cannot define" } + + struct X + { + struct Y + { + struct Z + { + void foo(auto); + }; + }; + + void Y::Z::foo(auto) {} // { dg-error "cannot define" } + }; + + void X::Y::Z::foo(auto) {} // { dg-error "cannot define" } +}; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp1y/pr60626.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp1y/pr60626.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp1y/pr60626.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp1y/pr60626.C 2014-03-30 07:40:40.000000000 +0000 @@ -0,0 +1,7 @@ +// PR c++/60626 +// { dg-do compile { target c++1y } } +// { dg-options "" } + +struct A {}; + +void (*A::p)(auto) = 0; // { dg-error "static member|non-template" } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp1y/pr60627.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp1y/pr60627.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp1y/pr60627.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/cpp1y/pr60627.C 2014-03-26 08:19:14.000000000 +0000 @@ -0,0 +1,12 @@ +// PR c++/60627 +// { dg-do compile { target c++1y } } +// { dg-options "" } + +template void foo(T) {} + +template void foo(auto); // { dg-error "auto|does not match" } + +void bar() +{ + foo(0); +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/ext/vla14.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/ext/vla14.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/ext/vla14.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/ext/vla14.C 2014-04-05 08:48:42.000000000 +0000 @@ -0,0 +1,23 @@ +// PR c++/21113 +// { dg-options "" } + +void +f (int n) +{ + goto label; // { dg-error "from here" } + int a[n]; // { dg-error "crosses initialization" } +label: // { dg-error "jump to label" } + ; +} + +void +g (int n) +{ + switch (1) + { + case 1: + int (*a)[n]; // { dg-error "crosses initialization" } + default: // { dg-error "jump to case label" } + ; + } +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/ext/vla15.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/ext/vla15.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/ext/vla15.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/ext/vla15.C 2014-04-05 08:48:42.000000000 +0000 @@ -0,0 +1,20 @@ +// PR c++/44613 +// { dg-do run } +// { dg-options "" } + +void *volatile p; + +int +main (void) +{ + int n = 0; + lab:; + int x[n % 1000 + 1]; + x[0] = 1; + x[n % 1000] = 2; + p = x; + n++; + if (n < 1000000) + goto lab; + return 0; +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/gomp/pr60682.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/gomp/pr60682.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/gomp/pr60682.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/gomp/pr60682.C 2014-03-27 17:33:35.000000000 +0000 @@ -0,0 +1,44 @@ +// PR middle-end/60682 +// { dg-do compile } +// { dg-options "-O2 -fopenmp-simd" } + +struct A +{ + float a; + A () {} + A (const A &x) { a = x.a; } +}; + +struct B +{ + A a[16]; +}; + +struct C +{ + float a[1]; + C () {} + C (const C &x) { a[0] = x.a[0]; } +}; + +struct D +{ + C a[16]; +}; + +void +foo (int x, B &y, D &z) +{ +#pragma omp simd + for (int i = 0; i < x; ++i) + { + A a; + y.a[i] = a; + } +#pragma omp simd + for (int i = 0; i < x; ++i) + { + C a; + z.a[i] = a; + } +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/init/const10.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/init/const10.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/init/const10.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/init/const10.C 2014-03-27 17:33:35.000000000 +0000 @@ -0,0 +1,33 @@ +// PR C++/52369 +// { dg-do compile { target c++11 } } + +class B // { dg-message "implicitly deleted" } + // { dg-error "uninitialized" "" { target c++11 } 4 } +{ + int const v_; // { dg-message "should be initialized" } +}; + +struct D : B {}; // { dg-error "deleted" } + +class A // { dg-message "implicitly deleted" } + // { dg-error "uninitialized" "" { target c++11 } 12 } +{ + int& ref; // { dg-message "should be initialized" } +}; + +struct C : A {}; // { dg-error "deleted" } + +void f() +{ + D d; // { dg-error "use of deleted" } + new D; // { dg-error "use of deleted" } + D(); // { dg-error "use of deleted" } + new D(); // { dg-error "use of deleted" } + + C c; // { dg-error "use of deleted" } + new C; // { dg-error "use of deleted" } + C(); // { dg-error "use of deleted" } + new C(); // { dg-error "use of deleted" } +} + + diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/init/const11.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/init/const11.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/init/const11.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/init/const11.C 2014-03-27 17:33:35.000000000 +0000 @@ -0,0 +1,29 @@ +// PR C++/52369 +// { dg-do compile { target { ! c++11 } } } + +class B +{ + int const v_; // { dg-message "should be initialized" } +}; + +struct D : B {}; + +class A +{ + int& ref; // { dg-message "should be initialized" } +}; + +struct C : A {}; + +void f() +{ + D d; // { dg-error "uninitialized" } + new D; // { dg-error "uninitialized" } + D(); + new D(); + + C c; // { dg-error "uninitialized" } + new C; // { dg-error "uninitialized" } + C(); // { dg-error "value-initialization" } + new C(); // { dg-error "value-initialization" } +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/init/ctor4-1.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/init/ctor4-1.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/init/ctor4-1.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/init/ctor4-1.C 2014-04-02 04:32:23.000000000 +0000 @@ -0,0 +1,21 @@ +// { dg-do compile } + +class foo { +public: + foo(); +}; + +class bar: public foo { // { dg-error "uninitialized" } + // { dg-message "implicitly deleted" "" { target c++11 } 8 } +private: + int const a; // { dg-message "should be initialized" } +}; + +foo::foo() { +} + +int main(int argc, char **argv) +{ + bar x; // { dg-error "deleted" "" { target c++11 } } + // { dg-message "synthesized" "" { target { ! c++11 } } 19 } +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/init/ctor4.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/init/ctor4.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/init/ctor4.C 2013-02-25 13:50:28.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/init/ctor4.C 2014-04-02 04:32:23.000000000 +0000 @@ -6,9 +6,10 @@ foo(); }; -class bar: public foo { // { dg-error "reference|bar::bar" } +class bar: public foo { // { dg-error "uninitialized" } + // { dg-message "implicitly deleted" "" { target c++11 } 9 } private: - int &a; + int &a; // { dg-message "should be initialized" } }; foo::foo() { @@ -16,5 +17,6 @@ int main(int argc, char **argv) { - bar x; // { dg-message "synthesized|deleted" } + bar x; // { dg-error "deleted" "" { target c++11 } } + // { dg-message "synthesized" "" { target { ! c++11 } } 20 } } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/init/ctor8.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/init/ctor8.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/init/ctor8.C 2013-10-29 22:21:05.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/init/ctor8.C 2014-03-27 17:33:35.000000000 +0000 @@ -1,6 +1,6 @@ // PR c++/29039 -typedef struct S { // { dg-error "reference" "" { target c++11 } } +typedef struct S { // { dg-error "reference" "" { target c++11 } } int &r; }; // { dg-warning "'typedef' was ignored" } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/init/pr25811.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/init/pr25811.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/init/pr25811.C 2014-03-20 10:50:17.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/init/pr25811.C 2014-03-27 17:33:35.000000000 +0000 @@ -1,51 +1,60 @@ // PR c++/25811 // { dg-do compile } -struct A1 // { dg-error "uninitialized" "" { target c++11 } } +struct A1 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 4 } { - int const j; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const j; // { dg-message "should be initialized" } }; -struct A2 // { dg-error "uninitialized" "" { target c++11 } } +struct A2 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 10 } { - int const volatile i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const volatile i; // { dg-message "should be initialized" } }; -struct A3 // { dg-error "uninitialized" "" { target c++11 } } +struct A3 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 16 } { - int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int& ref; // { dg-message "should be initialized" } }; -struct A4 // { dg-error "uninitialized" "" { target c++11 } } +struct A4 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 22 } { - int const& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const& ref; // { dg-message "should be initialized" } }; -struct A5 // { dg-error "uninitialized" "" { target c++11 } } +struct A5 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 28 } { - int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } - int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int& ref; // { dg-message "should be initialized" } + int const i; // { dg-message "should be initialized" } }; -template struct S1 // { dg-error "uninitialized" "" { target c++11 } } +template struct S1 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 35 } { - T const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + T const i; // { dg-message "should be initialized" } }; -template struct S2 // { dg-error "uninitialized" "" { target c++11 } } +template struct S2 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 41 } { - T const volatile i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + T const volatile i; // { dg-message "should be initialized" } }; -template struct S3 // { dg-error "uninitialized" "" { target c++11 } } +template struct S3 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 47 } { - T& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + T& ref; // { dg-message "should be initialized" } }; -template struct S4 // { dg-error "uninitialized" "" { target c++11 } } +template struct S4 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 53 } { - T const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } - T& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + T const i; // { dg-message "should be initialized" } + T& ref; // { dg-message "should be initialized" } }; struct X @@ -55,44 +64,50 @@ int const& r; }; -struct Y11 // { dg-error "uninitialized" "" { target c++11 } } +struct Y11 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 67 } { - int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const i; // { dg-message "should be initialized" } }; -struct Y1 // { dg-error "deleted" "" { target c++11 } } +struct Y1 // { dg-error "deleted" "" { target c++11 } } { Y11 a[1]; }; -struct Y22 // { dg-error "uninitialized" "" { target c++11 } } +struct Y22 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 78 } { - int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int& ref; // { dg-message "should be initialized" } }; -struct Y2 // { dg-error "deleted" "" { target c++11 } } +struct Y2 // { dg-error "deleted" "" { target c++11 } } { Y22 a[1]; }; -struct Z1 // { dg-error "uninitialized" "" { target c++11 } } +struct Z1 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 89 } { - int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const i; // { dg-message "should be initialized" } }; -struct Z2 // { dg-error "uninitialized" "" { target c++11 } } +struct Z2 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 95 } { - int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int& ref; // { dg-message "should be initialized" } }; -struct Z3 // { dg-error "uninitialized" "" { target c++11 } } +struct Z3 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 101 } { - int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const i; // { dg-message "should be initialized" } }; -struct Z4 // { dg-error "uninitialized" "" { target c++11 } } +struct Z4 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 107 } { - int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int& ref; // { dg-message "should be initialized" } }; struct Z5 @@ -100,7 +115,7 @@ int i; }; -struct Z // { dg-error "deleted" "" { target c++11 } } +struct Z // { dg-error "deleted" "" { target c++11 } } { Z1 z1; Z2 z2; @@ -109,9 +124,10 @@ Z5 z5; }; -union U // { dg-error "uninitialized" "" { target c++11 } } +union U // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 127 } { - int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const i; // { dg-message "should be initialized" } }; void f1 () diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/init/pr29043.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/init/pr29043.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/init/pr29043.C 2014-03-20 10:50:17.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/init/pr29043.C 2014-03-27 17:33:35.000000000 +0000 @@ -1,9 +1,10 @@ // PR c++/29043 // { dg-do compile } -struct S // { dg-error "uninitialized" "" { target c++11 } } +struct S // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 4 } { - int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const i; // { dg-message "should be initialized" } }; class C @@ -13,9 +14,10 @@ S s; }; -struct S2 // { dg-error "uninitialized" "" { target c++11 } } +struct S2 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 17 } { - int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int& ref; // { dg-message "should be initialized" } }; class C2 @@ -33,9 +35,10 @@ }; }; -struct S4 // { dg-error "uninitialized" "" { target c++11 } } +struct S4 // { dg-message "implicitly deleted" "" { target c++11 } } + // { dg-error "uninitialized" "" { target c++11 } 38 } { - int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const i; // { dg-message "should be initialized" } }; struct C4 @@ -46,7 +49,7 @@ struct C5 { - C5() {} // { dg-message "uninitialized" } + C5() {} // { dg-error "uninitialized" } int const iit[ 1 ]; }; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/init/pr43719.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/init/pr43719.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/init/pr43719.C 2014-03-20 10:50:17.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/init/pr43719.C 2014-03-27 17:33:35.000000000 +0000 @@ -1,51 +1,51 @@ // PR c++/43719 // { dg-do compile } -struct A1 // { dg-error "uninitialized" "" { target c++11 } } +struct A1 // { dg-error "uninitialized" "" { target c++11 } } { - int const j; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const j; // { dg-message "should be initialized" } }; -struct A2 // { dg-error "uninitialized" "" { target c++11 } } +struct A2 // { dg-error "uninitialized" "" { target c++11 } } { - int const volatile i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const volatile i; // { dg-message "should be initialized" } }; -struct A3 // { dg-error "uninitialized" "" { target c++11 } } +struct A3 // { dg-error "uninitialized" "" { target c++11 } } { - int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int& ref; // { dg-message "should be initialized" } }; -struct A4 // { dg-error "uninitialized" "" { target c++11 } } +struct A4 // { dg-error "uninitialized" "" { target c++11 } } { - int const& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const& ref; // { dg-message "should be initialized" } }; -struct A5 // { dg-error "uninitialized" "" { target c++11 } } +struct A5 // { dg-error "uninitialized" "" { target c++11 } } { - int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } - int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int& ref; // { dg-message "should be initialized" } + int const i; // { dg-message "should be initialized" } }; template struct S1 // { dg-error "uninitialized" "" { target c++11 } } { - T const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + T const i; // { dg-message "should be initialized" } }; template struct S2 // { dg-error "uninitialized" "" { target c++11 } } { - T const volatile i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + T const volatile i; // { dg-message "should be initialized" } }; template struct S3 // { dg-error "uninitialized" "" { target c++11 } } { - T& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + T& ref; // { dg-message "should be initialized" } }; template struct S4 // { dg-error "uninitialized" "" { target c++11 } } { - T const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } - T& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + T const i; // { dg-message "should be initialized" } + T& ref; // { dg-message "should be initialized" } }; struct X @@ -55,9 +55,9 @@ int const& r; }; -struct Y11 // { dg-error "uninitialized" "" { target c++11 } } +struct Y11 // { dg-error "uninitialized" "" { target c++11 } } { - int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const i; // { dg-message "should be initialized" } }; struct Y1 // { dg-error "deleted" "" { target c++11 } } @@ -65,9 +65,9 @@ Y11 a[1]; }; -struct Y22 // { dg-error "uninitialized" "" { target c++11 } } +struct Y22 // { dg-error "uninitialized" "" { target c++11 } } { - int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int& ref; // { dg-message "should be initialized" } }; struct Y2 // { dg-error "deleted" "" { target c++11 } } @@ -75,24 +75,24 @@ Y22 a[1]; }; -struct Z1 // { dg-error "uninitialized" "" { target c++11 } } +struct Z1 // { dg-error "uninitialized" "" { target c++11 } } { - int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const i; // { dg-message "should be initialized" } }; -struct Z2 // { dg-error "uninitialized" "" { target c++11 } } +struct Z2 // { dg-error "uninitialized" "" { target c++11 } } { - int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int& ref; // { dg-message "should be initialized" } }; -struct Z3 // { dg-error "uninitialized" "" { target c++11 } } +struct Z3 // { dg-error "uninitialized" "" { target c++11 } } { - int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const i; // { dg-message "should be initialized" } }; -struct Z4 // { dg-error "uninitialized" "" { target c++11 } } +struct Z4 // { dg-error "uninitialized" "" { target c++11 } } { - int& ref; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int& ref; // { dg-message "should be initialized" } }; struct Z5 @@ -109,9 +109,9 @@ Z5 z5; }; -union U // { dg-error "uninitialized" "" { target c++11 } } +union U // { dg-error "uninitialized" "" { target c++11 } } { - int const i; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const i; // { dg-message "should be initialized" } }; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/init/pr44086.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/init/pr44086.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/init/pr44086.C 2014-03-20 10:50:17.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/init/pr44086.C 2014-03-27 17:33:35.000000000 +0000 @@ -1,9 +1,9 @@ // PR c++/44086 // { dg-do compile } -struct A // { dg-error "uninitialized" "" { target c++11 } } +struct A // { dg-error "uninitialized" "" { target c++11 } } { - int const i : 2; // { dg-message "should be initialized" "" { target { ! c++11 } } } + int const i : 2; // { dg-message "should be initialized" } }; void f() diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/init/uninitialized1.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/init/uninitialized1.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/init/uninitialized1.C 2013-10-29 22:21:05.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/init/uninitialized1.C 2014-03-27 17:33:35.000000000 +0000 @@ -1,8 +1,8 @@ // PR c++/58126 -struct A { // { dg-error "uninitialized" "" { target c++11 } } - const int value1; - int& value2; +struct A { // { dg-error "uninitialized" "" { target c++11 } } + const int value1; // { dg-message "should be initialized" } + int& value2; // { dg-message "should be initialized" } }; struct B : A { }; // { dg-error "deleted" "" { target c++11 } } diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/devirt-21.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/devirt-21.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/devirt-21.C 2014-02-04 12:24:50.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/devirt-21.C 2014-03-27 17:33:35.000000000 +0000 @@ -37,5 +37,5 @@ { class C c; } -/* { dg-final { scan-ipa-dump "Discovered a virtual call to" "cp" } } */ +/* { dg-final { scan-ipa-dump "Discovered a virtual call to" "cp" { xfail *-*-* } } } */ /* { dg-final { cleanup-ipa-dump "cp" } } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/devirt-23.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/devirt-23.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/devirt-23.C 2014-02-04 12:24:50.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/devirt-23.C 2014-03-27 17:33:35.000000000 +0000 @@ -45,5 +45,5 @@ { class C c; } -/* { dg-final { scan-ipa-dump "Discovered a virtual call to" "cp" } } */ +/* { dg-final { scan-ipa-dump "Discovered a virtual call to" "cp" { xfail *-*-* } } } */ /* { dg-final { cleanup-ipa-dump "cp" } } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/pr60600.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/pr60600.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/pr60600.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/pr60600.C 2014-03-26 08:19:14.000000000 +0000 @@ -0,0 +1,34 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fdump-ipa-cp" } */ + +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(t); + c.childf(); + child2 d; + test(d); +} + +/* { dg-final { scan-ipa-dump "Type inconsident devirtualization" "cp" } } */ +/* { dg-final { cleanup-ipa-dump "cp" } } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/pr60640-1.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/pr60640-1.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/pr60640-1.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/pr60640-1.C 2014-04-04 14:53:38.000000000 +0000 @@ -0,0 +1,50 @@ +// { dg-do compile } +// { dg-options "-O3" } + +class ASN1Object +{ +public: + virtual ~ASN1Object (); +}; +class A +{ + virtual unsigned m_fn1 () const; +}; +class B +{ +public: + ASN1Object Element; + virtual unsigned m_fn1 (bool) const; +}; +template class C : public BASE +{ +}; + +class D : ASN1Object, public B +{ +}; +class G : public D +{ + unsigned m_fn1 (bool) const {} +}; +class F : A +{ +public: + F (A); + unsigned m_fn1 () const + { + int a; + a = m_fn2 ().m_fn1 (0); + return a; + } + const B &m_fn2 () const { return m_groupParameters; } + C m_groupParameters; +}; +template void BenchMarkKeyAgreement (int *, int *, int) +{ + A f; + D d (f); +} + +void BenchmarkAll2 () { BenchMarkKeyAgreement(0, 0, 0); } + diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/pr60640-2.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/pr60640-2.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/pr60640-2.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/pr60640-2.C 2014-04-04 14:53:38.000000000 +0000 @@ -0,0 +1,15 @@ +// { dg-do compile } +// { dg-options "-O3" } + +struct B { virtual unsigned f () const; }; +struct C { virtual void f (); }; +struct F { virtual unsigned f (bool) const; ~F (); }; +struct J : C, F {}; +struct G : J { unsigned f (bool) const { return 0; } }; +struct H : B +{ + H (int); + unsigned f () const { return ((const F &) h).f (0); } + G h; +}; +H h (0); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/pr60640-3.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/pr60640-3.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/pr60640-3.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/pr60640-3.C 2014-04-04 14:53:38.000000000 +0000 @@ -0,0 +1,81 @@ +// { dg-do run } +// { dg-options "-O3" } + +struct Distraction +{ + char fc[8]; + virtual Distraction * return_self () + { return this; } +}; + +namespace { + +struct A; +static A * __attribute__ ((noinline, noclone)) get_an_A (); + +static int go; + +struct A +{ + int fi; + + A () : fi(777) {} + A (int pi) : fi (pi) {} + virtual A * foo (int p) = 0; +}; + +struct B; +static B * __attribute__ ((noinline, noclone)) get_a_B (); + +struct B : public Distraction, A +{ + B () : Distraction(), A() { } + B (int pi) : Distraction (), A (pi) {} + virtual B * foo (int p) + { + int o = fi; + for (int i = 0; i < p; i++) + o += i + i * i; + go = o; + + return get_a_B (); + } +}; + + +struct B gb1 (1111), gb2 (2); +static B * __attribute__ ((noinline, noclone)) +get_a_B () +{ + return &gb1; +} + +static A * __attribute__ ((noinline, noclone)) +get_an_A () +{ + return &gb2; +} + +} + +static int __attribute__ ((noinline, noclone)) +get_a_number () +{ + return 5; +} + +extern "C" void abort (void); + +int main (int argc, char *argv[]) +{ + for (int i = 0; i < get_a_number (); i++) + { + struct A *p = get_an_A (); + struct A *r = p->foo (4); + if (r->fi != 1111) + abort (); + if (go != 22) + abort (); + } + return 0; +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/pr60640-4.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/pr60640-4.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/pr60640-4.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/ipa/pr60640-4.C 2014-04-04 14:53:38.000000000 +0000 @@ -0,0 +1,85 @@ +// { dg-do run } +// { dg-options "-O3 -fdump-ipa-cp" } + +struct Distraction +{ + char fc[8]; + virtual Distraction * return_self () + { return this; } +}; + +namespace { + +struct A; +static A * __attribute__ ((noinline, noclone)) get_an_A (); + +static int go; + +struct A +{ + int fi; + + A () : fi(777) {} + A (int pi) : fi (pi) {} + virtual void foo (int p) = 0; +}; + +struct B : public Distraction, A +{ + B () : Distraction(), A() { } + B (int pi) : Distraction (), A (pi) {} + virtual void foo (int p) + { + int o = fi; + for (int i = 0; i < p; i++) + o += i + i * i; + go = o; + } +}; + + +struct B gb (2); +static A * __attribute__ ((noinline, noclone)) +get_an_A () +{ + return &gb; +} + +} + +static int __attribute__ ((noinline, noclone)) +get_a_number () +{ + return 5; +} + +extern "C" void abort (void); + +static void __attribute__ ((noinline, noclone)) +bar () +{ + for (int i = 0; i < get_a_number (); i++) + { + struct A *p = get_an_A (); + p->foo (4); + if (go != 22) + abort (); + } +} + +int main (int argc, char *argv[]) +{ + for (int i = 0; i < get_a_number (); i++) + { + struct A *p = get_an_A (); + p->foo (4); + if (go != 22) + abort (); + } + + bar (); + return 0; +} + +/* { dg-final { scan-ipa-dump-times "Thunk fixed offset" 2 "cp"} } */ +/* { dg-final { cleanup-ipa-dump "cp" } } */ diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/opt/pr56999.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/opt/pr56999.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/opt/pr56999.C 2013-04-20 21:52:40.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/opt/pr56999.C 2014-03-26 08:19:14.000000000 +0000 @@ -159,6 +159,7 @@ pendingRecompiles->append (info); } volatile JITScript *JSScript::JITScriptHandle::UNJITTABLE; +#pragma GCC visibility pop int main () { diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/template/crash97.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/template/crash97.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/template/crash97.C 2013-02-25 13:50:38.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/template/crash97.C 2014-04-02 04:32:23.000000000 +0000 @@ -2,7 +2,7 @@ template struct A {}; -template struct A // { dg-error "not used|template\\-parameter" } +template struct A // { dg-error "not deducible|template\\-parameter" } { template void foo(); }; diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/template/crash98.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/template/crash98.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/template/crash98.C 2013-02-25 13:50:38.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/template/crash98.C 2014-04-02 04:32:24.000000000 +0000 @@ -2,7 +2,7 @@ template < typename > struct A; -template < typename > struct A < int > // { dg-error "not used|template\\-parameter|declaration" } +template < typename > struct A < int > // { dg-error "not deducible|template\\-parameter|declaration" } { int i; int f (); diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/template/partial5.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/template/partial5.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/template/partial5.C 2013-02-25 13:50:38.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/template/partial5.C 2014-04-02 04:32:24.000000000 +0000 @@ -4,7 +4,7 @@ struct X { }; template -struct X { }; // { dg-error "not used|T" } +struct X { }; // { dg-error "not deducible|T" } template struct X {}; // okay @@ -14,7 +14,7 @@ struct Y { }; template -struct Y { }; // { dg-error "not used|U" } +struct Y { }; // { dg-error "not deducible|U" } template diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/torture/pr60315.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/torture/pr60315.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/torture/pr60315.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/torture/pr60315.C 2014-03-28 19:04:54.000000000 +0000 @@ -0,0 +1,19 @@ +// PR ipa/60315 +// { dg-do compile } +// { dg-options "-std=c++11" } + +struct Base { + virtual int f() = 0; +}; + +struct Derived : public Base { + virtual int f() final override { + return 42; + } +}; + +extern Base* b; + +int main() { + return (static_cast(b)->*(&Derived::f))(); +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/torture/pr60648.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/torture/pr60648.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/torture/pr60648.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/torture/pr60648.C 2014-03-30 07:40:40.000000000 +0000 @@ -0,0 +1,70 @@ +// PR target/60648 +// { dg-do compile } +// { dg-additional-options "-fPIC" { target fpic } } + +enum component +{ + Ex, + Ez, + Hy, + Permeability +}; +enum derived_component +{}; +enum direction +{ + X, + Y, + Z, + R, + P, + NO_DIRECTION +}; +derived_component a; +component *b; +component c; +direction d; +inline direction fn1 (component p1) +{ + switch (p1) + { + case 0: + return Y; + case 1: + return Z; + case Permeability: + return NO_DIRECTION; + } + return X; +} + +inline component fn2 (direction p1) +{ + switch (p1) + { + case 0: + case 1: + return component (); + case Z: + case R: + return component (1); + case P: + return component (3); + } +} + +void fn3 () +{ + direction e; + switch (0) + case 0: + switch (a) + { + case 0: + c = Ex; + b[1] = Hy; + } + e = fn1 (b[1]); + b[1] = fn2 (e); + d = fn1 (c); +} diff -Nru gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/torture/pr60659.C gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/torture/pr60659.C --- gcc-snapshot-20140321/=unpacked-tar1=/gcc/testsuite/g++.dg/torture/pr60659.C 1970-01-01 00:00:00.000000000 +0000 +++ gcc-snapshot-20140405/=unpacked-tar1=/gcc/testsuite/g++.dg/torture/pr60659.C 2014-04-03 11:49:37.000000000 +0000 @@ -0,0 +1,58 @@ +// { dg-do compile } +template void __distance (_InputIterator); +template +void distance (_InputIterator, _InputIterator p2) +{ + __distance (p2); +} + +namespace boost +{ +template struct A +{ + typedef typename Iterator::difference_type type; +}; +template typename T::const_iterator end (T &); +template typename T::const_iterator begin (T &); +template struct D : A +{ +}; +template typename D::type distance (const T &p1) +{ + distance (boost::begin (p1), boost::end (p1)); + return 0; +} +template class B +{ +public: + typedef B type; + typedef IteratorT const_iterator; +}; +} + +typedef int storage_t[]; +struct F; +template