OSDN Git Service

Merge remote-tracking branch 'gnu/gcc-4_6-branch' into rework
authorMasaki Muranaka <monaka@monami-ya.jp>
Wed, 14 May 2014 06:31:34 +0000 (15:31 +0900)
committerMasaki Muranaka <monaka@monami-ya.jp>
Wed, 14 May 2014 06:31:34 +0000 (15:31 +0900)
122 files changed:
ChangeLog
boehm-gc/ChangeLog
boehm-gc/Makefile.am
boehm-gc/Makefile.in
boehm-gc/include/Makefile.am
boehm-gc/include/Makefile.in
config/ChangeLog
contrib/ChangeLog
contrib/reghunt/ChangeLog
contrib/regression/ChangeLog
fixincludes/ChangeLog
gcc/ChangeLog
gcc/DATESTAMP
gcc/DEV-PHASE
gcc/Makefile.in
gcc/ada/ChangeLog
gcc/ada/gnat-style.texi
gcc/ada/init.c
gcc/ada/projects.texi
gcc/builtins.c
gcc/c-family/ChangeLog
gcc/combine.c
gcc/config.gcc
gcc/config/arm/rtems-eabi.h [new file with mode: 0644]
gcc/config/arm/t-rtems-eabi [new file with mode: 0644]
gcc/config/i386/i386.c
gcc/config/i386/i386.h
gcc/config/i386/i386.md
gcc/config/rs6000/rs6000.c
gcc/config/sparc/sparc.h
gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/init.c
gcc/cp/parser.c
gcc/cp/pt.c
gcc/cp/tree.c
gcc/doc/cppopts.texi
gcc/doc/generic.texi
gcc/doc/invoke.texi
gcc/expr.c
gcc/fortran/ChangeLog
gcc/fortran/check.c
gcc/fortran/expr.c
gcc/fortran/gfortran.h
gcc/fortran/resolve.c
gcc/fortran/simplify.c
gcc/fortran/trans-array.c
gcc/fortran/trans-intrinsic.c
gcc/gimplify.c
gcc/go/ChangeLog
gcc/java/ChangeLog
gcc/lto/ChangeLog
gcc/objc/ChangeLog
gcc/objcp/ChangeLog
gcc/po/ChangeLog
gcc/predict.c
gcc/sel-sched-ir.c
gcc/sel-sched.c
gcc/simplify-rtx.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/pr54486.c [new file with mode: 0644]
gcc/testsuite/g++.dg/parse/pr56239.C [new file with mode: 0644]
gcc/testsuite/g++.dg/template/pr54858.C [new file with mode: 0644]
gcc/testsuite/g++.dg/template/ptrmem23.C [new file with mode: 0644]
gcc/testsuite/g++.dg/torture/pr56403.C [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr56539.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr45472.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr48189.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr52445.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr53174.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr54363.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr54472.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr56098-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/pr56275.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr56560.c [new file with mode: 0644]
gcc/testsuite/gfortran.dg/fmt_cache_3.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/intrinsic_size_3.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/intrinsic_size_4.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/matmul_9.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/namelist_80.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/pr56015.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/proc_ptr_comp_37.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/transfer_intrinsic_5.f90 [new file with mode: 0644]
gcc/tree-complex.c
gcc/tree-nested.c
gcc/tree-predcom.c
gcc/tree-ssa-phiopt.c
gcc/tree-tailcall.c
gnattools/ChangeLog
include/ChangeLog
intl/ChangeLog
libada/ChangeLog
libada/Makefile.in
libcpp/ChangeLog
libcpp/configure
libcpp/configure.ac
libcpp/po/ChangeLog
libdecnumber/ChangeLog
libffi/ChangeLog
libgcc/ChangeLog
libgcc/config/libbid/ChangeLog
libgfortran/ChangeLog
libgfortran/io/format.c
libgfortran/io/list_read.c
libgomp/ChangeLog
libgomp/testsuite/libgomp.c/pr52547.c [new file with mode: 0644]
libiberty/ChangeLog
libjava/ChangeLog
libjava/classpath/ChangeLog
libjava/classpath/ChangeLog.gcj
libjava/classpath/doc/cp-tools.texinfo
libjava/libltdl/ChangeLog
libmudflap/ChangeLog
libobjc/ChangeLog
libquadmath/ChangeLog
libssp/ChangeLog
libstdc++-v3/ChangeLog
libstdc++-v3/include/std/streambuf
lto-plugin/ChangeLog
maintainer-scripts/ChangeLog
zlib/ChangeLog

index e8393a7..d98186a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index 219a514..20b90c1 100644 (file)
@@ -1,3 +1,15 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
+2013-04-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR other/43620 
+       * Makefile.am (AUTOMAKE_OPTIONS): Add no-dist.
+       * include/Makefile.am (AUTOMAKE_OPTIONS): Likewise.
+       * Makefile.in: Regenerated.
+       * include/Makefile.in: Regenerated.
+
 2012-03-02  Jack Howarth  <howarth@bromo.med.uc.edu>
 
        Backport from mainline
index 358614f..403017b 100644 (file)
@@ -4,7 +4,7 @@
 ## files that should be in the distribution are not mentioned in this
 ## Makefile.am.
 
-AUTOMAKE_OPTIONS = cygnus subdir-objects
+AUTOMAKE_OPTIONS = cygnus subdir-objects no-dist
 ACLOCAL_AMFLAGS = -I .. -I ../config
 
 SUBDIRS = include
index 0d6bf5c..508d672 100644 (file)
@@ -283,7 +283,7 @@ toolexeclibdir = @toolexeclibdir@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-AUTOMAKE_OPTIONS = cygnus subdir-objects
+AUTOMAKE_OPTIONS = cygnus subdir-objects no-dist
 ACLOCAL_AMFLAGS = -I .. -I ../config
 SUBDIRS = include
 noinst_LTLIBRARIES = libgcjgc.la libgcjgc_convenience.la
index 381ae76..63aec07 100644 (file)
@@ -1,4 +1,4 @@
-AUTOMAKE_OPTIONS = foreign
+AUTOMAKE_OPTIONS = foreign no-dist
 
 noinst_HEADERS = gc.h gc_backptr.h gc_local_alloc.h \
   gc_pthread_redirects.h gc_cpp.h
index 56c3dae..1e9bbb7 100644 (file)
@@ -36,9 +36,9 @@ build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
 subdir = include
-DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
-       $(srcdir)/Makefile.in $(srcdir)/gc_config.h.in \
-       $(srcdir)/gc_ext_config.h.in
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+       $(srcdir)/gc_config.h.in $(srcdir)/gc_ext_config.h.in \
+       $(noinst_HEADERS)
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
        $(top_srcdir)/../config/depstand.m4 \
@@ -55,11 +55,9 @@ CONFIG_HEADER = gc_config.h gc_ext_config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 SOURCES =
-DIST_SOURCES =
 HEADERS = $(noinst_HEADERS)
 ETAGS = etags
 CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
 AM_CPPFLAGS = @AM_CPPFLAGS@
@@ -199,7 +197,7 @@ toolexeclibdir = @toolexeclibdir@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-AUTOMAKE_OPTIONS = foreign
+AUTOMAKE_OPTIONS = foreign no-dist
 noinst_HEADERS = gc.h gc_backptr.h gc_local_alloc.h \
   gc_pthread_redirects.h gc_cpp.h
 
@@ -322,37 +320,6 @@ GTAGS:
 
 distclean-tags:
        -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-       list='$(DISTFILES)'; \
-         dist_files=`for file in $$list; do echo $$file; done | \
-         sed -e "s|^$$srcdirstrip/||;t" \
-             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-       case $$dist_files in \
-         */*) $(MKDIR_P) `echo "$$dist_files" | \
-                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-                          sort -u` ;; \
-       esac; \
-       for file in $$dist_files; do \
-         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-         if test -d $$d/$$file; then \
-           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-           if test -d "$(distdir)/$$file"; then \
-             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-           fi; \
-           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-           fi; \
-           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-         else \
-           test -f "$(distdir)/$$file" \
-           || cp -p $$d/$$file "$(distdir)/$$file" \
-           || exit 1; \
-         fi; \
-       done
 check-am: all-am
 check: check-am
 all-am: Makefile $(HEADERS) gc_config.h gc_ext_config.h
@@ -452,16 +419,15 @@ uninstall-am:
 
 .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
        clean-libtool ctags distclean distclean-generic distclean-hdr \
-       distclean-libtool distclean-tags distdir dvi dvi-am html \
-       html-am info info-am install install-am install-data \
-       install-data-am install-dvi install-dvi-am install-exec \
-       install-exec-am install-html install-html-am install-info \
-       install-info-am install-man install-pdf install-pdf-am \
-       install-ps install-ps-am install-strip installcheck \
-       installcheck-am installdirs maintainer-clean \
-       maintainer-clean-generic mostlyclean mostlyclean-generic \
-       mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \
-       uninstall-am
+       distclean-libtool distclean-tags dvi dvi-am html html-am info \
+       info-am install install-am install-data install-data-am \
+       install-dvi install-dvi-am install-exec install-exec-am \
+       install-html install-html-am install-info install-info-am \
+       install-man install-pdf install-pdf-am install-ps \
+       install-ps-am install-strip installcheck installcheck-am \
+       installdirs maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+       ps ps-am tags uninstall uninstall-am
 
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
index 8a9e81d..6e8e115 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index 687461c..53e8ab2 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index c972516..60628f8 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index 9fba492..5bb1b08 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index 541c767..0ff992e 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index 45e913c..8395ca7 100644 (file)
@@ -1,3 +1,245 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
+2013-04-10  David S. Miller  <davem@davemloft.net>
+
+       * config/sparc/sparc.h (ASM_CPU_SPEC): Pass -Av8 if -mcpu=supersparc
+       or -mcpu=hypersparc.
+
+       Backport from mainline
+       2012-03-24  Eric Botcazou  <ebotcazou@adacore.com>
+
+       PR target/52610
+       * config/sparc/sparc.h (ASM_CPU_SPEC): Pass -Av8 if -mcpu=leon.
+
+2013-04-05  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
+
+       PR rtl-optimization/48308
+       * combine.c (enum undo_kind): Add UNDO_LINKS.
+       (do_SUBST): Check for oldval.
+       (do_SUBST_LINK): Define.
+       (SUBST_LINK): Define.
+       (try_combine): Use SUBST_LINK.
+       (undo_all): Handle UNDO_LINKS.
+
+2013-04-05  Andrey Belevantsev  <abel@ispras.ru>
+
+       Revert
+       2013-04-01  Andrey Belevantsev  <abel@ispras.ru>
+
+       Backport from mainline
+       2013-02-25  Andrey Belevantsev  <abel@ispras.ru>
+       Alexander Monakov  <amonakov@ispras.ru>
+
+       PR middle-end/56077
+       * sched-deps.c (sched_analyze_insn): When reg_pending_barrier,
+       flush pending lists also on non-jumps.  Adjust comment.
+
+2013-04-04  Andrey Belevantsev  <abel@ispras.ru>
+
+       Backport from mainline
+       2012-11-09  Andrey Belevantsev  <abel@ispras.ru>
+
+       PR rtl-optimization/54472
+       * sel-sched-ir.c (has_dependence_note_reg_set): Handle implicit sets.
+       (has_dependence_note_reg_clobber,
+       as_dependence_note_reg_use): Likewise.
+
+2013-04-04  Marek Polacek  <polacek@redhat.com>
+
+       Backported from mainline
+       2013-01-09  Steven Bosscher  <steven@gcc.gnu.org>
+                   Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/48189
+       * predict.c (predict_loops): If max is 0, don't call compare_tree_int.
+       If nitercst is 0, don't predict the exit edge.
+
+2013-04-03  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2013-03-06  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/56539
+       * tree-tailcall.c (adjust_return_value_with_ops): Use GSI_SAME_STMT
+       instead of GSI_CONTINUE_LINKING as last argument to
+       force_gimple_operand_gsi.  Adjust function comment.
+
+       2013-01-25  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/56098
+       * tree-ssa-phiopt.c (nt_init_block): Don't call add_or_mark_expr
+       for stmts with volatile ops.
+       (cond_store_replacement): Don't optimize if assign has volatile ops.
+       (cond_if_else_store_replacement_1): Don't optimize if either
+       then_assign or else_assign have volatile ops.
+
+       2013-01-18  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/56015
+       * expr.c (expand_expr_real_2) <case COMPLEX_EXPR>: Handle
+       the case where writing real complex part of target modifies
+       op1.
+
+       2013-01-10  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/55921
+       * tree-complex.c (expand_complex_asm): New function.
+       (expand_complex_operations_1): Call it for GIMPLE_ASM.
+
+       2012-09-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/54486
+       * builtins.c (fold_builtin_strspn, fold_builtin_strcspn): Use
+       build_int_cst with size_type_node instead of size_int.
+
+       2012-08-24  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/54363
+       * gimplify.c (optimize_compound_literals_in_ctor): Only recurse
+       if init is a CONSTRUCTOR.
+
+       2012-05-03  Jakub Jelinek  <jakub@redhat.com>
+       PR debug/53174
+       * tree-predcom.c (remove_stmt): Call reset_debug_uses on stmts being
+       removed.
+
+       2012-03-22  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/52547
+       * tree-nested.c (convert_tramp_reference_stmt): Call declare_vars
+       on any new_local_var_chain vars declared during recursing on
+       GIMPLE_OMP_PARALLEL or GIMPLE_OMP_TASK body.
+
+       2012-03-01  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/52445
+       * tree-ssa-phiopt.c (struct name_to_bb): Remove ssa_name field,
+       add ssa_name_ver, offset and size fields and change store field
+       to bool.
+       (name_to_bb_hash, name_to_bb_eq): Adjust for the above changes.
+       (add_or_mark_expr): Likewise.  Only consider previous stores
+       with the same size and offset.
+       (nt_init_block): Only look at gimple_assign_single_p stmts,
+       doesn't look at rhs2.
+
+2013-04-03  Jakub Jelinek  <jakub@redhat.com>
+
+       * config/i386/i386.md (*<shiftrt_insn><mode>3_mask): Use
+       <shiftrt> instead of <shift>.
+
+2013-04-02  Wei Mi  <wmi@google.com>
+
+       * config/i386/i386.c (ix86_rtx_costs): Set proper rtx cost for
+       ashl<mode>3_mask, *<shift_insn><mode>3_mask and
+       *<rotate_insn><mode>3_mask in i386.md.
+
+2013-04-01  Wei Mi  <wmi@google.com>
+
+       * config/i386/i386.md (*ashl<mode>3_mask): Rewrite as define_insn.
+       Truncate operand 2 using %b asm operand modifier.
+       (*<shiftrt_insn><mode>3_mask): Ditto.
+       (*<rotate_insn><mode>3_mask): Ditto.
+
+2013-04-01  Andrey Belevantsev  <abel@ispras.ru>
+
+       Backport from mainline
+       2013-02-27  Andrey Belevantsev  <abel@ispras.ru>
+
+       PR middle-end/45472
+       * sel-sched-ir.c (merge_expr): Also change vinsn of merged expr
+       when the may_trap_p bit of the exprs being merged differs.
+       Reorder tests for speculativeness in the logical and operator.
+
+       Backport from mainline
+        2013-03-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/56461
+       * sel-sched-ir.c (free_sched_pools): Release
+       succs_info_pool.stack[succs_info_pool.max_top] vectors too
+       if succs_info_pool.max_top isn't -1.
+
+2013-04-01  Andrey Belevantsev  <abel@ispras.ru>
+
+       Backport from mainline
+       2012-02-19  Andrey Belevantsev  <abel@ispras.ru>
+
+       PR middle-end/55889
+       * sel-sched.c: Include ira.h.
+       (implicit_clobber_conflict_p): New function.
+       (moveup_expr): Use it.
+       * Makefile.in (sel-sched.o): Depend on ira.h.
+
+2013-04-01  Andrey Belevantsev  <abel@ispras.ru>
+
+       Backport from mainline
+       2013-02-25  Andrey Belevantsev  <abel@ispras.ru>
+       Alexander Monakov  <amonakov@ispras.ru>
+
+       PR middle-end/56077
+       * sched-deps.c (sched_analyze_insn): When reg_pending_barrier,
+       flush pending lists also on non-jumps.  Adjust comment.
+
+2013-03-22  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/56560
+       * config/i386/i386.c (init_cumulative_args): Also set
+       cum->callee_return_avx256_p.
+       (ix86_function_arg): Set cum->callee_pass_avx256_p.  Set
+       cfun->machine->callee_pass_avx256_p only when MODE == VOIDmode.
+
+       * config/i386/i386.h (ix86_args): Add callee_pass_avx256_p and
+       callee_return_avx256_p.
+
+2013-03-20  Jack Howarth  <howarth@bromo.med.uc.edu>
+
+       PR bootstrap/56258
+       * doc/generic.texi (POINTER_PLUS_EXPR): Use @item instead of @itemx.
+       (PLUS_EXPR): Likewise.
+       * doc/cppopts.texi (--help): Likewise.
+       * doc/invoke.texi (-fenable-@var{kind}-@var{pass}): Likewise
+       (-fdump-rtl-cprop_hardreg): Likewise.
+       (-fdump-rtl-csa): Likewise.
+       (-fdump-rtl-dce): Likewise.
+       (-fdump-rtl-dbr): Likewise.
+       (-fdump-rtl-into_cfglayout): Likewise.
+       (-fdump-rtl-outof_cfglayout): Likewise.
+       (@gccoptlist): Move misplaced bracket.
+
+2013-03-06  Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+       * config.gcc (arm*-*-rtemself*): New.
+       (arm*-*-rtems*): Removed.
+       (arm*-*-eabi* | arm*-*-symbianelf*): Add
+       (arm*-*-rtems*).
+       * config/arm/rtems-eabi.h: New file.
+       * config/arm/t-rtems-eabi: New file.
+
+2013-02-21  Jakub Jelinek  <jakub@redhat.com>
+
+       PR bootstrap/56258
+       * doc/invoke.texi (-fdump-rtl-pro_and_epilogue): Use @item
+       instead of @itemx.
+
+2013-02-11  Uros Bizjak  <ubizjak@gmail.com>
+
+       Backport from mainline
+       2013-02-11  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR rtl-optimization/56275
+       * simplify-rtx.c (avoid_constant_pool_reference): Check that
+       offset is non-negative and less than cmode size before
+       calling simplify_subreg.
+
+2013-02-08  David Edelsohn  <dje.gcc@gmail.com>
+           Michael Meissner  <meissner@linux.vnet.ibm.com>
+
+       Backport from mainline
+       * config/rs6000/rs6000.c (rs6000_option_override_internal): Clear
+       MASK_VSX from set_masks if OS_MISSING_ALTIVEC.
+
 2013-02-01  Eric Botcazou  <ebotcazou@adacore.com>
 
        * fold-const.c (make_range_step) <TRUTH_NOT_EXPR>: Bail out if the
index 9dffd02..68ada28 100644 (file)
@@ -1 +1 @@
-20130204
+20130412
index 373fbc6..e69de29 100644 (file)
@@ -1 +0,0 @@
-prerelease
index 94df373..e0b952f 100644 (file)
@@ -3405,7 +3405,7 @@ sel-sched.o : sel-sched.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
    $(FUNCTION_H) $(INSN_ATTR_H)  $(RECOG_H) $(EXCEPT_H) $(PARAMS_H) \
    $(TM_P_H) output.h $(TARGET_H) $(TIMEVAR_H) $(TREE_PASS_H)  \
    $(SCHED_INT_H) $(GGC_H) $(TREE_H) langhooks.h rtlhooks-def.h \
-   $(SEL_SCHED_IR_H) $(SEL_SCHED_DUMP_H) sel-sched.h $(DBGCNT_H) $(EMIT_RTL_H)
+   $(SEL_SCHED_IR_H) $(SEL_SCHED_DUMP_H) sel-sched.h $(DBGCNT_H) $(EMIT_RTL_H) ira.h
 sel-sched-dump.o : sel-sched-dump.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
    $(RTL_H) $(REGS_H) hard-reg-set.h $(FLAGS_H) insn-config.h \
    $(FUNCTION_H) $(INSN_ATTR_H) $(DIAGNOSTIC_CORE_H) $(RECOG_H) $(EXCEPT_H) $(PARAMS_H) \
index 370eff8..dd9f707 100644 (file)
@@ -1,3 +1,21 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
+2013-02-21  Jakub Jelinek  <jakub@redhat.com>
+
+       PR bootstrap/56258
+       * gnat-style.texi (@title): Remove @hfill.
+       * projects.texi: Avoid line wrapping inside of @pxref or
+       @xref.
+
+2013-02-07  Simon Wright  <simon@pushface.org>
+
+       PR target/50678
+       * init.c (__darwin_major_version): New function for x86-64/Darwin.
+       (__gnat_adjust_context_for_raise) [Darwin]: Disable the workaround
+       on Darwin 12 and above.
+
 2012-12-16  Eric Botcazou  <ebotcazou@adacore.com>
 
        PR ada/54614
index 1e2f365..13eb1ed 100644 (file)
@@ -42,7 +42,7 @@ Texts.  A copy of the license is included in the section entitled
 @titlepage
 @titlefont{GNAT Coding Style:}
 @sp 1
-@title @hfill A Guide for GNAT Developers
+@title A Guide for GNAT Developers
 @subtitle GNAT, The GNU Ada Compiler
 @versionsubtitle
 @author Ada Core Technologies, Inc.
index f6c1a5b..431aa90 100644 (file)
@@ -2179,7 +2179,9 @@ __gnat_install_handler(void)
 #elif defined(__APPLE__)
 
 #include <signal.h>
+#include <stdlib.h>
 #include <sys/syscall.h>
+#include <sys/sysctl.h>
 #include <mach/mach_vm.h>
 #include <mach/mach_init.h>
 #include <mach/vm_statistics.h>
@@ -2218,20 +2220,52 @@ __gnat_is_stack_guard (mach_vm_address_t addr)
 
 #define HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE
 
+#if defined (__x86_64__)
+static int
+__darwin_major_version (void)
+{
+  static int cache = -1;
+  if (cache < 0)
+    {
+      int mib[2] = {CTL_KERN, KERN_OSRELEASE};
+      size_t len;
+
+      /* Find out how big the buffer needs to be (and set cache to 0
+         on failure).  */
+      if (sysctl (mib, 2, NULL, &len, NULL, 0) == 0)
+        {
+          char release[len];
+          sysctl (mib, 2, release, &len, NULL, 0);
+          /* Darwin releases are of the form L.M.N where L is the major
+             version, so strtol will return L.  */
+          cache = (int) strtol (release, NULL, 10);
+        }
+      else
+        {
+          cache = 0;
+        }
+    }
+  return cache;
+}
+#endif
+
 void
 __gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED,
                                 void *ucontext ATTRIBUTE_UNUSED)
 {
 #if defined (__x86_64__)
-  /* Work around radar #10302855/pr50678, where the unwinders (libunwind or
-     libgcc_s depending on the system revision) and the DWARF unwind data for
-     the sigtramp have different ideas about register numbering (causing rbx
-     and rdx to be transposed)..  */
-  ucontext_t *uc = (ucontext_t *)ucontext ;
-  unsigned long t = uc->uc_mcontext->__ss.__rbx;
-
-  uc->uc_mcontext->__ss.__rbx = uc->uc_mcontext->__ss.__rdx;
-  uc->uc_mcontext->__ss.__rdx = t;
+  if (__darwin_major_version () < 12)
+    {
+      /* Work around radar #10302855, where the unwinders (libunwind or
+        libgcc_s depending on the system revision) and the DWARF unwind
+        data for sigtramp have different ideas about register numbering,
+        causing rbx and rdx to be transposed.  */
+      ucontext_t *uc = (ucontext_t *)ucontext;
+      unsigned long t = uc->uc_mcontext->__ss.__rbx;
+
+      uc->uc_mcontext->__ss.__rbx = uc->uc_mcontext->__ss.__rdx;
+      uc->uc_mcontext->__ss.__rdx = t;
+    }
 #endif
 }
 
index 3b05c44..36c915f 100644 (file)
@@ -45,8 +45,7 @@ project files allow you to specify:
 @item Source file naming conventions; you can specify these either globally or for
   individual compilation units (@pxref{Naming Schemes}).
 @item Change any of the above settings depending on external values, thus enabling
-  the reuse of the projects in various @b{scenarios} (@pxref{Scenarios
-  in Projects}).
+  the reuse of the projects in various @b{scenarios} (@pxref{Scenarios in Projects}).
 @item Automatically build libraries as part of the build process
   (@pxref{Library Projects}).
 
@@ -350,8 +349,8 @@ locating the specified source files in the specified source directories.
 
 @item For various reasons, it is sometimes useful to have a project with no
   sources (most of the time because the attributes defined in the project
-  file will be reused in other projects, as explained in @pxref{Organizing
-  Projects into Subsystems}. To do this, the attribute
+  file will be reused in other projects, as explained in
+  @pxref{Organizing Projects into Subsystems}. To do this, the attribute
   @emph{Source_Files} is set to the empty list, i.e. @code{()}. Alternatively,
   @emph{Source_Dirs} can be set to the empty list, with the same
   result.
@@ -378,8 +377,9 @@ locating the specified source files in the specified source directories.
   This can be done thanks to the attribute @b{Excluded_Source_Files}
   (or its synonym @b{Locally_Removed_Files}).
   Its value is the list of file names that should not be taken into account.
-  This attribute is often used when extending a project, @xref{Project
-  Extension}. A similar attribute @b{Excluded_Source_List_File} plays the same
+  This attribute is often used when extending a project,
+  @xref{Project Extension}. A similar attribute
+  @b{Excluded_Source_List_File} plays the same
   role but takes the name of file containing file names similarly to
   @code{Source_List_File}.
 
index fd99611..4d8c1b7 100644 (file)
@@ -11575,7 +11575,7 @@ fold_builtin_strspn (location_t loc, tree s1, tree s2)
       if (p1 && p2)
        {
          const size_t r = strspn (p1, p2);
-         return size_int (r);
+         return build_int_cst (size_type_node, r);
        }
 
       /* If either argument is "", return NULL_TREE.  */
@@ -11620,7 +11620,7 @@ fold_builtin_strcspn (location_t loc, tree s1, tree s2)
       if (p1 && p2)
        {
          const size_t r = strcspn (p1, p2);
-         return size_int (r);
+         return build_int_cst (size_type_node, r);
        }
 
       /* If the first argument is "", return NULL_TREE.  */
index 63952c2..14122ad 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index d1fdc96..0eed43a 100644 (file)
@@ -341,14 +341,14 @@ static int nonzero_sign_valid;
 /* Record one modification to rtl structure
    to be undone by storing old_contents into *where.  */
 
-enum undo_kind { UNDO_RTX, UNDO_INT, UNDO_MODE };
+enum undo_kind { UNDO_RTX, UNDO_INT, UNDO_MODE, UNDO_LINKS };
 
 struct undo
 {
   struct undo *next;
   enum undo_kind kind;
   union { rtx r; int i; enum machine_mode m; } old_contents;
-  union { rtx *r; int *i; } where;
+  union { rtx *r; int *i;  } where;
 };
 
 /* Record a bunch of changes to be undone, up to MAX_UNDO of them.
@@ -671,7 +671,8 @@ do_SUBST (rtx *into, rtx newval)
      that are perfectly valid, so we'd waste too much effort for
      little gain doing the checks here.  Focus on catching invalid
      transformations involving integer constants.  */
-  if (GET_MODE_CLASS (GET_MODE (oldval)) == MODE_INT
+  if (oldval
+      && GET_MODE_CLASS (GET_MODE (oldval)) == MODE_INT
       && CONST_INT_P (newval))
     {
       /* Sanity check that we're replacing oldval with a CONST_INT
@@ -762,6 +763,34 @@ do_SUBST_MODE (rtx *into, enum machine_mode newval)
 }
 
 #define SUBST_MODE(INTO, NEWVAL)  do_SUBST_MODE(&(INTO), (NEWVAL))
+
+#ifndef HAVE_cc0
+
+/* Similar to SUBST, but NEWVAL is a LOG_LINKS expression.  */
+
+static void
+do_SUBST_LINK (rtx *into, rtx newval)
+{
+  struct undo *buf;
+  rtx oldval = *into;
+  if (oldval == newval)
+    return;
+
+  if (undobuf.frees)
+    buf = undobuf.frees, undobuf.frees = buf->next;
+  else
+    buf = XNEW (struct undo);
+  
+  buf->kind = UNDO_LINKS;
+  buf->where.r = into;
+  buf->old_contents.r = oldval;
+  *into = newval;
+  
+  buf->next = undobuf.undos, undobuf.undos = buf;
+}
+
+#define SUBST_LINK(oldval, newval) do_SUBST_LINK (&oldval, newval)
+#endif
 \f
 /* Subroutine of try_combine.  Determine whether the combine replacement
    patterns NEWPAT, NEWI2PAT and NEWOTHERPAT are cheaper according to
@@ -2871,6 +2900,7 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx i0, int *new_direct_jump_p,
          SUBST (PATTERN (i2), XVECEXP (PATTERN (i2), 0, 0));
          SUBST (XEXP (SET_SRC (PATTERN (i2)), 0),
                 SET_DEST (PATTERN (i1)));
+         SUBST_LINK (LOG_LINKS (i2), alloc_INSN_LIST (i1, LOG_LINKS (i2)));
        }
     }
 #endif
@@ -4474,6 +4504,11 @@ undo_all (void)
        case UNDO_MODE:
          adjust_reg_mode (*undo->where.r, undo->old_contents.m);
          break;
+
+       case UNDO_LINKS:
+         *undo->where.r = undo->old_contents.r;
+         break;
+
        default:
          gcc_unreachable ();
        }
index 89a8c5a..acdaa8d 100644 (file)
@@ -870,7 +870,12 @@ arm*-*-ecos-elf)
        tmake_file="arm/t-arm arm/t-arm-elf"
        tmake_file="${tmake_file} arm/t-arm-softfp soft-fp/t-softfp"
        ;;
-arm*-*-eabi* | arm*-*-symbianelf* )
+arm*-*-rtemself*)
+       tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h arm/rtems-elf.h rtems.h newlib-stdint.h"
+       tmake_file="arm/t-arm arm/t-arm-elf t-rtems arm/t-rtems"
+       tmake_file="${tmake_file} arm/t-arm-softfp soft-fp/t-softfp"
+       ;;
+arm*-*-eabi* | arm*-*-symbianelf* | arm*-*-rtems*)
        # The BPABI long long divmod functions return a 128-bit value in
        # registers r0-r3.  Correctly modeling that requires the use of
        # TImode.
@@ -885,6 +890,10 @@ arm*-*-eabi* | arm*-*-symbianelf* )
          tmake_file="${tmake_file} arm/t-bpabi"
          use_gcc_stdint=wrap
          ;;
+       arm*-*-rtems*)
+         tm_file="${tm_file} rtems.h arm/rtems-eabi.h newlib-stdint.h"
+         tmake_file="${tmake_file} arm/t-bpabi t-rtems arm/t-rtems-eabi"
+         ;;
        arm*-*-symbianelf*)
          tm_file="${tm_file} arm/symbian.h"
          # We do not include t-bpabi for Symbian OS because the system
@@ -895,11 +904,6 @@ arm*-*-eabi* | arm*-*-symbianelf* )
        tm_file="${tm_file} arm/aout.h arm/arm.h"
        tmake_file="${tmake_file} arm/t-arm-softfp soft-fp/t-softfp"
        ;;
-arm*-*-rtems*)
-       tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h arm/rtems-elf.h rtems.h newlib-stdint.h"
-       tmake_file="arm/t-arm arm/t-arm-elf t-rtems arm/t-rtems"
-       tmake_file="${tmake_file} arm/t-arm-softfp soft-fp/t-softfp"
-       ;;
 arm*-*-elf)
        tm_file="dbxelf.h elfos.h newlib-stdint.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h"
        tmake_file="arm/t-arm arm/t-arm-elf"
diff --git a/gcc/config/arm/rtems-eabi.h b/gcc/config/arm/rtems-eabi.h
new file mode 100644 (file)
index 0000000..ced98a9
--- /dev/null
@@ -0,0 +1,29 @@
+/* Definitions for RTEMS based ARM systems using EABI.
+   Copyright (C) 2011 Free Software Foundation, Inc.
+   This file is part of GCC.
+   GCC is free software; you can redistribute it and/or modify it
+   under the terms of the GNU General Public License as published
+   by the Free Software Foundation; either version 3, or (at your
+   option) any later version.
+   GCC is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+   You should have received a copy of the GNU General Public License
+   along with GCC; see the file COPYING3.  If not see
+   <http://www.gnu.org/licenses/>.  */
+
+#define HAS_INIT_SECTION
+
+#undef TARGET_OS_CPP_BUILTINS
+#define TARGET_OS_CPP_BUILTINS()               \
+    do {                                       \
+       builtin_define ("__rtems__");           \
+       builtin_define ("__USE_INIT_FINI__");   \
+       builtin_assert ("system=rtems");        \
+       TARGET_BPABI_CPP_BUILTINS();            \
+    } while (0)
diff --git a/gcc/config/arm/t-rtems-eabi b/gcc/config/arm/t-rtems-eabi
new file mode 100644 (file)
index 0000000..f0e714a
--- /dev/null
@@ -0,0 +1,8 @@
+# Custom RTEMS EABI multilibs
+
+MULTILIB_OPTIONS    = mthumb march=armv6-m/march=armv7/march=armv7-m
+MULTILIB_DIRNAMES   = thumb armv6-m armv7 armv7-m
+MULTILIB_EXCEPTIONS = march=armv6-m march=armv7 march=armv7-m
+MULTILIB_MATCHES    =
+MULTILIB_EXCLUSIONS =
+MULTILIB_OSDIRNAMES =
index 436fa4f..c43d3ed 100644 (file)
@@ -5938,7 +5938,10 @@ init_cumulative_args (CUMULATIVE_ARGS *cum,  /* Argument info to initialize */
        {
          /* The return value of this function uses 256bit AVX modes.  */
          if (caller)
-           cfun->machine->callee_return_avx256_p = true;
+           {
+             cfun->machine->callee_return_avx256_p = true;
+             cum->callee_return_avx256_p = true;
+           }
          else
            cfun->machine->caller_return_avx256_p = true;
        }
@@ -7206,11 +7209,20 @@ ix86_function_arg (CUMULATIVE_ARGS *cum, enum machine_mode omode,
     {
       /* This argument uses 256bit AVX modes.  */
       if (cum->caller)
-       cfun->machine->callee_pass_avx256_p = true;
+       cum->callee_pass_avx256_p = true;
       else
        cfun->machine->caller_pass_avx256_p = true;
     }
 
+  if (cum->caller && mode == VOIDmode)
+    {
+      /* This function is called with MODE == VOIDmode immediately
+        before the call instruction is emitted.  We copy callee 256bit
+        AVX info from the current CUM here.  */
+      cfun->machine->callee_return_avx256_p = cum->callee_return_avx256_p;
+      cfun->machine->callee_pass_avx256_p = cum->callee_pass_avx256_p;
+    }
+
   return arg;
 }
 
@@ -29167,6 +29179,13 @@ ix86_rtx_costs (rtx x, int code, int outer_code_i, int *total, bool speed)
        {
          if (CONST_INT_P (XEXP (x, 1)))
            *total = cost->shift_const;
+         else if (GET_CODE (XEXP (x, 1)) == SUBREG
+                  && GET_CODE (XEXP (XEXP (x, 1), 0)) == AND)
+           {
+             /* Return the cost after shift-and truncation.  */
+             *total = cost->shift_var;
+             return true;
+           }
          else
            *total = cost->shift_var;
        }
index 281f9e1..bb23674 100644 (file)
@@ -1494,6 +1494,7 @@ enum reg_class
 /* 1 if N is a possible register number for function argument passing.  */
 #define FUNCTION_ARG_REGNO_P(N) ix86_function_arg_regno_p (N)
 
+#ifndef USED_FOR_TARGET
 /* Define a data type for recording info about an argument list
    during the scan of that argument list.  This data type should
    hold all necessary information about the function itself
@@ -1522,7 +1523,12 @@ typedef struct ix86_args {
                                   in SSE registers.  Otherwise 0.  */
   enum calling_abi call_abi;   /* Set to SYSV_ABI for sysv abi. Otherwise
                                   MS_ABI for ms abi.  */
+  /* Nonzero if it passes 256bit AVX modes.  */
+  BOOL_BITFIELD callee_pass_avx256_p : 1;
+  /* Nonzero if it returns 256bit AVX modes.  */
+  BOOL_BITFIELD callee_return_avx256_p : 1;
 } CUMULATIVE_ARGS;
+#endif
 
 /* Initialize a variable CUM of type CUMULATIVE_ARGS
    for a call to a function whose data type is FNTYPE.
index 10f3832..3a27ca4 100644 (file)
 })
 
 ;; Avoid useless masking of count operand.
-(define_insn_and_split "*ashl<mode>3_mask"
+(define_insn "*ashl<mode>3_mask"
   [(set (match_operand:SWI48 0 "nonimmediate_operand" "=rm")
        (ashift:SWI48
          (match_operand:SWI48 1 "nonimmediate_operand" "0")
          (subreg:QI
            (and:SI
-             (match_operand:SI 2 "nonimmediate_operand" "c")
+             (match_operand:SI 2 "register_operand" "c")
              (match_operand:SI 3 "const_int_operand" "n")) 0)))
    (clobber (reg:CC FLAGS_REG))]
   "ix86_binary_operator_ok (ASHIFT, <MODE>mode, operands)
    && (INTVAL (operands[3]) & (GET_MODE_BITSIZE (<MODE>mode)-1))
       == GET_MODE_BITSIZE (<MODE>mode)-1"
-  "#"
-  "&& 1"
-  [(parallel [(set (match_dup 0)
-                  (ashift:SWI48 (match_dup 1) (match_dup 2)))
-             (clobber (reg:CC FLAGS_REG))])]
 {
-  if (can_create_pseudo_p ())
-    operands [2] = force_reg (SImode, operands[2]);
-
-  operands[2] = simplify_gen_subreg (QImode, operands[2], SImode, 0);
+  return "sal{<imodesuffix>}\t{%b2, %0|%0, %b2}";
 }
   [(set_attr "type" "ishift")
    (set_attr "mode" "<MODE>")])
   "ix86_expand_binary_operator (<CODE>, <MODE>mode, operands); DONE;")
 
 ;; Avoid useless masking of count operand.
-(define_insn_and_split "*<shiftrt_insn><mode>3_mask"
+(define_insn "*<shiftrt_insn><mode>3_mask"
   [(set (match_operand:SWI48 0 "nonimmediate_operand" "=rm")
        (any_shiftrt:SWI48
          (match_operand:SWI48 1 "nonimmediate_operand" "0")
          (subreg:QI
            (and:SI
-             (match_operand:SI 2 "nonimmediate_operand" "c")
+             (match_operand:SI 2 "register_operand" "c")
              (match_operand:SI 3 "const_int_operand" "n")) 0)))
    (clobber (reg:CC FLAGS_REG))]
   "ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)
    && (INTVAL (operands[3]) & (GET_MODE_BITSIZE (<MODE>mode)-1))
       == GET_MODE_BITSIZE (<MODE>mode)-1"
-  "#"
-  "&& 1"
-  [(parallel [(set (match_dup 0)
-                  (any_shiftrt:SWI48 (match_dup 1) (match_dup 2)))
-             (clobber (reg:CC FLAGS_REG))])]
 {
-  if (can_create_pseudo_p ())
-    operands [2] = force_reg (SImode, operands[2]);
-
-  operands[2] = simplify_gen_subreg (QImode, operands[2], SImode, 0);
+  return "<shiftrt>{<imodesuffix>}\t{%b2, %0|%0, %b2}";
 }
   [(set_attr "type" "ishift")
    (set_attr "mode" "<MODE>")])
   "ix86_expand_binary_operator (<CODE>, <MODE>mode, operands); DONE;")
 
 ;; Avoid useless masking of count operand.
-(define_insn_and_split "*<rotate_insn><mode>3_mask"
+(define_insn "*<rotate_insn><mode>3_mask"
   [(set (match_operand:SWI48 0 "nonimmediate_operand" "=rm")
        (any_rotate:SWI48
          (match_operand:SWI48 1 "nonimmediate_operand" "0")
          (subreg:QI
            (and:SI
-             (match_operand:SI 2 "nonimmediate_operand" "c")
+             (match_operand:SI 2 "register_operand" "c")
              (match_operand:SI 3 "const_int_operand" "n")) 0)))
    (clobber (reg:CC FLAGS_REG))]
   "ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)
    && (INTVAL (operands[3]) & (GET_MODE_BITSIZE (<MODE>mode)-1))
       == GET_MODE_BITSIZE (<MODE>mode)-1"
-  "#"
-  "&& 1"
-  [(parallel [(set (match_dup 0)
-                  (any_rotate:SWI48 (match_dup 1) (match_dup 2)))
-             (clobber (reg:CC FLAGS_REG))])]
 {
-  if (can_create_pseudo_p ())
-    operands [2] = force_reg (SImode, operands[2]);
-
-  operands[2] = simplify_gen_subreg (QImode, operands[2], SImode, 0);
+  return "<rotate>{<imodesuffix>}\t{%b2, %0|%0, %b2}";
 }
   [(set_attr "type" "rotate")
    (set_attr "mode" "<MODE>")])
index 36aba43..730e234 100644 (file)
@@ -1,6 +1,6 @@
 /* Subroutines used for code generation on IBM RS/6000.
    Copyright (C) 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2013
    Free Software Foundation, Inc.
    Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
 
@@ -2698,7 +2698,7 @@ rs6000_option_override_internal (bool global_init_p)
 #endif
 #ifdef OS_MISSING_ALTIVEC
   if (OS_MISSING_ALTIVEC)
-    set_masks &= ~MASK_ALTIVEC;
+    set_masks &= ~(MASK_ALTIVEC | MASK_VSX);
 #endif
 
   /* Don't override by the processor default if given explicitly.  */
index 24e0a2e..31e6d12 100644 (file)
@@ -409,6 +409,9 @@ extern enum cmodel sparc_cmodel;
 %{mcpu=sparclite86x:-Asparclite} \
 %{mcpu=f930:-Asparclite} %{mcpu=f934:-Asparclite} \
 %{mcpu=v8:-Av8} \
+%{mcpu=supersparc:-Av8} \
+%{mcpu=hypersparc:-Av8} \
+%{mcpu=leon:-Av8} \
 %{mv8plus:-Av8plus} \
 %{mcpu=v9:-Av9} \
 %{mcpu=ultrasparc:%{!mv8plus:-Av9a}} \
index 5bcfd36..f5ef323 100644 (file)
@@ -1,3 +1,37 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
+2013-04-03  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2013-02-07  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/56239
+       * parser.c (cp_parser_token_starts_cast_expression): Renamed to...
+       (cp_parser_tokens_start_cast_expression): ... this.  Change parameter
+       to cp_parser *, call cp_lexer_peek_token first.  For CPP_OPEN_PAREN,
+       return true only if 2nd token isn't CPP_CLOSE_PAREN.
+       (cp_parser_cast_expression): Adjust caller.
+
+       2012-10-08  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/54858
+       * tree.c (cp_tree_equal): Handle FIELD_DECL.
+
+2013-03-14  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/56403
+       * init.c (build_zero_init_1): Use RECORD_OR_UNION_CODE_P instead
+       of CLASS_TYPE_P.
+
+2013-02-09  Jason Merrill  <jason@redhat.com>
+
+       PR c++/56247
+       * pt.c (eq_specializations): Set comparing_specializations.
+       * tree.c (cp_tree_equal): Check it.
+       * cp-tree.h: Declare it.
+
 2013-01-04  Jason Merrill  <jason@redhat.com>
 
        PR c++/55877
index 3bc5b5c..7ff09cf 100644 (file)
@@ -4022,6 +4022,10 @@ extern GTY(()) tree integer_two_node;
    function, two inside the body of a function in a local class, etc.)  */
 extern int function_depth;
 
+/* Nonzero if we are inside eq_specializations, which affects comparison of
+   PARM_DECLs in cp_tree_equal.  */
+extern int comparing_specializations;
+
 /* In parser.c.  */
 
 /* Nonzero if we are parsing an unevaluated operand: an operand to
index 091ac73..e3e74b1 100644 (file)
@@ -181,7 +181,7 @@ build_zero_init_1 (tree type, tree nelts, bool static_storage_p,
     ;
   else if (SCALAR_TYPE_P (type))
     init = convert (type, integer_zero_node);
-  else if (CLASS_TYPE_P (type))
+  else if (RECORD_OR_UNION_CODE_P (TREE_CODE (type)))
     {
       tree field;
       VEC(constructor_elt,gc) *v = NULL;
index da09e42..8e8e834 100644 (file)
@@ -6566,8 +6566,9 @@ cp_parser_delete_expression (cp_parser* parser)
    otherwise.  */
 
 static bool
-cp_parser_token_starts_cast_expression (cp_token *token)
+cp_parser_tokens_start_cast_expression (cp_parser *parser)
 {
+  cp_token *token = cp_lexer_peek_token (parser->lexer);
   switch (token->type)
     {
     case CPP_COMMA:
@@ -6608,6 +6609,12 @@ cp_parser_token_starts_cast_expression (cp_token *token)
     case CPP_EOF:
       return false;
 
+    case CPP_OPEN_PAREN:
+      /* In ((type ()) () the last () isn't a valid cast-expression,
+        so the whole must be parsed as postfix-expression.  */
+      return cp_lexer_peek_nth_token (parser->lexer, 2)->type
+            != CPP_CLOSE_PAREN;
+
       /* '[' may start a primary-expression in obj-c++.  */
     case CPP_OPEN_SQUARE:
       return c_dialect_objc ();
@@ -6700,8 +6707,7 @@ cp_parser_cast_expression (cp_parser *parser, bool address_p, bool cast_p,
         parenthesized ctor such as `(T ())' that looks like a cast to
         function returning T.  */
       if (!cp_parser_error_occurred (parser)
-         && cp_parser_token_starts_cast_expression (cp_lexer_peek_token
-                                                    (parser->lexer)))
+         && cp_parser_tokens_start_cast_expression (parser))
        {
          cp_parser_parse_definitely (parser);
          expr = cp_parser_cast_expression (parser,
index 4b7dd2f..ce8ea08 100644 (file)
@@ -1432,14 +1432,21 @@ register_specialization (tree spec, tree tmpl, tree args, bool is_friend,
 /* Returns true iff two spec_entry nodes are equivalent.  Only compares the
    TMPL and ARGS members, ignores SPEC.  */
 
+int comparing_specializations;
+
 static int
 eq_specializations (const void *p1, const void *p2)
 {
   const spec_entry *e1 = (const spec_entry *)p1;
   const spec_entry *e2 = (const spec_entry *)p2;
+  int equal;
+
+  ++comparing_specializations;
+  equal = (e1->tmpl == e2->tmpl
+          && comp_template_args (e1->args, e2->args));
+  --comparing_specializations;
 
-  return (e1->tmpl == e2->tmpl
-         && comp_template_args (e1->args, e2->args));
+  return equal;
 }
 
 /* Returns a hash for a template TMPL and template arguments ARGS.  */
index 9f757f6..3d55aea 100644 (file)
@@ -2245,6 +2245,13 @@ cp_tree_equal (tree t1, tree t2)
         with an out-of-class definition of the function, but can also come
         up for expressions that involve 'this' in a member function
         template.  */
+
+      if (comparing_specializations)
+       /* When comparing hash table entries, only an exact match is
+          good enough; we don't want to replace 'this' with the
+          version from another function.  */
+       return false;
+
       if (same_type_p (TREE_TYPE (t1), TREE_TYPE (t2)))
        {
          if (DECL_ARTIFICIAL (t1) ^ DECL_ARTIFICIAL (t2))
@@ -2258,6 +2265,7 @@ cp_tree_equal (tree t1, tree t2)
 
     case VAR_DECL:
     case CONST_DECL:
+    case FIELD_DECL:
     case FUNCTION_DECL:
     case TEMPLATE_DECL:
     case IDENTIFIER_NODE:
index 5212478..52d5997 100644 (file)
@@ -769,7 +769,7 @@ Replacement:      [    ]    @{    @}    #    \    ^    |    ~
 Enable special code to work around file systems which only permit very
 short file names, such as MS-DOS@.
 
-@itemx --help
+@item --help
 @itemx --target-help
 @opindex help
 @opindex target-help
index 5874c55..79af22f 100644 (file)
@@ -1415,13 +1415,13 @@ generate these expressions anyhow, if it can tell that strictness does
 not matter.  The type of the operands and that of the result are
 always of @code{BOOLEAN_TYPE} or @code{INTEGER_TYPE}.
 
-@itemx POINTER_PLUS_EXPR
+@item POINTER_PLUS_EXPR
 This node represents pointer arithmetic.  The first operand is always
 a pointer/reference type.  The second operand is always an unsigned
 integer type compatible with sizetype.  This is the only binary
 arithmetic operand that can operate on pointer types.
 
-@itemx PLUS_EXPR
+@item PLUS_EXPR
 @itemx MINUS_EXPR
 @itemx MULT_EXPR
 These nodes represent various binary arithmetic operations.
index de25c58..acd4570 100644 (file)
@@ -165,7 +165,7 @@ in the following sections.
 -pipe  -pass-exit-codes  @gol
 -x @var{language}  -v  -###  --help@r{[}=@var{class}@r{[},@dots{}@r{]]}  --target-help  @gol
 --version -wrapper @@@var{file} -fplugin=@var{file} -fplugin-arg-@var{name}=@var{arg}  @gol
--fdump-ada-spec@r{[}-slim@r{]}} -fdump-go-spec=@var{file}
+-fdump-ada-spec@r{[}-slim@r{]} -fdump-go-spec=@var{file}}
 
 @item C Language Options
 @xref{C Dialect Options,,Options Controlling C Dialect}.
@@ -5086,11 +5086,11 @@ Dump after duplicating the computed gotos.
 @option{-fdump-rtl-ce3} enable dumping after the three
 if conversion passes.
 
-@itemx -fdump-rtl-cprop_hardreg
+@item -fdump-rtl-cprop_hardreg
 @opindex fdump-rtl-cprop_hardreg
 Dump after hard register copy propagation.
 
-@itemx -fdump-rtl-csa
+@item -fdump-rtl-csa
 @opindex fdump-rtl-csa
 Dump after combining stack adjustments.
 
@@ -5101,11 +5101,11 @@ Dump after combining stack adjustments.
 @option{-fdump-rtl-cse1} and @option{-fdump-rtl-cse2} enable dumping after
 the two common sub-expression elimination passes.
 
-@itemx -fdump-rtl-dce
+@item -fdump-rtl-dce
 @opindex fdump-rtl-dce
 Dump after the standalone dead code elimination passes.
 
-@itemx -fdump-rtl-dbr
+@item -fdump-rtl-dbr
 @opindex fdump-rtl-dbr
 Dump after delayed branch scheduling.
 
@@ -5150,7 +5150,7 @@ Dump after the initialization of the registers.
 @opindex fdump-rtl-initvals
 Dump after the computation of the initial value sets.
 
-@itemx -fdump-rtl-into_cfglayout
+@item -fdump-rtl-into_cfglayout
 @opindex fdump-rtl-into_cfglayout
 Dump after converting to cfglayout mode.
 
@@ -5180,7 +5180,7 @@ Dump after removing redundant mode switches.
 @opindex fdump-rtl-rnreg
 Dump after register renumbering.
 
-@itemx -fdump-rtl-outof_cfglayout
+@item -fdump-rtl-outof_cfglayout
 @opindex fdump-rtl-outof_cfglayout
 Dump after converting from cfglayout mode.
 
@@ -5192,7 +5192,7 @@ Dump after the peephole pass.
 @opindex fdump-rtl-postreload
 Dump after post-reload optimizations.
 
-@itemx -fdump-rtl-pro_and_epilogue
+@item -fdump-rtl-pro_and_epilogue
 @opindex fdump-rtl-pro_and_epilogue
 Dump after generating the function pro and epilogues.
 
index e4f6cae..c931396 100644 (file)
@@ -8308,6 +8308,54 @@ expand_expr_real_2 (sepops ops, rtx target, enum machine_mode tmode,
 
       if (!target)
        target = gen_reg_rtx (TYPE_MODE (type));
+      else
+       /* If target overlaps with op1, then either we need to force
+          op1 into a pseudo (if target also overlaps with op0),
+          or write the complex parts in reverse order.  */
+       switch (GET_CODE (target))
+         {
+         case CONCAT:
+           if (reg_overlap_mentioned_p (XEXP (target, 0), op1))
+             {
+               if (reg_overlap_mentioned_p (XEXP (target, 1), op0))
+                 {
+                 complex_expr_force_op1:
+                   temp = gen_reg_rtx (GET_MODE_INNER (GET_MODE (target)));
+                   emit_move_insn (temp, op1);
+                   op1 = temp;
+                   break;
+                 }
+             complex_expr_swap_order:
+               /* Move the imaginary (op1) and real (op0) parts to their
+                  location.  */
+               write_complex_part (target, op1, true);
+               write_complex_part (target, op0, false);
+
+               return target;
+             }
+           break;
+         case MEM:
+           temp = adjust_address_nv (target,
+                                     GET_MODE_INNER (GET_MODE (target)), 0);
+           if (reg_overlap_mentioned_p (temp, op1))
+             {
+               enum machine_mode imode = GET_MODE_INNER (GET_MODE (target));
+               temp = adjust_address_nv (target, imode,
+                                         GET_MODE_SIZE (imode));
+               if (reg_overlap_mentioned_p (temp, op0))
+                 goto complex_expr_force_op1;
+               goto complex_expr_swap_order;
+             }
+           break;
+         default:
+           if (reg_overlap_mentioned_p (target, op1))
+             {
+               if (reg_overlap_mentioned_p (target, op0))
+                 goto complex_expr_force_op1;
+               goto complex_expr_swap_order;
+             }
+           break;
+         }
 
       /* Move the real (op0) and imaginary (op1) parts to their location.  */
       write_complex_part (target, op0, false);
index 52595e6..d7fbc56 100644 (file)
@@ -1,3 +1,54 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
+2013-03-15  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/56615
+       * trans-intrinsic.c (gfc_conv_intrinsic_transfer): Pack arrays
+       if they are not simply contiguous.
+
+2013-03-13  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/56575
+       * expr.c (gfc_default_initializer): Check that a class declared
+       type has any components.
+       * resolve.c (resolve_fl_derived0): On failing the test for C437
+       set the type to BT_UNKNOWN to prevent repeat error messages.
+
+2013-03-10  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/55362
+       * check.c (array_check): It is an error if a procedure is
+       passed.
+
+2013-02-23  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/56385
+       * trans-array.c (structure_alloc_comps): Handle procedure-pointer
+       components with allocatable result.
+
+2013-02-15  Tobias Burnus  <burnus@net-b.de>
+           Mikael Morin  <mikael@gcc.gnu.org>
+
+       PR fortran/56318
+       * simplify.c (gfc_simplify_matmul): Fix result shape
+       and matmul result.
+
+2013-02-13  Tobias Burnus  <burnus@net-b.de>
+
+       Backported from mainline
+       2013-01-07  Tobias Burnus  <burnus@net-b.de>
+                   Thomas Koenig  <tkoenig@gcc.gnu.org>
+                   Jakub Jelinek  <jakub@redhat.com>
+
+       PR fortran/55852
+       * expr.c (gfc_build_intrinsic_call): Avoid clashes
+       with user's procedures.
+       * gfortran.h (gfc_build_intrinsic_call): Update prototype.
+       (GFC_PREFIX): Define.
+       * simplify.c (gfc_simplify_size): Update call.
+
 2013-02-03  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        Backport from trunk
index 4d71e52..a3d32b6 100644 (file)
@@ -220,7 +220,7 @@ is_coarray (gfc_expr *e)
       if (ref->type == REF_COMPONENT)
        coarray = ref->u.c.component->attr.codimension;
       else if (ref->type != REF_ARRAY || ref->u.ar.dimen != 0
-              || ref->u.ar.codimen != 0) 
+              || ref->u.ar.codimen != 0)
        coarray = false;
     }
 
@@ -240,7 +240,7 @@ coarray_check (gfc_expr *e, int n)
     }
 
   return SUCCESS;
-} 
+}
 
 
 /* Make sure the expression is a logical array.  */
@@ -265,7 +265,7 @@ logical_array_check (gfc_expr *array, int n)
 static gfc_try
 array_check (gfc_expr *e, int n)
 {
-  if (e->rank != 0)
+  if (e->rank != 0 && e->ts.type != BT_PROCEDURE)
     return SUCCESS;
 
   gfc_error ("'%s' argument of '%s' intrinsic at %L must be an array",
@@ -346,7 +346,7 @@ less_than_bitsizekind (const char *arg, gfc_expr *expr, int k)
 
   if (expr->expr_type != EXPR_CONSTANT)
     return SUCCESS;
+
   i = gfc_validate_kind (BT_INTEGER, k, false);
   gfc_extract_int (expr, &val);
 
@@ -501,7 +501,7 @@ variable_check (gfc_expr *e, int n, bool allow_proc)
                  || (ref->u.c.component->ts.type != BT_CLASS
                      && ref->u.c.component->attr.pointer)))
            break;
-       } 
+       }
 
       if (!ref)
        {
@@ -651,7 +651,7 @@ identical_dimen_shape (gfc_expr *a, int ai, gfc_expr *b, int bi)
        {
          if (mpz_cmp (a_size, b_size) != 0)
            ret = 0;
-  
+
          mpz_clear (b_size);
        }
       mpz_clear (a_size);
@@ -824,7 +824,7 @@ gfc_check_allocated (gfc_expr *array)
     return FAILURE;
   if (allocatable_check (array, 0) == FAILURE)
     return FAILURE;
-  
+
   return SUCCESS;
 }
 
@@ -1752,7 +1752,7 @@ gfc_check_ichar_iachar (gfc_expr *c, gfc_expr *kind)
                return SUCCESS;
              i = mpz_get_si (c->ts.u.cl->length->value.integer);
            }
-         else 
+         else
            return SUCCESS;
        }
       else
@@ -1774,7 +1774,7 @@ gfc_check_ichar_iachar (gfc_expr *c, gfc_expr *kind)
 
   if (i != 1)
     {
-      gfc_error ("Argument of %s at %L must be of length one", 
+      gfc_error ("Argument of %s at %L must be of length one",
                 gfc_current_intrinsic, &c->where);
       return FAILURE;
     }
@@ -3022,7 +3022,7 @@ gfc_check_reshape (gfc_expr *source, gfc_expr *shape,
          if (order_size != shape_size)
            {
              gfc_error ("'%s' argument of '%s' intrinsic at %L "
-                        "has wrong number of elements (%d/%d)", 
+                        "has wrong number of elements (%d/%d)",
                         gfc_current_intrinsic_arg[3]->name,
                         gfc_current_intrinsic, &order->where,
                         order_size, shape_size);
@@ -3040,7 +3040,7 @@ gfc_check_reshape (gfc_expr *source, gfc_expr *shape,
              if (dim < 1 || dim > order_size)
                {
                  gfc_error ("'%s' argument of '%s' intrinsic at %L "
-                            "has out-of-range dimension (%d)", 
+                            "has out-of-range dimension (%d)",
                             gfc_current_intrinsic_arg[3]->name,
                             gfc_current_intrinsic, &e->where, dim);
                  return FAILURE;
@@ -3072,7 +3072,7 @@ gfc_check_reshape (gfc_expr *source, gfc_expr *shape,
          gfc_constructor *c;
          bool test;
 
-         
+
          mpz_init_set_ui (size, 1);
          for (c = gfc_constructor_first (shape->value.constructor);
               c; c = gfc_constructor_next (c))
@@ -3434,7 +3434,7 @@ gfc_check_spread (gfc_expr *source, gfc_expr *dim, gfc_expr *ncopies)
     return FAILURE;
 
   /* dim_rank_check() does not apply here.  */
-  if (dim 
+  if (dim
       && dim->expr_type == EXPR_CONSTANT
       && (mpz_cmp_ui (dim->value.integer, 1) < 0
          || mpz_cmp_ui (dim->value.integer, source->rank + 1) > 0))
@@ -3886,7 +3886,7 @@ gfc_check_unpack (gfc_expr *vector, gfc_expr *mask, gfc_expr *field)
   if (mask->rank != field->rank && field->rank != 0)
     {
       gfc_error ("'%s' argument of '%s' intrinsic at %L must have "
-                "the same rank as '%s' or be a scalar", 
+                "the same rank as '%s' or be a scalar",
                 gfc_current_intrinsic_arg[2]->name, gfc_current_intrinsic,
                 &field->where, gfc_current_intrinsic_arg[1]->name);
       return FAILURE;
@@ -3899,7 +3899,7 @@ gfc_check_unpack (gfc_expr *vector, gfc_expr *mask, gfc_expr *field)
        if (! identical_dimen_shape (mask, i, field, i))
        {
          gfc_error ("'%s' and '%s' arguments of '%s' intrinsic at %L "
-                    "must have identical shape.", 
+                    "must have identical shape.",
                     gfc_current_intrinsic_arg[2]->name,
                     gfc_current_intrinsic_arg[1]->name, gfc_current_intrinsic,
                     &field->where);
index 3330cc8..5fa937e 100644 (file)
@@ -3704,7 +3704,8 @@ gfc_default_initializer (gfc_typespec *ts)
      types (otherwise we could use gfc_has_default_initializer()).  */
   for (comp = ts->u.derived->components; comp; comp = comp->next)
     if (comp->initializer || comp->attr.allocatable
-       || (comp->ts.type == BT_CLASS && CLASS_DATA (comp)->attr.allocatable))
+       || (comp->ts.type == BT_CLASS && CLASS_DATA (comp)
+           && CLASS_DATA (comp)->attr.allocatable))
       break;
 
   if (!comp)
@@ -4345,29 +4346,36 @@ gfc_is_simply_contiguous (gfc_expr *expr, bool strict)
    want to add arguments but with a NULL-expression.  */
 
 gfc_expr*
-gfc_build_intrinsic_call (const char* name, locus where, unsigned numarg, ...)
+gfc_build_intrinsic_call (gfc_namespace *ns, gfc_isym_id id, const char* name,
+                         locus where, unsigned numarg, ...)
 {
   gfc_expr* result;
   gfc_actual_arglist* atail;
   gfc_intrinsic_sym* isym;
   va_list ap;
   unsigned i;
+  const char *mangled_name = gfc_get_string (GFC_PREFIX ("%s"), name);
 
-  isym = gfc_find_function (name);
+  isym = gfc_intrinsic_function_by_id (id);
   gcc_assert (isym);
   
   result = gfc_get_expr ();
   result->expr_type = EXPR_FUNCTION;
   result->ts = isym->ts;
   result->where = where;
-  result->value.function.name = name;
+  result->value.function.name = mangled_name;
   result->value.function.isym = isym;
 
-  result->symtree = gfc_find_symtree (gfc_current_ns->sym_root, name);
+  gfc_get_sym_tree (mangled_name, ns, &result->symtree, false);
+  gfc_commit_symbol (result->symtree->n.sym);
   gcc_assert (result->symtree
              && (result->symtree->n.sym->attr.flavor == FL_PROCEDURE
                  || result->symtree->n.sym->attr.flavor == FL_UNKNOWN));
 
+  result->symtree->n.sym->intmod_sym_id = id;
+  result->symtree->n.sym->attr.flavor = FL_PROCEDURE;
+  result->symtree->n.sym->attr.intrinsic = 1;
+
   va_start (ap, numarg);
   atail = NULL;
   for (i = 0; i < numarg; ++i)
index 6199d89..0c96a82 100644 (file)
@@ -63,6 +63,15 @@ along with GCC; see the file COPYING3.  If not see
 #define PREFIX(x) "_gfortran_" x
 #define PREFIX_LEN 10
 
+/* A prefix for internal variables, which are not user-visible.  */
+#if !defined (NO_DOT_IN_LABEL)
+# define GFC_PREFIX(x) "_F." x
+#elif !defined (NO_DOLLAR_IN_LABEL)
+# define GFC_PREFIX(x) "_F$" x
+#else
+# define GFC_PREFIX(x) "_F_" x
+#endif
+
 #define BLANK_COMMON_NAME "__BLNK__"
 
 /* Macro to initialize an mstring structure.  */
@@ -2733,7 +2742,8 @@ int gfc_get_corank (gfc_expr *);
 bool gfc_has_ultimate_allocatable (gfc_expr *);
 bool gfc_has_ultimate_pointer (gfc_expr *);
 
-gfc_expr* gfc_build_intrinsic_call (const char*, locus, unsigned, ...);
+gfc_expr* gfc_build_intrinsic_call (gfc_namespace *, gfc_isym_id, const char*,
+                                   locus, unsigned, ...);
 gfc_try gfc_check_vardef_context (gfc_expr*, bool, const char*);
 
 
index ae6e8ce..9ba9455 100644 (file)
@@ -11759,6 +11759,8 @@ resolve_fl_derived0 (gfc_symbol *sym)
        {
          gfc_error ("Component '%s' with CLASS at %L must be allocatable "
                     "or pointer", c->name, &c->loc);
+         /* Prevent a recurrence of the error.  */
+         c->ts.type = BT_UNKNOWN;
          return FAILURE;
        }
 
index 5fe5d1d..57ffa1b 100644 (file)
@@ -3884,7 +3884,7 @@ gfc_simplify_matmul (gfc_expr *matrix_a, gfc_expr *matrix_b)
   if (matrix_a->rank == 1 && matrix_b->rank == 2)
     {
       result_rows = 1;
-      result_columns = mpz_get_si (matrix_b->shape[0]);
+      result_columns = mpz_get_si (matrix_b->shape[1]);
       stride_a = 1;
       stride_b = mpz_get_si (matrix_b->shape[0]);
 
@@ -3894,7 +3894,7 @@ gfc_simplify_matmul (gfc_expr *matrix_a, gfc_expr *matrix_b)
     }
   else if (matrix_a->rank == 2 && matrix_b->rank == 1)
     {
-      result_rows = mpz_get_si (matrix_b->shape[0]);
+      result_rows = mpz_get_si (matrix_a->shape[0]);
       result_columns = 1;
       stride_a = mpz_get_si (matrix_a->shape[0]);
       stride_b = 1;
@@ -3907,7 +3907,7 @@ gfc_simplify_matmul (gfc_expr *matrix_a, gfc_expr *matrix_b)
     {
       result_rows = mpz_get_si (matrix_a->shape[0]);
       result_columns = mpz_get_si (matrix_b->shape[1]);
-      stride_a = mpz_get_si (matrix_a->shape[1]);
+      stride_a = mpz_get_si (matrix_a->shape[0]);
       stride_b = mpz_get_si (matrix_b->shape[0]);
 
       result->rank = 2;
@@ -5615,7 +5615,9 @@ gfc_simplify_size (gfc_expr *array, gfc_expr *dim, gfc_expr *kind)
       /* Otherwise, we build a new SIZE call.  This is hopefully at least
         simpler than the original one.  */
       if (!simplified)
-       simplified = gfc_build_intrinsic_call ("size", array->where, 3,
+       simplified = gfc_build_intrinsic_call (gfc_current_ns,
+                                              GFC_ISYM_SIZE, "size",
+                                              array->where, 3,
                                               gfc_copy_expr (replacement),
                                               gfc_copy_expr (dim),
                                               gfc_copy_expr (kind));
index c3e9934..c76cd11 100644 (file)
@@ -6560,7 +6560,7 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl,
              gfc_add_expr_to_block (&fnblock, tmp);
            }
 
-         if (c->attr.allocatable && c->attr.dimension)
+         if (c->attr.allocatable && c->attr.dimension && !c->attr.proc_pointer)
            {
              comp = fold_build3_loc (input_location, COMPONENT_REF, ctype,
                                      decl, cdecl, NULL_TREE);
@@ -6659,7 +6659,8 @@ structure_alloc_comps (gfc_symbol * der_type, tree decl,
                                  cdecl, NULL_TREE);
          dcmp = fold_convert (TREE_TYPE (comp), dcmp);
 
-         if (c->attr.allocatable && !cmp_has_alloc_comps)
+         if (c->attr.allocatable && !c->attr.proc_pointer
+             && !cmp_has_alloc_comps)
            {
              rank = c->as ? c->as->rank : 0;
              tmp = gfc_duplicate_allocatable (dcmp, comp, ctype, rank);
index 403aa30..1d55fbe 100644 (file)
@@ -4780,9 +4780,8 @@ gfc_conv_intrinsic_transfer (gfc_se * se, gfc_expr * expr)
       source = gfc_conv_descriptor_data_get (argse.expr);
       source_type = gfc_get_element_type (TREE_TYPE (argse.expr));
 
-      /* Repack the source if not a full variable array.  */
-      if (arg->expr->expr_type == EXPR_VARIABLE
-             && arg->expr->ref->u.ar.type != AR_FULL)
+      /* Repack the source if not simply contiguous.  */
+      if (!gfc_is_simply_contiguous (arg->expr, false))
        {
          tmp = gfc_build_addr_expr (NULL_TREE, argse.expr);
 
index 50cfc45..1af6de6 100644 (file)
@@ -3646,7 +3646,8 @@ optimize_compound_literals_in_ctor (tree orig_ctor)
 
          if (!TREE_ADDRESSABLE (value)
              && !TREE_ADDRESSABLE (decl)
-             && init)
+             && init
+             && TREE_CODE (init) == CONSTRUCTOR)
            newval = optimize_compound_literals_in_ctor (init);
        }
       if (newval == value)
index db2416f..5561487 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index 97e66d8..9afa594 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index 9577897..c3b726a 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-04-23  Peter Bergner  <bergner@vnet.ibm.com>
 
        Backport from mainline
index ebb0d4a..8069b69 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index 4075e05..a78a300 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index a2a580c..87b4983 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index f00424c..18fda08 100644 (file)
@@ -1,6 +1,6 @@
 /* Branch prediction routines for the GNU compiler.
    Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
-   Free Software Foundation, Inc.
+   2011, 2012, 2013 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -966,7 +966,8 @@ predict_loops (void)
          if (TREE_CODE (niter) == INTEGER_CST)
            {
              if (host_integerp (niter, 1)
-                 && compare_tree_int (niter, max-1) == -1)
+                 && max
+                 && compare_tree_int (niter, max - 1) == -1)
                nitercst = tree_low_cst (niter, 1) + 1;
              else
                nitercst = max;
@@ -988,6 +989,11 @@ predict_loops (void)
          else
            continue;
 
+         /* If the prediction for number of iterations is zero, do not
+            predict the exit edges.  */
+         if (nitercst == 0)
+           continue;
+
          probability = ((REG_BR_PROB_BASE + nitercst / 2) / nitercst);
          predict_edge (ex, predictor, probability);
        }
index 41440d8..38aaff6 100644 (file)
@@ -1857,8 +1857,12 @@ merge_expr (expr_t to, expr_t from, insn_t split_point)
   /* Make sure that speculative pattern is propagated into exprs that
      have non-speculative one.  This will provide us with consistent
      speculative bits and speculative patterns inside expr.  */
-  if (EXPR_SPEC_DONE_DS (to) == 0
-      && EXPR_SPEC_DONE_DS (from) != 0)
+  if ((EXPR_SPEC_DONE_DS (from) != 0
+       && EXPR_SPEC_DONE_DS (to) == 0)
+      /* Do likewise for volatile insns, so that we always retain
+        the may_trap_p bit on the resulting expression.  */
+      || (VINSN_MAY_TRAP_P (EXPR_VINSN (from))
+         && !VINSN_MAY_TRAP_P (EXPR_VINSN (to))))
     change_vinsn_in_expr (to, EXPR_VINSN (from));
 
   merge_expr_data (to, from, split_point);
@@ -3106,7 +3110,7 @@ has_dependence_note_reg_set (int regno)
          || reg_last->clobbers != NULL)
        *dsp = (*dsp & ~SPECULATIVE) | DEP_OUTPUT;
 
-      if (reg_last->uses)
+      if (reg_last->uses || reg_last->implicit_sets)
        *dsp = (*dsp & ~SPECULATIVE) | DEP_ANTI;
     }
 }
@@ -3126,7 +3130,7 @@ has_dependence_note_reg_clobber (int regno)
       if (reg_last->sets)
        *dsp = (*dsp & ~SPECULATIVE) | DEP_OUTPUT;
 
-      if (reg_last->uses)
+      if (reg_last->uses || reg_last->implicit_sets)
        *dsp = (*dsp & ~SPECULATIVE) | DEP_ANTI;
     }
 }
@@ -3146,7 +3150,7 @@ has_dependence_note_reg_use (int regno)
       if (reg_last->sets)
        *dsp = (*dsp & ~SPECULATIVE) | DEP_TRUE;
 
-      if (reg_last->clobbers)
+      if (reg_last->clobbers || reg_last->implicit_sets)
        *dsp = (*dsp & ~SPECULATIVE) | DEP_ANTI;
 
       /* Handle BE_IN_SPEC.  */
@@ -4876,7 +4880,7 @@ free_sched_pools (void)
 
   free_alloc_pool (sched_lists_pool);
   gcc_assert (succs_info_pool.top == -1);
-  for (i = 0; i < succs_info_pool.max_top; i++)
+  for (i = 0; i <= succs_info_pool.max_top; i++)
     {
       VEC_free (rtx, heap, succs_info_pool.stack[i].succs_ok);
       VEC_free (rtx, heap, succs_info_pool.stack[i].succs_other);
index d7e4d7b..bc390d5 100644 (file)
@@ -45,6 +45,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "rtlhooks-def.h"
 #include "output.h"
 #include "emit-rtl.h"
+#include "ira.h"
 
 #ifdef INSN_SCHEDULING
 #include "sel-sched-ir.h"
@@ -2124,6 +2125,61 @@ moving_insn_creates_bookkeeping_block_p (insn_t insn,
   return TRUE;
 }
 
+/* Return true when the conflict with newly created implicit clobbers
+   between EXPR and THROUGH_INSN is found because of renaming.  */
+static bool
+implicit_clobber_conflict_p (insn_t through_insn, expr_t expr)
+{
+  HARD_REG_SET temp;
+  rtx insn, reg, rhs, pat;
+  hard_reg_set_iterator hrsi;
+  unsigned regno;
+  bool valid;
+
+  /* Make a new pseudo register.  */
+  reg = gen_reg_rtx (GET_MODE (EXPR_LHS (expr)));
+  max_regno = max_reg_num ();
+  maybe_extend_reg_info_p ();
+
+  /* Validate a change and bail out early.  */
+  insn = EXPR_INSN_RTX (expr);
+  validate_change (insn, &SET_DEST (PATTERN (insn)), reg, true);
+  valid = verify_changes (0);
+  cancel_changes (0);
+  if (!valid)
+    {
+      if (sched_verbose >= 6)
+       sel_print ("implicit clobbers failed validation, ");
+      return true;
+    }
+
+  /* Make a new insn with it.  */
+  rhs = copy_rtx (VINSN_RHS (EXPR_VINSN (expr)));
+  pat = gen_rtx_SET (VOIDmode, reg, rhs);
+  start_sequence ();
+  insn = emit_insn (pat);
+  end_sequence ();
+
+  /* Calculate implicit clobbers.  */
+  extract_insn (insn);
+  preprocess_constraints ();
+  ira_implicitly_set_insn_hard_regs (&temp);
+  AND_COMPL_HARD_REG_SET (temp, ira_no_alloc_regs);
+
+  /* If any implicit clobber registers intersect with regular ones in
+     through_insn, we have a dependency and thus bail out.  */
+  EXECUTE_IF_SET_IN_HARD_REG_SET (temp, 0, regno, hrsi)
+    {
+      vinsn_t vi = INSN_VINSN (through_insn);
+      if (bitmap_bit_p (VINSN_REG_SETS (vi), regno)
+         || bitmap_bit_p (VINSN_REG_CLOBBERS (vi), regno)
+         || bitmap_bit_p (VINSN_REG_USES (vi), regno))
+       return true;
+    }
+
+  return false;
+}
+
 /* Modifies EXPR so it can be moved through the THROUGH_INSN,
    performing necessary transformations.  Record the type of transformation
    made in PTRANS_TYPE, when it is not NULL.  When INSIDE_INSN_GROUP,
@@ -2256,6 +2312,17 @@ moveup_expr (expr_t expr, insn_t through_insn, bool inside_insn_group,
       if (!enable_schedule_as_rhs_p || !EXPR_SEPARABLE_P (expr))
         return MOVEUP_EXPR_NULL;
 
+      /* When renaming a hard register to a pseudo before reload, extra
+        dependencies can occur from the implicit clobbers of the insn.
+        Filter out such cases here.  */
+      if (!reload_completed && REG_P (EXPR_LHS (expr))
+         && HARD_REGISTER_P (EXPR_LHS (expr))
+         && implicit_clobber_conflict_p (through_insn, expr))
+       {
+         if (sched_verbose >= 6)
+           sel_print ("implicit clobbers conflict detected, ");
+         return MOVEUP_EXPR_NULL;
+       }
       EXPR_TARGET_AVAILABLE (expr) = false;
       was_target_conflict = true;
       as_rhs = true;
index 42b1be6..743f72c 100644 (file)
@@ -188,7 +188,8 @@ avoid_constant_pool_reference (rtx x)
       /* If we're accessing the constant in a different mode than it was
          originally stored, attempt to fix that up via subreg simplifications.
          If that fails we have no choice but to return the original memory.  */
-      if (offset != 0 || cmode != GET_MODE (x))
+      if ((offset != 0 || cmode != GET_MODE (x))
+         && offset >= 0 && offset < GET_MODE_SIZE (cmode))
         {
           rtx tem = simplify_subreg (GET_MODE (x), c, cmode, offset);
           if (tem && CONSTANT_P (tem))
index c36dae8..90ae77a 100644 (file)
@@ -1,3 +1,151 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
+2013-04-04  Andrey Belevantsev  <abel@ispras.ru>
+
+       Backport from mainline
+       2012-11-09  Andrey Belevantsev  <abel@ispras.ru>
+       
+       PR rtl-optimization/54472
+       * gcc.dg/pr54472.c: New test.
+
+2013-04-04  Marek Polacek  <polacek@redhat.com>
+
+       Backported from mainline
+       2013-01-09  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/48189
+       * gcc.dg/pr48189.c: New test.
+
+2013-04-04  Tobias Burnus  <burnus@net-b.de>
+
+       Backport from mainline:
+       2013-03-29  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/56737
+       * testsuite/gfortran.dg/fmt_cache_3.f90: New.
+
+2013-04-04  Tobias Burnus  <burnus@net-b.de>
+
+       Backport from mainline:
+       2013-03-28  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/56735
+       * gfortran.dg/namelist_80.f90: New.
+
+2013-04-03  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2013-03-06  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/56539
+       * gcc.c-torture/compile/pr56539.c: New test.
+
+       2013-02-07  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/56239
+       * g++.dg/parse/pr56239.C: New test.
+
+       2013-01-25  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/56098
+       * gcc.dg/pr56098-1.c: New test.
+
+       2013-01-18  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/56015
+       * gfortran.dg/pr56015.f90: New test.
+
+       2012-10-08  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/54858
+       * g++.dg/template/pr54858.C: New test.
+
+       2012-09-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/54486
+       * c-c++-common/pr54486.c: New test.
+
+       2012-08-24  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/54363
+       * gcc.dg/pr54363.c: New test.
+
+       2012-05-03  Jakub Jelinek  <jakub@redhat.com>
+
+       PR debug/53174
+       * gcc.dg/pr53174.c: New test.
+
+       2012-03-01  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/52445
+       * gcc.dg/pr52445.c: New test.
+
+2013-04-03  Jakub Jelinek  <jakub@redhat.com>
+
+       * gcc.dg/pr45472.c: Remove copies.
+
+2013-04-01  Andrey Belevantsev  <abel@ispras.ru>
+
+       Backport from mainline
+       2013-02-27  Andrey Belevantsev  <abel@ispras.ru>
+       
+       PR middle-end/45472
+       * gcc.dg/pr45472.c: New test.
+
+2013-03-22  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/56560
+       * gcc.target/i386/pr56560.c: New file.
+
+2013-03-15  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/56615
+       * gfortran.dg/transfer_intrinsic_5.f90: New.
+
+2013-03-14  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/56403
+       * g++.dg/torture/pr56403.C: New test.
+
+2013-03-13  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/56575
+       * gfortran.dg/class_56.f90: New test.
+
+2013-03-10  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/55362
+       * gfortran.dg/intrinsic_size_4.f90 : New test.
+
+2013-02-23  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/56385
+       * gfortran.dg/proc_ptr_comp_37.f90: New.
+
+2013-02-15  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/56318
+       * gcc/testsuite/gfortran.dg/matmul_9.f90: New.
+
+2013-02-13  Tobias Burnus  <burnus@net-b.de>
+
+       Backported from mainline
+       2013-01-07  Tobias Burnus  <burnus@net-b.de>
+                   Uros Bizjak  <ubizjak@gmail.com>
+
+       PR fortran/55852
+       * gfortran.dg/intrinsic_size_3.f90: New.
+
+2013-02-11  Uros Bizjak  <ubizjak@gmail.com>
+
+       Backport from mainline
+       2013-02-11  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR rtl-optimization/56275
+       * gcc.dg/pr56275.c: New test.
+
 2013-02-03  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        Backport from trunk
        Backport from mainline
        2013-01-17  Martin Jambor  <mjambor@suse.cz>
 
-        PR tree-optimizations/55264
+       PR tree-optimizations/55264
        * g++.dg/ipa/pr55264.C: New test.
 
 2013-01-14  Janus Weil  <janus@gcc.gnu.org>
diff --git a/gcc/testsuite/c-c++-common/pr54486.c b/gcc/testsuite/c-c++-common/pr54486.c
new file mode 100644 (file)
index 0000000..e8125fc
--- /dev/null
@@ -0,0 +1,32 @@
+/* PR middle-end/54486 */
+/* { dg-do compile } */
+/* { dg-options "-Wformat" } */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+typedef __SIZE_TYPE__ size_t;
+extern int printf (const char *, ...);
+extern size_t strspn (const char *, const char *);
+extern size_t strcspn (const char *, const char *);
+extern size_t strlen (const char *);
+#ifdef __cplusplus
+}
+#endif
+
+void
+foo (void)
+{
+  printf ("%zu\n", strspn ("abc", "abcdefg"));
+  printf ("%zu\n", (size_t) strspn ("abc", "abcdefg"));
+  printf ("%zu\n", __builtin_strspn ("abc", "abcdefg"));
+  printf ("%zu\n", (size_t) __builtin_strspn ("abc", "abcdefg"));
+  printf ("%zu\n", strcspn ("abc", "abcdefg"));
+  printf ("%zu\n", (size_t) strcspn ("abc", "abcdefg"));
+  printf ("%zu\n", __builtin_strcspn ("abc", "abcdefg"));
+  printf ("%zu\n", (size_t) __builtin_strcspn ("abc", "abcdefg"));
+  printf ("%zu\n", strlen ("abc"));
+  printf ("%zu\n", (size_t) strlen ("abc"));
+  printf ("%zu\n", __builtin_strlen ("abc"));
+  printf ("%zu\n", (size_t) __builtin_strlen ("abc"));
+}
diff --git a/gcc/testsuite/g++.dg/parse/pr56239.C b/gcc/testsuite/g++.dg/parse/pr56239.C
new file mode 100644 (file)
index 0000000..08f7f68
--- /dev/null
@@ -0,0 +1,13 @@
+// PR c++/56239
+// { dg-do compile }
+
+struct S
+{
+  int operator () () { return 0; }
+};
+
+int
+main ()
+{
+  return (S ()) ();
+}
diff --git a/gcc/testsuite/g++.dg/template/pr54858.C b/gcc/testsuite/g++.dg/template/pr54858.C
new file mode 100644 (file)
index 0000000..51610ad
--- /dev/null
@@ -0,0 +1,21 @@
+// PR c++/54858
+// { dg-do compile }
+
+template <int> struct A {};
+template <typename T, T *> struct B {};
+template <typename D> struct C
+{
+  A<0> c0; B<A<0>, &C::c0> d0; // { dg-error "could not convert template argument" }
+  A<0> c1; B<A<0>, &C::c1> d1; // { dg-error "could not convert template argument" }
+  A<0> c2; B<A<0>, &C::c2> d2; // { dg-error "could not convert template argument" }
+  A<0> c3; B<A<0>, &C::c3> d3; // { dg-error "could not convert template argument" }
+  A<0> c4; B<A<0>, &C::c4> d4; // { dg-error "could not convert template argument" }
+  A<0> c5; B<A<0>, &C::c5> d5; // { dg-error "could not convert template argument" }
+  A<0> c6; B<A<0>, &C::c6> d6; // { dg-error "could not convert template argument" }
+  A<0> c7; B<A<0>, &C::c7> d7; // { dg-error "could not convert template argument" }
+  A<0> c8; B<A<0>, &C::c8> d8; // { dg-error "could not convert template argument" }
+  A<0> c9; B<A<0>, &C::c9> d9; // { dg-error "could not convert template argument" }
+  A<0> ca; B<A<0>, &C::ca> da; // { dg-error "could not convert template argument" }
+  A<0> cb; B<A<0>, &C::cb> db; // { dg-error "could not convert template argument" }
+};
+C<int> e;
diff --git a/gcc/testsuite/g++.dg/template/ptrmem23.C b/gcc/testsuite/g++.dg/template/ptrmem23.C
new file mode 100644 (file)
index 0000000..28c0a63
--- /dev/null
@@ -0,0 +1,22 @@
+// PR c++/56247
+
+struct Base {
+    void method() {}
+};
+
+typedef void (Base::*MemPtr)();
+
+// Template with a member function pointer "non-type parameter".
+template<MemPtr func>
+struct Wrapper {};
+
+template<class C>
+struct Child : public Base {
+    // Templated derived class instantiates the Wrapper with the same parameter
+    // in two different virtual methods.
+    void foo() { typedef Wrapper<&Base::method> W; }
+    void bar() { typedef Wrapper<&Base::method> W; }
+};
+
+// Instantiate Child with some type.
+template class Child<int>;
diff --git a/gcc/testsuite/g++.dg/torture/pr56403.C b/gcc/testsuite/g++.dg/torture/pr56403.C
new file mode 100644 (file)
index 0000000..27b6eeb
--- /dev/null
@@ -0,0 +1,12 @@
+// PR c++/56403
+// { dg-do compile }
+
+#include <stdarg.h>
+
+struct S { va_list err_args; };
+
+void *
+foo ()
+{
+  return new S ();
+}
index e284d73..363ea17 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr56539.c b/gcc/testsuite/gcc.c-torture/compile/pr56539.c
new file mode 100644 (file)
index 0000000..0fba96f
--- /dev/null
@@ -0,0 +1,7 @@
+/* PR tree-optimization/56539 */
+
+short
+foo (const char *x, unsigned y)
+{
+  return y > 1 ? (x[y - 1] - '0') + 10 * foo (x, y - 1) : (*x - '0');
+}
diff --git a/gcc/testsuite/gcc.dg/pr45472.c b/gcc/testsuite/gcc.dg/pr45472.c
new file mode 100644 (file)
index 0000000..573e83d
--- /dev/null
@@ -0,0 +1,21 @@
+/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
+/* { dg-options "-O -fschedule-insns2 -fselective-scheduling2" } */
+
+struct S
+{
+  volatile long vl;
+  int i;
+};
+struct S s1, s2;
+
+void
+foo (int j, int c)
+{
+  int i;
+  for (i = 0; i <= j; i++)
+    {
+      if (c)
+       s2.vl += s1.vl;
+      s1 = s2;
+    }
+}
diff --git a/gcc/testsuite/gcc.dg/pr48189.c b/gcc/testsuite/gcc.dg/pr48189.c
new file mode 100644 (file)
index 0000000..86b995d
--- /dev/null
@@ -0,0 +1,13 @@
+/* PR tree-optimization/48189 */
+/* { dg-do compile } */
+/* { dg-options "-O --param max-predicted-iterations=0" } */
+
+struct S { int s[8]; };
+  
+void
+foo (int *x, struct S *y)
+{
+  int i;
+  for (i = 0; y[i].s[i]; i++)
+    *x++ = y[i].s[i];
+}
diff --git a/gcc/testsuite/gcc.dg/pr52445.c b/gcc/testsuite/gcc.dg/pr52445.c
new file mode 100644 (file)
index 0000000..0977821
--- /dev/null
@@ -0,0 +1,15 @@
+/* PR tree-optimization/52445 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftree-cselim -fdump-tree-cselim" } */
+
+void
+foo (char *buf, unsigned long len)
+{
+  buf[0] = '\n';
+  if (len > 1)
+    buf[1] = '\0';     /* We can't cselim "optimize" this, while
+                          buf[0] doesn't trap, buf[1] could.  */
+}
+
+/* { dg-final { scan-tree-dump-not "cstore\." "cselim" } } */
+/* { dg-final { cleanup-tree-dump "cselim" } } */
diff --git a/gcc/testsuite/gcc.dg/pr53174.c b/gcc/testsuite/gcc.dg/pr53174.c
new file mode 100644 (file)
index 0000000..37c9390
--- /dev/null
@@ -0,0 +1,67 @@
+/* PR debug/53174 */
+/* { dg-do compile } */
+/* { dg-options "-Ofast -g" } */
+
+int w, h;
+
+void
+bar (float (*x)[4], int y, int z)
+{
+  int a, b, c, d, e, f, g;
+
+  a = 2;
+  b = 2;
+  c = 274;
+  d = 274;
+  if (!z)
+    a = 12;
+  if (!y)
+    b = 12;
+  if (z + 266 >= h - 2)
+    c = 8 + h - z;
+  if (y + 266 >= w - 2)
+    d = 8 + w - y;
+  for (e = a; e < c; e++)
+    for (f = b, g = e * 276 + f; f < d; f++, g++)
+      {
+       float (*h)[4] = x + (g - 277);
+       float k = (*h)[0];
+       float l = (*h)[1];
+       float m = (*h)[2];
+       h++;
+       k += (*h)[0];
+       l += (*h)[1];
+       m += (*h)[2];
+       h++;
+       k += (*h)[0];
+       l += (*h)[1];
+       m += (*h)[2];
+       h += 274;
+       k += (*h)[0];
+       l += (*h)[1];
+       m += (*h)[2];
+       h += 2;
+       k += (*h)[0];
+       l += (*h)[1];
+       m += (*h)[2];
+       h += 274;
+       k += (*h)[0];
+       l += (*h)[1];
+       m += (*h)[2];
+       h++;
+       k += (*h)[0];
+       l += (*h)[1];
+       m += (*h)[2];
+       h++;
+       k += (*h)[0];
+       l += (*h)[1];
+       m += (*h)[2];
+       k *= 0.125f;
+       l *= 0.125f;
+       m *= 0.125f;
+       k = k + (x[g][1] - l);
+       m = m + (x[g][1] - l);
+       x[g][0] = k;
+       x[g][2] = m;
+      }
+}
diff --git a/gcc/testsuite/gcc.dg/pr54363.c b/gcc/testsuite/gcc.dg/pr54363.c
new file mode 100644 (file)
index 0000000..aea0f90
--- /dev/null
@@ -0,0 +1,12 @@
+/* PR c/54363 */
+/* { dg-do compile } */
+/* { dg-options "-std=gnu99" } */
+
+struct S { char **a; };
+
+void
+test (void)
+{
+  struct S b = { .a = (char **) { "a", "b" } }; /* { dg-warning "(initialization|excess elements)" } */
+  struct S c = { .a = (char *[]) { "a", "b" } };
+}
diff --git a/gcc/testsuite/gcc.dg/pr54472.c b/gcc/testsuite/gcc.dg/pr54472.c
new file mode 100644 (file)
index 0000000..9395203
--- /dev/null
@@ -0,0 +1,9 @@
+/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
+/* { dg-options "-O -fschedule-insns -fselective-scheduling" } */
+
+int main ()
+{
+  int a[3][3][3];
+  __builtin_memset (a, 0, sizeof a);
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.dg/pr56098-1.c b/gcc/testsuite/gcc.dg/pr56098-1.c
new file mode 100644 (file)
index 0000000..c3b081a
--- /dev/null
@@ -0,0 +1,16 @@
+/* PR tree-optimization/56098 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-optimized" } */
+
+volatile int *p;
+
+void
+foo (int x)
+{
+  *p = 1;
+  if (x)
+    *p = 2;
+}
+
+/* { dg-final { scan-tree-dump-not "=\[^\n\r]*\\*p" "optimized" } } */
+/* { dg-final { cleanup-tree-dump "optimized" } } */
diff --git a/gcc/testsuite/gcc.dg/pr56275.c b/gcc/testsuite/gcc.dg/pr56275.c
new file mode 100644 (file)
index 0000000..fc9c331
--- /dev/null
@@ -0,0 +1,12 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+/* { dg-options "-O2 -mno-sse" { target { i?86-*-* x86_64-*-* } } } */
+
+typedef long long v2tw __attribute__ ((vector_size (2 * sizeof (long long))));
+
+void tiger_block_v2 (long long in1, v2tw *res)
+{
+  v2tw i1 = { in1, in1 };
+
+  *res = i1 << 1;
+}
diff --git a/gcc/testsuite/gcc.target/i386/pr56560.c b/gcc/testsuite/gcc.target/i386/pr56560.c
new file mode 100644 (file)
index 0000000..5417cbd
--- /dev/null
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mavx -mvzeroupper -dp" } */
+
+extern void abort (void);
+
+typedef double vec_t __attribute__((vector_size(32)));
+
+struct S { int i1; int i2; int i3; };
+
+extern int bar (vec_t, int, int, int, int, int, struct S);
+
+void foo (vec_t v, struct S s)
+{
+  int i = bar (v, 1, 2, 3, 4, 5, s);
+  if (i == 0)
+    abort ();
+}
+
+/* { dg-final { scan-assembler-not "avx_vzeroupper" } } */
diff --git a/gcc/testsuite/gfortran.dg/fmt_cache_3.f90 b/gcc/testsuite/gfortran.dg/fmt_cache_3.f90
new file mode 100644 (file)
index 0000000..ec8e1b3
--- /dev/null
@@ -0,0 +1,80 @@
+! { dg-do run }
+!
+! PR fortran/56737
+!
+! Contributed by Jonathan Hogg
+!
+module hsl_mc73_single
+   implicit none
+   integer, parameter, private :: wp = kind(0.0)
+contains
+   subroutine mc73_fiedler(n,lirn,irn,ip,list)
+      integer,  intent (in) :: n
+      integer,  intent (in) :: lirn
+      integer,  intent (in) :: irn(*)
+      integer,  intent (in) :: ip(*)
+      integer, intent (out) :: list(*)
+
+      integer :: icntl(10)
+
+      call fiedler_graph(icntl)
+   end subroutine mc73_fiedler
+
+   subroutine mc73_order
+      integer :: icntl(10)
+
+      call fiedler_graph(icntl)
+   end subroutine mc73_order
+
+   subroutine fiedler_graph(icntl)
+      integer,  intent (in) :: icntl(10)
+
+      real (kind = wp)  :: tol
+      real (kind = wp)  :: tol1
+      real (kind = wp)  :: rtol
+
+      call multilevel_eig(tol,tol1,rtol,icntl)
+   end subroutine fiedler_graph
+
+   subroutine multilevel_eig(tol,tol1,rtol,icntl)
+      real (kind = wp), intent (in) :: tol,tol1,rtol
+      integer,  intent(in) :: icntl(10)
+
+      call level_print(6,'end of level ',1)
+   end subroutine multilevel_eig
+
+   subroutine level_print(mp,title1,level)
+      character (len = *), intent(in) :: title1
+      integer,  intent(in) :: mp,level
+      character(len=80) fmt
+      integer :: char_len1,char_len2
+
+      char_len1=len_trim(title1)
+
+      write (fmt,"('(',i4,'(1H ),6h===== ,a',i4,',i4,6h =====)')") &
+           level*3, char_len1
+!      print *, "fmt = ", fmt
+!      print *, "title1= ", title1
+!      print *, "level = ", level
+      write (66,fmt) title1,level
+   end subroutine level_print
+end module hsl_mc73_single
+
+program test
+   use hsl_mc73_single
+   implicit none
+   character(len=200) :: str(2)
+   integer, parameter :: wp = kind(0.0)
+
+   integer :: n, lirn
+   integer :: irn(1), ip(1), list(1)
+
+   str = ""
+   open (66, status='scratch')
+   call mc73_order
+   call mc73_fiedler(n,lirn,irn,ip,list)
+   rewind (66)
+   read (66, '(a)') str
+   close (66)
+   if (any (str /= "   ===== end of level   1 =====")) call abort()
+end program test
diff --git a/gcc/testsuite/gfortran.dg/intrinsic_size_3.f90 b/gcc/testsuite/gfortran.dg/intrinsic_size_3.f90
new file mode 100644 (file)
index 0000000..5856509
--- /dev/null
@@ -0,0 +1,26 @@
+! { dg-do compile }
+! { dg-options "-fdump-tree-original" }
+!
+! PR fortran/55852
+!
+! Contributed by A. Kasahara
+!
+program bug
+  implicit none
+
+  Real, allocatable:: a(:)
+  integer(2) :: iszs
+
+  allocate(a(1:3))
+
+  iszs = ubound((a), 1)! Was ICEing
+!  print*, ubound((a), 1) ! Was ICEing
+! print*, ubound(a, 1)   ! OK
+! print*, lbound((a), 1) ! OK
+! print*, lbound(a, 1)   ! OK
+
+  stop
+end program bug
+
+! { dg-final { scan-tree-dump-times "iszs = \\(integer\\(kind=2\\)\\) MAX_EXPR <\\(D.\[0-9\]+->dim.0..ubound - D.\[0-9\]+->dim.0..lbound\\) \\+ 1, 0>;" 1 "original" } }
+! { dg-final { cleanup-tree-dump "original" } }
diff --git a/gcc/testsuite/gfortran.dg/intrinsic_size_4.f90 b/gcc/testsuite/gfortran.dg/intrinsic_size_4.f90
new file mode 100644 (file)
index 0000000..6d8e1c0
--- /dev/null
@@ -0,0 +1,18 @@
+! { dg-do compile }
+! Test the fix for PR55362; the error below was missed and an ICE ensued.
+!
+! ! Contributed by Dominique d'Humieres  <dominiq@lps.ens.fr>
+!
+program ice_test
+  implicit none
+  write(*,*) 'message: ', &
+             size(Error_Msg),Error_Msg()     ! { dg-error "must be an array" }
+  write(*,*) 'message: ', &
+             size(Error_Msg ()),Error_Msg()  ! OK of course
+contains
+  function Error_Msg() result(ErrorMsg)
+    character, dimension(:), pointer :: ErrorMsg
+    character, dimension(1), target :: str = '!'
+    ErrorMsg => str
+  end function Error_Msg
+end program ice_test
diff --git a/gcc/testsuite/gfortran.dg/matmul_9.f90 b/gcc/testsuite/gfortran.dg/matmul_9.f90
new file mode 100644 (file)
index 0000000..bf2a299
--- /dev/null
@@ -0,0 +1,47 @@
+! { dg-do run }
+! { dg-options "-fdump-tree-original" }
+!
+! PR fortran/56318
+!
+! Contributed by Alberto Luaces
+!
+SUBROUTINE mass_matrix        
+  DOUBLE PRECISION,PARAMETER::m1=1.d0
+  DOUBLE PRECISION,DIMENSION(3,2),PARAMETER::A1=reshape([1.d0,0.d0, 0.d0, &
+       0.d0,1.d0, 0.d0],[3,2])
+  DOUBLE PRECISION,DIMENSION(2,2),PARAMETER::Mel=reshape([1.d0/3.d0, 0.d0, &
+       0.d0, 1.d0/3.d0],[2,2])
+
+  DOUBLE PRECISION,DIMENSION(3,3)::MM1
+
+  MM1=m1*matmul(A1,matmul(Mel,transpose(A1)))
+  !print '(3f8.3)', MM1
+  if (any (abs (MM1 &
+                - reshape ([1.d0/3.d0, 0.d0,      0.d0,  &
+                            0.d0,      1.d0/3.d0, 0.d0,  &
+                            0.d0,      0.d0,      0.d0], &
+                           [3,3])) > epsilon(1.0d0))) &
+    call abort ()
+END SUBROUTINE mass_matrix
+
+program name
+  implicit none
+  integer, parameter :: A(3,2) = reshape([1,2,3,4,5,6],[3,2])
+  integer, parameter :: B(2,3) = reshape([3,17,23,31,43,71],[2,3])
+  integer, parameter :: C(3)   = [-5,-7,-21]
+  integer, parameter :: m1 = 1
+
+!  print *, matmul(B,C)
+   if (any (matmul(B,C) /= [-1079, -1793])) call abort()
+!  print *, matmul(C,A)
+   if (any (matmul(C,A) /= [-82, -181])) call abort()
+!  print '(3i5)', m1*matmul(A,B)
+  if (any (m1*matmul(A,B) /= reshape([71,91,111, 147,201,255, 327,441,555],&
+                                     [3,3]))) &
+     call abort()
+  call mass_matrix
+end program name
+
+! { dg-final { scan-tree-dump-times "matmul" 0 "original" } }
+! { dg-final { cleanup-tree-dump "original" } }
+
diff --git a/gcc/testsuite/gfortran.dg/namelist_80.f90 b/gcc/testsuite/gfortran.dg/namelist_80.f90
new file mode 100644 (file)
index 0000000..1961b11
--- /dev/null
@@ -0,0 +1,27 @@
+! { dg-do run }
+!
+! PR fortran/56735
+!
+! Contributed by Adam Williams
+!
+        PROGRAM TEST
+        INTEGER int1,int2,int3
+        NAMELIST /temp/ int1,int2,int3
+
+        int1 = -1; int2 = -2; int3 = -3
+
+        OPEN (53, STATUS='scratch')
+        WRITE (53, '(a)') ' ?'
+        WRITE (53, '(a)')
+        WRITE (53, '(a)') '$temp'
+        WRITE (53, '(a)') ' int1=1'
+        WRITE (53, '(a)') ' int2=2'
+        WRITE (53, '(a)') ' int3=3'
+        WRITE (53, '(a)') '$END'
+        REWIND(53)
+
+        READ (53, temp)
+        CLOSE (53)
+
+        if (int1 /= 1 .or. int2 /= 2 .or. int3 /= 3) call abort()
+        END PROGRAM
diff --git a/gcc/testsuite/gfortran.dg/pr56015.f90 b/gcc/testsuite/gfortran.dg/pr56015.f90
new file mode 100644 (file)
index 0000000..a615f66
--- /dev/null
@@ -0,0 +1,16 @@
+! PR middle-end/56015
+! { dg-do run }
+! { dg-options "-O3 -ffast-math -fno-inline" }
+
+program pr56015
+  implicit none
+  complex*16 p(10)
+  p(:) = (0.1d0, 0.2d0)
+  p(:) = (0.0d0, 1.0d0) * p(:)
+  call foo (p)
+contains
+  subroutine foo (p)
+    complex*16 p(10)
+    if (any (p .ne. (-0.2d0, 0.1d0))) call abort
+  end subroutine
+end program pr56015
diff --git a/gcc/testsuite/gfortran.dg/proc_ptr_comp_37.f90 b/gcc/testsuite/gfortran.dg/proc_ptr_comp_37.f90
new file mode 100644 (file)
index 0000000..9695b96
--- /dev/null
@@ -0,0 +1,25 @@
+! { dg-do compile }
+!
+! PR 56385: [4.6/4.7/4.8 Regression] [OOP] ICE with allocatable function result in a procedure-pointer component
+!
+! Contributed by Vladimir Fuka <vladimir.fuka@gmail.com>
+
+  implicit none
+  
+  type :: TGeometricShape
+  end type
+
+  type :: TVolumeSourceBody
+    class(TGeometricShape), allocatable :: GeometricShape
+    procedure(scalar_flux_interface), pointer :: get_scalar_flux
+  end type
+
+  abstract interface
+    function scalar_flux_interface(self) result(res)
+      import
+      real, allocatable :: res(:)
+      class(TVolumeSourceBody), intent(in) :: self
+    end function
+  end interface
+
+end
diff --git a/gcc/testsuite/gfortran.dg/transfer_intrinsic_5.f90 b/gcc/testsuite/gfortran.dg/transfer_intrinsic_5.f90
new file mode 100644 (file)
index 0000000..47be585
--- /dev/null
@@ -0,0 +1,50 @@
+! { dg-do run }
+!
+! PR fortran/56615
+!
+! Contributed by  Harald Anlauf
+!
+!
+program gfcbug
+  implicit none
+  integer, parameter             :: n = 8
+  integer                        :: i
+  character(len=1), dimension(n) :: a, b
+  character(len=n)               :: s, t
+  character(len=n/2)             :: u
+
+  do i = 1, n
+     a(i) = achar (i-1 + iachar("a"))
+  end do
+!  print *, "# Forward:"
+!  print *, "a=", a
+  s = transfer (a, s)
+!  print *, "s=", s
+  call cmp (a, s)
+!  print *, "  stride = +2:"
+  do i = 1, n/2
+     u(i:i) = a(2*i-1)
+  end do
+!  print *, "u=", u
+  call cmp (a(1:n:2), u)
+!  print *
+!  print *, "# Backward:"
+  b = a(n:1:-1)
+!  print *, "b=", b
+  t = transfer (b, t)
+!  print *, "t=", t
+  call cmp (b, t)
+!  print *, "  stride = -1:"
+  call cmp (a(n:1:-1), t)
+contains
+  subroutine cmp (b, s)
+    character(len=1), dimension(:), intent(in) :: b
+    character(len=*),               intent(in) :: s
+    character(len=size(b))                     :: c
+    c = transfer (b, c)
+    if (c /= s) then
+      print *, "c=", c, "    ", merge ("  ok","BUG!", c == s)
+      call abort ()
+    end if
+  end subroutine cmp
+end program gfcbug
index ec2b438..58ac763 100644 (file)
@@ -1400,6 +1400,36 @@ expand_complex_comparison (gimple_stmt_iterator *gsi, tree ar, tree ai,
   update_stmt (stmt);
 }
 
+/* Expand inline asm that sets some complex SSA_NAMEs.  */
+
+static void
+expand_complex_asm (gimple_stmt_iterator *gsi)
+{
+  gimple stmt = gsi_stmt (*gsi);
+  unsigned int i;
+
+  for (i = 0; i < gimple_asm_noutputs (stmt); ++i)
+    {
+      tree link = gimple_asm_output_op (stmt, i);
+      tree op = TREE_VALUE (link);
+      if (TREE_CODE (op) == SSA_NAME
+         && TREE_CODE (TREE_TYPE (op)) == COMPLEX_TYPE)
+       {
+         tree type = TREE_TYPE (op);
+         tree inner_type = TREE_TYPE (type);
+         tree r = build1 (REALPART_EXPR, inner_type, op);
+         tree i = build1 (IMAGPART_EXPR, inner_type, op);
+         gimple_seq list = set_component_ssa_name (op, false, r);
+
+         if (list)
+           gsi_insert_seq_after (gsi, list, GSI_CONTINUE_LINKING);
+
+         list = set_component_ssa_name (op, true, i);
+         if (list)
+           gsi_insert_seq_after (gsi, list, GSI_CONTINUE_LINKING);
+       }
+    }
+}
 
 /* Process one statement.  If we identify a complex operation, expand it.  */
 
@@ -1412,6 +1442,12 @@ expand_complex_operations_1 (gimple_stmt_iterator *gsi)
   complex_lattice_t al, bl;
   enum tree_code code;
 
+  if (gimple_code (stmt) == GIMPLE_ASM)
+    {
+      expand_complex_asm (gsi);
+      return;
+    }
+
   lhs = gimple_get_lhs (stmt);
   if (!lhs && gimple_code (stmt) != GIMPLE_COND)
     return;
index cebaf07..f33a0ca 100644 (file)
@@ -1950,6 +1950,7 @@ static tree
 convert_tramp_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p,
                              struct walk_stmt_info *wi)
 {
+  struct nesting_info *info = (struct nesting_info *) wi->info;
   gimple stmt = gsi_stmt (*gsi);
 
   switch (gimple_code (stmt))
@@ -1962,16 +1963,33 @@ convert_tramp_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p,
        for (i = 0; i < nargs; i++)
          walk_tree (gimple_call_arg_ptr (stmt, i), convert_tramp_reference_op,
                     wi, NULL);
+       break;
+      }
 
-       *handled_ops_p = true;
-       return NULL_TREE;
+    case GIMPLE_OMP_PARALLEL:
+    case GIMPLE_OMP_TASK:
+      {
+       tree save_local_var_chain;
+        walk_gimple_op (stmt, convert_tramp_reference_op, wi);
+       save_local_var_chain = info->new_local_var_chain;
+       info->new_local_var_chain = NULL;
+        walk_body (convert_tramp_reference_stmt, convert_tramp_reference_op,
+                  info, gimple_omp_body (stmt));
+       if (info->new_local_var_chain)
+         declare_vars (info->new_local_var_chain,
+                       gimple_seq_first_stmt (gimple_omp_body (stmt)),
+                       false);
+       info->new_local_var_chain = save_local_var_chain;
       }
+      break;
 
     default:
+      *handled_ops_p = false;
+      return NULL_TREE;
       break;
     }
 
-  *handled_ops_p = false;
+  *handled_ops_p = true;
   return NULL_TREE;
 }
 
index 2dbd07d..e9e20f9 100644 (file)
@@ -1693,6 +1693,7 @@ remove_stmt (gimple stmt)
     {
       name = PHI_RESULT (stmt);
       next = single_nonlooparound_use (name);
+      reset_debug_uses (stmt);
       psi = gsi_for_stmt (stmt);
       remove_phi_node (&psi, true);
 
@@ -1714,6 +1715,7 @@ remove_stmt (gimple stmt)
       gcc_assert (TREE_CODE (name) == SSA_NAME);
 
       next = single_nonlooparound_use (name);
+      reset_debug_uses (stmt);
 
       mark_virtual_ops_for_renaming (stmt);
       gsi_remove (&bsi, true);
index d197bdd..37f2dbb 100644 (file)
@@ -1050,9 +1050,10 @@ abs_replacement (basic_block cond_bb, basic_block middle_bb,
    same accesses.  */
 struct name_to_bb
 {
-  tree ssa_name;
+  unsigned int ssa_name_ver;
+  bool store;
+  HOST_WIDE_INT offset, size;
   basic_block bb;
-  unsigned store : 1;
 };
 
 /* The hash table for remembering what we've seen.  */
@@ -1061,23 +1062,26 @@ static htab_t seen_ssa_names;
 /* The set of MEM_REFs which can't trap.  */
 static struct pointer_set_t *nontrap_set;
 
-/* The hash function, based on the pointer to the pointer SSA_NAME.  */
+/* The hash function.  */
 static hashval_t
 name_to_bb_hash (const void *p)
 {
-  const_tree n = ((const struct name_to_bb *)p)->ssa_name;
-  return htab_hash_pointer (n) ^ ((const struct name_to_bb *)p)->store;
+  const struct name_to_bb *n = (const struct name_to_bb *) p;
+  return n->ssa_name_ver ^ (((hashval_t) n->store) << 31)
+         ^ (n->offset << 6) ^ (n->size << 3);
 }
 
-/* The equality function of *P1 and *P2.  SSA_NAMEs are shared, so
-   it's enough to simply compare them for equality.  */
+/* The equality function of *P1 and *P2.  */
 static int
 name_to_bb_eq (const void *p1, const void *p2)
 {
   const struct name_to_bb *n1 = (const struct name_to_bb *)p1;
   const struct name_to_bb *n2 = (const struct name_to_bb *)p2;
 
-  return n1->ssa_name == n2->ssa_name && n1->store == n2->store;
+  return n1->ssa_name_ver == n2->ssa_name_ver
+         && n1->store == n2->store
+         && n1->offset == n2->offset
+         && n1->size == n2->size;
 }
 
 /* We see the expression EXP in basic block BB.  If it's an interesting
@@ -1089,8 +1093,12 @@ static void
 add_or_mark_expr (basic_block bb, tree exp,
                  struct pointer_set_t *nontrap, bool store)
 {
+  HOST_WIDE_INT size;
+
   if (TREE_CODE (exp) == MEM_REF
-      && TREE_CODE (TREE_OPERAND (exp, 0)) == SSA_NAME)
+      && TREE_CODE (TREE_OPERAND (exp, 0)) == SSA_NAME
+      && host_integerp (TREE_OPERAND (exp, 1), 0)
+      && (size = int_size_in_bytes (TREE_TYPE (exp))) > 0)
     {
       tree name = TREE_OPERAND (exp, 0);
       struct name_to_bb map;
@@ -1100,9 +1108,12 @@ add_or_mark_expr (basic_block bb, tree exp,
 
       /* Try to find the last seen MEM_REF through the same
          SSA_NAME, which can trap.  */
-      map.ssa_name = name;
+      map.ssa_name_ver = SSA_NAME_VERSION (name);
       map.bb = 0;
       map.store = store;
+      map.offset = tree_low_cst (TREE_OPERAND (exp, 1), 0);
+      map.size = size;
+
       slot = htab_find_slot (seen_ssa_names, &map, INSERT);
       n2bb = (struct name_to_bb *) *slot;
       if (n2bb)
@@ -1125,9 +1136,11 @@ add_or_mark_expr (basic_block bb, tree exp,
          else
            {
              n2bb = XNEW (struct name_to_bb);
-             n2bb->ssa_name = name;
+             n2bb->ssa_name_ver = SSA_NAME_VERSION (name);
              n2bb->bb = bb;
              n2bb->store = store;
+             n2bb->offset = map.offset;
+             n2bb->size = size;
              *slot = n2bb;
            }
        }
@@ -1147,13 +1160,10 @@ nt_init_block (struct dom_walk_data *data ATTRIBUTE_UNUSED, basic_block bb)
     {
       gimple stmt = gsi_stmt (gsi);
 
-      if (is_gimple_assign (stmt))
+      if (gimple_assign_single_p (stmt) && !gimple_has_volatile_ops (stmt))
        {
          add_or_mark_expr (bb, gimple_assign_lhs (stmt), nontrap_set, true);
          add_or_mark_expr (bb, gimple_assign_rhs1 (stmt), nontrap_set, false);
-         if (get_gimple_rhs_num_ops (gimple_assign_rhs_code (stmt)) > 1)
-           add_or_mark_expr (bb, gimple_assign_rhs2 (stmt), nontrap_set,
-                             false);
        }
     }
 }
@@ -1227,7 +1237,8 @@ cond_store_replacement (basic_block middle_bb, basic_block join_bb,
 
   /* Check if middle_bb contains of only one store.  */
   if (!assign
-      || !gimple_assign_single_p (assign))
+      || !gimple_assign_single_p (assign)
+      || gimple_has_volatile_ops (assign))
     return false;
 
   locus = gimple_location (assign);
@@ -1323,8 +1334,10 @@ cond_if_else_store_replacement (basic_block then_bb, basic_block else_bb,
   /* Check if then_bb and else_bb contain only one store each.  */
   if (then_assign == NULL
       || !gimple_assign_single_p (then_assign)
+      || gimple_has_volatile_ops (then_assign)
       || else_assign == NULL
-      || !gimple_assign_single_p (else_assign))
+      || !gimple_assign_single_p (else_assign)
+      || gimple_has_volatile_ops (else_assign))
     return false;
 
   lhs = gimple_assign_lhs (then_assign);
index e50ecc2..1fc3cd6 100644 (file)
@@ -594,8 +594,8 @@ add_successor_phi_arg (edge e, tree var, tree phi_arg)
 }
 
 /* Creates a GIMPLE statement which computes the operation specified by
-   CODE, OP0 and OP1 to a new variable with name LABEL and inserts the
-   statement in the position specified by GSI and UPDATE.  Returns the
+   CODE, ACC and OP1 to a new variable with name LABEL and inserts the
+   statement in the position specified by GSI.  Returns the
    tree node of the statement's result.  */
 
 static tree
@@ -620,7 +620,7 @@ adjust_return_value_with_ops (enum tree_code code, const char *label,
                                            fold_convert (TREE_TYPE (op1), acc),
                                            op1));
       rhs = force_gimple_operand_gsi (&gsi, rhs,
-                                     false, NULL, true, GSI_CONTINUE_LINKING);
+                                     false, NULL, true, GSI_SAME_STMT);
       stmt = gimple_build_assign (NULL_TREE, rhs);
     }
 
index 4a42d54..03400c4 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index 2784152..0991fc5 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2013-01-30  Kai Tietz  <ktietz@redhat.com>
 
        Merged from trunk.
index 27625ba..d2b2318 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index 3ac329b..d1ee337 100644 (file)
@@ -1,3 +1,13 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
+2013-02-13  Kai Tietz  <ktietz@redhat.com>
+
+       PR target/52122
+       * Makefile.in (LN_S_RECURSIVE): New.
+       (adainclude, adalib): Use LN_S_RECURSIVE for copy.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index 2fa1c6a..dbead70 100644 (file)
@@ -43,6 +43,12 @@ enable_shared = @enable_shared@
 LN_S=@LN_S@
 AWK=@AWK@
 
+ifeq (cp -p,$(LN_S))
+LN_S_RECURSIVE = cp -pR
+else
+LN_S_RECURSIVE = $(LN_S)
+endif
+
 # Variables for the user (or the top level) to override.
 objext=.o
 GNATLIBFLAGS= -W -Wall -gnatpg
@@ -106,8 +112,8 @@ gnatlib-plain: osconstool $(GCC_DIR)/ada/Makefile
        && touch stamp-libada
        -rm -rf adainclude
        -rm -rf adalib
-       $(LN_S) $(ADA_RTS_DIR) adainclude
-       $(LN_S) $(ADA_RTS_DIR) adalib
+       $(LN_S_RECURSIVE) $(ADA_RTS_DIR) adainclude
+       $(LN_S_RECURSIVE) $(ADA_RTS_DIR) adalib
 
 gnatlib-sjlj gnatlib-zcx gnatlib-shared: osconstool $(GCC_DIR)/ada/Makefile
        test -f stamp-libada || \
@@ -115,8 +121,8 @@ gnatlib-sjlj gnatlib-zcx gnatlib-shared: osconstool $(GCC_DIR)/ada/Makefile
        && touch stamp-libada
        -rm -rf adainclude
        -rm -rf adalib
-       $(LN_S) $(ADA_RTS_DIR) adainclude
-       $(LN_S) $(ADA_RTS_DIR) adalib
+       $(LN_S_RECURSIVE) $(ADA_RTS_DIR) adainclude
+       $(LN_S_RECURSIVE) $(ADA_RTS_DIR) adalib
 
 osconstool:
        $(MAKE) -C $(GCC_DIR)/ada $(LIBADA_FLAGS_TO_PASS) ./bldtools/oscons/xoscons
index be3ff7c..39c29c7 100644 (file)
@@ -1,3 +1,13 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
+2013-04-03  Sebastian Huber  <sebastian.huber@embedded-brains.de>
+
+       PR target/56771
+       * configure.ac: Require 64-bit int for arm*-*-rtems[.0-9]*.
+       * configure: Regenerate.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index 41677ce..aa36630 100755 (executable)
@@ -7090,6 +7090,7 @@ fi
 case $target in
        alpha*-*-* | \
        arm*-*-*eabi* | \
+       arm*-*-rtems[.0-9]* | \
        arm*-*-symbianelf* | \
        x86_64-*-* | \
        ia64-*-* | \
index 1c67eaf..7fe89f8 100644 (file)
@@ -140,6 +140,7 @@ m4_changequote(,)
 case $target in
        alpha*-*-* | \
        arm*-*-*eabi* | \
+       arm*-*-rtems[.0-9]* | \
        arm*-*-symbianelf* | \
        x86_64-*-* | \
        ia64-*-* | \
index 2e2d28a..16ade9d 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index 4da95c3..82ddf3f 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index c2cfbbf..51e313f 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-09-20  Jakub Jelinek  <jakub@redhat.com>
 
        PR other/43620
index ea06c2c..3ad0495 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-12-04  Richard Henderson  <rth@redhat.com>
 
        PR bootstrap/55571
index ecd0ba2..4aad1f3 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index a57a66d..81fef50 100644 (file)
@@ -1,3 +1,34 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
+2013-04-04  Tobias Burnus  <burnus@net-b.de>
+
+       Backport from mainline:
+       2013-03-29  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/56737
+       * io/format.c (parse_format): With caching, copy
+       dtp->format string.
+       (save_parsed_format): Use dtp->format directly without
+       copying.
+
+       2012-03-29  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/56737
+       * io/format.c (parse_format_list): Also cache FMT_STRING.
+       (parse_format): Update call.
+
+2013-04-04  Tobias Burnus  <burnus@net-b.de>
+
+       Backport from mainline:
+       2013-03-28  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/56735
+       * io/list_read.c (nml_query): Only abort when
+       an error occured.
+       (namelist_read): Add goto instead of falling through.
+
 2012-10-21  Thomas K├Ânig  <tkoenig@gcc.gnu.org>
 
        PR libfortran/54736
index d540fc4..17b5812 100644 (file)
@@ -151,8 +151,7 @@ save_parsed_format (st_parameter_dt *dtp)
 
   if (u->format_hash_table[hash].key != NULL)
     free (u->format_hash_table[hash].key);
-  u->format_hash_table[hash].key = get_mem (dtp->format_len);
-  memcpy (u->format_hash_table[hash].key, dtp->format, dtp->format_len);
+  u->format_hash_table[hash].key = dtp->format;
 
   u->format_hash_table[hash].key_len = dtp->format_len;
   u->format_hash_table[hash].hashed_fmt = dtp->u.p.fmt;
@@ -590,16 +589,15 @@ format_lex (format_data *fmt)
  * parenthesis node which contains the rest of the list. */
 
 static fnode *
-parse_format_list (st_parameter_dt *dtp, bool *save_ok, bool *seen_dd)
+parse_format_list (st_parameter_dt *dtp, bool *seen_dd)
 {
   fnode *head, *tail;
   format_token t, u, t2;
   int repeat;
   format_data *fmt = dtp->u.p.fmt;
-  bool saveit, seen_data_desc = false;
+  bool seen_data_desc = false;
 
   head = tail = NULL;
-  saveit = *save_ok;
 
   /* Get the next format item */
  format_item:
@@ -616,7 +614,7 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok, bool *seen_dd)
        }
       get_fnode (fmt, &head, &tail, FMT_LPAREN);
       tail->repeat = -2;  /* Signifies unlimited format.  */
-      tail->u.child = parse_format_list (dtp, &saveit, &seen_data_desc);
+      tail->u.child = parse_format_list (dtp, &seen_data_desc);
       if (fmt->error != NULL)
        goto finished;
       if (!seen_data_desc)
@@ -635,7 +633,7 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok, bool *seen_dd)
        case FMT_LPAREN:
          get_fnode (fmt, &head, &tail, FMT_LPAREN);
          tail->repeat = repeat;
-         tail->u.child = parse_format_list (dtp, &saveit, &seen_data_desc);
+         tail->u.child = parse_format_list (dtp, &seen_data_desc);
          *seen_dd = seen_data_desc;
          if (fmt->error != NULL)
            goto finished;
@@ -663,7 +661,7 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok, bool *seen_dd)
     case FMT_LPAREN:
       get_fnode (fmt, &head, &tail, FMT_LPAREN);
       tail->repeat = 1;
-      tail->u.child = parse_format_list (dtp, &saveit, &seen_data_desc);
+      tail->u.child = parse_format_list (dtp, &seen_data_desc);
       *seen_dd = seen_data_desc;
       if (fmt->error != NULL)
        goto finished;
@@ -727,8 +725,6 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok, bool *seen_dd)
       goto between_desc;
 
     case FMT_STRING:
-      /* TODO: Find out why it is necessary to turn off format caching.  */
-      saveit = false;
       get_fnode (fmt, &head, &tail, FMT_STRING);
       tail->u.string.p = fmt->string;
       tail->u.string.length = fmt->value;
@@ -1108,8 +1104,6 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok, bool *seen_dd)
 
  finished:
 
-  *save_ok = saveit;
-  
   return head;
 }
 
@@ -1225,6 +1219,13 @@ parse_format (st_parameter_dt *dtp)
 
   /* Not found so proceed as follows.  */
 
+  if (format_cache_ok)
+    {
+      char *fmt_string = get_mem (dtp->format_len);
+      memcpy (fmt_string, dtp->format, dtp->format_len);
+      dtp->format = fmt_string;
+    }
+
   dtp->u.p.fmt = fmt = get_mem (sizeof (format_data));
   fmt->format_string = dtp->format;
   fmt->format_string_len = dtp->format_len;
@@ -1251,14 +1252,15 @@ parse_format (st_parameter_dt *dtp)
   fmt->avail++;
 
   if (format_lex (fmt) == FMT_LPAREN)
-    fmt->array.array[0].u.child = parse_format_list (dtp, &format_cache_ok,
-                                                    &seen_data_desc);
+    fmt->array.array[0].u.child = parse_format_list (dtp, &seen_data_desc);
   else
     fmt->error = "Missing initial left parenthesis in format";
 
   if (fmt->error)
     {
       format_error (dtp, NULL, fmt->error);
+      if (format_cache_ok)
+       free (dtp->format);
       free_format_hash_table (dtp->u.p.current_unit);
       return;
     }
index c473c58..198f9a7 100644 (file)
@@ -2327,11 +2327,11 @@ nml_query (st_parameter_dt *dtp, char c)
   index_type len;
   char * p;
 #ifdef HAVE_CRLF
-  static const index_type endlen = 3;
+  static const index_type endlen = 2;
   static const char endl[] = "\r\n";
   static const char nmlend[] = "&end\r\n";
 #else
-  static const index_type endlen = 2;
+  static const index_type endlen = 1;
   static const char endl[] = "\n";
   static const char nmlend[] = "&end\n";
 #endif
@@ -2361,12 +2361,12 @@ nml_query (st_parameter_dt *dtp, char c)
          /* "&namelist_name\n"  */
 
          len = dtp->namelist_name_len;
-         p = write_block (dtp, len + endlen);
+         p = write_block (dtp, len - 1 + endlen);
           if (!p)
             goto query_return;
          memcpy (p, "&", 1);
          memcpy ((char*)(p + 1), dtp->namelist_name, len);
-         memcpy ((char*)(p + len + 1), &endl, endlen - 1);
+         memcpy ((char*)(p + len + 1), &endl, endlen);
          for (nl = dtp->u.p.ionml; nl; nl = nl->next)
            {
              /* " var_name\n"  */
@@ -2377,14 +2377,15 @@ nml_query (st_parameter_dt *dtp, char c)
                goto query_return;
              memcpy (p, " ", 1);
              memcpy ((char*)(p + 1), nl->var_name, len);
-             memcpy ((char*)(p + len + 1), &endl, endlen - 1);
+             memcpy ((char*)(p + len + 1), &endl, endlen);
            }
 
          /* "&end\n"  */
 
-          p = write_block (dtp, endlen + 3);
+          p = write_block (dtp, endlen + 4);
+         if (!p)
            goto query_return;
-          memcpy (p, &nmlend, endlen + 3);
+          memcpy (p, &nmlend, endlen + 4);
        }
 
       /* Flush the stream to force immediate output.  */
@@ -3015,6 +3016,7 @@ find_nml_name:
 
     case '?':
       nml_query (dtp, '?');
+      goto find_nml_name;
 
     case EOF:
       return;
index 38c08ce..2e64649 100644 (file)
@@ -1,3 +1,15 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
+2013-04-03  Jakub Jelinek  <jakub@redhat.com>
+
+       Backported from mainline
+       2012-03-22  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/52547
+       * testsuite/libgomp.c/pr52547.c: New test.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
diff --git a/libgomp/testsuite/libgomp.c/pr52547.c b/libgomp/testsuite/libgomp.c/pr52547.c
new file mode 100644 (file)
index 0000000..f746e2e
--- /dev/null
@@ -0,0 +1,36 @@
+/* PR middle-end/52547 */
+/* { dg-do run } */
+
+extern void abort (void);
+
+__attribute__((noinline, noclone)) int
+baz (int *x, int (*fn) (int *))
+{
+  return fn (x);
+}
+
+__attribute__((noinline, noclone)) int
+foo (int x, int *y)
+{
+  int i, e = 0;
+#pragma omp parallel for reduction(|:e)
+  for (i = 0; i < x; ++i)
+    {
+      __label__ lab;
+      int bar (int *z) { return z - y; }
+      if (baz (&y[i], bar) != i)
+       e |= 1;
+    }
+  return e;
+}
+
+int
+main ()
+{
+  int a[100], i;
+  for (i = 0; i < 100; i++)
+    a[i] = i;
+  if (foo (100, a))
+    abort ();
+  return 0;
+}
index ba39831..8aa8f44 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index 8ba79a6..7da013f 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-02  Jack Howarth  <howarth@bromo.med.uc.edu>
 
        Backport from mainline
index 4b34fc8..c6c42ea 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index 2dd8785..2dd4912 100644 (file)
@@ -1,3 +1,9 @@
+2013-02-21  Jakub Jelinek  <jakub@redhat.com>
+
+       PR bootstrap/56258
+       * doc/cp-tools.texinfo (Virtual Machine Options): Use just
+       one @gccoptlist instead of 3 separate ones.
+
 2012-09-20  Jakub Jelinek  <jakub@redhat.com>
 
        PR other/43620
index f7a2d24..7276962 100644 (file)
@@ -2022,7 +2022,7 @@ Doclet, grouped by type.  Explanations are in the following sections.
 
 @item Virtual Machine Options
 @xref{Virtual Machine Options,,Options Controlling Gjdoc Behavior}.
-@gccoptlist{-classpath}  @gccoptlist{-bootclasspath}  @gccoptlist{-J}@var{vmopt}
+@gccoptlist{-classpath  -bootclasspath  -J @var{vmopt}}
 
 @end table
 
index bbbe2e7..fdbb553 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index e15e13d..3791d5a 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index f1d361d..b48054f 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index 0e47ee5..14fb98d 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index b391337..1a7d873 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index 91f540a..b964fe4 100644 (file)
@@ -1,3 +1,13 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
+2013-02-26  Jonathan Wakely  <jwakely.gcc@gmail.com>
+
+       * include/std/streambuf (basic_streambuf): Use injected class name
+       instead of non-standard __streambuf_type typedef. Fix unclosed Doxygen
+       group.
+
 2012-12-16  Jonathan Wakely  <jwakely.gcc@gmail.com>
 
        * src/c++11/thread.cc (execute_native_thread_routine): Do not swallow
index b46efec..383a99b 100644 (file)
@@ -1,7 +1,7 @@
 // Stream buffer classes -*- C++ -*-
 
 // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
+// 2006, 2007, 2008, 2009, 2010, 2011, 2013 Free Software Foundation, Inc.
 //
 // This file is part of the GNU ISO C++ Library.  This library is free
 // software; you can redistribute it and/or modify it under the
@@ -171,20 +171,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
                basic_string<_CharT2, _Traits2, _Alloc>&, _CharT2);
 
     protected:
-      //@{
-      /**
+      /*
        *  This is based on _IO_FILE, just reordered to be more consistent,
        *  and is intended to be the most minimal abstraction for an
        *  internal buffer.
        *  -  get == input == read
        *  -  put == output == write
       */
-      char_type*               _M_in_beg;     // Start of get area. 
-      char_type*               _M_in_cur;     // Current read area. 
-      char_type*               _M_in_end;     // End of get area. 
-      char_type*               _M_out_beg;    // Start of put area. 
-      char_type*               _M_out_cur;    // Current put area. 
-      char_type*               _M_out_end;    // End of put area.
+      char_type*               _M_in_beg;     //< Start of get area.
+      char_type*               _M_in_cur;     //< Current read area.
+      char_type*               _M_in_end;     //< End of get area.
+      char_type*               _M_out_beg;    //< Start of put area.
+      char_type*               _M_out_cur;    //< Current put area.
+      char_type*               _M_out_end;    //< End of put area.
 
       /// Current locale setting.
       locale                   _M_buf_locale;  
index 86e26d8..98c1cd9 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index d65cfb4..79257ff 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.
index 8b3127c..4bcd004 100644 (file)
@@ -1,3 +1,7 @@
+2013-04-12  Release Manager
+
+       * GCC 4.6.4 released.
+
 2012-03-01  Release Manager
 
        * GCC 4.6.3 released.