-Index: gcc/doc/invoke.texi
+Index: libgomp/ChangeLog
===================================================================
---- gcc/doc/invoke.texi (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/doc/invoke.texi (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -7817,6 +7817,7 @@
- compilation.
-
- @table @gcctabopt
-+@item -Wp,@var{option}
- @opindex Wp
- You can use @option{-Wp,@var{option}} to bypass the compiler driver
- and pass @var{option} directly through to the preprocessor. If
-@@ -7829,7 +7830,7 @@
- options instead.
-
- @item -Xpreprocessor @var{option}
--@opindex preprocessor
-+@opindex Xpreprocessor
- Pass @var{option} as an option to the preprocessor. You can use this to
- supply system-specific preprocessor options which GCC does not know how to
- recognize.
-Index: gcc/DATESTAMP
-===================================================================
---- gcc/DATESTAMP (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/DATESTAMP (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -1 +1 @@
--20091015
-+20091026
-Index: gcc/configure
-===================================================================
---- gcc/configure (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/configure (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -21680,6 +21680,42 @@
- _ACEOF
-
-
-+echo "$as_me:$LINENO: checking assembler for cfi sections directive" >&5
-+echo $ECHO_N "checking assembler for cfi sections directive... $ECHO_C" >&6
-+if test "${gcc_cv_as_cfi_sections_directive+set}" = set; then
-+ echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+ gcc_cv_as_cfi_sections_directive=no
-+ if test x$gcc_cv_as != x; then
-+ echo ' .text
-+ .cfi_sections .debug_frame, .eh_frame
-+ .cfi_startproc
-+ .cfi_endproc' > conftest.s
-+ if { ac_try='$gcc_cv_as -o conftest.o conftest.s >&5'
-+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-+ (eval $ac_try) 2>&5
-+ ac_status=$?
-+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
-+ (exit $ac_status); }; }
-+ then
-+ gcc_cv_as_cfi_sections_directive=yes
-+ else
-+ echo "configure: failed program was" >&5
-+ cat conftest.s >&5
-+ fi
-+ rm -f conftest.o conftest.s
-+ fi
-+fi
-+echo "$as_me:$LINENO: result: $gcc_cv_as_cfi_sections_directive" >&5
-+echo "${ECHO_T}$gcc_cv_as_cfi_sections_directive" >&6
-+
-+
-+cat >>confdefs.h <<_ACEOF
-+#define HAVE_GAS_CFI_SECTIONS_DIRECTIVE `if test $gcc_cv_as_cfi_sections_directive = yes;
-+ then echo 1; else echo 0; fi`
-+_ACEOF
-+
-+
- # GAS versions up to and including 2.11.0 may mis-optimize
- # .eh_frame data.
- echo "$as_me:$LINENO: checking assembler for eh_frame optimization" >&5
-Index: gcc/vmsdbgout.c
-===================================================================
---- gcc/vmsdbgout.c (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/vmsdbgout.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -166,6 +166,7 @@
-
- static void vmsdbgout_init (const char *);
- static void vmsdbgout_finish (const char *);
-+static void vmsdbgout_assembly_start (void);
- static void vmsdbgout_define (unsigned int, const char *);
- static void vmsdbgout_undef (unsigned int, const char *);
- static void vmsdbgout_start_source_file (unsigned int, const char *);
-@@ -188,6 +189,7 @@
- const struct gcc_debug_hooks vmsdbg_debug_hooks
- = {vmsdbgout_init,
- vmsdbgout_finish,
-+ vmsdbgout_assembly_start,
- vmsdbgout_define,
- vmsdbgout_undef,
- vmsdbgout_start_source_file,
-@@ -1636,6 +1638,15 @@
- /* Not implemented in VMS Debug. */
+--- libgomp/ChangeLog (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ libgomp/ChangeLog (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1,3 +1,8 @@
++2012-03-22 Jakub Jelinek <jakub@redhat.com>
++
++ PR middle-end/52547
++ * testsuite/libgomp.c/pr52547.c: New test.
++
+ 2012-03-22 Release Manager
- static void
-+vmsdbgout_assembly_start (void)
+ * GCC 4.7.0 released.
+Index: libgomp/testsuite/libgomp.c/pr52547.c
+===================================================================
+--- libgomp/testsuite/libgomp.c/pr52547.c (.../tags/gcc_4_7_0_release) (wersja 0)
++++ libgomp/testsuite/libgomp.c/pr52547.c (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -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 *))
+{
-+ if (write_symbols == VMS_AND_DWARF2_DEBUG)
-+ (*dwarf2_debug_hooks.assembly_start) ();
++ return fn (x);
+}
+
-+/* Not implemented in VMS Debug. */
++__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;
++}
+
-+static void
- vmsdbgout_define (unsigned int lineno, const char *buffer)
- {
- if (write_symbols == VMS_AND_DWARF2_DEBUG)
-Index: gcc/debug.c
-===================================================================
---- gcc/debug.c (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/debug.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -27,6 +27,7 @@
- {
- debug_nothing_charstar,
- debug_nothing_charstar,
-+ debug_nothing_void,
- debug_nothing_int_charstar,
- debug_nothing_int_charstar,
- debug_nothing_int_charstar,
-Index: gcc/DEV-PHASE
-===================================================================
---- gcc/DEV-PHASE (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/DEV-PHASE (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -0,0 +1 @@
-+prerelease
-Index: gcc/debug.h
-===================================================================
---- gcc/debug.h (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/debug.h (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -31,6 +31,10 @@
- /* Output debug symbols. */
- void (* finish) (const char *main_filename);
-
-+ /* Called from cgraph_optimize before starting to assemble
-+ functions/variables/toplevel asms. */
-+ void (* assembly_start) (void);
++int
++main ()
++{
++ int a[100], i;
++ for (i = 0; i < 100; i++)
++ a[i] = i;
++ if (foo (100, a))
++ abort ();
++ return 0;
++}
+Index: libstdc++-v3/include/Makefile.in
+===================================================================
+--- libstdc++-v3/include/Makefile.in (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ libstdc++-v3/include/Makefile.in (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1497,7 +1497,7 @@
+ sed -e "s,define __GLIBCXX__,define __GLIBCXX__ $$date," \
+ -e "s,define _GLIBCXX_INLINE_VERSION, define _GLIBCXX_INLINE_VERSION $$ns_version," \
+ -e "s,define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY, define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY $$visibility," \
+- -e "s,define _GLIBCXX_EXTERN_TEMPLATE, define _GLIBCXX_EXTERN_TEMPLATE $$externtemplate," \
++ -e "s,define _GLIBCXX_EXTERN_TEMPLATE$$, define _GLIBCXX_EXTERN_TEMPLATE $$externtemplate," \
+ -e "$$ldbl_compat" \
+ < ${glibcxx_srcdir}/include/bits/c++config > $@ ;\
+ sed -e 's/HAVE_/_GLIBCXX_HAVE_/g' \
+Index: libstdc++-v3/include/debug/safe_iterator.h
+===================================================================
+--- libstdc++-v3/include/debug/safe_iterator.h (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ libstdc++-v3/include/debug/safe_iterator.h (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1,6 +1,6 @@
+ // Safe iterator implementation -*- C++ -*-
+
+-// Copyright (C) 2003, 2004, 2005, 2006, 2009, 2010, 2011
++// Copyright (C) 2003, 2004, 2005, 2006, 2009, 2010, 2011, 2012
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library. This library is free
+@@ -169,7 +169,25 @@
+ ._M_iterator(__x, "other"));
+ }
+
++#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ /**
++ * @brief Move construction.
++ * @post __x is singular and unattached
++ */
++ _Safe_iterator(_Safe_iterator&& __x) : _M_current()
++ {
++ _GLIBCXX_DEBUG_VERIFY(!__x._M_singular()
++ || __x._M_current == _Iterator(),
++ _M_message(__msg_init_copy_singular)
++ ._M_iterator(*this, "this")
++ ._M_iterator(__x, "other"));
++ std::swap(_M_current, __x._M_current);
++ this->_M_attach(__x._M_sequence);
++ __x._M_detach();
++ }
++#endif
++
++ /**
+ * @brief Converting constructor from a mutable iterator to a
+ * constant iterator.
+ */
+@@ -208,7 +226,28 @@
+ return *this;
+ }
+
++#ifdef __GXX_EXPERIMENTAL_CXX0X__
+ /**
++ * @brief Move assignment.
++ * @post __x is singular and unattached
++ */
++ _Safe_iterator&
++ operator=(_Safe_iterator&& __x)
++ {
++ _GLIBCXX_DEBUG_VERIFY(!__x._M_singular()
++ || __x._M_current == _Iterator(),
++ _M_message(__msg_copy_singular)
++ ._M_iterator(*this, "this")
++ ._M_iterator(__x, "other"));
++ _M_current = __x._M_current;
++ _M_attach(__x._M_sequence);
++ __x._M_detach();
++ __x._M_current = _Iterator();
++ return *this;
++ }
++#endif
+
- /* Macro defined on line LINE with name and expansion TEXT. */
- void (* define) (unsigned int line, const char *text);
++ /**
+ * @brief Iterator dereference.
+ * @pre iterator is dereferenceable
+ */
+@@ -422,7 +461,9 @@
+ /// Is this iterator equal to the sequence's before_begin() iterator if
+ /// any?
+ bool _M_is_before_begin() const
+- { return _BeforeBeginHelper<_Sequence>::_M_Is(base(), _M_get_sequence()); }
++ {
++ return _BeforeBeginHelper<_Sequence>::_M_Is(base(), _M_get_sequence());
++ }
+ };
+
+ template<typename _IteratorL, typename _IteratorR, typename _Sequence>
+Index: libstdc++-v3/include/std/array
+===================================================================
+--- libstdc++-v3/include/std/array (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ libstdc++-v3/include/std/array (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1,6 +1,7 @@
+ // <array> -*- C++ -*-
+
+-// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
++// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012
++// Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library. This library is free
+ // software; you can redistribute it and/or modify it under the
+@@ -174,8 +175,9 @@
+ const_reference
+ at(size_type __n) const
+ {
+- return __n < _Nm ?
+- _M_instance[__n] : __throw_out_of_range(__N("array::at"));
++ if (__n >= _Nm)
++ std::__throw_out_of_range(__N("array::at"));
++ return _M_instance[__n];
+ }
+ #endif
-Index: gcc/cgraphunit.c
-===================================================================
---- gcc/cgraphunit.c (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/cgraphunit.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -1293,6 +1293,7 @@
- timevar_pop (TV_CGRAPHOPT);
-
- /* Output everything. */
-+ (*debug_hooks->assembly_start) ();
- if (!quiet_flag)
- fprintf (stderr, "Assembling functions:\n");
- #ifdef ENABLE_CHECKING
-Index: gcc/ChangeLog
+Index: libstdc++-v3/include/bits/forward_list.h
+===================================================================
+--- libstdc++-v3/include/bits/forward_list.h (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ libstdc++-v3/include/bits/forward_list.h (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1,6 +1,6 @@
+ // <forward_list.h> -*- C++ -*-
+
+-// Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
++// Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library. This library is free
+ // software; you can redistribute it and/or modify it under the
+@@ -606,8 +606,8 @@
+ * in the range [@a __first,@a __last).
+ *
+ * Note that the assignment completely changes the %forward_list and
+- * that the resulting %forward_list's size is the same as the number
+- * of elements assigned. Old data may be lost.
++ * that the number of elements of the resulting %forward_list's is the
++ * same as the number of elements assigned. Old data is lost.
+ */
+ template<typename _InputIterator>
+ void
+@@ -622,10 +622,10 @@
+ * @param __n Number of elements to be assigned.
+ * @param __val Value to be assigned.
+ *
+- * This function fills a %forward_list with @a __n copies of the given
+- * value. Note that the assignment completely changes the
+- * %forward_list and that the resulting %forward_list's size is the
+- * same as the number of elements assigned. Old data may be lost.
++ * This function fills a %forward_list with @a __n copies of the
++ * given value. Note that the assignment completely changes the
++ * %forward_list, and that the resulting %forward_list has __n
++ * elements. Old data is lost.
+ */
+ void
+ assign(size_type __n, const _Tp& __val)
+@@ -744,7 +744,7 @@
+ { return this->_M_impl._M_head._M_next == 0; }
+
+ /**
+- * Returns the largest possible size of %forward_list.
++ * Returns the largest possible number of elements of %forward_list.
+ */
+ size_type
+ max_size() const noexcept
+@@ -997,9 +997,9 @@
+ *
+ * This function will %resize the %forward_list to the specified
+ * number of elements. If the number is smaller than the
+- * %forward_list's current size the %forward_list is truncated,
+- * otherwise the %forward_list is extended and the new elements
+- * are default constructed.
++ * %forward_list's current number of elements the %forward_list
++ * is truncated, otherwise the %forward_list is extended and the
++ * new elements are default constructed.
+ */
+ void
+ resize(size_type __sz);
+@@ -1012,9 +1012,9 @@
+ *
+ * This function will %resize the %forward_list to the specified
+ * number of elements. If the number is smaller than the
+- * %forward_list's current size the %forward_list is truncated,
+- * otherwise the %forward_list is extended and new elements are
+- * populated with given data.
++ * %forward_list's current number of elements the %forward_list
++ * is truncated, otherwise the %forward_list is extended and new
++ * elements are populated with given data.
+ */
+ void
+ resize(size_type __sz, const value_type& __val);
+@@ -1240,11 +1240,11 @@
+ * @brief Forward list equality comparison.
+ * @param __lx A %forward_list
+ * @param __ly A %forward_list of the same type as @a __lx.
+- * @return True iff the size and elements of the forward lists are equal.
++ * @return True iff the elements of the forward lists are equal.
+ *
+- * This is an equivalence relation. It is linear in the size of the
+- * forward lists. Deques are considered equivalent if corresponding
+- * elements compare equal.
++ * This is an equivalence relation. It is linear in the number of
++ * elements of the forward lists. Deques are considered equivalent
++ * if corresponding elements compare equal.
+ */
+ template<typename _Tp, typename _Alloc>
+ bool
+@@ -1257,8 +1257,9 @@
+ * @param __ly A %forward_list of the same type as @a __lx.
+ * @return True iff @a __lx is lexicographically less than @a __ly.
+ *
+- * This is a total ordering relation. It is linear in the size of the
+- * forward lists. The elements must be comparable with @c <.
++ * This is a total ordering relation. It is linear in the number of
++ * elements of the forward lists. The elements must be comparable
++ * with @c <.
+ *
+ * See std::lexicographical_compare() for how the determination is made.
+ */
+Index: libstdc++-v3/include/Makefile.am
+===================================================================
+--- libstdc++-v3/include/Makefile.am (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ libstdc++-v3/include/Makefile.am (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1,7 +1,7 @@
+ ## Makefile for the include subdirectory of the GNU C++ Standard library.
+ ##
+ ## Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+-## 2011
++## 2011, 2012
+ ## Free Software Foundation, Inc.
+ ##
+ ## This file is part of the libstdc++ version 3 distribution.
+@@ -1105,7 +1105,7 @@
+ sed -e "s,define __GLIBCXX__,define __GLIBCXX__ $$date," \
+ -e "s,define _GLIBCXX_INLINE_VERSION, define _GLIBCXX_INLINE_VERSION $$ns_version," \
+ -e "s,define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY, define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY $$visibility," \
+- -e "s,define _GLIBCXX_EXTERN_TEMPLATE, define _GLIBCXX_EXTERN_TEMPLATE $$externtemplate," \
++ -e "s,define _GLIBCXX_EXTERN_TEMPLATE$$, define _GLIBCXX_EXTERN_TEMPLATE $$externtemplate," \
+ -e "$$ldbl_compat" \
+ < ${glibcxx_srcdir}/include/bits/c++config > $@ ;\
+ sed -e 's/HAVE_/_GLIBCXX_HAVE_/g' \
+Index: libstdc++-v3/ChangeLog
===================================================================
---- gcc/ChangeLog (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/ChangeLog (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -1,3 +1,123 @@
-+2009-10-23 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-+
-+ Backport from mainline:
-+ 2009-08-19 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-+
-+ * pa.md (reload_inhi, reload_outhi, reload_inqi, reload_outqi): New
-+ patterns.
-+ * pa.c (emit_move_sequence): Check if address of operand1 is valid
-+ for mode mode of operand0 when doing secondary reload for SAR.
+--- libstdc++-v3/ChangeLog (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ libstdc++-v3/ChangeLog (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1,3 +1,30 @@
++2012-03-23 David S. Miller <davem@davemloft.net>
+
-+2009-10-21 Jakub Jelinek <jakub@redhat.com>
++ * config/abi/post/sparc-linux-gnu/baseline_symbols.txt: Update.
+
-+ Backport from mainline:
-+ 2009-06-13 Joerg Sonnenberger <joerg@britannica.bec.de>
-+
-+ * doc/invoke.texi: Add missing option -Wp,OPTION in list,
-+ fix index entry for -Xpreprocessor.
++2012-03-23 Paolo Carlini <paolo.carlini@oracle.com>
+
-+2009-10-20 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
++ * include/bits/forward_list.h: Fix comments.
+
-+ Backport from mainline:
-+ 2009-10-15 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
++2012-03-23 Paweł Sikora <pawel.sikora@agmk.net>
+
-+ PR target/41702
-+ * pa.md (casesi): Use sign extended index in call to
-+ gen_casesi64p.
-+ (casesi64p): Update pattern to reflect above.
++ PR libstdc++/52540
++ * include/Makefile.am (c++config.h): Fix sed rule to not break
++ the _GLIBCXX_EXTERN_TEMPLATE redefinition.
++ * include/Makefile.in: Regenerate.
+
-+2009-10-20 Joseph Myers <joseph@codesourcery.com>
++2012-03-22 Jonathan Wakely <jwakely.gcc@gmail.com>
+
-+ * config/arm/arm.c (output_move_neon): Use DImode in call to
-+ adjust_address.
++ PR libstdc++/52433
++ * include/debug/safe_iterator.h (_Safe_iterator): Add move
++ constructor and move assignment operator.
++ * testsuite/23_containers/vector/debug/52433.cc: New.
+
-+2009-10-19 Jakub Jelinek <jakub@redhat.com>
++2012-03-22 Paolo Carlini <paolo.carlini@oracle.com>
+
-+ * unwind-dw2.c (execute_stack_op): Fix operand order for
-+ DW_OP_le, DW_OP_ge, DW_OP_lt and DW_OP_gt.
++ * include/std/array (array<>::at(size_type) const): Fix version
++ for undefined __EXCEPTIONS.
+
-+2009-10-19 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
+ 2012-03-22 Release Manager
+
+ * GCC 4.7.0 released.
+Index: libstdc++-v3/testsuite/23_containers/vector/debug/52433.cc
+===================================================================
+--- libstdc++-v3/testsuite/23_containers/vector/debug/52433.cc (.../tags/gcc_4_7_0_release) (wersja 0)
++++ libstdc++-v3/testsuite/23_containers/vector/debug/52433.cc (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -0,0 +1,43 @@
++// Copyright (C) 2012 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++//
++// { dg-require-debug-mode "" }
++// { dg-options "-std=gnu++0x" }
++// { dg-do compile }
+
-+ * config/s390/s390.c (s390_z10_optimize_cmp): Don't touch FP compares.
++// PR libstdc++/52433
+
-+2009-10-19 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
++#include <vector>
+
-+ * config/s390/s390.c (s390_z10_optimize_cmp): Skip notes and debug
-+ insns when investigating previous or next insns.
++struct X
++{
++ std::vector<int>::iterator i;
+
-+2009-10-19 Jakub Jelinek <jakub@redhat.com>
++ X() = default;
++ X(const X&) = default;
++ X(X&&) = default;
++ X& operator=(const X&) = default;
++ X& operator=(X&&) = default;
++};
+
-+ Backport from mainline:
-+ 2009-10-16 Jakub Jelinek <jakub@redhat.com>
++X test01()
++{
++ X x;
++ x = X();
++ return x;
++}
+
-+ PR debug/40521
-+ * debug.h (struct gcc_debug_hooks): Add assembly_start hook.
-+ * cgraphunit.c (cgraph_optimize): Call it.
-+ * dwarf2out.c (dwarf2out_init): Move .cfi_sections printing into...
-+ (dwarf2out_assembly_start): ... here. New hook.
-+ (dwarf2out_debug_hooks): Add dwarf2out_assembly_start.
-+ * debug.c (do_nothing_debug_hooks): Do nothing for assembly_start
-+ hook.
-+ * dbxout.c (dbx_debug_hooks, xcoff_debug_hooks): Likewise.
-+ * sdbout.c (sdb_debug_hooks): Likewise.
-+ * vmsdbgout.c (vmsdbg_debug_hooks): Add vmsdbgout_assembly_start.
-+ (vmsdbgout_assembly_start): New hook.
+Index: libstdc++-v3/config/abi/post/sparc-linux-gnu/baseline_symbols.txt
+===================================================================
+--- libstdc++-v3/config/abi/post/sparc-linux-gnu/baseline_symbols.txt (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ libstdc++-v3/config/abi/post/sparc-linux-gnu/baseline_symbols.txt (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -43,6 +43,10 @@
+ FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4
+ FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4
+ FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4
++FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17
++FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17
++FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17
++FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base7_M_swapERS0_@@GLIBCXX_3.4.17
+ FUNC:_ZN14__gnu_parallel9_Settings3getEv@@GLIBCXX_3.4.10
+ FUNC:_ZN14__gnu_parallel9_Settings3setERS0_@@GLIBCXX_3.4.10
+ FUNC:_ZN9__gnu_cxx12__atomic_addEPVii@@GLIBCXX_3.4
+@@ -877,6 +881,7 @@
+ FUNC:_ZNSaIwEC2Ev@@GLIBCXX_3.4
+ FUNC:_ZNSaIwED1Ev@@GLIBCXX_3.4
+ FUNC:_ZNSaIwED2Ev@@GLIBCXX_3.4
++FUNC:_ZNSbIwSt11char_traitsIwESaIwEE10_S_compareEjj@@GLIBCXX_3.4.16
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC1EPwRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_Alloc_hiderC2EPwRKS1_@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_M_leak_hardEv@@GLIBCXX_3.4
+@@ -961,6 +966,7 @@
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjRKS2_jj@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7replaceEjjjw@@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE7reserveEj@@GLIBCXX_3.4
++FUNC:_ZNSbIwSt11char_traitsIwESaIwEE8pop_backEv@@GLIBCXX_3.4.17
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@@GLIBCXX_3.4.5
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@GLIBCXX_3.4
+ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEjjj@@GLIBCXX_3.4
+@@ -1116,6 +1122,7 @@
+ FUNC:_ZNSolsEt@@GLIBCXX_3.4
+ FUNC:_ZNSolsEx@@GLIBCXX_3.4
+ FUNC:_ZNSolsEy@@GLIBCXX_3.4
++FUNC:_ZNSs10_S_compareEjj@@GLIBCXX_3.4.16
+ FUNC:_ZNSs12_Alloc_hiderC1EPcRKSaIcE@@GLIBCXX_3.4
+ FUNC:_ZNSs12_Alloc_hiderC2EPcRKSaIcE@@GLIBCXX_3.4
+ FUNC:_ZNSs12_M_leak_hardEv@@GLIBCXX_3.4
+@@ -1200,6 +1207,7 @@
+ FUNC:_ZNSs7replaceEjjRKSsjj@@GLIBCXX_3.4
+ FUNC:_ZNSs7replaceEjjjc@@GLIBCXX_3.4
+ FUNC:_ZNSs7reserveEj@@GLIBCXX_3.4
++FUNC:_ZNSs8pop_backEv@@GLIBCXX_3.4.17
+ FUNC:_ZNSs9_M_assignEPcjc@@GLIBCXX_3.4.5
+ FUNC:_ZNSs9_M_assignEPcjc@GLIBCXX_3.4
+ FUNC:_ZNSs9_M_mutateEjjj@@GLIBCXX_3.4
+@@ -1433,6 +1441,9 @@
+ FUNC:_ZNSt13__future_base12_Result_baseD0Ev@@GLIBCXX_3.4.15
+ FUNC:_ZNSt13__future_base12_Result_baseD1Ev@@GLIBCXX_3.4.15
+ FUNC:_ZNSt13__future_base12_Result_baseD2Ev@@GLIBCXX_3.4.15
++FUNC:_ZNSt13__future_base19_Async_state_commonD0Ev@@GLIBCXX_3.4.17
++FUNC:_ZNSt13__future_base19_Async_state_commonD1Ev@@GLIBCXX_3.4.17
++FUNC:_ZNSt13__future_base19_Async_state_commonD2Ev@@GLIBCXX_3.4.17
+ FUNC:_ZNSt13bad_exceptionD0Ev@@GLIBCXX_3.4
+ FUNC:_ZNSt13bad_exceptionD1Ev@@GLIBCXX_3.4
+ FUNC:_ZNSt13bad_exceptionD2Ev@@GLIBCXX_3.4
+@@ -1741,6 +1752,8 @@
+ FUNC:_ZNSt15__exception_ptrneERKNS_13exception_ptrES2_@@CXXABI_1.3.3
+ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
+ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
++FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_gbumpEi@@GLIBCXX_3.4.16
++FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE12__safe_pbumpEi@@GLIBCXX_3.4.16
+ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setgEPcS3_S3_@@GLIBCXX_3.4
+ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4setpEPcS3_@@GLIBCXX_3.4
+ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEE4syncEv@@GLIBCXX_3.4
+@@ -1780,6 +1793,8 @@
+ FUNC:_ZNSt15basic_streambufIcSt11char_traitsIcEEaSERKS2_@@GLIBCXX_3.4
+ FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
+ FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE10pubseekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
++FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_gbumpEi@@GLIBCXX_3.4.16
++FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE12__safe_pbumpEi@@GLIBCXX_3.4.16
+ FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setgEPwS3_S3_@@GLIBCXX_3.4
+ FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4setpEPwS3_@@GLIBCXX_3.4
+ FUNC:_ZNSt15basic_streambufIwSt11char_traitsIwEE4syncEv@@GLIBCXX_3.4
+@@ -1824,6 +1839,7 @@
+ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7_M_syncEPcjj@@GLIBCXX_3.4
+ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
+ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
++FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8_M_pbumpEPcS4_x@@GLIBCXX_3.4.16
+ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE8overflowEi@@GLIBCXX_3.4
+ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9pbackfailEi@@GLIBCXX_3.4
+ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEE9showmanycEv@@GLIBCXX_3.4.6
+@@ -1841,6 +1857,7 @@
+ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7_M_syncEPwjj@@GLIBCXX_3.4
+ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode@@GLIBCXX_3.4
+ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE7seekposESt4fposI11__mbstate_tESt13_Ios_Openmode@@GLIBCXX_3.4
++FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8_M_pbumpEPwS4_x@@GLIBCXX_3.4.16
+ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE8overflowEj@@GLIBCXX_3.4
+ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9pbackfailEj@@GLIBCXX_3.4
+ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEE9showmanycEv@@GLIBCXX_3.4.6
+@@ -2145,6 +2162,7 @@
+ FUNC:_ZNSt6localeD2Ev@@GLIBCXX_3.4
+ FUNC:_ZNSt6localeaSERKS_@@GLIBCXX_3.4
+ FUNC:_ZNSt6thread15_M_start_threadESt10shared_ptrINS_10_Impl_baseEE@@GLIBCXX_3.4.11
++FUNC:_ZNSt6thread20hardware_concurrencyEv@@GLIBCXX_3.4.17
+ FUNC:_ZNSt6thread4joinEv@@GLIBCXX_3.4.11
+ FUNC:_ZNSt6thread6detachEv@@GLIBCXX_3.4.11
+ FUNC:_ZNSt7codecvtIcc11__mbstate_tEC1EP15__locale_structj@@GLIBCXX_3.4
+@@ -2640,14 +2658,17 @@
+ FUNC:_ZnwjRKSt9nothrow_t@@GLIBCXX_3.4
+ FUNC:__atomic_flag_for_address@@GLIBCXX_3.4.11
+ FUNC:__atomic_flag_wait_explicit@@GLIBCXX_3.4.11
++FUNC:__cxa_allocate_dependent_exception@@CXXABI_1.3.6
+ FUNC:__cxa_allocate_exception@@CXXABI_1.3
+ FUNC:__cxa_bad_cast@@CXXABI_1.3
+ FUNC:__cxa_bad_typeid@@CXXABI_1.3
+ FUNC:__cxa_begin_catch@@CXXABI_1.3
+ FUNC:__cxa_call_unexpected@@CXXABI_1.3
+ FUNC:__cxa_current_exception_type@@CXXABI_1.3
++FUNC:__cxa_deleted_virtual@@CXXABI_1.3.6
+ FUNC:__cxa_demangle@@CXXABI_1.3
+ FUNC:__cxa_end_catch@@CXXABI_1.3
++FUNC:__cxa_free_dependent_exception@@CXXABI_1.3.6
+ FUNC:__cxa_free_exception@@CXXABI_1.3
+ FUNC:__cxa_get_exception_ptr@@CXXABI_1.3.1
+ FUNC:__cxa_get_globals@@CXXABI_1.3
+@@ -2658,6 +2679,7 @@
+ FUNC:__cxa_pure_virtual@@CXXABI_1.3
+ FUNC:__cxa_rethrow@@CXXABI_1.3
+ FUNC:__cxa_throw@@CXXABI_1.3
++FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
+ FUNC:__cxa_vec_cctor@@CXXABI_1.3
+ FUNC:__cxa_vec_cleanup@@CXXABI_1.3
+ FUNC:__cxa_vec_ctor@@CXXABI_1.3
+@@ -2701,7 +2723,9 @@
+ OBJECT:0:CXXABI_1.3.3
+ OBJECT:0:CXXABI_1.3.4
+ OBJECT:0:CXXABI_1.3.5
++OBJECT:0:CXXABI_1.3.6
+ OBJECT:0:CXXABI_LDBL_1.3
++OBJECT:0:CXXABI_TM_1
+ OBJECT:0:GLIBCXX_3.4
+ OBJECT:0:GLIBCXX_3.4.1
+ OBJECT:0:GLIBCXX_3.4.10
+@@ -2710,6 +2734,8 @@
+ OBJECT:0:GLIBCXX_3.4.13
+ OBJECT:0:GLIBCXX_3.4.14
+ OBJECT:0:GLIBCXX_3.4.15
++OBJECT:0:GLIBCXX_3.4.16
++OBJECT:0:GLIBCXX_3.4.17
+ OBJECT:0:GLIBCXX_3.4.2
+ OBJECT:0:GLIBCXX_3.4.3
+ OBJECT:0:GLIBCXX_3.4.4
+@@ -2737,6 +2763,7 @@
+ OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
+ OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+ OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4
++OBJECT:12:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
+ OBJECT:12:_ZTINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4
+ OBJECT:12:_ZTINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@@GLIBCXX_LDBL_3.4
+ OBJECT:12:_ZTINSt17__gnu_cxx_ldbl1287num_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4
+@@ -3245,6 +3272,7 @@
+ OBJECT:20:_ZTSSt15underflow_error@@GLIBCXX_3.4
+ OBJECT:20:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15
+ OBJECT:20:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15
++OBJECT:20:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
+ OBJECT:20:_ZTVNSt8ios_base7failureE@@GLIBCXX_3.4
+ OBJECT:20:_ZTVSt10bad_typeid@@GLIBCXX_3.4
+ OBJECT:20:_ZTVSt10lock_error@@GLIBCXX_3.4.11
+@@ -3437,6 +3465,7 @@
+ OBJECT:40:_ZTVSt19basic_ostringstreamIwSt11char_traitsIwESaIwEE@@GLIBCXX_3.4
+ OBJECT:40:_ZTVSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE@@GLIBCXX_3.4
+ OBJECT:40:_ZTVSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE@@GLIBCXX_3.4
++OBJECT:41:_ZTSNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17
+ OBJECT:41:_ZTSSt15basic_streambufIcSt11char_traitsIcEE@@GLIBCXX_3.4
+ OBJECT:41:_ZTSSt15basic_streambufIwSt11char_traitsIwEE@@GLIBCXX_3.4
+ OBJECT:44:_ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3
+Index: libiberty/ChangeLog
+===================================================================
+--- libiberty/ChangeLog (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ libiberty/ChangeLog (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1,3 +1,8 @@
++2012-03-22 Jason Merrill <jason@redhat.com>
++
++ * cp-demangle.c (cplus_demangle_operators): Add li.
++ (d_unqualified_name): Handle it specially.
++
+ 2012-03-22 Release Manager
+
+ * GCC 4.7.0 released.
+Index: libiberty/testsuite/demangle-expected
+===================================================================
+--- libiberty/testsuite/demangle-expected (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ libiberty/testsuite/demangle-expected (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -4073,6 +4073,8 @@
+ _Z2f1IiEDTnw_T_ilEES0_
+ decltype (new int{}) f1<int>(int)
+ --format=gnu-v3
++_Zli2_wPKc
++operator"" _w(char const*)
+ _Z1fIiEDTnw_Dapifp_EET_
+ decltype (new auto({parm#1})) f<int>(int)
+ --format=gnu-v3
+Index: libiberty/cp-demangle.c
+===================================================================
+--- libiberty/cp-demangle.c (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ libiberty/cp-demangle.c (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1419,7 +1419,12 @@
+
+ ret = d_operator_name (di);
+ if (ret != NULL && ret->type == DEMANGLE_COMPONENT_OPERATOR)
+- di->expansion += sizeof "operator" + ret->u.s_operator.op->len - 2;
++ {
++ di->expansion += sizeof "operator" + ret->u.s_operator.op->len - 2;
++ if (!strcmp (ret->u.s_operator.op->code, "li"))
++ ret = d_make_comp (di, DEMANGLE_COMPONENT_UNARY, ret,
++ d_source_name (di));
++ }
+ return ret;
+ }
+ else if (peek == 'C' || peek == 'D')
+@@ -1596,6 +1601,7 @@
+ { "ix", NL ("[]"), 2 },
+ { "lS", NL ("<<="), 2 },
+ { "le", NL ("<="), 2 },
++ { "li", NL ("operator\"\" "), 1 },
+ { "ls", NL ("<<"), 2 },
+ { "lt", NL ("<"), 2 },
+ { "mI", NL ("-="), 2 },
+Index: libgcc/ChangeLog
+===================================================================
+--- libgcc/ChangeLog (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ libgcc/ChangeLog (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1,3 +1,30 @@
++2012-03-22 Georg-Johann Lay <avr@gjlay.de>
++
++ Backport from 2012-03-07 mainline r185033.
++
++ PR target/52507
++ * config/avr/lib1funcs.S (__movmemx_hi): Fix loop label in RAM-part.
++
++ Backport from 2012-03-07 mainline r185031.
++
++ PR target/52505
++ * config/avr/lib1funcs.S (__xload_1): Don't read unintentionally
++ from RAM.
++
++ Backport from 2012-03-07 mainline r185030.
++
++ PR target/52461
++ PR target/52508
++ * config/avr/lib1funcs.S (__do_copy_data): Clear RAMPZ after usage
++ if RAMPZ affects reading from RAM.
++ (__tablejump_elpm__): Ditto.
++ (.xload): Ditto.
++ (__movmemx_hi): Ditto.
++ (__do_global_ctors): Right condition for RAMPZ usage is "have ELPM".
++ (__do_global_dtors): Ditto.
++ (__xload_1, __xload_2, __xload_3, __xload_4): Ditto.
++ (__movmemx_hi): Ditto.
++
+ 2012-03-22 Release Manager
+
+ * GCC 4.7.0 released.
+Index: libgcc/config/avr/lib1funcs.S
+===================================================================
+--- libgcc/config/avr/lib1funcs.S (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ libgcc/config/avr/lib1funcs.S (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1893,6 +1893,10 @@
+ cpc r27, r17
+ brne .L__do_copy_data_loop
+ #endif /* !defined(__AVR_HAVE_ELPMX__) && !defined(__AVR_HAVE_ELPM__) */
++#if defined (__AVR_HAVE_ELPM__) && defined (__AVR_HAVE_RAMPD__)
++ ;; Reset RAMPZ to 0 so that EBI devices don't read garbage from RAM
++ out __RAMPZ__, __zero_reg__
++#endif /* ELPM && RAMPD */
+ ENDF __do_copy_data
+ #endif /* L_copy_data */
+
+@@ -1920,7 +1924,7 @@
+ #ifdef L_ctors
+ .section .init6,"ax",@progbits
+ DEFUN __do_global_ctors
+-#if defined(__AVR_HAVE_RAMPZ__)
++#if defined(__AVR_HAVE_ELPM__)
+ ldi r17, hi8(__ctors_start)
+ ldi r28, lo8(__ctors_end)
+ ldi r29, hi8(__ctors_end)
+@@ -1953,14 +1957,14 @@
+ cpi r28, lo8(__ctors_start)
+ cpc r29, r17
+ brne .L__do_global_ctors_loop
+-#endif /* defined(__AVR_HAVE_RAMPZ__) */
++#endif /* defined(__AVR_HAVE_ELPM__) */
+ ENDF __do_global_ctors
+ #endif /* L_ctors */
+
+ #ifdef L_dtors
+ .section .fini6,"ax",@progbits
+ DEFUN __do_global_dtors
+-#if defined(__AVR_HAVE_RAMPZ__)
++#if defined(__AVR_HAVE_ELPM__)
+ ldi r17, hi8(__dtors_end)
+ ldi r28, lo8(__dtors_start)
+ ldi r29, hi8(__dtors_start)
+@@ -1993,7 +1997,7 @@
+ cpi r28, lo8(__dtors_end)
+ cpc r29, r17
+ brne .L__do_global_dtors_loop
+-#endif /* defined(__AVR_HAVE_RAMPZ__) */
++#endif /* defined(__AVR_HAVE_ELPM__) */
+ ENDF __do_global_dtors
+ #endif /* L_dtors */
+
+@@ -2001,18 +2005,21 @@
+
+ #ifdef L_tablejump_elpm
+ DEFUN __tablejump_elpm__
+-#if defined (__AVR_HAVE_ELPM__)
+-#if defined (__AVR_HAVE_LPMX__)
++#if defined (__AVR_HAVE_ELPMX__)
+ elpm __tmp_reg__, Z+
+ elpm r31, Z
+ mov r30, __tmp_reg__
++#if defined (__AVR_HAVE_RAMPD__)
++ ;; Reset RAMPZ to 0 so that EBI devices don't read garbage from RAM
++ out __RAMPZ__, __zero_reg__
++#endif /* RAMPD */
+ #if defined (__AVR_HAVE_EIJMP_EICALL__)
+ eijmp
+ #else
+ ijmp
+ #endif
+
+-#else
++#elif defined (__AVR_HAVE_ELPM__)
+ elpm
+ adiw r30, 1
+ push r0
+@@ -2024,7 +2031,6 @@
+ #endif
+ ret
+ #endif
+-#endif /* defined (__AVR_HAVE_ELPM__) */
+ ENDF __tablejump_elpm__
+ #endif /* defined (L_tablejump_elpm) */
+
+@@ -2114,11 +2120,18 @@
+ adiw r30, 1
+ .endif
+ #endif
++#if defined (__AVR_HAVE_ELPM__) && defined (__AVR_HAVE_RAMPD__)
++.if \dest == D0+\n-1
++ ;; Reset RAMPZ to 0 so that EBI devices don't read garbage from RAM
++ out __RAMPZ__, __zero_reg__
++.endif
++#endif
+ .endm ; .xload
+
+ #if defined (L_xload_1)
+ DEFUN __xload_1
+-#if defined (__AVR_HAVE_LPMX__) && !defined (__AVR_HAVE_RAMPZ__)
++#if defined (__AVR_HAVE_LPMX__) && !defined (__AVR_HAVE_ELPM__)
++ sbrc HHI8, 7
+ ld D0, Z
+ sbrs HHI8, 7
+ lpm D0, Z
+@@ -2126,14 +2139,14 @@
+ #else
+ sbrc HHI8, 7
+ rjmp 1f
+-#if defined (__AVR_HAVE_RAMPZ__)
++#if defined (__AVR_HAVE_ELPM__)
+ out __RAMPZ__, HHI8
+-#endif /* __AVR_HAVE_RAMPZ__ */
++#endif /* __AVR_HAVE_ELPM__ */
+ .xload D0, 1
+ ret
+ 1: ld D0, Z
+ ret
+-#endif /* LPMx && ! RAMPZ */
++#endif /* LPMx && ! ELPM */
+ ENDF __xload_1
+ #endif /* L_xload_1 */
+
+@@ -2141,9 +2154,9 @@
+ DEFUN __xload_2
+ sbrc HHI8, 7
+ rjmp 1f
+-#if defined (__AVR_HAVE_RAMPZ__)
++#if defined (__AVR_HAVE_ELPM__)
+ out __RAMPZ__, HHI8
+-#endif /* __AVR_HAVE_RAMPZ__ */
++#endif /* __AVR_HAVE_ELPM__ */
+ .xload D0, 2
+ .xload D1, 2
+ ret
+@@ -2157,9 +2170,9 @@
+ DEFUN __xload_3
+ sbrc HHI8, 7
+ rjmp 1f
+-#if defined (__AVR_HAVE_RAMPZ__)
++#if defined (__AVR_HAVE_ELPM__)
+ out __RAMPZ__, HHI8
+-#endif /* __AVR_HAVE_RAMPZ__ */
++#endif /* __AVR_HAVE_ELPM__ */
+ .xload D0, 3
+ .xload D1, 3
+ .xload D2, 3
+@@ -2175,9 +2188,9 @@
+ DEFUN __xload_4
+ sbrc HHI8, 7
+ rjmp 1f
+-#if defined (__AVR_HAVE_RAMPZ__)
++#if defined (__AVR_HAVE_ELPM__)
+ out __RAMPZ__, HHI8
+-#endif /* __AVR_HAVE_RAMPZ__ */
++#endif /* __AVR_HAVE_ELPM__ */
+ .xload D0, 4
+ .xload D1, 4
+ .xload D2, 4
+@@ -2219,7 +2232,7 @@
+
+ ;; Read from Flash
+
+-#if defined (__AVR_HAVE_RAMPZ__)
++#if defined (__AVR_HAVE_ELPM__)
+ out __RAMPZ__, HHI8
+ #endif
+
+@@ -2243,6 +2256,10 @@
+ st X+, r0
+ sbiw LOOP, 1
+ brne 0b
++#if defined (__AVR_HAVE_ELPM__) && defined (__AVR_HAVE_RAMPD__)
++ ;; Reset RAMPZ to 0 so that EBI devices don't read garbage from RAM
++ out __RAMPZ__, __zero_reg__
++#endif /* ELPM && RAMPD */
+ ret
+
+ ;; Read from RAM
+@@ -2252,7 +2269,7 @@
+ ;; and store that Byte to RAM Destination
+ st X+, r0
+ sbiw LOOP, 1
+- brne 0b
++ brne 1b
+ ret
+ ENDF __movmemx_hi
+
+Index: gcc/c-family/ChangeLog
+===================================================================
+--- gcc/c-family/ChangeLog (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/c-family/ChangeLog (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1,3 +1,8 @@
++2012-03-23 William Bader <williambader@hotmail.com>
++
++ PR c/52682
++ * c-lex.c (c_lex_with_flags): Avoid declarations after stmts.
++
+ 2012-03-22 Release Manager
+
+ * GCC 4.7.0 released.
+Index: gcc/c-family/c-lex.c
+===================================================================
+--- gcc/c-family/c-lex.c (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/c-family/c-lex.c (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -342,6 +342,8 @@
+
+ if (flags & CPP_N_USERDEF)
+ {
++ char *str;
++ tree literal;
+ tree suffix_id = get_identifier (suffix);
+ int len = tok->val.str.len - strlen (suffix);
+ /* If this is going to be used as a C string to pass to a
+@@ -350,9 +352,9 @@
+ (const char *) tok->val.str.text);
+ TREE_TYPE (num_string) = char_array_type_node;
+ num_string = fix_string_type (num_string);
+- char *str = CONST_CAST (char *, TREE_STRING_POINTER (num_string));
++ str = CONST_CAST (char *, TREE_STRING_POINTER (num_string));
+ str[len] = '\0';
+- tree literal = build_userdef_literal (suffix_id, *value,
++ literal = build_userdef_literal (suffix_id, *value,
+ num_string);
+ *value = literal;
+ }
+Index: gcc/DATESTAMP
+===================================================================
+--- gcc/DATESTAMP (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/DATESTAMP (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1 +1 @@
+-20120322
++20120323
+Index: gcc/DEV-PHASE
+===================================================================
+--- gcc/DEV-PHASE (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/DEV-PHASE (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -0,0 +1 @@
++prerelease
+Index: gcc/ChangeLog
+===================================================================
+--- gcc/ChangeLog (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/ChangeLog (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1,3 +1,173 @@
++2012-03-23 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ Backported from mainline
++ 2012-03-06 Michael Meissner <meissner@linux.vnet.ibm.com>
++
++ PR target/50310
++ * config/rs6000/vector.md (vector_uneq<mode>): Add support for
++ UNEQ, LTGT, ORDERED, and UNORDERED IEEE vector comparisons.
++ (vector_ltgt<mode>): Likewise.
++ (vector_ordered<mode>): Likewise.
++ (vector_unordered<mode>): Likewise.
++ * config/rs6000/rs6000.c (rs6000_emit_vector_compare_inner): Likewise.
++
++2012-03-23 Joern Rennecke <joern.rennecke@embecosm.com>
++
++ * config/epiphany/epiphany.c (epiphany_function_value_regno_p):
++ Make static.
++
++2012-03-22 Kaz Kojima <kkojima@gcc.gnu.org>
++
++ Backported from mainline
++ 2012-03-02 Kaz Kojima <kkojima@gcc.gnu.org>
++
++ PR target/48596
++ PR target/48806
++ * config/sh/sh.c (sh_register_move_cost): Increase cost between
++ GENERAL_REGS and FP_REGS for SImode.
++
++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-22 Georg-Johann Lay <avr@gjlay.de>
++
++ Backport from 2012-03-22 mainline r185692.
++
++ PR target/52496
++ * config/avr/avr.md (unspec): Remove UNSPEC_MEMORY_BARRIER.
++ (unspecv): Add UNSPECV_MEMORY_BARRIER.
++ (cli_sei): Use unspec_volatile instead of unspec for memory barrier.
++ (delay_cycles_1, delay_cycles_2): Ditto.
++ (delay_cycles_3, delay_cycles_4): Ditto.
++ (nopv, *nopv): Ditto.
++ (sleep, *sleep): Ditto.
++ (wdr, *wdr): Ditto.
+
-+ 2009-10-09 Jakub Jelinek <jakub@redhat.com>
++ Backport from 2012-03-21 mainline r185605.
+
-+ PR debug/40521
-+ * dwarf2out.c (dwarf2out_init): Test whether
-+ HAVE_GAS_CFI_SECTIONS_DIRECTIVE is non-zero instead of checking
-+ it is defined.
++ PR rtl-optimization/52543
++ PR target/52461
++ * config/avr/avr-protos.h (avr_load_lpm): New prototype.
++ * config/avr/avr.c (avr_mode_dependent_address_p): New function.
++ (TARGET_MODE_DEPENDENT_ADDRESS_P): New define.
++ (avr_load_libgcc_p): Restrict to __flash loads.
++ (avr_out_lpm): Only handle 1-byte loads from __flash.
++ (avr_load_lpm): New function.
++ (avr_find_unused_d_reg): Remove.
++ (avr_out_lpm_no_lpmx): Remove.
++ (adjust_insn_length): Handle ADJUST_LEN_LOAD_LPM.
++ * config/avr/avr.md (unspec): Add UNSPEC_LPM.
++ (load_<mode>_libgcc): Use UNSPEC_LPM instead of MEM.
++ (load_<mode>, load_<mode>_clobber): New insns.
++ (mov<mode>): For multi-byte move from non-generic
++ 16-bit address spaces: Expand to load_<mode> resp.
++ load_<mode>_clobber.
++ (load<mode>_libgcc): Remove expander.
++ (split-lpmx): Remove split.
+
-+ 2009-10-02 Jakub Jelinek <jakub@redhat.com>
++ Backport from 2012-03-13 mainline r185329.
+
-+ PR debug/40521
-+ * configure.ac (HAVE_GAS_CFI_SECTIONS_DIRECTIVE): New test.
-+ * configure: Regenerated.
-+ * config.in: Regenerated.
-+ * dwarf2out.c (dwarf2out_do_cfi_asm): Return false if
-+ !HAVE_GAS_CFI_SECTIONS_DIRECTIVE and not emitting .eh_frame.
-+ (dwarf2out_init): If HAVE_GAS_CFI_SECTIONS_DIRECTIVE and
-+ not emitting .eh_frame, emit .cfi_sections .debug_frame
-+ directive.
++ PR target/52488
++ * config/avr/avr.c (avr_prologue_setup_frame): Cut down stack
++ offset (size) to a value the insns can deal with.
++ (expand_epilogue): Ditto.
+
-+2009-10-15 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
++ Backport from 2012-03-12 mainline r185256.
+
-+ Backport from mainline
-+ 2009-09-17 Michael Haubenwallner <michael.haubenwallner@salomon.at>
++ PR target/52499
++ * config/avr/avr.c (avr_mode_code_base_reg_class): Change return
++ type from reg_class_t to enum reg_class.
++ * config/avr/avr-protos.h (avr_mode_code_base_reg_class): Ditto.
+
-+ PR target/40913
-+ * config/pa/t-hpux-shlib: Set soname in libgcc_s.sl.
++ Backport from 2012-03-12 mainline r185253.
+
-+ Backport from mainline
-+ 2009-05-05 Ben Elliston <bje@au.ibm.com>
++ PR target/52148
++ * config/avr/avr.c (avr_out_movmem): Fix typo in output template
++ for the case ADDR_SPACE_FLASH and AVR_HAVE_LPMX introduced in
++ r184615 from 2012-02-28.
+
-+ * config/pa/linux-atomic.c: Eliminate conditional include of
-+ errno.h on non-LP64 systems to simplify build requirements.
++ Backport from 2012-03-08 mainline r185105.
+
-+2009-10-15 Uros Bizjak <ubizjak@gmail.com>
++ * config/avr/avr.md (*addhi3, addhi3_clobber): Add "w" alternative
++ for constants in [-63,63].
+
-+ Backport from mainline:
-+ 2009-10-07 Vladimir Makarov <vmakarov@redhat.com>
++ Backport from 2012-03-08 mainline r185100.
+
-+ PR middle-end/22072
-+ * ira-lives.c (check_and_make_def_conflict): Process all operands.
++ PR target/52496
++ * config/avr/avr.c (avr_mem_clobber): New static function.
++ (avr_expand_delay_cycles): Add memory clobber operand to
++ delay_cycles_1, delay_cycles_2, delay_cycles_3, delay_cycles_4.
++ * config/avr/avr.md (unspec): Add UNSPEC_MEMORY_BARRIER.
++ (enable_interrupt, disable_interrupt): New expander.
++ (nopv, sleep, wdr): New expanders.
++ (delay_cycles_1): Add memory clobber.
++ (delay_cycles_2): Add memory clobber.
++ (delay_cycles_3): Add memory clobber.
++ (delay_cycles_4): Add memory clobber.
++ (cli_sei): New insn from former "enable_interrupt",
++ "disable_interrupt" with memory clobber.
++ (*wdt): New insn from former "wdt" with memory clobber.
++ (*nopv): Similar, but for "nopv".
++ (*sleep): Similar, but for "sleep".
+
-+2009-10-15 H.J. Lu <hongjiu.lu@intel.com>
++ Backport from 2012-03-07 mainline r185043.
+
-+ Backport from mainline:
-+ 2009-10-11 H.J. Lu <hongjiu.lu@intel.com>
++ PR target/52484
++ * config/avr/avr.md (xload<mode>_A): Add R22... to register footprint.
++
++ Backport from 2012-03-07 mainline r185032.
+
-+ PR target/41665
-+ * config/i386/i386.md (addsi_1_zext): Get the proper second
-+ operand for lea.
++ PR target/52506
++ * gcc/config/avr/avr.c (expand_epilogue): Fix order of restoration
++ to: RAMPZ, RAMPY, RAMPX, RAMPD.
++ (expand_prologue): Only clear RAMPZ if it has effect on RAM-read.
+
-+2009-10-15 Jakub Jelinek <jakub@redhat.com>
++ Backport from 2012-03-07 mainline r185031.
+
-+ * BASE-VER: Set to 4.4.3.
-+ * DEV-PHASE: Set to prerelease.
++ PR target/52505
++ * config/avr/avr.c (avr_out_xload): Don't read unintentionally
++ from RAM.
++ * config/avr/avr.md (xload_8): Adjust insn length.
+
- 2009-10-15 Release Manager
-
- * GCC 4.4.2 released.
-@@ -43,8 +163,8 @@
- 2009-10-05 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
-
- Backport from mainline.
-- * config/arm/arm.c (arm_override_options): Really initialize
-- flag_dwarf2_cfi_asm to 0.
-+ * config/arm/arm.c (arm_override_options): Really initialize
-+ flag_dwarf2_cfi_asm to 0.
-
- 2009-10-02 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
-
-@@ -113,7 +233,7 @@
- premark_types_used_by_global_vars): New functions.
- (prune_unused_types): Do not prune types used by global variables.
-
--2009-09-23 Uros Bizjak <ubizjak@gmail.com>
-+2009-09-23 Uros Bizjak <ubizjak@gmail.com>
-
- PR c/39779
- * c-typeck.c (build_binary_op) <short_shift>: Check that integer
-Index: gcc/testsuite/gcc.c-torture/compile/pr33009.c
-===================================================================
---- gcc/testsuite/gcc.c-torture/compile/pr33009.c (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/testsuite/gcc.c-torture/compile/pr33009.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -1,41 +0,0 @@
--/* { dg-do compile } */
--/* Currently ICEs for Alpha, IA64, HPPA, MIPS, CRIS, Xtensa, PowerPC, SH and SPARC; see PR33642. */
--/* { dg-xfail-if "PR33642" { alpha*-*-* hppa*-*-* mips*-*-* powerpc*-*-* cris-*-* crisv32-*-* ia64-*-* xtensa*-*-* sh*-*-* sparc*-*-* s390*-*-* } { "*" } { "" } } */
--/* Currently ICEs for (x86 && ilp32 && pic). */
--/* { dg-xfail-if "PR33642/36240" { { i?86-*-* x86_64-*-* } && { ilp32 && { ! nonpic } } } { "*" } { "" } } */
--/* { dg-prune-output ".*internal compiler error.*" }
--/* { dg-options "-frtl-abstract-sequences" } */
--
--char *progName;
--int bar0 (char *, ...);
--void bar1 (char *);
--void exit (int);
--
--
--#define SAME \
-- bar0 ("%s: Bad flag `%s'\n", argv[i], argv[i] );\
-- bar1 ( progName ); \
-- exit ( 1 );
--
--
--int foo ( int argc, char *argv[] )
--{
-- int i;
-- for (i = 0; i < argc; i++) {
-- switch (argv[i][0]) {
-- case 'c':
-- break;
-- default:
--
-- SAME
--
-- break;
-- }
-- }
-- for (i = 0; i < argc; i++) {
--
-- SAME
--
-- }
-- return 0;
--}
-Index: gcc/testsuite/gcc.c-torture/compile/pr11832.c
-===================================================================
---- gcc/testsuite/gcc.c-torture/compile/pr11832.c (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/testsuite/gcc.c-torture/compile/pr11832.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -1,35 +0,0 @@
--/* { dg-do compile } */
--/* Currently ICEs for Alpha, IA64, HPPA, MIPS, CRIS, Xtensa, PowerPC, SH and SPARC; see PR33642. */
--/* { dg-xfail-if "PR33642" { alpha*-*-* hppa*-*-* mips*-*-* powerpc*-*-* cris-*-* crisv32-*-* ia64-*-* xtensa*-*-* sh*-*-* sparc*-*-* s390*-*-* } { "*" } { "" } } */
--/* Currently ICEs for (x86 && ilp32 && pic). */
--/* { dg-xfail-if "PR33642/36240" { { i?86-*-* x86_64-*-* } && { ilp32 && { ! nonpic } } } { "*" } { "" } } */
--/* { dg-prune-output ".*internal compiler error.*" }
--/* { dg-options "-frtl-abstract-sequences" } */
--
--int a, b, e;
--unsigned char *c;
--void foo()
--{
-- int d = 13;
-- b = -1;
-- switch (e) {
-- case 1:
-- b++; c[b] = (unsigned char)d;
-- break;
-- case 2:
-- b++; c[b] = (unsigned char)d;
-- b++; c[b] = (unsigned char)d;
-- break;
-- case 3:
-- b++; c[b] = (unsigned char)d;
-- b++; c[b] = (unsigned char)d;
-- b++; c[b] = (unsigned char)d;
-- break;
-- default:
-- a = 1;
-- b++; c[b] = (unsigned char)d;
-- b++; c[b] = (unsigned char)d;
-- b++; c[b] = (unsigned char)d;
-- b++; c[b] = (unsigned char)d;
-- }
--}
-Index: gcc/testsuite/gcc.c-torture/compile/pr41634.c
-===================================================================
---- gcc/testsuite/gcc.c-torture/compile/pr41634.c (.../tags/gcc_4_4_2_release) (wersja 0)
-+++ gcc/testsuite/gcc.c-torture/compile/pr41634.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -0,0 +1,19 @@
-+extern int _xgetw();
-+extern int foo(char*);
++ Backport from 2012-03-07 mainline r185030.
++
++ PR target/52461
++ * gcc/config/avr/avr.c (avr_out_lpm): Clear RAMPZ after usage
++ if RAMPZ affects reading from RAM.
++
++ Backport from 2012-03-05 mainline r184919.
++
++ * config/avr/avr.md (*umaddqihi4.2): New insn-and-split.
++
++2012-03-22 Georg-Johann Lay <avr@gjlay.de>
+
-+void test_readmode( int ascii_mode )
-+{
-+ static const char outbuffer[]
-+ = "0,1,2,3,4,5,6,7,8,9\r\n\r\nA,B,C,D,E\r\nX,Y,Z";
-+ char buffer[2*512 +256];
-+ int i, j, ao;
-+ unsigned int fp;
++ Backport from mainline r185259.
+
-+ foo(buffer);
++ PR other/52545
++ * output.h (SECTION_EXCLUDE, SECTION_MACH_DEP): Don't use
++ SECTION_MACH_DEP reserved bits for SECTION_EXCLUDE.
++
++2012-03-22 Jakub Jelinek <jakub@redhat.com>
+
-+ for (i=0, j=0; i<6; i++) {
-+ if (ao==0 || outbuffer[fp-3+i] != '\r')
-+ buffer[j++] = outbuffer[fp-3+i];
-+ }
-+ _xgetw();
-+}
-Index: gcc/testsuite/gcc.c-torture/compile/pr41661.c
-===================================================================
---- gcc/testsuite/gcc.c-torture/compile/pr41661.c (.../tags/gcc_4_4_2_release) (wersja 0)
-+++ gcc/testsuite/gcc.c-torture/compile/pr41661.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -0,0 +1,20 @@
-+/* PR tree-optimization/41661 */
-+/* { dg-do compile } */
-+/* { dg-options "-fno-early-inlining" } */
++ Backported from mainline
++ 2012-03-13 Jakub Jelinek <jakub@redhat.com>
++
++ PR c/52577
++ * c-parser.c (c_parser_postfix_expression)
++ <case RID_BUILTIN_SHUFFLE>: Call mark_exp_read on argument values.
+
-+int g;
++ * config/i386/smmintrin.h: Avoid /* within a comment.
++ * config/i386/nmmintrin.h: Likewise.
+
-+void foo (int x)
-+{
-+ g = x;
-+}
++2012-03-22 Richard Guenther <rguenther@suse.de>
+
-+void bar (double d)
-+{
-+ foo (d == 1);
-+}
++ * BASE-VER: Set to 4.7.1.
++ * DEV-PHASE: Set to prerelease.
+
-+void baz (int a)
-+{
-+ bar (1);
-+}
-Index: gcc/testsuite/gcc.c-torture/compile/pr41182-1.c
+ 2012-03-22 Release Manager
+
+ * GCC 4.7.0 released.
+Index: gcc/testsuite/gcc.target/avr/torture/addr-space-1-0.c
===================================================================
---- gcc/testsuite/gcc.c-torture/compile/pr41182-1.c (.../tags/gcc_4_4_2_release) (wersja 0)
-+++ gcc/testsuite/gcc.c-torture/compile/pr41182-1.c (.../branches/gcc-4_4-branch) (wersja 153570)
+--- gcc/testsuite/gcc.target/avr/torture/addr-space-1-0.c (.../tags/gcc_4_7_0_release) (wersja 0)
++++ gcc/testsuite/gcc.target/avr/torture/addr-space-1-0.c (.../branches/gcc-4_7-branch) (wersja 185750)
@@ -0,0 +1,6 @@
-+typedef long unsigned int size_t;
-+int _lae_process_opts(char *pr, char *pe)
-+{
-+ return (strlen ("on") < ((size_t) ((pe-&pr[2])>(strlen("on"))
-+ ? (pe-&pr[2]) : (strlen("on")))));
-+}
-Index: gcc/testsuite/gcc.c-torture/compile/pr41728.c
-===================================================================
---- gcc/testsuite/gcc.c-torture/compile/pr41728.c (.../tags/gcc_4_4_2_release) (wersja 0)
-+++ gcc/testsuite/gcc.c-torture/compile/pr41728.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -0,0 +1,12 @@
-+int a[8];
-+int s244(void)
-+{
-+ int lrc, j;
-+ lrc = 0;
-+ for (j=0; j<7; j++)
-+ if(a[j] != a[j+1])
-+ lrc = 1;
-+ if (lrc != 0)
-+ return 0;
-+ return 1;
-+}
-Index: gcc/testsuite/gcc.target/arm/neon-thumb2-move.c
-===================================================================
---- gcc/testsuite/gcc.target/arm/neon-thumb2-move.c (.../tags/gcc_4_4_2_release) (wersja 0)
-+++ gcc/testsuite/gcc.target/arm/neon-thumb2-move.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -0,0 +1,98 @@
-+/* { dg-do compile } */
-+/* { dg-require-effective-target arm_neon_ok } */
-+/* { dg-options "-O2 -mthumb -march=armv7-a -mfloat-abi=softfp -mfpu=neon" } */
++/* { dg-options "-std=gnu99" } */
++/* { dg-do run } */
+
-+#include <arm_neon.h>
-+#include <stddef.h>
++#define __as __flash
+
-+void *
-+memset (DST, C, LENGTH)
-+ void *DST;
-+ int C;
-+ size_t LENGTH;
-+{
-+ void* DST0 = DST;
-+ unsigned char C_BYTE = C;
++#include "addr-space-1.h"
+Index: gcc/testsuite/gcc.target/avr/torture/addr-space-1-1.c
+===================================================================
+--- gcc/testsuite/gcc.target/avr/torture/addr-space-1-1.c (.../tags/gcc_4_7_0_release) (wersja 0)
++++ gcc/testsuite/gcc.target/avr/torture/addr-space-1-1.c (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -0,0 +1,6 @@
++/* { dg-options "-std=gnu99 -Tavr51-flash1.x" } */
++/* { dg-do run } */
+
++#define __as __flash1
+
-+ if (__builtin_expect(LENGTH < 4, 1)) {
-+ size_t i = 0;
-+ while (i < LENGTH) {
-+ ((char*)DST)[i] = C_BYTE;
-+ i++;
-+ }
-+ return DST;
-+ }
++#include "addr-space-1.h"
+Index: gcc/testsuite/gcc.target/avr/torture/addr-space-2-0.c
+===================================================================
+--- gcc/testsuite/gcc.target/avr/torture/addr-space-2-0.c (.../tags/gcc_4_7_0_release) (wersja 0)
++++ gcc/testsuite/gcc.target/avr/torture/addr-space-2-0.c (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -0,0 +1,6 @@
++/* { dg-options "-std=gnu99" } */
++/* { dg-do run } */
+
-+ const char* DST_end = (char*)DST + LENGTH;
++#define __as __flash
+
++#include "addr-space-2.h"
+Index: gcc/testsuite/gcc.target/avr/torture/addr-space-2-1.c
+===================================================================
+--- gcc/testsuite/gcc.target/avr/torture/addr-space-2-1.c (.../tags/gcc_4_7_0_release) (wersja 0)
++++ gcc/testsuite/gcc.target/avr/torture/addr-space-2-1.c (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -0,0 +1,6 @@
++/* { dg-options "-std=gnu99 -Tavr51-flash1.x" } */
++/* { dg-do run } */
+
-+ while ((uintptr_t)DST % 4 != 0) {
-+ *(char*) (DST++) = C_BYTE;
-+ }
++#define __as __flash1
+
++#include "addr-space-2.h"
+Index: gcc/testsuite/gcc.target/avr/torture/addr-space-1-x.c
+===================================================================
+--- gcc/testsuite/gcc.target/avr/torture/addr-space-1-x.c (.../tags/gcc_4_7_0_release) (wersja 0)
++++ gcc/testsuite/gcc.target/avr/torture/addr-space-1-x.c (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -0,0 +1,6 @@
++/* { dg-options "-std=gnu99" } */
++/* { dg-do run } */
+
-+ uint32_t C_SHORTWORD = (uint32_t)(unsigned char)(C_BYTE) * 0x01010101;
++#define __as __memx
+
++#include "addr-space-1.h"
+Index: gcc/testsuite/gcc.target/avr/torture/addr-space-1.h
+===================================================================
+--- gcc/testsuite/gcc.target/avr/torture/addr-space-1.h (.../tags/gcc_4_7_0_release) (wersja 0)
++++ gcc/testsuite/gcc.target/avr/torture/addr-space-1.h (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -0,0 +1,83 @@
++#include <stdlib.h>
++#include <string.h>
+
-+ if (__builtin_expect(DST_end - (char*)DST >= 16, 0)) {
-+ while ((uintptr_t)DST % 16 != 0) {
-+ *((uint32_t*)((char*)(DST) + (0))) = C_SHORTWORD;
-+ DST += 4;
++typedef struct
++{
++ char i1;
++ short i2;
++ long i4;
++ long long i8;
++ char str[2][10];
++} a_t;
++
++const __as a_t A =
++ {
++ 12, 345, 678910, 1234567891011ll,
++ {
++ "xxx..xxx",
++ "yyy..yyy"
+ }
++ };
+
-+
-+ uint8x16_t C_WORD = vdupq_n_u8(C_BYTE);
-+
-+
-+
-+
-+
-+ size_t i = 0;
-+ LENGTH = DST_end - (char*)DST;
-+ while (i + 16 * 16 <= LENGTH) {
-+ *((uint8x16_t*)((char*)(DST) + (i))) = C_WORD;
-+ *((uint8x16_t*)((char*)(DST) + (i + 16 * 1))) = C_WORD;
-+ *((uint8x16_t*)((char*)(DST) + (i + 16 * 2))) = C_WORD;
-+ *((uint8x16_t*)((char*)(DST) + (i + 16 * 3))) = C_WORD;
-+ *((uint8x16_t*)((char*)(DST) + (i + 16 * 4))) = C_WORD;
-+ *((uint8x16_t*)((char*)(DST) + (i + 16 * 5))) = C_WORD;
-+ *((uint8x16_t*)((char*)(DST) + (i + 16 * 6))) = C_WORD;
-+ *((uint8x16_t*)((char*)(DST) + (i + 16 * 7))) = C_WORD;
-+ *((uint8x16_t*)((char*)(DST) + (i + 16 * 8))) = C_WORD;
-+ *((uint8x16_t*)((char*)(DST) + (i + 16 * 9))) = C_WORD;
-+ *((uint8x16_t*)((char*)(DST) + (i + 16 * 10))) = C_WORD;
-+ *((uint8x16_t*)((char*)(DST) + (i + 16 * 11))) = C_WORD;
-+ *((uint8x16_t*)((char*)(DST) + (i + 16 * 12))) = C_WORD;
-+ *((uint8x16_t*)((char*)(DST) + (i + 16 * 13))) = C_WORD;
-+ *((uint8x16_t*)((char*)(DST) + (i + 16 * 14))) = C_WORD;
-+ *((uint8x16_t*)((char*)(DST) + (i + 16 * 15))) = C_WORD;
-+ i += 16 * 16;
-+ }
-+ while (i + 16 * 4 <= LENGTH) {
-+ *((uint8x16_t*)((char*)(DST) + (i))) = C_WORD;
-+ *((uint8x16_t*)((char*)(DST) + (i + 16 * 1))) = C_WORD;
-+ *((uint8x16_t*)((char*)(DST) + (i + 16 * 2))) = C_WORD;
-+ *((uint8x16_t*)((char*)(DST) + (i + 16 * 3))) = C_WORD;
-+ i += 16 * 4;
-+ }
-+ while (i + 16 <= LENGTH) {
-+ *((uint8x16_t*)((char*)(DST) + (i))) = C_WORD;
-+ i += 16;
++const __as volatile a_t V =
++ {
++ 12+1, 345+1, 678910+1, 1234567891011ll+1,
++ {
++ "XXX..XXX",
++ "YYY..YYY"
+ }
-+ DST += i;
-+ }
-+
-+ while (4 <= DST_end - (char*)DST) {
-+ *((uint32_t*)((char*)(DST) + (0))) = C_SHORTWORD;
-+ DST += 4;
-+ }
-+
++ };
+
-+ while ((char*)DST < DST_end) {
-+ *((char*)DST) = C_BYTE;
-+ DST++;
-+ }
++a_t A2;
++volatile a_t V2;
+
-+ return DST0;
++int main (void)
++{
++ if (A.i1 != 12
++ || A.i1 != V.i1 -1)
++ abort();
++
++ if (A.i2 != 345
++ || A.i2 != V.i2 -1)
++ abort();
++
++ if (A.i4 != 678910
++ || A.i4 != V.i4 -1)
++ abort();
++
++ if (A.i8 != 1234567891011ll
++ || A.i8 != V.i8 -1)
++ abort();
++
++ A2 = A;
++ V2 = V;
++
++ if (A2.i1 != 12
++ || A2.i1 != V2.i1 -1)
++ abort();
++
++ if (A2.i2 != 345
++ || A2.i2 != V2.i2 -1)
++ abort();
++
++ if (A2.i4 != 678910
++ || A2.i4 != V2.i4 -1)
++ abort();
++
++ if (A2.i8 != 1234567891011ll
++ || A2.i8 != V2.i8 -1)
++ abort();
++
++ if (strcmp (A2.str[0], "xxx..xxx"))
++ abort();
++ if (strcmp (A2.str[1], "yyy..yyy"))
++ abort();
++
++ if (strcmp ((const char*) V2.str[0], "XXX..XXX"))
++ abort();
++ if (strcmp ((const char*) V2.str[1], "YYY..YYY"))
++ abort();
++
++ exit (0);
++ return 0;
+}
-Index: gcc/testsuite/gcc.dg/torture/pr41555.c
+Index: gcc/testsuite/gcc.target/avr/torture/addr-space-2-x.c
===================================================================
---- gcc/testsuite/gcc.dg/torture/pr41555.c (.../tags/gcc_4_4_2_release) (wersja 0)
-+++ gcc/testsuite/gcc.dg/torture/pr41555.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -0,0 +1,119 @@
+--- gcc/testsuite/gcc.target/avr/torture/addr-space-2-x.c (.../tags/gcc_4_7_0_release) (wersja 0)
++++ gcc/testsuite/gcc.target/avr/torture/addr-space-2-x.c (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -0,0 +1,9 @@
++/* { dg-options "-std=gnu99 -Wa,--no-warn" } */
+/* { dg-do run } */
-+/* { dg-options "-std=c99" } */
-+
-+#include <stdint.h>
-+#include <limits.h>
-+
-+extern void abort (void);
+
-+static uint64_t safe_div_func_uint64_t_u_u (uint64_t _ui1, uint64_t _ui2)
-+{
-+ if (_ui2==0) return _ui1;
-+ return _ui1 / _ui2;
-+}
++/* --no-warn because: "assembling 24-bit address needs binutils extension"
++ see binutils PR13503. */
+
-+static int64_t safe_div_func_int64_t_s_s (int64_t _si1, int64_t _si2)
-+{
-+ if (_si2==0 || (_si1==INT64_MIN && _si2==-1)) return _si1;
-+ return _si1 / _si2;
-+}
++#define __as __memx
+
-+#define safe_add_macro_int8_t_s_s(si1,si2) \
-+ ((((((int8_t)(si1))>((int8_t)0)) && (((int8_t)(si2))>((int8_t)0)) && (((int8_t)(si1)) > ((INT8_MAX)-((int8_t)(si2))))) \
-+ || ((((int8_t)(si1))<((int8_t)0)) && (((int8_t)(si2))<((int8_t)0)) && (((int8_t)(si1)) < ((INT8_MIN)-((int8_t)(si2)))))) \
-+ ? ((int8_t)(si1)) \
-+ : (((int8_t)(si1)) + ((int8_t)(si2))) \
-+ )
++#include "addr-space-2.h"
+Index: gcc/testsuite/gcc.target/avr/torture/addr-space-2.h
+===================================================================
+--- gcc/testsuite/gcc.target/avr/torture/addr-space-2.h (.../tags/gcc_4_7_0_release) (wersja 0)
++++ gcc/testsuite/gcc.target/avr/torture/addr-space-2.h (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -0,0 +1,106 @@
++extern void exit (int);
++extern void abort (void);
+
-+static int8_t
-+safe_add_func_int8_t_s_s(int8_t _si1, int8_t _si2)
++typedef struct T
+{
-+ return safe_add_macro_int8_t_s_s(_si1,_si2);
-+}
++ char val;
++ const __as struct T *l, *r;
++} tree;
+
-+#define safe_rshift_macro_uint64_t_u_s(left,right) \
-+ (((((int)(right)) < ((uint64_t)0)) \
-+ || (((int)(right)) >= sizeof(uint64_t)*CHAR_BIT)) \
-+ ? ((uint64_t)(left)) \
-+ : (((uint64_t)(left)) >> ((int)(right))))
++/*
++ abcd
++ / \
++ ab cd
++ / \ / \
++ a b c d
++*/
+
-+static uint64_t
-+safe_rshift_func_uint64_t_u_s(uint64_t _left, int _right)
-+{
-+ return safe_rshift_macro_uint64_t_u_s(_left,_right);
-+}
++const __as tree a = { 'a', 0, 0 };
++const __as tree b = { 'b', 0, 0 };
++const __as tree c = { 'c', 0, 0 };
++const __as tree d = { 'd', 0, 0 };
+
-+#define safe_mul_macro_int32_t_s_s(si1,si2) \
-+ ((((((int32_t)(si1)) > ((int32_t)0)) && (((int32_t)(si2)) > ((int32_t)0)) && (((int32_t)(si1)) > ((INT32_MAX) / ((int32_t)(si2))))) || \
-+ ((((int32_t)(si1)) > ((int32_t)0)) && (((int32_t)(si2)) <= ((int32_t)0)) && (((int32_t)(si2)) < ((INT32_MIN) / ((int32_t)(si1))))) || \
-+ ((((int32_t)(si1)) <= ((int32_t)0)) && (((int32_t)(si2)) > ((int32_t)0)) && (((int32_t)(si1)) < ((INT32_MIN) / ((int32_t)(si2))))) || \
-+ ((((int32_t)(si1)) <= ((int32_t)0)) && (((int32_t)(si2)) <= ((int32_t)0)) && (((int32_t)(si1)) != ((int32_t)0)) && (((int32_t)(si2)) < ((INT32_MAX) / ((int32_t)(si1)))))) \
-+ ? ((int32_t)(si1)) \
-+ : ((int32_t)(si1)) * ((int32_t)(si2)))
++const __as tree ab = { 'A', &a, &b };
++const __as tree cd = { 'C', &c, &d };
+
-+static int32_t
-+safe_mul_func_int32_t_s_s (int32_t _si1, int32_t _si2)
-+{
-+ return safe_mul_macro_int32_t_s_s(_si1,_si2);
-+}
++const __as tree abcd = { '*', &ab, &cd };
+
-+static int8_t g_39;
-+static volatile uint8_t g_46;
-+static uint8_t g_47;
-+static uint8_t *g_62;
-+static uint8_t g_79;
-+static int8_t g_101 = -1L;
-+static uint8_t *g_114;
-+static uint8_t *g_126;
-+static uint8_t g_133;
-+
-+static uint16_t func_35 (int32_t * p_36, uint64_t p_37, uint32_t p_38);
-+static uint16_t func_35 (int32_t * p_36, uint64_t p_37, uint32_t p_38)
++static void
++test1 (void)
+{
-+ if (g_62 != 0)
-+ abort ();
-+ for (g_39 = 1; g_39 < 0; g_39 = 1)
-+ {
-+ }
-+ return 1;
++ if (abcd.val != '*')
++ abort();
++
++ if (abcd.l->val != 'A')
++ abort();
++ if (abcd.r->val != 'C')
++ abort();
++
++ if (abcd.l->l->val != 'a')
++ abort();
++ if (abcd.l->r->val != 'b')
++ abort();
++ if (abcd.r->l->val != 'c')
++ abort();
++ if (abcd.r->r->val != 'd')
++ abort();
+}
+
-+static int32_t func_19 (int32_t p_20);
-+static int32_t func_19 (int32_t p_20)
++static void
++test2 (const __as tree *t)
+{
-+ if (1 !=
-+ safe_div_func_uint64_t_u_u ((safe_div_func_int64_t_s_s (p_20, 1)),
-+ g_101))
-+ {
-+ func_35 (0, 1 <= (safe_add_func_int8_t_s_s (g_47, g_46)) > p_20 < 1, 1);
-+ g_133 = 1;
-+ if (g_114 != 0)
-+ abort ();
-+ if (g_126 != 0)
-+ abort ();
-+ }
-+ return 1;
++ if (t->val != '*')
++ abort();
++
++ if (t->l->val != 'A')
++ abort();
++ if (t->r->val != 'C')
++ abort();
++
++ if (t->l->l->val != 'a')
++ abort();
++ if (t->l->r->val != 'b')
++ abort();
++ if (t->r->l->val != 'c')
++ abort();
++ if (t->r->r->val != 'd')
++ abort();
+}
+
-+static uint8_t func_2 (int32_t p_6);
-+static uint8_t func_2 (int32_t p_6)
++static void
++test3 (const __as tree *pt)
+{
-+ for (1; p_6 > 1; 1)
-+ return 0;
-+ func_19 (g_79);
-+ if (safe_mul_func_int32_t_s_s
-+ ((0, 1 < (safe_rshift_func_uint64_t_u_s (1 ^ p_6, 1))),
-+ (func_35 (&p_6, 1, 1) < 1)))
-+ {
-+ }
-+ return 1;
++ tree t = *pt;
++
++ if (t.val != '*')
++ abort();
++
++ if (t.l->val != 'A')
++ abort();
++ if (t.r->val != 'C')
++ abort();
++
++ if (t.l->l->val != 'a')
++ abort();
++ if (t.l->r->val != 'b')
++ abort();
++ if (t.r->l->val != 'c')
++ abort();
++ if (t.r->r->val != 'd')
++ abort();
+}
+
+int main (void)
+{
-+ func_2 (1);
-+ if (g_133 != 1)
-+ abort ();
++ const __as tree *t = &abcd;
++ test1();
++ test2 (&abcd);
++ test3 (&abcd);
++
++ __asm ("" : "+r" (t));
++ test2 (t);
++ test3 (t);
++
++ exit (0);
+ return 0;
+}
-+
-Index: gcc/testsuite/gcc.dg/debug/pr41717.c
-===================================================================
---- gcc/testsuite/gcc.dg/debug/pr41717.c (.../tags/gcc_4_4_2_release) (wersja 0)
-+++ gcc/testsuite/gcc.dg/debug/pr41717.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -0,0 +1,10 @@
-+/* PR debug/41717 */
-+/* { dg-do compile } */
-+
-+void
-+foo (void)
-+{
-+ _Complex float v[1], w;
-+ v[1] = 0.0f + 0.8fi;
-+ w = __builtin_conjf (v[1] * v[1]);
-+}
-Index: gcc/testsuite/gcc.dg/pr41573.c
+Index: gcc/testsuite/gcc.target/avr/torture/addr-space-1-g.c
===================================================================
---- gcc/testsuite/gcc.dg/pr41573.c (.../tags/gcc_4_4_2_release) (wersja 0)
-+++ gcc/testsuite/gcc.dg/pr41573.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -0,0 +1,15 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O2" } */
-+__inline __attribute__ ((__always_inline__)) char *
-+strcpy (char *__dest, __const char *__src)
-+{
-+ return __builtin___strcpy_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
-+}
+--- gcc/testsuite/gcc.target/avr/torture/addr-space-1-g.c (.../tags/gcc_4_7_0_release) (wersja 0)
++++ gcc/testsuite/gcc.target/avr/torture/addr-space-1-g.c (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -0,0 +1,6 @@
++/* { dg-options "-std=gnu99" } */
++/* { dg-do run } */
+
-+const char* get_attr(unsigned attr)
-+{
-+ static char tmp[256];
++#define __as
+
-+ strcpy(tmp, "");
-+ return tmp;
-+}
-Index: gcc/testsuite/gcc.dg/cleanup-13.c
++#include "addr-space-1.h"
+Index: gcc/testsuite/gcc.target/avr/torture/addr-space-2-g.c
===================================================================
---- gcc/testsuite/gcc.dg/cleanup-13.c (.../tags/gcc_4_4_2_release) (wersja 0)
-+++ gcc/testsuite/gcc.dg/cleanup-13.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -0,0 +1,319 @@
-+/* HP-UX libunwind.so doesn't provide _UA_END_OF_STACK */
+--- gcc/testsuite/gcc.target/avr/torture/addr-space-2-g.c (.../tags/gcc_4_7_0_release) (wersja 0)
++++ gcc/testsuite/gcc.target/avr/torture/addr-space-2-g.c (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -0,0 +1,6 @@
++/* { dg-options "-std=gnu99" } */
+/* { dg-do run } */
-+/* { dg-options "-fexceptions" } */
-+/* { dg-skip-if "" { "ia64-*-hpux11.*" } { "*" } { "" } } */
-+/* Verify DW_OP_* handling in the unwinder. */
-+
-+#include <unwind.h>
-+#include <stdlib.h>
-+#include <string.h>
-+
-+/* #define OP_addr(x) 0x06, ... */
-+#define OP_deref 0x06,
-+#define SLEB128(x) (x)&0x7f /* Assume here the value is -0x40 ... 0x3f. */
-+#define ULEB128(x) (x)&0x7f /* Assume here the value is 0 ... 0x7f. */
-+#define VAL1(x) (x)&0xff
-+#if defined (__BIG_ENDIAN__)
-+#define VAL2(x) ((x)>>8)&0xff,(x)&0xff
-+#define VAL4(x) ((x)>>24)&0xff,((x)>>16)&0xff,((x)>>8)&0xff,(x)&0xff
-+#define VAL8(x) ((x)>>56)&0xff,((x)>>48)&0xff,((x)>>40)&0xff,((x)>>32)&0xff,((x)>>24)&0xff,((x)>>16)&0xff,((x)>>8)&0xff,(x)&0xff
-+#elif defined(__LITTLE_ENDIAN__) || defined(__x86_64__) || defined(__i386__)
-+#define VAL2(x) (x)&0xff,((x)>>8)&0xff
-+#define VAL4(x) (x)&0xff,((x)>>8)&0xff,((x)>>16)&0xff,((x)>>24)&0xff
-+#define VAL8(x) (x)&0xff,((x)>>8)&0xff,((x)>>16)&0xff,((x)>>24)&0xff,((x)>>32)&0xff,((x)>>40)&0xff,((x)>>48)&0xff,((x)>>56)&0xff
-+#endif
-+#define OP_const1u(x) 0x08,VAL1(x),
-+#define OP_const1s(x) 0x09,VAL1(x),
-+#define OP_const2u(x) 0x0a,VAL2(x),
-+#define OP_const2s(x) 0x0b,VAL2(x),
-+#define OP_const4u(x) 0x0c,VAL4(x),
-+#define OP_const4s(x) 0x0d,VAL4(x),
-+#define OP_const8u(x) 0x0e,VAL8(x),
-+#define OP_const8s(x) 0x0f,VAL8(x),
-+#define OP_constu(x) 0x10,ULEB128(x),
-+#define OP_consts(x) 0x11,SLEB128(x),
-+#define OP_dup 0x12,
-+#define OP_drop 0x13,
-+#define OP_over 0x14,
-+#define OP_pick(x) 0x15,VAL1(x),
-+#define OP_swap 0x16,
-+#define OP_rot 0x17,
-+#define OP_xderef 0x18,
-+#define OP_abs 0x19,
-+#define OP_and 0x1a,
-+#define OP_div 0x1b,
-+#define OP_minus 0x1c,
-+#define OP_mod 0x1d,
-+#define OP_mul 0x1e,
-+#define OP_neg 0x1f,
-+#define OP_not 0x20,
-+#define OP_or 0x21,
-+#define OP_plus 0x22,
-+#define OP_plus_uconst(x) 0x23,ULEB128(x),
-+#define OP_shl 0x24,
-+#define OP_shr 0x25,
-+#define OP_shra 0x26,
-+#define OP_xor 0x27,
-+#define OP_bra(x) 0x28,VAL2(x),
-+#define OP_eq 0x29,
-+#define OP_ge 0x2a,
-+#define OP_gt 0x2b,
-+#define OP_le 0x2c,
-+#define OP_lt 0x2d,
-+#define OP_ne 0x2e,
-+#define OP_skip(x) 0x2f,VAL2(x),
-+#define OP_lit0 0x30,
-+#define OP_lit1 0x31,
-+#define OP_lit2 0x32,
-+#define OP_lit3 0x33,
-+#define OP_lit4 0x34,
-+#define OP_lit5 0x35,
-+#define OP_lit6 0x36,
-+#define OP_lit7 0x37,
-+#define OP_lit8 0x38,
-+#define OP_lit9 0x39,
-+#define OP_lit10 0x3a,
-+#define OP_lit11 0x3b,
-+#define OP_lit12 0x3c,
-+#define OP_lit13 0x3d,
-+#define OP_lit14 0x3e,
-+#define OP_lit15 0x3f,
-+#define OP_lit16 0x40,
-+#define OP_lit17 0x41,
-+#define OP_lit18 0x42,
-+#define OP_lit19 0x43,
-+#define OP_lit20 0x44,
-+#define OP_lit21 0x45,
-+#define OP_lit22 0x46,
-+#define OP_lit23 0x47,
-+#define OP_lit24 0x48,
-+#define OP_lit25 0x49,
-+#define OP_lit26 0x4a,
-+#define OP_lit27 0x4b,
-+#define OP_lit28 0x4c,
-+#define OP_lit29 0x4d,
-+#define OP_lit30 0x4e,
-+#define OP_lit31 0x4f,
-+#define OP_reg0 0x50,
-+#define OP_reg1 0x51,
-+#define OP_reg2 0x52,
-+#define OP_reg3 0x53,
-+#define OP_reg4 0x54,
-+#define OP_reg5 0x55,
-+#define OP_reg6 0x56,
-+#define OP_reg7 0x57,
-+#define OP_reg8 0x58,
-+#define OP_reg9 0x59,
-+#define OP_reg10 0x5a,
-+#define OP_reg11 0x5b,
-+#define OP_reg12 0x5c,
-+#define OP_reg13 0x5d,
-+#define OP_reg14 0x5e,
-+#define OP_reg15 0x5f,
-+#define OP_reg16 0x60,
-+#define OP_reg17 0x61,
-+#define OP_reg18 0x62,
-+#define OP_reg19 0x63,
-+#define OP_reg20 0x64,
-+#define OP_reg21 0x65,
-+#define OP_reg22 0x66,
-+#define OP_reg23 0x67,
-+#define OP_reg24 0x68,
-+#define OP_reg25 0x69,
-+#define OP_reg26 0x6a,
-+#define OP_reg27 0x6b,
-+#define OP_reg28 0x6c,
-+#define OP_reg29 0x6d,
-+#define OP_reg30 0x6e,
-+#define OP_reg31 0x6f,
-+#define OP_breg0(x) 0x70,SLEB128(x),
-+#define OP_breg1(x) 0x71,SLEB128(x),
-+#define OP_breg2(x) 0x72,SLEB128(x),
-+#define OP_breg3(x) 0x73,SLEB128(x),
-+#define OP_breg4(x) 0x74,SLEB128(x),
-+#define OP_breg5(x) 0x75,SLEB128(x),
-+#define OP_breg6(x) 0x76,SLEB128(x),
-+#define OP_breg7(x) 0x77,SLEB128(x),
-+#define OP_breg8(x) 0x78,SLEB128(x),
-+#define OP_breg9(x) 0x79,SLEB128(x),
-+#define OP_breg10(x) 0x7a,SLEB128(x),
-+#define OP_breg11(x) 0x7b,SLEB128(x),
-+#define OP_breg12(x) 0x7c,SLEB128(x),
-+#define OP_breg13(x) 0x7d,SLEB128(x),
-+#define OP_breg14(x) 0x7e,SLEB128(x),
-+#define OP_breg15(x) 0x7f,SLEB128(x),
-+#define OP_breg16(x) 0x80,SLEB128(x),
-+#define OP_breg17(x) 0x81,SLEB128(x),
-+#define OP_breg18(x) 0x82,SLEB128(x),
-+#define OP_breg19(x) 0x83,SLEB128(x),
-+#define OP_breg20(x) 0x84,SLEB128(x),
-+#define OP_breg21(x) 0x85,SLEB128(x),
-+#define OP_breg22(x) 0x86,SLEB128(x),
-+#define OP_breg23(x) 0x87,SLEB128(x),
-+#define OP_breg24(x) 0x88,SLEB128(x),
-+#define OP_breg25(x) 0x89,SLEB128(x),
-+#define OP_breg26(x) 0x8a,SLEB128(x),
-+#define OP_breg27(x) 0x8b,SLEB128(x),
-+#define OP_breg28(x) 0x8c,SLEB128(x),
-+#define OP_breg29(x) 0x8d,SLEB128(x),
-+#define OP_breg30(x) 0x8e,SLEB128(x),
-+#define OP_breg31(x) 0x8f,SLEB128(x),
-+#define OP_regx(x) 0x90,SLEB128(x),
-+#define OP_fbreg(x) 0x91,SLEB128(x),
-+#define OP_bregx(x,y) 0x92,ULEB128(x),SLEB128(y),
-+#define OP_piece(x) 0x93,ULEB128(x),
-+#define OP_deref_size(x) 0x94,VAL1(x),
-+#define OP_xderef_size(x) 0x95,VAL1(x),
-+#define OP_nop 0x96,
-+#define OP_nop_termination 0x96
-+#define OP_push_object_address 0x97,
-+#define OP_call2(x) 0x98,VAL2(x),
-+#define OP_call4(x) 0x99,VAL4(x),
-+/* #define OP_call_ref(x) 0x9a,... */
-+#define OP_form_tls_address(x) 0x9b,
-+#define OP_call_frame_cfa 0x9c,
-+#define OP_bit_piece(x) 0x9d,ULEB128(x),
-+/* #define OP_implicit_value(x...) 0x9e,... */
-+#define OP_stack_value 0x9f,
-+#define OP_GNU_push_tls_address 0xe0,
-+/* #define OP_GNU_encoded_addr(x...) 0xf1, */
-+
-+#define ASSERT_TOS_NON0 OP_bra(3) OP_skip(-3)
-+#define ASSERT_TOS_0 OP_lit0 OP_eq ASSERT_TOS_NON0
-+
-+/* Initially there is CFA value on the stack, we want to
-+ keep it there at the end. */
-+#define CFI_PROGRAM \
-+OP_lit0 OP_nop ASSERT_TOS_0 \
-+OP_lit1 ASSERT_TOS_NON0 \
-+OP_lit1 OP_const1u(1) OP_eq ASSERT_TOS_NON0 \
-+OP_lit16 OP_const2u(16) OP_eq ASSERT_TOS_NON0 \
-+OP_lit31 OP_const4u(31) OP_ne ASSERT_TOS_0 \
-+OP_lit1 OP_neg OP_const1s(-1) OP_eq ASSERT_TOS_NON0 \
-+OP_lit16 OP_neg OP_const2s(-16) OP_ne ASSERT_TOS_0 \
-+OP_lit31 OP_const4s(-31) OP_neg OP_ne ASSERT_TOS_0 \
-+OP_lit7 OP_dup OP_plus_uconst(2) OP_lit9 OP_eq ASSERT_TOS_NON0 \
-+ OP_lit7 OP_eq ASSERT_TOS_NON0 \
-+OP_lit20 OP_lit1 OP_drop OP_lit20 OP_eq ASSERT_TOS_NON0 \
-+OP_lit17 OP_lit19 OP_over OP_lit17 OP_eq ASSERT_TOS_NON0 \
-+ OP_lit19 OP_eq ASSERT_TOS_NON0 OP_lit17 OP_eq ASSERT_TOS_NON0 \
-+OP_lit1 OP_lit2 OP_lit3 OP_lit4 OP_pick(2) OP_lit2 OP_eq ASSERT_TOS_NON0\
-+ OP_lit4 OP_eq ASSERT_TOS_NON0 OP_lit3 OP_eq ASSERT_TOS_NON0 \
-+ OP_pick(0) OP_lit2 OP_eq ASSERT_TOS_NON0 \
-+ OP_lit2 OP_eq ASSERT_TOS_NON0 OP_lit1 OP_eq ASSERT_TOS_NON0 \
-+OP_lit6 OP_lit12 OP_swap OP_lit6 OP_eq ASSERT_TOS_NON0 \
-+ OP_lit12 OP_eq ASSERT_TOS_NON0 \
-+OP_lit7 OP_lit8 OP_lit9 OP_rot OP_lit8 OP_eq ASSERT_TOS_NON0 \
-+ OP_lit7 OP_eq ASSERT_TOS_NON0 OP_lit9 OP_eq ASSERT_TOS_NON0 \
-+OP_lit7 OP_abs OP_lit7 OP_eq ASSERT_TOS_NON0 \
-+OP_const1s(-123) OP_abs OP_const1u(123) OP_eq ASSERT_TOS_NON0 \
-+OP_lit3 OP_lit6 OP_and OP_lit2 OP_eq ASSERT_TOS_NON0 \
-+OP_lit3 OP_lit6 OP_or OP_lit7 OP_eq ASSERT_TOS_NON0 \
-+OP_lit17 OP_lit2 OP_minus OP_lit15 OP_eq ASSERT_TOS_NON0 \
-+OP_const1s(-6) OP_const1s(-2) OP_div OP_lit3 OP_eq ASSERT_TOS_NON0 \
-+OP_const1s(-6) OP_const1s(-4) OP_mod OP_const1s(-2) \
-+ OP_eq ASSERT_TOS_NON0 \
-+OP_lit16 OP_lit31 OP_plus_uconst(1) OP_mul OP_const2u(512) \
-+ OP_eq ASSERT_TOS_NON0 \
-+OP_lit5 OP_not OP_lit31 OP_and OP_lit26 OP_eq ASSERT_TOS_NON0 \
-+OP_lit12 OP_lit31 OP_plus OP_const1u(43) OP_eq ASSERT_TOS_NON0 \
-+OP_const1s(-6) OP_lit2 OP_plus OP_const1s(-4) OP_eq ASSERT_TOS_NON0 \
-+OP_const1s(-6) OP_plus_uconst(3) OP_const1s(-3) OP_eq ASSERT_TOS_NON0 \
-+OP_lit16 OP_lit4 OP_shl OP_const2u(256) OP_eq ASSERT_TOS_NON0 \
-+OP_lit16 OP_lit3 OP_shr OP_lit2 OP_eq ASSERT_TOS_NON0 \
-+OP_const1s(-16) OP_lit3 OP_shra OP_const1s(-2) OP_eq ASSERT_TOS_NON0 \
-+OP_lit3 OP_lit6 OP_xor OP_lit5 OP_eq ASSERT_TOS_NON0 \
-+OP_lit3 OP_lit6 OP_le ASSERT_TOS_NON0 \
-+OP_lit3 OP_lit3 OP_le ASSERT_TOS_NON0 \
-+OP_lit6 OP_lit3 OP_le ASSERT_TOS_0 \
-+OP_lit3 OP_lit6 OP_lt ASSERT_TOS_NON0 \
-+OP_lit3 OP_lit3 OP_lt ASSERT_TOS_0 \
-+OP_lit6 OP_lit3 OP_lt ASSERT_TOS_0 \
-+OP_lit3 OP_lit6 OP_ge ASSERT_TOS_0 \
-+OP_lit3 OP_lit3 OP_ge ASSERT_TOS_NON0 \
-+OP_lit6 OP_lit3 OP_ge ASSERT_TOS_NON0 \
-+OP_lit3 OP_lit6 OP_gt ASSERT_TOS_0 \
-+OP_lit3 OP_lit3 OP_gt ASSERT_TOS_0 \
-+OP_lit6 OP_lit3 OP_gt ASSERT_TOS_NON0 \
-+OP_const1s(-6) OP_lit1 OP_shr OP_lit0 OP_gt ASSERT_TOS_NON0 \
-+OP_const1s(-6) OP_lit1 OP_shra OP_lit0 OP_lt ASSERT_TOS_NON0
-+
-+#define CFI_ESCAPE_VAL_2(VALUES...) #VALUES
-+#define CFI_ESCAPE_VAL_1(VALUES...) CFI_ESCAPE_VAL_2(VALUES)
-+#define CFI_ESCAPE_VAL(VALUES...) CFI_ESCAPE_VAL_1(VALUES)
-+#define CFI_ESCAPE do { } while (0)
-+#define CFI_ARCH_PROGRAM OP_nop_termination
-+#ifdef __GCC_HAVE_DWARF2_CFI_ASM
-+#if defined (__x86_64__)
-+#undef CFI_ESCAPE
-+#undef CFI_ARCH_PROGRAM
-+#define CFI_ARCH_PROGRAM CFI_PROGRAM OP_lit8 OP_minus OP_nop_termination
-+unsigned char cfi_arch_program[] = { CFI_ARCH_PROGRAM };
-+extern char verify_it[sizeof (cfi_arch_program) - 0x80 < 0x3f80 ? 1 : -1];
-+/* DW_CFA_expression %rip, uleb128(l2-l1), l1: program DW_OP_lit8 DW_OP_minus DW_OP_nop l2: */
-+#define CFI_ESCAPE \
-+ asm volatile (".cfi_escape 0x10, 0x10, (%P0&0x7f)+0x80, %P0>>7, " \
-+ CFI_ESCAPE_VAL (CFI_ARCH_PROGRAM) \
-+ : : "i" (sizeof (cfi_arch_program)))
-+#elif defined (__i386__)
-+#undef CFI_ESCAPE
-+#undef CFI_ARCH_PROGRAM
-+#define CFI_ARCH_PROGRAM CFI_PROGRAM OP_lit4 OP_minus OP_nop_termination
-+unsigned char cfi_arch_program[] = { CFI_ARCH_PROGRAM };
-+extern char verify_it[sizeof (cfi_arch_program) - 0x80 < 0x3f80 ? 1 : -1];
-+/* DW_CFA_expression %eip, uleb128(l2-l1), l1: program DW_OP_lit4 DW_OP_minus DW_OP_nop l2: */
-+#define CFI_ESCAPE \
-+ asm volatile (".cfi_escape 0x10, 8, (%P0&0x7f)+0x80, %P0>>7, " \
-+ CFI_ESCAPE_VAL (CFI_ARCH_PROGRAM) \
-+ : : "i" (sizeof (cfi_arch_program)))
-+#endif
-+#endif
-+static _Unwind_Reason_Code
-+force_unwind_stop (int version, _Unwind_Action actions,
-+ _Unwind_Exception_Class exc_class,
-+ struct _Unwind_Exception *exc_obj,
-+ struct _Unwind_Context *context,
-+ void *stop_parameter)
-+{
-+ if (actions & _UA_END_OF_STACK)
-+ abort ();
-+ return _URC_NO_REASON;
-+}
-+
-+static void force_unwind ()
-+{
-+ struct _Unwind_Exception *exc = malloc (sizeof (*exc));
-+ memset (&exc->exception_class, 0, sizeof (exc->exception_class));
-+ exc->exception_cleanup = 0;
+
-+#ifndef __USING_SJLJ_EXCEPTIONS__
-+ _Unwind_ForcedUnwind (exc, force_unwind_stop, 0);
++#define __as
++
++#include "addr-space-2.h"
+Index: gcc/testsuite/gcc.target/avr/progmem.h
+===================================================================
+--- gcc/testsuite/gcc.target/avr/progmem.h (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/testsuite/gcc.target/avr/progmem.h (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -5,6 +5,7 @@
+ static const char __c[] PROGMEM = (s); \
+ &__c[0];}))
+
++#ifdef __AVR_HAVE_LPMX__
+ #define pgm_read_char(addr) \
+ (__extension__({ \
+ unsigned int __addr16 = (unsigned int)(addr); \
+@@ -12,3 +13,13 @@
+ __asm__ ("lpm %0, %a1" \
+ : "=r" (__result) : "z" (__addr16)); \
+ __result; }))
+#else
-+ _Unwind_SjLj_ForcedUnwind (exc, force_unwind_stop, 0);
++#define pgm_read_char(addr) \
++ (__extension__({ \
++ unsigned int __addr16 = (unsigned int)(addr); \
++ char __result; \
++ __asm__ ("lpm" "\n\t" \
++ "mov %0, r0" \
++ : "=r" (__result) : "z" (__addr16)); \
++ __result; }))
+#endif
+Index: gcc/testsuite/gfortran.dg/intrinsic_8.f90
+===================================================================
+--- gcc/testsuite/gfortran.dg/intrinsic_8.f90 (.../tags/gcc_4_7_0_release) (wersja 0)
++++ gcc/testsuite/gfortran.dg/intrinsic_8.f90 (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -0,0 +1,23 @@
++! { dg-do compile }
++!
++! PR fortran/52452
++!
++! Contributed by Roger Ferrer Ibanez
++!
++PROGRAM test_etime
++ IMPLICIT NONE
++ INTRINSIC :: etime
++ REAL(4) :: tarray(1:2)
++ REAL(4) :: result
++
++ CALL etime(tarray, result)
++END PROGRAM test_etime
++
++subroutine test_etime2
++ IMPLICIT NONE
++ INTRINSIC :: etime
++ REAL(4) :: tarray(1:2)
++ REAL(4) :: result
++
++ result = etime(tarray)
++END subroutine test_etime2
+Index: gcc/testsuite/gcc.dg/Wunused-var-3.c
+===================================================================
+--- gcc/testsuite/gcc.dg/Wunused-var-3.c (.../tags/gcc_4_7_0_release) (wersja 0)
++++ gcc/testsuite/gcc.dg/Wunused-var-3.c (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -0,0 +1,34 @@
++/* PR c/52577 */
++/* { dg-do compile } */
++/* { dg-options "-Wunused" } */
+
-+ abort ();
-+}
++typedef int V __attribute__((vector_size (sizeof (int) * 4)));
+
-+static void handler (void *p __attribute__((unused)))
++void
++f1 (V *p)
+{
-+ exit (0);
++ V mask = { 1, 2, 3, 0 };
++ *p = __builtin_shuffle (*p, mask);
+}
+
-+__attribute__((noinline)) static void callme ()
++void
++f2 (V *p, V *q)
+{
-+ CFI_ESCAPE;
-+ force_unwind ();
++ V mask = { 1, 2, 3, 0 };
++ *p = __builtin_shuffle (*p, *q, mask);
+}
+
-+__attribute__((noinline)) static void doit ()
++void
++f3 (V *p, V *mask)
+{
-+ char dummy __attribute__((cleanup (handler)));
-+ callme ();
++ V a = { 1, 2, 3, 0 };
++ *p = __builtin_shuffle (a, *mask);
+}
+
-+int main()
-+{
-+ doit ();
-+ abort ();
++void
++f4 (V *p, V *mask)
++{
++ V a = { 1, 2, 3, 0 };
++ V b = { 2, 3, 4, 1 };
++ *p = __builtin_shuffle (a, b, *mask);
+}
Index: gcc/testsuite/ChangeLog
===================================================================
---- gcc/testsuite/ChangeLog (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/testsuite/ChangeLog (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -1,3 +1,106 @@
-+2009-10-23 Dodji Seketeli <dodji@redhat.com>
-+
-+ PR c++/40808
-+ * g++.dg/abi/mangle33.C: New test
-+
-+2009-10-23 Mikael Pettersson <mikpe@it.uu.se>
+--- gcc/testsuite/ChangeLog (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/testsuite/ChangeLog (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1,3 +1,60 @@
++2012-03-22 Paolo Carlini <paolo.carlini@oracle.com>
+
-+ * gcc.c-torture/compile/pr11832.c: Delete.
-+ * gcc.c-torture/compile/pr33009.c: Likewise.
++ PR c++/52487
++ * g++.dg/cpp0x/lambda/lambda-ice7.C: New.
+
-+2009-10-21 H.J. Lu <hongjiu.lu@intel.com>
++2012-03-22 Tobias Burnus <burnus@net-b.de>
+
-+ 2009-10-16 Richard Guenther <rguenther@suse.de>
++ PR fortran/52452
++ * gfortran.dg/intrinsic_8.f90: New.
+
-+ PR tree-optimization/41728
-+ * gcc.c-torture/compile/pr41728.c: New testcase.
++2012-03-22 Jakub Jelinek <jakub@redhat.com>
+
-+ 2009-10-15 Jakub Jelinek <jakub@redhat.com>
++ PR c++/52671
++ * g++.dg/ext/attrib44.C: New test.
+
-+ PR debug/41717
-+ * gcc.dg/debug/pr41717.c: New test.
++2012-03-22 Jason Merrill <jason@redhat.com>
+
-+2009-10-21 Jakub Jelinek <jakub@redhat.com>
++ * g++.dg/torture/pr52582.C: New.
+
-+ * g++.dg/abi/mangle33.C: New test.
++2012-03-22 Georg-Johann Lay <avr@gjlay.de>
+
-+2009-10-20 Joseph Myers <joseph@codesourcery.com>
++ Backport from 2012-03-20 mainline r185583.
+
-+ * gcc.target/arm/neon-thumb2-move.c: New test.
++ * gcc.target/avr/progmem.h (pgm_read_char): Define depending on
++ __AVR_HAVE_LPMX__
+
-+2009-10-19 Jakub Jelinek <jakub@redhat.com>
++ Backport from 2012-03-20 mainline r185570.
+
-+ * gcc.dg/cleanup-13.c: New test.
++ PR target/49868
++ * gcc.target/avr/torture/addr-space-2.h: New file.
++ * gcc.target/avr/torture/addr-space-2-g.h: New test.
++ * gcc.target/avr/torture/addr-space-2-0.h: New test.
++ * gcc.target/avr/torture/addr-space-2-1.h: New test.
++ * gcc.target/avr/torture/addr-space-2-x.h: New test.
+
-+2009-10-19 Tobias Burnus <burnus@net-b.de>
++ Backport from 2012-03-12 mainline r185255.
+
-+ PR fortran/41755
-+ * gfortran.dg/equiv_8.f90: New test.
++ PR target/49868
++ * gcc.target/avr/torture/addr-space-1.h: New file.
++ * gcc.target/avr/torture/addr-space-g.h: New test.
++ * gcc.target/avr/torture/addr-space-0.h: New test.
++ * gcc.target/avr/torture/addr-space-1.h: New test.
++ * gcc.target/avr/torture/addr-space-x.h: New test.
+
-+2009-10-15 Jason Merrill <jason@redhat.com>
++2012-03-22 Jakub Jelinek <jakub@redhat.com>
+
-+ PR c++/38798
-+ * g++.dg/cpp0x/trailing5.C: New.
++ Backported from mainline
++ 2012-03-14 Jakub Jelinek <jakub@redhat.com>
+
-+2009-10-14 Larry Evans <cppljevans@suddenlink.net>
++ PR c++/52521
++ * g++.dg/cpp0x/udlit-args2.C: New test.
+
-+ * g++.dg/cpp0x/vt-40092.C: New.
++ 2012-03-13 Jakub Jelinek <jakub@redhat.com>
+
-+2009-10-12 Jason Merrill <jason@redhat.com>
++ PR c/52577
++ * gcc.dg/Wunused-var-3.c: New test.
+
-+ PR c++/37875
-+ * g++.dg/cpp0x/decltype18.C: New.
+ 2012-03-22 Release Manager
+
+ * GCC 4.7.0 released.
+Index: gcc/testsuite/g++.dg/ext/attrib44.C
+===================================================================
+--- gcc/testsuite/g++.dg/ext/attrib44.C (.../tags/gcc_4_7_0_release) (wersja 0)
++++ gcc/testsuite/g++.dg/ext/attrib44.C (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -0,0 +1,4 @@
++// PR c++/52671
++// { dg-do compile }
++__attribute__ ((deprecated)) enum E { E0 }; // { dg-warning "attribute ignored in declaration of" }
++// { dg-message "must follow the" "" { target *-*-* } 3 }
+Index: gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice7.C
+===================================================================
+--- gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice7.C (.../tags/gcc_4_7_0_release) (wersja 0)
++++ gcc/testsuite/g++.dg/cpp0x/lambda/lambda-ice7.C (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -0,0 +1,9 @@
++// PR c++/52487
++// { dg-options "-std=c++0x" }
++
++struct A; // { dg-error "forward declaration" }
++
++void foo(A& a)
++{
++ [=](){a;}; // { dg-error "invalid use of incomplete type" }
++}
+Index: gcc/testsuite/g++.dg/cpp0x/udlit-args2.C
+===================================================================
+--- gcc/testsuite/g++.dg/cpp0x/udlit-args2.C (.../tags/gcc_4_7_0_release) (wersja 0)
++++ gcc/testsuite/g++.dg/cpp0x/udlit-args2.C (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -0,0 +1,15 @@
++// PR c++/52521
++// { dg-do compile }
++// { dg-options -std=c++11 }
+
-+ PR c++/37766
-+ * g++.dg/cpp0x/fntmpdefarg1.C: New.
++#include <cstddef>
+
-+2009-10-11 Jason Merrill <jason@redhat.com>
++int operator "" _a (const char *);
++int operator "" _a (const char *, std::size_t);
++int a = 123_a;
++int a2 = "abc"_a;
+
-+ PR c++/37204
-+ * g++.dg/cpp0x/rv-reinterpret.C: New.
++int operator "" _b (const char *, std::size_t);
++int operator "" _b (const char *);
++int b = 123_b;
++int b2 = "abc"_b;
+Index: gcc/testsuite/g++.dg/torture/pr52582.C
+===================================================================
+--- gcc/testsuite/g++.dg/torture/pr52582.C (.../tags/gcc_4_7_0_release) (wersja 0)
++++ gcc/testsuite/g++.dg/torture/pr52582.C (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -0,0 +1,23 @@
++// PR c++/52582
+
-+2009-10-16 H.J. Lu <hongjiu.lu@intel.com>
++inline void *operator new (__SIZE_TYPE__, void *p) throw ()
++{
++ return p;
++}
++struct B
++{
++ virtual ~B ();
++ B ();
++};
++struct A : B
++{
++ A () : B () {}
++ virtual void bar ();
++};
++void
++foo ()
++{
++ char a[64];
++ B *b = new (&a) A ();
++ b->~B ();
++}
+Index: gcc/cp/class.c
+===================================================================
+--- gcc/cp/class.c (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/cp/class.c (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -3145,8 +3145,9 @@
+ CLASSTYPE_NON_AGGREGATE (t) = 1;
+
+ /* If at least one non-static data member is non-literal, the whole
+- class becomes non-literal. */
+- if (!literal_type_p (type))
++ class becomes non-literal. Note: if the type is incomplete we
++ will complain later on. */
++ if (COMPLETE_TYPE_P (type) && !literal_type_p (type))
+ CLASSTYPE_LITERAL_P (t) = false;
+
+ /* A standard-layout class is a class that:
+Index: gcc/cp/decl.c
+===================================================================
+--- gcc/cp/decl.c (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/cp/decl.c (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -4219,7 +4219,8 @@
+ if (declspecs->attributes)
+ {
+ location_t loc = input_location;
+- if (!CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
++ if (!CLASS_TYPE_P (declared_type)
++ || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
+ /* For a non-template class, use the name location; for a template
+ class (an explicit instantiation), use the current location. */
+ input_location = location_of (declared_type);
+Index: gcc/cp/method.c
+===================================================================
+--- gcc/cp/method.c (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/cp/method.c (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1590,6 +1590,7 @@
+ DECL_DELETED_FN (fn) = deleted_p;
+ DECL_DECLARED_CONSTEXPR_P (fn) = constexpr_p;
+ }
++ DECL_EXTERNAL (fn) = true;
+ DECL_NOT_REALLY_EXTERN (fn) = 1;
+ DECL_DECLARED_INLINE_P (fn) = 1;
+ gcc_assert (!TREE_USED (fn));
+Index: gcc/cp/ChangeLog
+===================================================================
+--- gcc/cp/ChangeLog (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/cp/ChangeLog (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1,3 +1,30 @@
++2012-03-22 Paolo Carlini <paolo.carlini@oracle.com>
+
-+ * g++.dg/debug/dwarf2/template-params-7.C: Removed.
-+ * gfortran.dg/fmt_error_9.f: Likewise.
++ PR c++/52487
++ * class.c (check_field_decls): Call literal_type_p only
++ on complete types.
+
-+2009-10-15 H.J. Lu <hongjiu.lu@intel.com>
++2012-03-22 Jakub Jelinek <jakub@redhat.com>
+
-+ Backport from mainline:
-+ 2009-10-13 Martin Jambor <mjambor@suse.cz>
++ PR c++/52671
++ * decl.c (check_tag_decl): Only use CLASSTYPE_TEMPLATE_INSTANTIATION
++ on CLASS_TYPE_P types.
+
-+ * gcc.c-torture/compile/pr41661.c: New test.
++2012-03-22 Jason Merrill <jason@redhat.com>
+
-+ 2009-10-12 Jerry DeLisle <jvdelisle@gcc.gnu.org>
++ PR c++/52582
++ * method.c (implicitly_declare_fn): Set DECL_EXTERNAL.
+
-+ PR libgfortran/41683
-+ * gfortran.dg/fmt_error_9.f: Add check for repeat count after P.
++2012-03-22 Jakub Jelinek <jakub@redhat.com>
+
-+ 2009-10-12 Dodji Seketeli <dodji@redhat.com>
++ Backported from mainline
++ 2012-03-14 Jakub Jelinek <jakub@redhat.com>
+
-+ PR c++/41570
-+ * g++.dg/debug/dwarf2/template-params-7.C: New test.
++ PR c++/52521
++ * parser.c (lookup_literal_operator): Return fn only if
++ processed all arguments from args vector and argtypes is
++ void_list_node.
+
-+ 2009-10-11 Richard Guenther <rguenther@suse.de>
+ 2012-03-22 Release Manager
+
+ * GCC 4.7.0 released.
+Index: gcc/cp/parser.c
+===================================================================
+--- gcc/cp/parser.c (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/cp/parser.c (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1,6 +1,6 @@
+ /* C++ Parser.
+ Copyright (C) 2000, 2001, 2002, 2003, 2004,
+- 2005, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
++ 2005, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+ Written by Mark Mitchell <mark@codesourcery.com>.
+
+ This file is part of GCC.
+@@ -3581,7 +3581,13 @@
+ TREE_TYPE (tparm))))
+ found = false;
+ }
+- if (found)
++ if (found
++ && ix == VEC_length (tree, args)
++ /* May be this should be sufficient_parms_p instead,
++ depending on how exactly should user-defined literals
++ work in presence of default arguments on the literal
++ operator parameters. */
++ && argtypes == void_list_node)
+ return fn;
+ }
+ }
+Index: gcc/fortran/ChangeLog
+===================================================================
+--- gcc/fortran/ChangeLog (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/fortran/ChangeLog (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1,3 +1,9 @@
++2012-03-22 Tobias Burnus <burnus@net-b.de>
+
-+ PR tree-optimization/41555
-+ * gcc.dg/torture/pr41555.c: New testcase.
++ PR fortran/52452
++ * resolve.c (resolve_intrinsic): Don't search for a
++ function if we know that it is a subroutine.
+
-+ 2009-10-09 Richard Guenther <rguenther@suse.de>
+ 2012-03-22 Release Manager
+
+ * GCC 4.7.0 released.
+Index: gcc/fortran/resolve.c
+===================================================================
+--- gcc/fortran/resolve.c (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/fortran/resolve.c (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1496,7 +1496,7 @@
+
+ if (sym->intmod_sym_id)
+ isym = gfc_intrinsic_function_by_id ((gfc_isym_id) sym->intmod_sym_id);
+- else
++ else if (!sym->attr.subroutine)
+ isym = gfc_find_function (sym->name);
+
+ if (isym)
+Index: gcc/BASE-VER
+===================================================================
+--- gcc/BASE-VER (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/BASE-VER (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1 +1 @@
+-4.7.0
++4.7.1
+Index: gcc/tree-nested.c
+===================================================================
+--- gcc/tree-nested.c (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/tree-nested.c (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1954,6 +1954,7 @@
+ 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))
+@@ -1966,16 +1967,33 @@
+ 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: gcc/output.h
+===================================================================
+--- gcc/output.h (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/output.h (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -446,8 +446,8 @@
+ #define SECTION_STYLE_MASK 0x600000 /* bits used for SECTION_STYLE */
+ #define SECTION_COMMON 0x800000 /* contains common data */
+ #define SECTION_RELRO 0x1000000 /* data is readonly after relocation processing */
+-#define SECTION_MACH_DEP 0x2000000 /* subsequent bits reserved for target */
+-#define SECTION_EXCLUDE 0x4000000 /* discarded by the linker */
++#define SECTION_EXCLUDE 0x2000000 /* discarded by the linker */
++#define SECTION_MACH_DEP 0x4000000 /* subsequent bits reserved for target */
+
+ /* This SECTION_STYLE is used for unnamed sections that we can switch
+ to using a special assembler directive. */
+Index: gcc/c-parser.c
+===================================================================
+--- gcc/c-parser.c (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/c-parser.c (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1,7 +1,7 @@
+ /* Parser for C and Objective-C.
+ Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+- 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
+- Free Software Foundation, Inc.
++ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011,
++ 2012 Free Software Foundation, Inc.
+
+ Parser actions based on the old Bison parser; structure somewhat
+ influenced by and fragments based on the C++ parser.
+@@ -6647,6 +6647,8 @@
+ case RID_BUILTIN_SHUFFLE:
+ {
+ VEC(c_expr_t,gc) *cexpr_list;
++ unsigned int i;
++ c_expr_t *p;
+
+ c_parser_consume_token (parser);
+ if (!c_parser_get_builtin_args (parser,
+@@ -6657,6 +6659,9 @@
+ break;
+ }
+
++ FOR_EACH_VEC_ELT (c_expr_t, cexpr_list, i, p)
++ mark_exp_read (p->value);
++
+ if (VEC_length (c_expr_t, cexpr_list) == 2)
+ expr.value =
+ c_build_vec_perm_expr
+Index: gcc/config/i386/nmmintrin.h
+===================================================================
+--- gcc/config/i386/nmmintrin.h (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/config/i386/nmmintrin.h (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 2007, 2009 Free Software Foundation, Inc.
++/* Copyright (C) 2007, 2009, 2012 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+@@ -19,7 +19,7 @@
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+- <http://www.gnu.org/licenses/>.
++ <http://www.gnu.org/licenses/>. */
+
+ /* Implemented from the specification included in the Intel C++ Compiler
+ User Guide and Reference, version 10.0. */
+Index: gcc/config/i386/smmintrin.h
+===================================================================
+--- gcc/config/i386/smmintrin.h (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/config/i386/smmintrin.h (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
++/* Copyright (C) 2007, 2008, 2009, 2010, 2012 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+@@ -19,9 +19,8 @@
+ You should have received a copy of the GNU General Public License and
+ a copy of the GCC Runtime Library Exception along with this program;
+ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+- <http://www.gnu.org/licenses/>.
++ <http://www.gnu.org/licenses/>. */
+
+-
+ /* Implemented from the specification included in the Intel C++ Compiler
+ User Guide and Reference, version 10.0. */
+
+Index: gcc/config/sh/sh.c
+===================================================================
+--- gcc/config/sh/sh.c (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/config/sh/sh.c (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1,6 +1,6 @@
+ /* Output routines for GCC for Renesas / SuperH SH.
+ Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+- 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
++ 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+ Free Software Foundation, Inc.
+ Contributed by Steve Chamberlain (sac@cygnus.com).
+ Improved by Jim Wilson (wilson@cygnus.com).
+@@ -11497,9 +11497,16 @@
+ && REGCLASS_HAS_GENERAL_REG (srcclass))
+ || (REGCLASS_HAS_GENERAL_REG (dstclass)
+ && REGCLASS_HAS_FP_REG (srcclass)))
+- return ((TARGET_SHMEDIA ? 4 : TARGET_FMOVD ? 8 : 12)
+- * ((GET_MODE_SIZE (mode) + 7) / 8U));
++ {
++ /* Discourage trying to use fp regs for a pointer. This also
++ discourages fp regs with SImode because Pmode is an alias
++ of SImode on this target. See PR target/48596. */
++ int addend = (mode == Pmode) ? 40 : 0;
+
++ return (((TARGET_SHMEDIA ? 4 : TARGET_FMOVD ? 8 : 12) + addend)
++ * ((GET_MODE_SIZE (mode) + 7) / 8U));
++ }
+
-+ PR tree-optimization/41634
-+ * gcc.c-torture/compile/pr41634.c: New testcase.
+ if ((dstclass == FPUL_REGS
+ && REGCLASS_HAS_GENERAL_REG (srcclass))
+ || (srcclass == FPUL_REGS
+Index: gcc/config/avr/avr.md
+===================================================================
+--- gcc/config/avr/avr.md (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/config/avr/avr.md (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -63,6 +63,7 @@
+ [UNSPEC_STRLEN
+ UNSPEC_MOVMEM
+ UNSPEC_INDEX_JMP
++ UNSPEC_LPM
+ UNSPEC_FMUL
+ UNSPEC_FMULS
+ UNSPEC_FMULSU
+@@ -77,6 +78,7 @@
+ UNSPECV_WRITE_SP
+ UNSPECV_GOTO_RECEIVER
+ UNSPECV_ENABLE_IRQS
++ UNSPECV_MEMORY_BARRIER
+ UNSPECV_NOP
+ UNSPECV_SLEEP
+ UNSPECV_WDR
+@@ -139,7 +141,7 @@
+ "out_bitop, out_plus, out_plus_noclobber, plus64, addto_sp,
+ tsthi, tstpsi, tstsi, compare, compare64, call,
+ mov8, mov16, mov24, mov32, reload_in16, reload_in24, reload_in32,
+- xload, movmem,
++ xload, movmem, load_lpm,
+ ashlqi, ashrqi, lshrqi,
+ ashlhi, ashrhi, lshrhi,
+ ashlsi, ashrsi, lshrsi,
+@@ -363,36 +365,63 @@
+ ;;========================================================================
+ ;; Move stuff around
+
+-(define_expand "load<mode>_libgcc"
+- [(set (match_dup 3)
+- (match_dup 2))
+- (set (reg:MOVMODE 22)
+- (match_operand:MOVMODE 1 "memory_operand" ""))
+- (set (match_operand:MOVMODE 0 "register_operand" "")
+- (reg:MOVMODE 22))]
+- "avr_load_libgcc_p (operands[1])"
+- {
+- operands[3] = gen_rtx_REG (HImode, REG_Z);
+- operands[2] = force_operand (XEXP (operands[1], 0), NULL_RTX);
+- operands[1] = replace_equiv_address (operands[1], operands[3]);
+- set_mem_addr_space (operands[1], ADDR_SPACE_FLASH);
+- })
+-
++;; Represent a load from __flash that needs libgcc support as UNSPEC.
++;; This is legal because we read from non-changing memory.
++;; For rationale see the FIXME below.
++
++;; "load_psi_libgcc"
++;; "load_si_libgcc"
++;; "load_sf_libgcc"
+ (define_insn "load_<mode>_libgcc"
+ [(set (reg:MOVMODE 22)
+- (match_operand:MOVMODE 0 "memory_operand" "m,m"))]
+- "avr_load_libgcc_p (operands[0])
+- && REG_P (XEXP (operands[0], 0))
+- && REG_Z == REGNO (XEXP (operands[0], 0))"
++ (unspec:MOVMODE [(reg:HI REG_Z)]
++ UNSPEC_LPM))]
++ ""
+ {
+- operands[0] = GEN_INT (GET_MODE_SIZE (<MODE>mode));
+- return "%~call __load_%0";
++ rtx n_bytes = GEN_INT (GET_MODE_SIZE (<MODE>mode));
++ output_asm_insn ("%~call __load_%0", &n_bytes);
++ return "";
+ }
+- [(set_attr "length" "1,2")
+- (set_attr "isa" "rjmp,jmp")
++ [(set_attr "type" "xcall")
+ (set_attr "cc" "clobber")])
+
+
++;; Similar for inline reads from flash. We use UNSPEC instead
++;; of MEM for the same reason as above: PR52543.
++;; $1 contains the memory segment.
++
++(define_insn "load_<mode>"
++ [(set (match_operand:MOVMODE 0 "register_operand" "=r")
++ (unspec:MOVMODE [(reg:HI REG_Z)
++ (match_operand:QI 1 "reg_or_0_operand" "rL")]
++ UNSPEC_LPM))]
++ "(CONST_INT_P (operands[1]) && AVR_HAVE_LPMX)
++ || (REG_P (operands[1]) && AVR_HAVE_ELPMX)"
++ {
++ return avr_load_lpm (insn, operands, NULL);
++ }
++ [(set_attr "adjust_len" "load_lpm")
++ (set_attr "cc" "clobber")])
+
-+ 2009-10-08 Michael Matz <matz@suse.de>
+
-+ PR middle-end/41573
-+ * gcc.dg/pr41573.c: New test.
++;; Similar to above for the complementary situation when there is no [E]LPMx.
++;; Clobber Z in that case.
+
-+ 2009-10-07 Joseph Myers <joseph@codesourcery.com>
++(define_insn "load_<mode>_clobber"
++ [(set (match_operand:MOVMODE 0 "register_operand" "=r")
++ (unspec:MOVMODE [(reg:HI REG_Z)
++ (match_operand:QI 1 "reg_or_0_operand" "rL")]
++ UNSPEC_LPM))
++ (clobber (reg:HI REG_Z))]
++ "!((CONST_INT_P (operands[1]) && AVR_HAVE_LPMX)
++ || (REG_P (operands[1]) && AVR_HAVE_ELPMX))"
++ {
++ return avr_load_lpm (insn, operands, NULL);
++ }
++ [(set_attr "adjust_len" "load_lpm")
++ (set_attr "cc" "clobber")])
+
-+ PR c/41182
-+ * gcc.c-torture/compile/pr41182-1.c: New.
+
- 2009-10-15 Release Manager
+ (define_insn_and_split "xload8_A"
+ [(set (match_operand:QI 0 "register_operand" "=r")
+ (match_operand:QI 1 "memory_operand" "m"))
+@@ -418,9 +447,15 @@
+ DONE;
+ })
+
++;; "xloadqi_A"
++;; "xloadhi_A"
++;; "xloadpsi_A"
++;; "xloadsi_A"
++;; "xloadsf_A"
+ (define_insn_and_split "xload<mode>_A"
+ [(set (match_operand:MOVMODE 0 "register_operand" "=r")
+ (match_operand:MOVMODE 1 "memory_operand" "m"))
++ (clobber (reg:MOVMODE 22))
+ (clobber (reg:QI 21))
+ (clobber (reg:HI REG_Z))]
+ "can_create_pseudo_p()
+@@ -461,7 +496,7 @@
+ {
+ return avr_out_xload (insn, operands, NULL);
+ }
+- [(set_attr "length" "3,4")
++ [(set_attr "length" "4,4")
+ (set_attr "adjust_len" "*,xload")
+ (set_attr "isa" "lpmx,lpm")
+ (set_attr "cc" "none")])
+@@ -532,12 +567,55 @@
+ DONE;
+ }
- * GCC 4.4.2 released.
-Index: gcc/testsuite/g++.dg/cpp0x/auto13.C
-===================================================================
---- gcc/testsuite/g++.dg/cpp0x/auto13.C (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/testsuite/g++.dg/cpp0x/auto13.C (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -1,11 +0,0 @@
--// PR c++/38597
--// { dg-options "-std=c++0x" }
++ /* For old devices without LPMx, prefer __flash loads per libcall. */
++
+ if (avr_load_libgcc_p (src))
+ {
+- /* For the small devices, do loads per libgcc call. */
+- emit_insn (gen_load<mode>_libgcc (dest, src));
++ emit_move_insn (gen_rtx_REG (Pmode, REG_Z),
++ force_reg (Pmode, XEXP (src, 0)));
++
++ emit_insn (gen_load_<mode>_libgcc ());
++ emit_move_insn (dest, gen_rtx_REG (<MODE>mode, 22));
+ DONE;
+ }
++
++ /* ; FIXME: Hack around PR rtl-optimization/52543.
++ ; lower-subreg.c splits loads from the 16-bit address spaces which
++ ; causes code bloat because each load need his setting of RAMPZ.
++ ; Moreover, the split will happen in such a way that the loads don't
++ ; take advantage of POST_INC addressing. Thus, we use UNSPEC to
++ ; represent these loads instead. Notice that this is legitimate
++ ; because the memory content does not change: Loads from the same
++ ; address will yield the same value.
++ ; POST_INC addressing would make the addresses mode_dependent and could
++ ; work around that PR, too. However, notice that it is *not* legitimate
++ ; to expand to POST_INC at expand time: The following passes assert
++ ; that pre-/post-modify addressing is introduced by .auto_inc_dec and
++ ; does not exist before that pass. */
++
++ if (avr_mem_flash_p (src)
++ && (GET_MODE_SIZE (<MODE>mode) > 1
++ || MEM_ADDR_SPACE (src) != ADDR_SPACE_FLASH))
++ {
++ rtx xsegment = GEN_INT (avr_addrspace[MEM_ADDR_SPACE (src)].segment);
++ if (!AVR_HAVE_ELPM)
++ xsegment = const0_rtx;
++ if (xsegment != const0_rtx)
++ xsegment = force_reg (QImode, xsegment);
++
++ emit_move_insn (gen_rtx_REG (Pmode, REG_Z),
++ force_reg (Pmode, XEXP (src, 0)));
++
++ if ((CONST_INT_P (xsegment) && AVR_HAVE_LPMX)
++ || (REG_P (xsegment) && AVR_HAVE_ELPMX))
++ emit_insn (gen_load_<mode> (dest, xsegment));
++ else
++ emit_insn (gen_load_<mode>_clobber (dest, xsegment));
++ DONE;
++ }
++
++ /* ; The only address-space for which we use plain MEM and reload
++ ; machinery are 1-byte loads from __flash. */
+ })
+
+ ;;========================================================================
+@@ -677,40 +755,6 @@
+ operands[5] = gen_rtx_REG (HImode, REGNO (operands[3]));
+ })
+
+-;; For LPM loads from AS1 we split
+-;; R = *Z
+-;; to
+-;; R = *Z++
+-;; Z = Z - sizeof (R)
+-;;
+-;; so that the second instruction can be optimized out.
-
--template<class T, class U>
--auto f(T,U) -> decltype(T() + U())
--{ return T() + U(); }
+-(define_split ; "split-lpmx"
+- [(set (match_operand:HISI 0 "register_operand" "")
+- (match_operand:HISI 1 "memory_operand" ""))]
+- "reload_completed
+- && AVR_HAVE_LPMX"
+- [(set (match_dup 0)
+- (match_dup 2))
+- (set (match_dup 3)
+- (plus:HI (match_dup 3)
+- (match_dup 4)))]
+- {
+- rtx addr = XEXP (operands[1], 0);
-
--template<class T> void g(T){}
+- if (!avr_mem_flash_p (operands[1])
+- || !REG_P (addr)
+- || reg_overlap_mentioned_p (addr, operands[0]))
+- {
+- FAIL;
+- }
-
--int main() { g(f); } // { dg-error "no matching function" }
+- operands[2] = replace_equiv_address (operands[1],
+- gen_rtx_POST_INC (Pmode, addr));
+- operands[3] = addr;
+- operands[4] = gen_int_mode (-GET_MODE_SIZE (<MODE>mode), HImode);
+- })
-
-Index: gcc/testsuite/g++.dg/cpp0x/auto6.C
-===================================================================
---- gcc/testsuite/g++.dg/cpp0x/auto6.C (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/testsuite/g++.dg/cpp0x/auto6.C (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -1,118 +0,0 @@
--// Tests for late-specified return type.
--// { dg-options "-std=c++0x" }
+ ;;==========================================================================
+ ;; xpointer move (24 bit)
+
+@@ -1081,15 +1125,16 @@
+ (set_attr "adjust_len" "addto_sp")])
+
+ (define_insn "*addhi3"
+- [(set (match_operand:HI 0 "register_operand" "=r,d,d")
+- (plus:HI (match_operand:HI 1 "register_operand" "%0,0,0")
+- (match_operand:HI 2 "nonmemory_operand" "r,s,n")))]
++ [(set (match_operand:HI 0 "register_operand" "=r,d,!w,d")
++ (plus:HI (match_operand:HI 1 "register_operand" "%0,0,0 ,0")
++ (match_operand:HI 2 "nonmemory_operand" "r,s,IJ,n")))]
+ ""
+ {
+ static const char * const asm_code[] =
+ {
+ "add %A0,%A2\;adc %B0,%B2",
+ "subi %A0,lo8(-(%2))\;sbci %B0,hi8(-(%2))",
++ "",
+ ""
+ };
+
+@@ -1098,9 +1143,9 @@
+
+ return avr_out_plus_noclobber (operands, NULL, NULL);
+ }
+- [(set_attr "length" "2,2,2")
+- (set_attr "adjust_len" "*,*,out_plus_noclobber")
+- (set_attr "cc" "set_n,set_czn,out_plus_noclobber")])
++ [(set_attr "length" "2,2,2,2")
++ (set_attr "adjust_len" "*,*,out_plus_noclobber,out_plus_noclobber")
++ (set_attr "cc" "set_n,set_czn,out_plus_noclobber,out_plus_noclobber")])
+
+ ;; Adding a constant to NO_LD_REGS might have lead to a reload of
+ ;; that constant to LD_REGS. We don't add a scratch to *addhi3
+@@ -1138,10 +1183,10 @@
+ (clobber (match_dup 2))])])
+
+ (define_insn "addhi3_clobber"
+- [(set (match_operand:HI 0 "register_operand" "=d,l")
+- (plus:HI (match_operand:HI 1 "register_operand" "%0,0")
+- (match_operand:HI 2 "const_int_operand" "n,n")))
+- (clobber (match_scratch:QI 3 "=X,&d"))]
++ [(set (match_operand:HI 0 "register_operand" "=!w,d,r")
++ (plus:HI (match_operand:HI 1 "register_operand" "%0,0,0")
++ (match_operand:HI 2 "const_int_operand" "IJ,n,n")))
++ (clobber (match_scratch:QI 3 "=X,X,&d"))]
+ ""
+ {
+ gcc_assert (REGNO (operands[0]) == REGNO (operands[1]));
+@@ -1692,6 +1737,29 @@
+
+ ;; Handle small constants
+
++;; Special case of a += 2*b as frequently seen with accesses to int arrays.
++;; This is shorter, faster than MUL and has lower register pressure.
++
++(define_insn_and_split "*umaddqihi4.2"
++ [(set (match_operand:HI 0 "register_operand" "=r")
++ (plus:HI (mult:HI (zero_extend:HI (match_operand:QI 1 "register_operand" "r"))
++ (const_int 2))
++ (match_operand:HI 2 "register_operand" "r")))]
++ "!reload_completed
++ && !reg_overlap_mentioned_p (operands[0], operands[1])"
++ { gcc_unreachable(); }
++ "&& 1"
++ [(set (match_dup 0)
++ (match_dup 2))
++ ; *addhi3_zero_extend
++ (set (match_dup 0)
++ (plus:HI (zero_extend:HI (match_dup 1))
++ (match_dup 0)))
++ ; *addhi3_zero_extend
++ (set (match_dup 0)
++ (plus:HI (zero_extend:HI (match_dup 1))
++ (match_dup 0)))])
++
+ ;; "umaddqihi4.uconst"
+ ;; "maddqihi4.sconst"
+ (define_insn_and_split "*<extend_u>maddqihi4.<extend_su>const"
+@@ -5198,18 +5266,36 @@
+ (set_attr "length" "1")])
+
+ ;; Enable Interrupts
+-(define_insn "enable_interrupt"
+- [(unspec_volatile [(const_int 1)] UNSPECV_ENABLE_IRQS)]
++(define_expand "enable_interrupt"
++ [(clobber (const_int 0))]
+ ""
+- "sei"
+- [(set_attr "length" "1")
+- (set_attr "cc" "none")])
++ {
++ rtx mem = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode));
++ MEM_VOLATILE_P (mem) = 1;
++ emit_insn (gen_cli_sei (const1_rtx, mem));
++ DONE;
++ })
+
+ ;; Disable Interrupts
+-(define_insn "disable_interrupt"
+- [(unspec_volatile [(const_int 0)] UNSPECV_ENABLE_IRQS)]
++(define_expand "disable_interrupt"
++ [(clobber (const_int 0))]
+ ""
+- "cli"
++ {
++ rtx mem = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode));
++ MEM_VOLATILE_P (mem) = 1;
++ emit_insn (gen_cli_sei (const0_rtx, mem));
++ DONE;
++ })
++
++(define_insn "cli_sei"
++ [(unspec_volatile [(match_operand:QI 0 "const_int_operand" "L,P")]
++ UNSPECV_ENABLE_IRQS)
++ (set (match_operand:BLK 1 "" "")
++ (unspec_volatile:BLK [(match_dup 1)] UNSPECV_MEMORY_BARRIER))]
++ ""
++ "@
++ cli
++ sei"
+ [(set_attr "length" "1")
+ (set_attr "cc" "none")])
+
+@@ -5316,10 +5402,12 @@
+ [(unspec_volatile [(match_operand:QI 0 "const_int_operand" "n")
+ (const_int 1)]
+ UNSPECV_DELAY_CYCLES)
+- (clobber (match_scratch:QI 1 "=&d"))]
++ (set (match_operand:BLK 1 "" "")
++ (unspec_volatile:BLK [(match_dup 1)] UNSPECV_MEMORY_BARRIER))
++ (clobber (match_scratch:QI 2 "=&d"))]
+ ""
+- "ldi %1,lo8(%0)
+- 1: dec %1
++ "ldi %2,lo8(%0)
++ 1: dec %2
+ brne 1b"
+ [(set_attr "length" "3")
+ (set_attr "cc" "clobber")])
+@@ -5328,11 +5416,13 @@
+ [(unspec_volatile [(match_operand:HI 0 "const_int_operand" "n")
+ (const_int 2)]
+ UNSPECV_DELAY_CYCLES)
+- (clobber (match_scratch:HI 1 "=&w"))]
++ (set (match_operand:BLK 1 "" "")
++ (unspec_volatile:BLK [(match_dup 1)] UNSPECV_MEMORY_BARRIER))
++ (clobber (match_scratch:HI 2 "=&w"))]
+ ""
+- "ldi %A1,lo8(%0)
+- ldi %B1,hi8(%0)
+- 1: sbiw %A1,1
++ "ldi %A2,lo8(%0)
++ ldi %B2,hi8(%0)
++ 1: sbiw %A2,1
+ brne 1b"
+ [(set_attr "length" "4")
+ (set_attr "cc" "clobber")])
+@@ -5341,16 +5431,18 @@
+ [(unspec_volatile [(match_operand:SI 0 "const_int_operand" "n")
+ (const_int 3)]
+ UNSPECV_DELAY_CYCLES)
+- (clobber (match_scratch:QI 1 "=&d"))
++ (set (match_operand:BLK 1 "" "")
++ (unspec_volatile:BLK [(match_dup 1)] UNSPECV_MEMORY_BARRIER))
+ (clobber (match_scratch:QI 2 "=&d"))
+- (clobber (match_scratch:QI 3 "=&d"))]
++ (clobber (match_scratch:QI 3 "=&d"))
++ (clobber (match_scratch:QI 4 "=&d"))]
+ ""
+- "ldi %1,lo8(%0)
+- ldi %2,hi8(%0)
+- ldi %3,hlo8(%0)
+- 1: subi %1,1
+- sbci %2,0
++ "ldi %2,lo8(%0)
++ ldi %3,hi8(%0)
++ ldi %4,hlo8(%0)
++ 1: subi %2,1
+ sbci %3,0
++ sbci %4,0
+ brne 1b"
+ [(set_attr "length" "7")
+ (set_attr "cc" "clobber")])
+@@ -5359,19 +5451,21 @@
+ [(unspec_volatile [(match_operand:SI 0 "const_int_operand" "n")
+ (const_int 4)]
+ UNSPECV_DELAY_CYCLES)
+- (clobber (match_scratch:QI 1 "=&d"))
++ (set (match_operand:BLK 1 "" "")
++ (unspec_volatile:BLK [(match_dup 1)] UNSPECV_MEMORY_BARRIER))
+ (clobber (match_scratch:QI 2 "=&d"))
+ (clobber (match_scratch:QI 3 "=&d"))
+- (clobber (match_scratch:QI 4 "=&d"))]
++ (clobber (match_scratch:QI 4 "=&d"))
++ (clobber (match_scratch:QI 5 "=&d"))]
+ ""
+- "ldi %1,lo8(%0)
+- ldi %2,hi8(%0)
+- ldi %3,hlo8(%0)
+- ldi %4,hhi8(%0)
+- 1: subi %1,1
+- sbci %2,0
++ "ldi %2,lo8(%0)
++ ldi %3,hi8(%0)
++ ldi %4,hlo8(%0)
++ ldi %5,hhi8(%0)
++ 1: subi %2,1
+ sbci %3,0
+ sbci %4,0
++ sbci %5,0
+ brne 1b"
+ [(set_attr "length" "9")
+ (set_attr "cc" "clobber")])
+@@ -5757,9 +5851,23 @@
+ ;; CPU instructions
+
+ ;; NOP taking 1 or 2 Ticks
+-(define_insn "nopv"
++(define_expand "nopv"
++ [(parallel [(unspec_volatile [(match_operand:SI 0 "const_int_operand" "")]
++ UNSPECV_NOP)
++ (set (match_dup 1)
++ (unspec_volatile:BLK [(match_dup 1)]
++ UNSPECV_MEMORY_BARRIER))])]
++ ""
++ {
++ operands[1] = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode));
++ MEM_VOLATILE_P (operands[1]) = 1;
++ })
++
++(define_insn "*nopv"
+ [(unspec_volatile [(match_operand:SI 0 "const_int_operand" "P,K")]
+- UNSPECV_NOP)]
++ UNSPECV_NOP)
++ (set (match_operand:BLK 1 "" "")
++ (unspec_volatile:BLK [(match_dup 1)] UNSPECV_MEMORY_BARRIER))]
+ ""
+ "@
+ nop
+@@ -5768,17 +5876,43 @@
+ (set_attr "cc" "none")])
+
+ ;; SLEEP
+-(define_insn "sleep"
+- [(unspec_volatile [(const_int 0)] UNSPECV_SLEEP)]
++(define_expand "sleep"
++ [(parallel [(unspec_volatile [(const_int 0)] UNSPECV_SLEEP)
++ (set (match_dup 0)
++ (unspec_volatile:BLK [(match_dup 0)]
++ UNSPECV_MEMORY_BARRIER))])]
+ ""
++ {
++ operands[0] = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode));
++ MEM_VOLATILE_P (operands[0]) = 1;
++ })
++
++(define_insn "*sleep"
++ [(unspec_volatile [(const_int 0)] UNSPECV_SLEEP)
++ (set (match_operand:BLK 0 "" "")
++ (unspec_volatile:BLK [(match_dup 0)] UNSPECV_MEMORY_BARRIER))]
++ ""
+ "sleep"
+ [(set_attr "length" "1")
+ (set_attr "cc" "none")])
+
+ ;; WDR
+-(define_insn "wdr"
+- [(unspec_volatile [(const_int 0)] UNSPECV_WDR)]
++(define_expand "wdr"
++ [(parallel [(unspec_volatile [(const_int 0)] UNSPECV_WDR)
++ (set (match_dup 0)
++ (unspec_volatile:BLK [(match_dup 0)]
++ UNSPECV_MEMORY_BARRIER))])]
+ ""
++ {
++ operands[0] = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode));
++ MEM_VOLATILE_P (operands[0]) = 1;
++ })
++
++(define_insn "*wdr"
++ [(unspec_volatile [(const_int 0)] UNSPECV_WDR)
++ (set (match_operand:BLK 0 "" "")
++ (unspec_volatile:BLK [(match_dup 0)] UNSPECV_MEMORY_BARRIER))]
++ ""
+ "wdr"
+ [(set_attr "length" "1")
+ (set_attr "cc" "none")])
+Index: gcc/config/avr/avr-protos.h
+===================================================================
+--- gcc/config/avr/avr-protos.h (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/config/avr/avr-protos.h (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -75,6 +75,8 @@
+ extern const char *avr_out_ashrpsi3 (rtx, rtx*, int*);
+ extern const char *avr_out_lshrpsi3 (rtx, rtx*, int*);
+
++extern const char* avr_load_lpm (rtx, rtx*, int*);
++
+ extern bool avr_rotate_bytes (rtx operands[]);
+
+ extern void expand_prologue (void);
+@@ -115,7 +117,7 @@
+ extern RTX_CODE avr_normalize_condition (RTX_CODE condition);
+ extern void out_shift_with_cnt (const char *templ, rtx insn,
+ rtx operands[], int *len, int t_len);
+-extern reg_class_t avr_mode_code_base_reg_class (enum machine_mode, addr_space_t, RTX_CODE, RTX_CODE);
++extern enum reg_class avr_mode_code_base_reg_class (enum machine_mode, addr_space_t, RTX_CODE, RTX_CODE);
+ extern bool avr_regno_mode_code_ok_for_base_p (int, enum machine_mode, addr_space_t, RTX_CODE, RTX_CODE);
+ extern rtx avr_incoming_return_addr_rtx (void);
+ extern rtx avr_legitimize_reload_address (rtx*, enum machine_mode, int, int, int, int, rtx (*)(rtx,int));
+Index: gcc/config/avr/avr.c
+===================================================================
+--- gcc/config/avr/avr.c (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/config/avr/avr.c (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -827,7 +827,11 @@
+ bool isr_p = cfun->machine->is_interrupt || cfun->machine->is_signal;
+ int live_seq = sequent_regs_live ();
+
++ HOST_WIDE_INT size_max
++ = (HOST_WIDE_INT) GET_MODE_MASK (AVR_HAVE_8BIT_SP ? QImode : Pmode);
++
+ bool minimize = (TARGET_CALL_PROLOGUES
++ && size < size_max
+ && live_seq
+ && !isr_p
+ && !cfun->machine->is_OS_task
+@@ -933,6 +937,7 @@
+ leaf function and thus X has already been saved. */
+
+ int irq_state = -1;
++ HOST_WIDE_INT size_cfa = size;
+ rtx fp_plus_insns, fp, my_fp;
+
+ gcc_assert (frame_pointer_needed
+@@ -951,6 +956,27 @@
+ my_fp = all_regs_rtx[FRAME_POINTER_REGNUM];
+ }
+
++ /* Cut down size and avoid size = 0 so that we don't run
++ into ICE like PR52488 in the remainder. */
++
++ if (size > size_max)
++ {
++ /* Don't error so that insane code from newlib still compiles
++ and does not break building newlib. As PR51345 is implemented
++ now, there are multilib variants with -mtiny-stack.
++
++ If user wants sanity checks he can use -Wstack-usage=
++ or similar options.
++
++ For CFA we emit the original, non-saturated size so that
++ the generic machinery is aware of the real stack usage and
++ will print the above diagnostic as expected. */
++
++ size = size_max;
++ }
++
++ size = trunc_int_for_mode (size, GET_MODE (my_fp));
++
+ /************ Method 1: Adjust frame pointer ************/
+
+ start_sequence ();
+@@ -975,7 +1001,7 @@
+ RTX_FRAME_RELATED_P (insn) = 1;
+ add_reg_note (insn, REG_CFA_ADJUST_CFA,
+ gen_rtx_SET (VOIDmode, fp,
+- plus_constant (fp, -size)));
++ plus_constant (fp, -size_cfa)));
+ }
+
+ /* Copy to stack pointer. Note that since we've already
+@@ -1003,7 +1029,7 @@
+ add_reg_note (insn, REG_CFA_ADJUST_CFA,
+ gen_rtx_SET (VOIDmode, stack_pointer_rtx,
+ plus_constant (stack_pointer_rtx,
+- -size)));
++ -size_cfa)));
+ }
+
+ fp_plus_insns = get_insns ();
+@@ -1026,7 +1052,7 @@
+ add_reg_note (insn, REG_CFA_ADJUST_CFA,
+ gen_rtx_SET (VOIDmode, stack_pointer_rtx,
+ plus_constant (stack_pointer_rtx,
+- -size)));
++ -size_cfa)));
+ if (frame_pointer_needed)
+ {
+ insn = emit_move_insn (fp, stack_pointer_rtx);
+@@ -1048,7 +1074,7 @@
+ emit_insn (fp_plus_insns);
+ }
+
+- cfun->machine->stack_usage += size;
++ cfun->machine->stack_usage += size_cfa;
+ } /* !minimize && size != 0 */
+ } /* !minimize */
+ }
+@@ -1123,11 +1149,11 @@
+ emit_push_sfr (rampy_rtx, false /* frame-related */, true /* clr */);
+ }
+
+- if (AVR_HAVE_RAMPZ
++ if (AVR_HAVE_RAMPZ
+ && TEST_HARD_REG_BIT (set, REG_Z)
+ && TEST_HARD_REG_BIT (set, REG_Z + 1))
+ {
+- emit_push_sfr (rampz_rtx, false /* frame-related */, true /* clr */);
++ emit_push_sfr (rampz_rtx, false /* frame-related */, AVR_HAVE_RAMPD);
+ }
+ } /* is_interrupt is_signal */
+
+@@ -1261,6 +1287,7 @@
+ int irq_state = -1;
+ rtx fp, my_fp;
+ rtx fp_plus_insns;
++ HOST_WIDE_INT size_max;
+
+ gcc_assert (frame_pointer_needed
+ || !isr_p
+@@ -1277,6 +1304,13 @@
+
+ my_fp = all_regs_rtx[FRAME_POINTER_REGNUM];
+ }
++
++ /* For rationale see comment in prologue generation. */
++
++ size_max = (HOST_WIDE_INT) GET_MODE_MASK (GET_MODE (my_fp));
++ if (size > size_max)
++ size = size_max;
++ size = trunc_int_for_mode (size, GET_MODE (my_fp));
+
+ /********** Method 1: Adjust fp register **********/
+
+@@ -1347,12 +1381,12 @@
+ /* Restore RAMPZ/Y/X/D using tmp_reg as scratch.
+ The conditions to restore them must be tha same as in prologue. */
+
+- if (AVR_HAVE_RAMPX
+- && TEST_HARD_REG_BIT (set, REG_X)
+- && TEST_HARD_REG_BIT (set, REG_X + 1))
++ if (AVR_HAVE_RAMPZ
++ && TEST_HARD_REG_BIT (set, REG_Z)
++ && TEST_HARD_REG_BIT (set, REG_Z + 1))
+ {
+ emit_pop_byte (TMP_REGNO);
+- emit_move_insn (rampx_rtx, tmp_reg_rtx);
++ emit_move_insn (rampz_rtx, tmp_reg_rtx);
+ }
+
+ if (AVR_HAVE_RAMPY
+@@ -1364,12 +1398,12 @@
+ emit_move_insn (rampy_rtx, tmp_reg_rtx);
+ }
+
+- if (AVR_HAVE_RAMPZ
+- && TEST_HARD_REG_BIT (set, REG_Z)
+- && TEST_HARD_REG_BIT (set, REG_Z + 1))
++ if (AVR_HAVE_RAMPX
++ && TEST_HARD_REG_BIT (set, REG_X)
++ && TEST_HARD_REG_BIT (set, REG_X + 1))
+ {
+ emit_pop_byte (TMP_REGNO);
+- emit_move_insn (rampz_rtx, tmp_reg_rtx);
++ emit_move_insn (rampx_rtx, tmp_reg_rtx);
+ }
+
+ if (AVR_HAVE_RAMPD)
+@@ -1423,6 +1457,22 @@
+ }
+
+
++/* Implement `TARGET_MODE_DEPENDENT_ADDRESS_P'. */
++
++/* FIXME: PSImode addresses are not mode-dependent in themselves.
++ This hook just serves to hack around PR rtl-optimization/52543 by
++ claiming that PSImode addresses (which are used for the 24-bit
++ address space __memx) were mode-dependent so that lower-subreg.s
++ will skip these addresses. See also the similar FIXME comment along
++ with mov<mode> expanders in avr.md. */
++
++static bool
++avr_mode_dependent_address_p (const_rtx addr)
++{
++ return GET_MODE (addr) != Pmode;
++}
++
++
+ /* Helper function for `avr_legitimate_address_p'. */
+
+ static inline bool
+@@ -2435,7 +2485,8 @@
+
+ return (n_bytes > 2
+ && !AVR_HAVE_LPMX
+- && avr_mem_flash_p (op));
++ && MEM_P (op)
++ && MEM_ADDR_SPACE (op) == ADDR_SPACE_FLASH);
+ }
+
+ /* Return true if a value of mode MODE is read by __xload_* function. */
+@@ -2450,155 +2501,6 @@
+ }
+
+
+-/* Find an unused d-register to be used as scratch in INSN.
+- EXCLUDE is either NULL_RTX or some register. In the case where EXCLUDE
+- is a register, skip all possible return values that overlap EXCLUDE.
+- The policy for the returned register is similar to that of
+- `reg_unused_after', i.e. the returned register may overlap the SET_DEST
+- of INSN.
-
--auto f() -> int
--{
-- return 0;
--}
+- Return a QImode d-register or NULL_RTX if nothing found. */
-
--template<class T, class U>
--auto add(T t, U u) -> decltype (t+u)
+-static rtx
+-avr_find_unused_d_reg (rtx insn, rtx exclude)
-{
-- return t+u;
--}
+- int regno;
+- bool isr_p = (interrupt_function_p (current_function_decl)
+- || signal_function_p (current_function_decl));
-
--template<class T, class U>
--decltype(T()+U()) add2(T t, U u)
--{
-- return t+u;
--}
+- for (regno = 16; regno < 32; regno++)
+- {
+- rtx reg = all_regs_rtx[regno];
+-
+- if ((exclude
+- && reg_overlap_mentioned_p (exclude, reg))
+- || fixed_regs[regno])
+- {
+- continue;
+- }
-
--template <class T, class U>
--U ag (T, U)
--{
-- return U();
--}
+- /* Try non-live register */
-
--template<class T, class U>
--auto add3(T t, U u) -> decltype (ag(t,u))
--{
-- return ag(t,u);
--}
+- if (!df_regs_ever_live_p (regno)
+- && (TREE_THIS_VOLATILE (current_function_decl)
+- || cfun->machine->is_OS_task
+- || cfun->machine->is_OS_main
+- || (!isr_p && call_used_regs[regno])))
+- {
+- return reg;
+- }
-
--template<class T, class U>
--decltype(*(T*)0+*(U*)0) add4(T t, U u)
--{
-- return t+u;
+- /* Any live register can be used if it is unused after.
+- Prologue/epilogue will care for it as needed. */
+-
+- if (df_regs_ever_live_p (regno)
+- && reg_unused_after (insn, reg))
+- {
+- return reg;
+- }
+- }
+-
+- return NULL_RTX;
-}
-
--template <class T>
--struct A
--{
-- T f() {}
-- template <class U>
-- T g() {}
-- template <class V>
-- struct B
-- {
-- int MEM;
-- };
--};
-
--template <class T>
--auto f(T* t) -> decltype (t->f())
--{
-- return t->f();
--}
+-/* Helper function for the next function in the case where only restricted
+- version of LPM instruction is available. */
-
--template <class T>
--auto g(T t) -> decltype (t.f())
+-static const char*
+-avr_out_lpm_no_lpmx (rtx insn, rtx *xop, int *plen)
-{
-- return t.f();
--}
+- rtx dest = xop[0];
+- rtx addr = xop[1];
+- int n_bytes = GET_MODE_SIZE (GET_MODE (dest));
+- int regno_dest;
-
--template <class T, class U>
--auto h(T t, U u) -> decltype (t.template g<U>())
--{
-- return t.template g<U>();
--}
+- regno_dest = REGNO (dest);
-
--struct D { };
--struct C: public A<int>::B<D>
--{
--};
+- /* The implicit target register of LPM. */
+- xop[3] = lpm_reg_rtx;
-
--template <class T, class U, class V>
--auto k(T t, U u, V v) -> decltype (t.U::template B<V>::MEM)
--{
-- return t.U::template B<V>::MEM;
--}
+- switch (GET_CODE (addr))
+- {
+- default:
+- gcc_unreachable();
-
--// For these two examples we can elide the 'decltype' and just mangle the type.
--template <class T>
--auto l(T t) -> decltype (t)
--{
-- return t;
--}
+- case REG:
-
--template <class T, T u>
--auto m(T t) -> decltype (u)
--{
-- return t;
--}
+- gcc_assert (REG_Z == REGNO (addr));
-
--A<int> a, *p;
+- switch (n_bytes)
+- {
+- default:
+- gcc_unreachable();
-
--int main()
--{
-- // { dg-final { scan-assembler "_Z3addIidEDTplfp_fp0_ET_T0_" } }
-- auto i = add(1, 2.0);
-- // { dg-final { scan-assembler "_Z4add4IidEDTpldecvPT_Li0EdecvPT0_Li0EES0_S2_" } }
-- auto i4 = add4(1, 2.0);
-- // { dg-final { scan-assembler "_Z4add2IidEDTplcvT__EcvT0__EES0_S1_" } }
-- auto i2 = add2(1, 2.0);
-- // { dg-final { scan-assembler "_Z4add3IidEDTcl2agfp_fp0_EET_T0_" } }
-- auto i3 = add3(1, 2.0);
-- // { dg-final { scan-assembler "_Z1fI1AIiEEDTclptfp_1fEEPT_" } }
-- f(p);
-- // { dg-final { scan-assembler "_Z1gI1AIiEEDTcldtfp_1fEET_" } }
-- g(a);
-- // { dg-final { scan-assembler "_Z1hI1AIiEdEDTcldtfp_1gIT0_EEET_S2_" } }
-- h(a,1.0);
-- // { dg-final { scan-assembler "_Z1kI1C1AIiE1DEDtdtfp_srNT0_1BIT1_EE3MEMET_S4_S6_" } }
-- k( C(), A<int>(), D() );
-- // { dg-final { scan-assembler "_Z1lIiET_S0_" } }
-- l(1);
-- // { dg-final { scan-assembler "_Z1mIiLi1EET_S0_" } }
-- m<int,1>(1);
--}
-Index: gcc/testsuite/g++.dg/cpp0x/auto8.C
-===================================================================
---- gcc/testsuite/g++.dg/cpp0x/auto8.C (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/testsuite/g++.dg/cpp0x/auto8.C (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -1,16 +0,0 @@
--// PR c++/37967
--// Negative test for auto
--// { dg-options "-std=c++0x" }
+- case 1:
+- avr_asm_len ("%4lpm", xop, plen, 1);
-
--auto f1 () -> int;
--auto f2 (); // { dg-error "without late return type" }
--int f3 () -> int; // { dg-error "late return type" }
--auto *f4 () -> int; // { dg-error "late return type" }
+- if (regno_dest != LPM_REGNO)
+- avr_asm_len ("mov %0,%3", xop, plen, 1);
-
--struct A
--{
-- auto f5 () const -> int;
-- auto f6 (); // { dg-error "without late return type" }
-- int f7 () -> int; // { dg-error "late return type" }
-- auto *f8 () -> int; // { dg-error "late return type" }
--};
-Index: gcc/testsuite/g++.dg/cpp0x/auto12.C
-===================================================================
---- gcc/testsuite/g++.dg/cpp0x/auto12.C (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/testsuite/g++.dg/cpp0x/auto12.C (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -1,63 +0,0 @@
--// More auto/decltype mangling tests.
--// { dg-options "-std=c++0x" }
+- return "";
-
--template <class T>
--struct B
--{
-- static int i;
--};
+- case 2:
+- if (REGNO (dest) == REG_Z)
+- return avr_asm_len ("%4lpm" CR_TAB
+- "push %3" CR_TAB
+- "adiw %2,1" CR_TAB
+- "%4lpm" CR_TAB
+- "mov %B0,%3" CR_TAB
+- "pop %A0", xop, plen, 6);
+-
+- avr_asm_len ("%4lpm" CR_TAB
+- "mov %A0,%3" CR_TAB
+- "adiw %2,1" CR_TAB
+- "%4lpm" CR_TAB
+- "mov %B0,%3", xop, plen, 5);
+-
+- if (!reg_unused_after (insn, addr))
+- avr_asm_len ("sbiw %2,1", xop, plen, 1);
+-
+- break; /* 2 */
+- }
+-
+- break; /* REG */
-
--int&& x();
+- case POST_INC:
-
--template <class T>
--struct A
--{
-- static int i;
-- static int &ir;
-- static int &&irr;
-- template <class U>
-- auto f(U u) -> decltype (u + i);
-- template <class U>
-- auto fr(U u) -> decltype (u + ir);
-- template <class U>
-- auto frr(U u) -> decltype (u + irr);
-- template <class U>
-- auto g(U u) -> decltype (u + sizeof (i));
-- template <class U>
-- auto h(U u) -> decltype (u + B<U>::i);
-- template <class U>
-- auto j(U u) -> decltype (u + x());
--};
+- gcc_assert (REG_Z == REGNO (XEXP (addr, 0))
+- && n_bytes <= 4);
-
--template<class T> template<class U>
--auto A<T>::f(U u) -> decltype (u + i)
--{
-- return u + i;
--}
+- if (regno_dest == LPM_REGNO)
+- avr_asm_len ("%4lpm" CR_TAB
+- "adiw %2,1", xop, plen, 2);
+- else
+- avr_asm_len ("%4lpm" CR_TAB
+- "mov %A0,%3" CR_TAB
+- "adiw %2,1", xop, plen, 3);
-
--template <class... Args>
--int f (Args... args);
+- if (n_bytes >= 2)
+- avr_asm_len ("%4lpm" CR_TAB
+- "mov %B0,%3" CR_TAB
+- "adiw %2,1", xop, plen, 3);
-
--template <class... Args>
--auto g (Args... args) -> decltype (f ((args+1)...))
--{
-- return (f ((args+1)...));
--}
+- if (n_bytes >= 3)
+- avr_asm_len ("%4lpm" CR_TAB
+- "mov %C0,%3" CR_TAB
+- "adiw %2,1", xop, plen, 3);
-
--int main()
--{
-- // { dg-final { scan-assembler "_ZN1AIiE1fIiEEDTplfp_L_ZNS0_1iEEET_" } }
-- A<int>().f(1);
-- // { dg-final { scan-assembler "_ZN1AIiE2frIiEEDTplfp_L_ZNS0_2irEEET_" } }
-- A<int>().fr(1);
-- // { dg-final { scan-assembler "_ZN1AIiE3frrIiEEDTplfp_L_ZNS0_3irrEEET_" } }
-- A<int>().frr(1);
-- // { dg-final { scan-assembler "_ZN1AIiE1gIiEEDTplfp_szL_ZNS0_1iEEET_" } }
-- A<int>().g(1);
-- // { dg-final { scan-assembler "_ZN1AIiE1hIiEEDTplfp_sr1BIT_E1iES3_" } }
-- A<int>().h(1);
-- // { dg-final { scan-assembler "_ZN1AIiE1jIiEEDTplfp_clL_Z1xvEEET_" } }
-- A<int>().j(1);
-- // { dg-final { scan-assembler "_Z1gIIidEEDTcl1fspplfp_Li1EEEDpT_" } }
-- g(42, 1.0);
+- if (n_bytes >= 4)
+- avr_asm_len ("%4lpm" CR_TAB
+- "mov %D0,%3" CR_TAB
+- "adiw %2,1", xop, plen, 3);
+-
+- break; /* POST_INC */
+-
+- } /* switch CODE (addr) */
+-
+- return "";
-}
-Index: gcc/testsuite/g++.dg/cpp0x/decltype18.C
-===================================================================
---- gcc/testsuite/g++.dg/cpp0x/decltype18.C (.../tags/gcc_4_4_2_release) (wersja 0)
-+++ gcc/testsuite/g++.dg/cpp0x/decltype18.C (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -0,0 +1,5 @@
-+// PR c++/37875
-+// { dg-options "-std=c++0x" }
-+
-+template <typename> struct X {};
-+X<decltype(1 > 2)> x;
-Index: gcc/testsuite/g++.dg/cpp0x/trailing1.C
-===================================================================
---- gcc/testsuite/g++.dg/cpp0x/trailing1.C (.../tags/gcc_4_4_2_release) (wersja 0)
-+++ gcc/testsuite/g++.dg/cpp0x/trailing1.C (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -0,0 +1,118 @@
-+// Tests for late-specified return type.
-+// { dg-options "-std=c++0x" }
-+
-+auto f() -> int
-+{
-+ return 0;
-+}
-+
-+template<class T, class U>
-+auto add(T t, U u) -> decltype (t+u)
-+{
-+ return t+u;
-+}
-+
-+template<class T, class U>
-+decltype(T()+U()) add2(T t, U u)
-+{
-+ return t+u;
-+}
-+
-+template <class T, class U>
-+U ag (T, U)
-+{
-+ return U();
+-
+-
+ /* If PLEN == NULL: Ouput instructions to load a value from a memory location
+ OP[1] in AS1 to register OP[0].
+ If PLEN != 0 set *PLEN to the length in words of the instruction sequence.
+@@ -2607,13 +2509,11 @@
+ static const char*
+ avr_out_lpm (rtx insn, rtx *op, int *plen)
+ {
+- rtx xop[6];
++ rtx xop[3];
+ rtx dest = op[0];
+ rtx src = SET_SRC (single_set (insn));
+ rtx addr;
+ int n_bytes = GET_MODE_SIZE (GET_MODE (dest));
+- int regno_dest;
+- int segment;
+ RTX_CODE code;
+ addr_space_t as = MEM_ADDR_SPACE (src);
+
+@@ -2634,135 +2534,126 @@
+ gcc_assert (REG_P (dest));
+ gcc_assert (REG == code || POST_INC == code);
+
++ /* Only 1-byte moves from __flash are representes as open coded
++ mov insns. All other loads from flash are not handled here but
++ by some UNSPEC instead, see respective FIXME in machine description. */
++
++ gcc_assert (as == ADDR_SPACE_FLASH);
++ gcc_assert (n_bytes == 1);
++
+ xop[0] = dest;
+- xop[1] = addr;
+- xop[2] = lpm_addr_reg_rtx;
+- xop[4] = xstring_empty;
+- xop[5] = tmp_reg_rtx;
++ xop[1] = lpm_addr_reg_rtx;
++ xop[2] = lpm_reg_rtx;
+
+- regno_dest = REGNO (dest);
+-
+- segment = avr_addrspace[as].segment;
+-
+- /* Set RAMPZ as needed. */
+-
+- if (segment)
++ switch (code)
+ {
+- xop[4] = GEN_INT (segment);
+-
+- if (xop[3] = avr_find_unused_d_reg (insn, lpm_addr_reg_rtx),
+- xop[3])
+- {
+- avr_asm_len ("ldi %3,%4" CR_TAB
+- "out __RAMPZ__,%3", xop, plen, 2);
+- }
+- else if (segment == 1)
+- {
+- avr_asm_len ("clr %5" CR_TAB
+- "inc %5" CR_TAB
+- "out __RAMPZ__,%5", xop, plen, 3);
+- }
+- else
+- {
+- avr_asm_len ("mov %5,%2" CR_TAB
+- "ldi %2,%4" CR_TAB
+- "out __RAMPZ__,%2" CR_TAB
+- "mov %2,%5", xop, plen, 4);
+- }
+-
+- xop[4] = xstring_e;
+-
+- if (!AVR_HAVE_ELPMX)
+- return avr_out_lpm_no_lpmx (insn, xop, plen);
+- }
+- else if (!AVR_HAVE_LPMX)
+- {
+- return avr_out_lpm_no_lpmx (insn, xop, plen);
+- }
+-
+- /* We have [E]LPMX: Output reading from Flash the comfortable way. */
+-
+- switch (GET_CODE (addr))
+- {
+ default:
+ gcc_unreachable();
+
+ case REG:
+
+ gcc_assert (REG_Z == REGNO (addr));
++
++ return AVR_HAVE_LPMX
++ ? avr_asm_len ("lpm %0,%a1", xop, plen, 1)
++ : avr_asm_len ("lpm" CR_TAB
++ "mov %0,%2", xop, plen, 2);
++
++ case POST_INC:
++
++ gcc_assert (REG_Z == REGNO (XEXP (addr, 0)));
+
+- switch (n_bytes)
+- {
+- default:
+- gcc_unreachable();
++ return AVR_HAVE_LPMX
++ ? avr_asm_len ("lpm %0,%a1+", xop, plen, 1)
++ : avr_asm_len ("lpm" CR_TAB
++ "adiw %1, 1" CR_TAB
++ "mov %0,%2", xop, plen, 3);
++ }
+
+- case 1:
+- return avr_asm_len ("%4lpm %0,%a2", xop, plen, 1);
++ return "";
+}
-+
-+template<class T, class U>
-+auto add3(T t, U u) -> decltype (ag(t,u))
+
+- case 2:
+- if (REGNO (dest) == REG_Z)
+- return avr_asm_len ("%4lpm %5,%a2+" CR_TAB
+- "%4lpm %B0,%a2" CR_TAB
+- "mov %A0,%5", xop, plen, 3);
+- else
+- {
+- avr_asm_len ("%4lpm %A0,%a2+" CR_TAB
+- "%4lpm %B0,%a2", xop, plen, 2);
+-
+- if (!reg_unused_after (insn, addr))
+- avr_asm_len ("sbiw %2,1", xop, plen, 1);
+- }
+-
+- break; /* 2 */
+
+- case 3:
++/* If PLEN == NULL: Ouput instructions to load $0 with a value from
++ flash address $1:Z. If $1 = 0 we can use LPM to read, otherwise
++ use ELPM.
++ If PLEN != 0 set *PLEN to the length in words of the instruction sequence.
++ Return "". */
+
+- avr_asm_len ("%4lpm %A0,%a2+" CR_TAB
+- "%4lpm %B0,%a2+" CR_TAB
+- "%4lpm %C0,%a2", xop, plen, 3);
+-
+- if (!reg_unused_after (insn, addr))
+- avr_asm_len ("sbiw %2,2", xop, plen, 1);
+-
+- break; /* 3 */
++const char*
++avr_load_lpm (rtx insn, rtx *op, int *plen)
+{
-+ return ag(t,u);
-+}
-+
-+template<class T, class U>
-+decltype(*(T*)0+*(U*)0) add4(T t, U u)
++ rtx xop[4];
++ int n, n_bytes = GET_MODE_SIZE (GET_MODE (op[0]));
++ rtx xsegment = op[1];
++ bool clobber_z = PARALLEL == GET_CODE (PATTERN (insn));
++ bool r30_in_tmp = false;
++
++ if (plen)
++ *plen = 0;
++
++ xop[1] = lpm_addr_reg_rtx;
++ xop[2] = lpm_reg_rtx;
++ xop[3] = xstring_empty;
++
++ /* Set RAMPZ as needed. */
++
++ if (REG_P (xsegment))
++ {
++ avr_asm_len ("out __RAMPZ__,%0", &xsegment, plen, 1);
++ xop[3] = xstring_e;
++ }
++
++ /* Load the individual bytes from LSB to MSB. */
++
++ for (n = 0; n < n_bytes; n++)
++ {
++ xop[0] = all_regs_rtx[REGNO (op[0]) + n];
+
+- case 4:
+-
+- avr_asm_len ("%4lpm %A0,%a2+" CR_TAB
+- "%4lpm %B0,%a2+", xop, plen, 2);
+-
+- if (REGNO (dest) == REG_Z - 2)
+- return avr_asm_len ("%4lpm %5,%a2+" CR_TAB
+- "%4lpm %C0,%a2" CR_TAB
+- "mov %D0,%5", xop, plen, 3);
+- else
++ if ((CONST_INT_P (xsegment) && AVR_HAVE_LPMX)
++ || (REG_P (xsegment) && AVR_HAVE_ELPMX))
++ {
++ if (n == n_bytes-1)
++ avr_asm_len ("%3lpm %0,%a1", xop, plen, 1);
++ else if (REGNO (xop[0]) == REG_Z)
+ {
+- avr_asm_len ("%4lpm %C0,%a2+" CR_TAB
+- "%4lpm %D0,%a2", xop, plen, 2);
+-
+- if (!reg_unused_after (insn, addr))
+- avr_asm_len ("sbiw %2,3", xop, plen, 1);
++ avr_asm_len ("%3lpm %2,%a1+", xop, plen, 1);
++ r30_in_tmp = true;
+ }
++ else
++ avr_asm_len ("%3lpm %0,%a1+", xop, plen, 1);
++ }
++ else
++ {
++ gcc_assert (clobber_z);
++
++ avr_asm_len ("%3lpm" CR_TAB
++ "mov %0,%2", xop, plen, 2);
+
+- break; /* 4 */
+- } /* n_bytes */
++ if (n != n_bytes-1)
++ avr_asm_len ("adiw %1,1", xop, plen, 1);
++ }
++ }
++
++ if (r30_in_tmp)
++ avr_asm_len ("mov %1,%2", xop, plen, 1);
++
++ if (!clobber_z
++ && n_bytes > 1
++ && !reg_unused_after (insn, lpm_addr_reg_rtx)
++ && !reg_overlap_mentioned_p (op[0], lpm_addr_reg_rtx))
++ {
++ xop[2] = GEN_INT (n_bytes-1);
++ avr_asm_len ("sbiw %1,%2", xop, plen, 1);
++ }
++
++ if (REG_P (xsegment) && AVR_HAVE_RAMPD)
++ {
++ /* Reset RAMPZ to 0 so that EBI devices don't read garbage from RAM */
+
+- break; /* REG */
++ avr_asm_len ("out __RAMPZ__,__zero_reg__", xop, plen, 1);
++ }
+
+- case POST_INC:
+-
+- gcc_assert (REG_Z == REGNO (XEXP (addr, 0))
+- && n_bytes <= 4);
+-
+- avr_asm_len ("%4lpm %A0,%a2+", xop, plen, 1);
+- if (n_bytes >= 2) avr_asm_len ("%4lpm %B0,%a2+", xop, plen, 1);
+- if (n_bytes >= 3) avr_asm_len ("%4lpm %C0,%a2+", xop, plen, 1);
+- if (n_bytes >= 4) avr_asm_len ("%4lpm %D0,%a2+", xop, plen, 1);
+-
+- break; /* POST_INC */
+-
+- } /* switch CODE (addr) */
+-
+ return "";
+ }
+
+@@ -2782,8 +2673,9 @@
+ if (plen)
+ *plen = 0;
+
+- avr_asm_len ("ld %3,%a2" CR_TAB
+- "sbrs %1,7", xop, plen, 2);
++ avr_asm_len ("sbrc %1,7" CR_TAB
++ "ld %3,%a2" CR_TAB
++ "sbrs %1,7", xop, plen, 3);
+
+ avr_asm_len (AVR_HAVE_LPMX ? "lpm %3,%a2" : "lpm", xop, plen, 1);
+
+@@ -2794,13 +2686,11 @@
+ }
+
+
+-const char *
+-output_movqi (rtx insn, rtx operands[], int *l)
++const char*
++output_movqi (rtx insn, rtx operands[], int *real_l)
+ {
+- int dummy;
+ rtx dest = operands[0];
+ rtx src = operands[1];
+- int *real_l = l;
+
+ if (avr_mem_flash_p (src)
+ || avr_mem_flash_p (dest))
+@@ -2808,10 +2698,8 @@
+ return avr_out_lpm (insn, operands, real_l);
+ }
+
+- if (!l)
+- l = &dummy;
+-
+- *l = 1;
++ if (real_l)
++ *real_l = 1;
+
+ if (register_operand (dest, QImode))
+ {
+@@ -2829,10 +2717,10 @@
+ output_reload_in_const (operands, NULL_RTX, real_l, false);
+ return "";
+ }
+- else if (GET_CODE (src) == MEM)
++ else if (MEM_P (src))
+ return out_movqi_r_mr (insn, operands, real_l); /* mov r,m */
+ }
+- else if (GET_CODE (dest) == MEM)
++ else if (MEM_P (dest))
+ {
+ rtx xop[2];
+
+@@ -6533,6 +6421,7 @@
+ case ADJUST_LEN_MOV32: output_movsisf (insn, op, &len); break;
+ case ADJUST_LEN_MOVMEM: avr_out_movmem (insn, op, &len); break;
+ case ADJUST_LEN_XLOAD: avr_out_xload (insn, op, &len); break;
++ case ADJUST_LEN_LOAD_LPM: avr_load_lpm (insn, op, &len); break;
+
+ case ADJUST_LEN_TSTHI: avr_out_tsthi (insn, op, &len); break;
+ case ADJUST_LEN_TSTPSI: avr_out_tstpsi (insn, op, &len); break;
+@@ -8975,7 +8864,7 @@
+
+ /* Implement `MODE_CODE_BASE_REG_CLASS'. */
+
+-reg_class_t
++enum reg_class
+ avr_mode_code_base_reg_class (enum machine_mode mode ATTRIBUTE_UNUSED,
+ addr_space_t as, RTX_CODE outer_code,
+ RTX_CODE index_code ATTRIBUTE_UNUSED)
+@@ -9568,7 +9457,8 @@
+ static bool
+ avr_reg_ok_for_pgm_addr (rtx reg, bool strict)
+ {
+- gcc_assert (REG_P (reg));
++ if (!REG_P (reg))
++ return false;
+
+ if (strict)
+ {
+@@ -9916,7 +9806,7 @@
+ case ADDR_SPACE_FLASH:
+
+ if (AVR_HAVE_LPMX)
+- avr_asm_len ("lpm %2,%Z+", xop, plen, 1);
++ avr_asm_len ("lpm %2,Z+", xop, plen, 1);
+ else
+ avr_asm_len ("lpm" CR_TAB
+ "adiw r30,1", xop, plen, 2);
+@@ -9965,6 +9855,14 @@
+ \f
+ /* Helper for __builtin_avr_delay_cycles */
+
++static rtx
++avr_mem_clobber (void)
+{
-+ return t+u;
++ rtx mem = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode));
++ MEM_VOLATILE_P (mem) = 1;
++ return mem;
+}
+
-+template <class T>
-+struct A
-+{
-+ T f() {}
-+ template <class U>
-+ T g() {}
-+ template <class V>
-+ struct B
-+ {
-+ int MEM;
-+ };
-+};
-+
-+template <class T>
-+auto f(T* t) -> decltype (t->f())
+ static void
+ avr_expand_delay_cycles (rtx operands0)
+ {
+@@ -9976,7 +9874,8 @@
+ {
+ loop_count = ((cycles - 9) / 6) + 1;
+ cycles_used = ((loop_count - 1) * 6) + 9;
+- emit_insn (gen_delay_cycles_4 (gen_int_mode (loop_count, SImode)));
++ emit_insn (gen_delay_cycles_4 (gen_int_mode (loop_count, SImode),
++ avr_mem_clobber()));
+ cycles -= cycles_used;
+ }
+
+@@ -9986,7 +9885,8 @@
+ if (loop_count > 0xFFFFFF)
+ loop_count = 0xFFFFFF;
+ cycles_used = ((loop_count - 1) * 5) + 7;
+- emit_insn (gen_delay_cycles_3 (gen_int_mode (loop_count, SImode)));
++ emit_insn (gen_delay_cycles_3 (gen_int_mode (loop_count, SImode),
++ avr_mem_clobber()));
+ cycles -= cycles_used;
+ }
+
+@@ -9996,7 +9896,8 @@
+ if (loop_count > 0xFFFF)
+ loop_count = 0xFFFF;
+ cycles_used = ((loop_count - 1) * 4) + 5;
+- emit_insn (gen_delay_cycles_2 (gen_int_mode (loop_count, HImode)));
++ emit_insn (gen_delay_cycles_2 (gen_int_mode (loop_count, HImode),
++ avr_mem_clobber()));
+ cycles -= cycles_used;
+ }
+
+@@ -10006,7 +9907,8 @@
+ if (loop_count > 255)
+ loop_count = 255;
+ cycles_used = loop_count * 3;
+- emit_insn (gen_delay_cycles_1 (gen_int_mode (loop_count, QImode)));
++ emit_insn (gen_delay_cycles_1 (gen_int_mode (loop_count, QImode),
++ avr_mem_clobber()));
+ cycles -= cycles_used;
+ }
+
+@@ -11007,6 +10909,9 @@
+ #undef TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS
+ #define TARGET_ADDR_SPACE_LEGITIMIZE_ADDRESS avr_addr_space_legitimize_address
+
++#undef TARGET_MODE_DEPENDENT_ADDRESS_P
++#define TARGET_MODE_DEPENDENT_ADDRESS_P avr_mode_dependent_address_p
++
+ #undef TARGET_PRINT_OPERAND
+ #define TARGET_PRINT_OPERAND avr_print_operand
+ #undef TARGET_PRINT_OPERAND_ADDRESS
+Index: gcc/config/epiphany/epiphany.c
+===================================================================
+--- gcc/config/epiphany/epiphany.c (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/config/epiphany/epiphany.c (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1417,7 +1417,7 @@
+ return gen_rtx_REG (mode, 0);
+ }
+
+-bool
++static bool
+ epiphany_function_value_regno_p (const unsigned int regno ATTRIBUTE_UNUSED)
+ {
+ return regno == 0;
+Index: gcc/config/rs6000/vector.md
+===================================================================
+--- gcc/config/rs6000/vector.md (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/config/rs6000/vector.md (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -516,6 +516,94 @@
+ "VECTOR_UNIT_ALTIVEC_P (<MODE>mode)"
+ "")
+
++(define_insn_and_split "*vector_uneq<mode>"
++ [(set (match_operand:VEC_F 0 "vfloat_operand" "")
++ (uneq:VEC_F (match_operand:VEC_F 1 "vfloat_operand" "")
++ (match_operand:VEC_F 2 "vfloat_operand" "")))]
++ "VECTOR_UNIT_ALTIVEC_OR_VSX_P (<MODE>mode)"
++ "#"
++ ""
++ [(set (match_dup 3)
++ (gt:VEC_F (match_dup 1)
++ (match_dup 2)))
++ (set (match_dup 4)
++ (gt:VEC_F (match_dup 2)
++ (match_dup 1)))
++ (set (match_dup 0)
++ (not:VEC_F (ior:VEC_F (match_dup 3)
++ (match_dup 4))))]
++ "
+{
-+ return t->f();
-+}
++ operands[3] = gen_reg_rtx (<MODE>mode);
++ operands[4] = gen_reg_rtx (<MODE>mode);
++}")
+
-+template <class T>
-+auto g(T t) -> decltype (t.f())
++(define_insn_and_split "*vector_ltgt<mode>"
++ [(set (match_operand:VEC_F 0 "vfloat_operand" "")
++ (ltgt:VEC_F (match_operand:VEC_F 1 "vfloat_operand" "")
++ (match_operand:VEC_F 2 "vfloat_operand" "")))]
++ "VECTOR_UNIT_ALTIVEC_OR_VSX_P (<MODE>mode)"
++ "#"
++ ""
++ [(set (match_dup 3)
++ (gt:VEC_F (match_dup 1)
++ (match_dup 2)))
++ (set (match_dup 4)
++ (gt:VEC_F (match_dup 2)
++ (match_dup 1)))
++ (set (match_dup 0)
++ (ior:VEC_F (match_dup 3)
++ (match_dup 4)))]
++ "
+{
-+ return t.f();
-+}
++ operands[3] = gen_reg_rtx (<MODE>mode);
++ operands[4] = gen_reg_rtx (<MODE>mode);
++}")
+
-+template <class T, class U>
-+auto h(T t, U u) -> decltype (t.template g<U>())
++(define_insn_and_split "*vector_ordered<mode>"
++ [(set (match_operand:VEC_F 0 "vfloat_operand" "")
++ (ordered:VEC_F (match_operand:VEC_F 1 "vfloat_operand" "")
++ (match_operand:VEC_F 2 "vfloat_operand" "")))]
++ "VECTOR_UNIT_ALTIVEC_OR_VSX_P (<MODE>mode)"
++ "#"
++ ""
++ [(set (match_dup 3)
++ (ge:VEC_F (match_dup 1)
++ (match_dup 2)))
++ (set (match_dup 4)
++ (ge:VEC_F (match_dup 2)
++ (match_dup 1)))
++ (set (match_dup 0)
++ (ior:VEC_F (match_dup 3)
++ (match_dup 4)))]
++ "
+{
-+ return t.template g<U>();
-+}
++ operands[3] = gen_reg_rtx (<MODE>mode);
++ operands[4] = gen_reg_rtx (<MODE>mode);
++}")
+
-+struct D { };
-+struct C: public A<int>::B<D>
++(define_insn_and_split "*vector_unordered<mode>"
++ [(set (match_operand:VEC_F 0 "vfloat_operand" "")
++ (unordered:VEC_F (match_operand:VEC_F 1 "vfloat_operand" "")
++ (match_operand:VEC_F 2 "vfloat_operand" "")))]
++ "VECTOR_UNIT_ALTIVEC_OR_VSX_P (<MODE>mode)"
++ "#"
++ ""
++ [(set (match_dup 3)
++ (ge:VEC_F (match_dup 1)
++ (match_dup 2)))
++ (set (match_dup 4)
++ (ge:VEC_F (match_dup 2)
++ (match_dup 1)))
++ (set (match_dup 0)
++ (not:VEC_F (ior:VEC_F (match_dup 3)
++ (match_dup 4))))]
++ "
+{
-+};
++ operands[3] = gen_reg_rtx (<MODE>mode);
++ operands[4] = gen_reg_rtx (<MODE>mode);
++}")
+
-+template <class T, class U, class V>
-+auto k(T t, U u, V v) -> decltype (t.U::template B<V>::MEM)
-+{
-+ return t.U::template B<V>::MEM;
-+}
+ ;; Note the arguments for __builtin_altivec_vsel are op2, op1, mask
+ ;; which is in the reverse order that we want
+ (define_expand "vector_select_<mode>"
+Index: gcc/config/rs6000/rs6000.c
+===================================================================
+--- gcc/config/rs6000/rs6000.c (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ gcc/config/rs6000/rs6000.c (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -16137,6 +16137,10 @@
+ case EQ:
+ case GT:
+ case GTU:
++ case ORDERED:
++ case UNORDERED:
++ case UNEQ:
++ case LTGT:
+ mask = gen_reg_rtx (mode);
+ emit_insn (gen_rtx_SET (VOIDmode,
+ mask,
+Index: libgo/go/syscall/syscall_unix.go
+===================================================================
+--- libgo/go/syscall/syscall_unix.go (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ libgo/go/syscall/syscall_unix.go (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -31,6 +31,7 @@
+ // expects a 32-bit one.
+ func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) {
+ Entersyscall()
++ SetErrno(0)
+ var r uintptr
+ if unsafe.Sizeof(r) == 4 {
+ r1 := c_syscall32(int32(trap), int32(a1), int32(a2), int32(a3), 0, 0, 0)
+@@ -46,6 +47,7 @@
+
+ func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) {
+ Entersyscall()
++ SetErrno(0)
+ var r uintptr
+ if unsafe.Sizeof(r) == 4 {
+ r1 := c_syscall32(int32(trap), int32(a1), int32(a2), int32(a3),
+@@ -63,6 +65,7 @@
+
+ func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) {
+ var r uintptr
++ SetErrno(0)
+ if unsafe.Sizeof(r) == 4 {
+ r1 := c_syscall32(int32(trap), int32(a1), int32(a2), int32(a3), 0, 0, 0)
+ r = uintptr(r1)
+@@ -76,6 +79,7 @@
+
+ func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) {
+ var r uintptr
++ SetErrno(0)
+ if unsafe.Sizeof(r) == 4 {
+ r1 := c_syscall32(int32(trap), int32(a1), int32(a2), int32(a3),
+ int32(a4), int32(a5), int32(a6))
+Index: libffi/src/powerpc/aix.S
+===================================================================
+--- libffi/src/powerpc/aix.S (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ libffi/src/powerpc/aix.S (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1,5 +1,5 @@
+ /* -----------------------------------------------------------------------
+- aix.S - Copyright (c) 2002,2009 Free Software Foundation, Inc.
++ aix.S - Copyright (c) 2002, 2009 Free Software Foundation, Inc.
+ based on darwin.S by John Hornkvist
+
+ PowerPC Assembly glue.
+@@ -79,6 +79,8 @@
+ .set f20,20
+ .set f21,21
+
++ .extern .ffi_prep_args
++
+ #define LIBFFI_ASM
+ #include <fficonfig.h>
+ #include <ffi.h>
+@@ -125,6 +127,7 @@
+ /* Call ffi_prep_args. */
+ mr r4, r1
+ bl .ffi_prep_args
++ nop
+
+ /* Now do the call. */
+ ld r0, 0(r29)
+@@ -226,6 +229,7 @@
+ /* Call ffi_prep_args. */
+ mr r4, r1
+ bl .ffi_prep_args
++ nop
+
+ /* Now do the call. */
+ lwz r0, 0(r29)
+Index: libffi/src/powerpc/aix_closure.S
+===================================================================
+--- libffi/src/powerpc/aix_closure.S (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ libffi/src/powerpc/aix_closure.S (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -79,6 +79,8 @@
+ .set f20,20
+ .set f21,21
+
++ .extern .ffi_closure_helper_DARWIN
++
+ #define LIBFFI_ASM
+ #define JUMPTARGET(name) name
+ #define L(x) x
+@@ -165,6 +167,7 @@
+
+ /* look up the proper starting point in table */
+ /* by using return type as offset */
++ lhz r3, 10(r3) /* load type from return type */
+ ld r4, LC..60(2) /* get address of jump table */
+ sldi r3, r3, 4 /* now multiply return type by 16 */
+ ld r0, 240+16(r1) /* load return address */
+@@ -337,8 +340,9 @@
+
+ /* look up the proper starting point in table */
+ /* by using return type as offset */
++ lhz r3, 6(r3) /* load type from return type */
+ lwz r4, LC..60(2) /* get address of jump table */
+- slwi r3, r3, 4 /* now multiply return type by 4 */
++ slwi r3, r3, 4 /* now multiply return type by 16 */
+ lwz r0, 176+8(r1) /* load return address */
+ add r3, r3, r4 /* add contents of table to table address */
+ mtctr r3
+Index: libffi/ChangeLog
+===================================================================
+--- libffi/ChangeLog (.../tags/gcc_4_7_0_release) (wersja 185750)
++++ libffi/ChangeLog (.../branches/gcc-4_7-branch) (wersja 185750)
+@@ -1,3 +1,17 @@
++2012-03-22 David Edelsohn <dje.gcc@gmail.com>
+
-+// For these two examples we can elide the 'decltype' and just mangle the type.
-+template <class T>
-+auto l(T t) -> decltype (t)
-+{
-+ return t;
-+}
++ Backport from mainline:
++ 2012-03-09 David Edelsohn <dje.gcc@gmail.com>
+
-+template <class T, T u>
-+auto m(T t) -> decltype (u)
-+{
-+ return t;
-+}
-+
-+A<int> a, *p;
-+
-+int main()
-+{
-+ // { dg-final { scan-assembler "_Z3addIidEDTplfp_fp0_ET_T0_" } }
-+ auto i = add(1, 2.0);
-+ // { dg-final { scan-assembler "_Z4add4IidEDTpldecvPT_Li0EdecvPT0_Li0EES0_S2_" } }
-+ auto i4 = add4(1, 2.0);
-+ // { dg-final { scan-assembler "_Z4add2IidEDTplcvT__EcvT0__EES0_S1_" } }
-+ auto i2 = add2(1, 2.0);
-+ // { dg-final { scan-assembler "_Z4add3IidEDTcl2agfp_fp0_EET_T0_" } }
-+ auto i3 = add3(1, 2.0);
-+ // { dg-final { scan-assembler "_Z1fI1AIiEEDTclptfp_1fEEPT_" } }
-+ f(p);
-+ // { dg-final { scan-assembler "_Z1gI1AIiEEDTcldtfp_1fEET_" } }
-+ g(a);
-+ // { dg-final { scan-assembler "_Z1hI1AIiEdEDTcldtfp_1gIT0_EEET_S2_" } }
-+ h(a,1.0);
-+ // { dg-final { scan-assembler "_Z1kI1C1AIiE1DEDtdtfp_srNT0_1BIT1_EE3MEMET_S4_S6_" } }
-+ k( C(), A<int>(), D() );
-+ // { dg-final { scan-assembler "_Z1lIiET_S0_" } }
-+ l(1);
-+ // { dg-final { scan-assembler "_Z1mIiLi1EET_S0_" } }
-+ m<int,1>(1);
-+}
-Index: gcc/testsuite/g++.dg/cpp0x/trailing2.C
-===================================================================
---- gcc/testsuite/g++.dg/cpp0x/trailing2.C (.../tags/gcc_4_4_2_release) (wersja 0)
-+++ gcc/testsuite/g++.dg/cpp0x/trailing2.C (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -0,0 +1,16 @@
-+// PR c++/37967
-+// Negative test for auto
-+// { dg-options "-std=c++0x" }
-+
-+auto f1 () -> int;
-+auto f2 (); // { dg-error "without late return type" }
-+int f3 () -> int; // { dg-error "late return type" }
-+auto *f4 () -> int; // { dg-error "late return type" }
-+
-+struct A
-+{
-+ auto f5 () const -> int;
-+ auto f6 (); // { dg-error "without late return type" }
-+ int f7 () -> int; // { dg-error "late return type" }
-+ auto *f8 () -> int; // { dg-error "late return type" }
-+};
-Index: gcc/testsuite/g++.dg/cpp0x/fntmpdefarg1.C
-===================================================================
---- gcc/testsuite/g++.dg/cpp0x/fntmpdefarg1.C (.../tags/gcc_4_4_2_release) (wersja 0)
-+++ gcc/testsuite/g++.dg/cpp0x/fntmpdefarg1.C (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -0,0 +1,7 @@
-+// PR c++/37766
-+// { dg-options -std=c++0x }
-+
-+int a = 1;
-+template<int& b = a> void f() {
-+ f<>();
-+}
-Index: gcc/testsuite/g++.dg/cpp0x/trailing3.C
-===================================================================
---- gcc/testsuite/g++.dg/cpp0x/trailing3.C (.../tags/gcc_4_4_2_release) (wersja 0)
-+++ gcc/testsuite/g++.dg/cpp0x/trailing3.C (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -0,0 +1,63 @@
-+// More auto/decltype mangling tests.
-+// { dg-options "-std=c++0x" }
-+
-+template <class T>
-+struct B
-+{
-+ static int i;
-+};
-+
-+int&& x();
-+
-+template <class T>
-+struct A
-+{
-+ static int i;
-+ static int &ir;
-+ static int &&irr;
-+ template <class U>
-+ auto f(U u) -> decltype (u + i);
-+ template <class U>
-+ auto fr(U u) -> decltype (u + ir);
-+ template <class U>
-+ auto frr(U u) -> decltype (u + irr);
-+ template <class U>
-+ auto g(U u) -> decltype (u + sizeof (i));
-+ template <class U>
-+ auto h(U u) -> decltype (u + B<U>::i);
-+ template <class U>
-+ auto j(U u) -> decltype (u + x());
-+};
-+
-+template<class T> template<class U>
-+auto A<T>::f(U u) -> decltype (u + i)
-+{
-+ return u + i;
-+}
-+
-+template <class... Args>
-+int f (Args... args);
-+
-+template <class... Args>
-+auto g (Args... args) -> decltype (f ((args+1)...))
-+{
-+ return (f ((args+1)...));
-+}
-+
-+int main()
-+{
-+ // { dg-final { scan-assembler "_ZN1AIiE1fIiEEDTplfp_L_ZNS0_1iEEET_" } }
-+ A<int>().f(1);
-+ // { dg-final { scan-assembler "_ZN1AIiE2frIiEEDTplfp_L_ZNS0_2irEEET_" } }
-+ A<int>().fr(1);
-+ // { dg-final { scan-assembler "_ZN1AIiE3frrIiEEDTplfp_L_ZNS0_3irrEEET_" } }
-+ A<int>().frr(1);
-+ // { dg-final { scan-assembler "_ZN1AIiE1gIiEEDTplfp_szL_ZNS0_1iEEET_" } }
-+ A<int>().g(1);
-+ // { dg-final { scan-assembler "_ZN1AIiE1hIiEEDTplfp_sr1BIT_E1iES3_" } }
-+ A<int>().h(1);
-+ // { dg-final { scan-assembler "_ZN1AIiE1jIiEEDTplfp_clL_Z1xvEEET_" } }
-+ A<int>().j(1);
-+ // { dg-final { scan-assembler "_Z1gIIidEEDTcl1fspplfp_Li1EEEDpT_" } }
-+ g(42, 1.0);
-+}
-Index: gcc/testsuite/g++.dg/cpp0x/trailing4.C
-===================================================================
---- gcc/testsuite/g++.dg/cpp0x/trailing4.C (.../tags/gcc_4_4_2_release) (wersja 0)
-+++ gcc/testsuite/g++.dg/cpp0x/trailing4.C (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -0,0 +1,11 @@
-+// PR c++/38597
-+// { dg-options "-std=c++0x" }
-+
-+template<class T, class U>
-+auto f(T,U) -> decltype(T() + U())
-+{ return T() + U(); }
-+
-+template<class T> void g(T){}
-+
-+int main() { g(f); } // { dg-error "no matching function" }
-+
-Index: gcc/testsuite/g++.dg/cpp0x/vt-40092.C
-===================================================================
---- gcc/testsuite/g++.dg/cpp0x/vt-40092.C (.../tags/gcc_4_4_2_release) (wersja 0)
-+++ gcc/testsuite/g++.dg/cpp0x/vt-40092.C (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -0,0 +1,21 @@
-+// { dg-do "compile" }
-+// { dg-options "-std=c++0x" }
-+
-+template <typename... Types> struct package {};
-+
-+template <int ArgGen> struct wrapper_gen {};
-+
-+template <int ArgNest> struct wrapper_nest
-+{
-+ typedef wrapper_gen<ArgNest> type_nest;
-+};
-+
-+template <int... ArgPack>
-+struct wrapper_pack
-+{
-+ typedef package<wrapper_gen <ArgPack>...> type_pack;
-+ // incorrect error: expansion pattern 'wrapper_gen<ArgNest>'
-+ // contains no argument packs
-+};
-+
-+
-Index: gcc/testsuite/g++.dg/cpp0x/trailing5.C
-===================================================================
---- gcc/testsuite/g++.dg/cpp0x/trailing5.C (.../tags/gcc_4_4_2_release) (wersja 0)
-+++ gcc/testsuite/g++.dg/cpp0x/trailing5.C (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -0,0 +1,10 @@
-+// PR c++/38798, DR 770
-+// { dg-options -std=c++0x }
-+
-+struct A {};
-+auto foo() -> struct A {}
-+
-+enum B {};
-+auto bar() -> enum B {}
-+
-+auto baz() -> struct C {} {} // { dg-error "" }
-Index: gcc/testsuite/g++.dg/cpp0x/rv-reinterpret.C
-===================================================================
---- gcc/testsuite/g++.dg/cpp0x/rv-reinterpret.C (.../tags/gcc_4_4_2_release) (wersja 0)
-+++ gcc/testsuite/g++.dg/cpp0x/rv-reinterpret.C (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -0,0 +1,11 @@
-+// { dg-options -std=c++0x }
-+// { dg-do compile }
-+
-+void f(int &);
-+void f(int &&ir) { ir = 42; }
-+int main()
-+{
-+ int x;
-+ f(reinterpret_cast<int&&>(x));
-+ return (x != 42);
-+}
-Index: gcc/testsuite/g++.dg/abi/mangle33.C
-===================================================================
---- gcc/testsuite/g++.dg/abi/mangle33.C (.../tags/gcc_4_4_2_release) (wersja 0)
-+++ gcc/testsuite/g++.dg/abi/mangle33.C (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -0,0 +1,19 @@
-+// Testcase for mangling very long names.
-+
-+#define N \
-+abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklm
-+
-+namespace N {
-+ int i;
-+}
-+
-+#undef N
-+#define N \
-+abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk
-+
-+namespace N {
-+ int j;
-+}
-+
-+// { dg-final { scan-assembler "_ZN4043abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklm1iE" } }
-+// { dg-final { scan-assembler "_ZN4041abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk1jE" } }
-Index: gcc/testsuite/g++.dg/abi/mangle34.C
-===================================================================
---- gcc/testsuite/g++.dg/abi/mangle34.C (.../tags/gcc_4_4_2_release) (wersja 0)
-+++ gcc/testsuite/g++.dg/abi/mangle34.C (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -0,0 +1,42 @@
-+// Contributed by Dodji Seketeli <dodji@redhat.com>
-+// Origin PR c++/40808
-+// { dg-do compile }
-+// This tests the mangling of empty template argument list in a template
-+// id.
-+// { dg-final {scan-assembler "_ZNK5DummyclI3GenEENT_3SigIE10ResultTypeERKS2_" } }
-+
-+
-+struct Void {};
-+
-+template <class R> struct FunType {
-+ typedef R ResultType;
-+};
-+
-+struct WrongNumberOfSigArgs {};
-+
-+template <typename R> struct CFunType {
-+ template <class Dummy1=Void, class Dummy2=Void> struct Sig : public
-+FunType<WrongNumberOfSigArgs> {};
-+ template <class Dummy> struct Sig<Void,Dummy> : public FunType<R> {};
-+};
-+
-+struct Dummy {
-+ template <typename F> typename F::template Sig<>::ResultType operator()(F
-+const& f) const {
-+ return typename F::template Sig<>::ResultType(0);
-+ }
-+};
-+
-+struct Gen: public CFunType<int> {
-+ int operator()() const {return 0;}
-+ Gen() {}
-+};
-+
-+int myfunction() {
-+ return Dummy()(Gen());
-+}
-+
-+int main() {
-+ myfunction();
-+}
-+
-Index: gcc/testsuite/gfortran.dg/equiv_8.f90
-===================================================================
---- gcc/testsuite/gfortran.dg/equiv_8.f90 (.../tags/gcc_4_4_2_release) (wersja 0)
-+++ gcc/testsuite/gfortran.dg/equiv_8.f90 (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -0,0 +1,7 @@
-+! { dg-do compile }
-+!
-+! PR fortran/41755
-+!
-+ common /uno/ aa
-+ equivalence (aa,aaaaa) (bb,cc) ! { dg-error "Expecting a comma in EQUIVALENCE" }
-+ end
-Index: gcc/cp/typeck.c
-===================================================================
---- gcc/cp/typeck.c (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/cp/typeck.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -5463,12 +5463,17 @@
- intype, type);
-
- expr = cp_build_unary_op (ADDR_EXPR, expr, 0, complain);
-+
-+ if (warn_strict_aliasing > 2)
-+ strict_aliasing_warning (TREE_TYPE (expr), type, expr);
-+
- if (expr != error_mark_node)
- expr = build_reinterpret_cast_1
- (build_pointer_type (TREE_TYPE (type)), expr, c_cast_p,
- valid_p, complain);
- if (expr != error_mark_node)
-- expr = cp_build_indirect_ref (expr, 0, complain);
-+ /* cp_build_indirect_ref isn't right for rvalue refs. */
-+ expr = convert_from_reference (fold_convert (type, expr));
- return expr;
- }
-
-Index: gcc/cp/tree.c
-===================================================================
---- gcc/cp/tree.c (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/cp/tree.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -1909,6 +1909,8 @@
- case TEMPLATE_PARM_INDEX:
- return (TEMPLATE_PARM_IDX (t1) == TEMPLATE_PARM_IDX (t2)
- && TEMPLATE_PARM_LEVEL (t1) == TEMPLATE_PARM_LEVEL (t2)
-+ && (TEMPLATE_PARM_PARAMETER_PACK (t1)
-+ == TEMPLATE_PARM_PARAMETER_PACK (t2))
- && same_type_p (TREE_TYPE (TEMPLATE_PARM_DECL (t1)),
- TREE_TYPE (TEMPLATE_PARM_DECL (t2))));
-
-Index: gcc/cp/mangle.c
-===================================================================
---- gcc/cp/mangle.c (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/cp/mangle.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -2071,21 +2071,22 @@
- /* Non-terminal <template-args>. ARGS is a TREE_VEC of template
- arguments.
-
-- <template-args> ::= I <template-arg>+ E */
-+ <template-args> ::= I <template-arg>* E */
-
- static void
- write_template_args (tree args)
- {
- int i;
-- int length = TREE_VEC_LENGTH (args);
-+ int length = 0;
-
- MANGLE_TRACE_TREE ("template-args", args);
-
- write_char ('I');
-
-- gcc_assert (length > 0);
-+ if (args)
-+ length = TREE_VEC_LENGTH (args);
-
-- if (TREE_CODE (TREE_VEC_ELT (args, 0)) == TREE_VEC)
-+ if (args && TREE_CODE (TREE_VEC_ELT (args, 0)) == TREE_VEC)
- {
- /* We have nested template args. We want the innermost template
- argument list. */
-@@ -2748,7 +2749,7 @@
- finish_mangling_internal (warn);
- /* Don't obstack_finish here, and the next start_mangling will
- remove the identifier. */
-- return get_identifier ((const char *) name_base);
-+ return get_identifier ((const char *) obstack_base (mangle_obstack));
- }
-
- /* Initialize data structures for mangling. */
-Index: gcc/cp/ChangeLog
-===================================================================
---- gcc/cp/ChangeLog (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/cp/ChangeLog (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -1,3 +1,48 @@
-+2009-10-23 Dodji Seketeli <dodji@redhat.com>
-+
-+ PR c++/40808
-+ * mangle.c (write_template_args): Allow mangling of empty template
-+ argument list. Updated function comments.
-+
-+2009-10-21 Jakub Jelinek <jakub@redhat.com>
-+
-+ * mangle.c (finish_mangling_get_identifier): Use
-+ obstack_base (mangle_obstack) instead of name_base.
-+
-+2009-10-15 Jason Merrill <jason@redhat.com>
-+
-+ PR c++/38798
-+ * parser.c (CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS): New.
-+ (cp_parser_type_specifier): Don't try to parse a class-specifier
-+ or enum-specifier in that case.
-+ (cp_parser_trailing_type_id): New.
-+ (cp_parser_late_return_type_opt): Call it.
-+ (cp_parser_type_id_1): Add is_trailing_return parm.
-+ (cp_parser_type_specifier_seq): Likewise.
-+
-+2009-10-14 Larry Evans <cppljevans@suddenlink.net>
-+
-+ PR c++/40092
-+ * tree.c (cp_tree_equal): Add test for TEMPLATE_PARM_PARAMETER_PACK
-+ equality.
-+
-+2009-10-12 Jason Merrill <jason@redhat.com>
-+
-+ PR c++/37875
-+ * parser.c (cp_parser_decltype): Set greater_than_is_operator_p.
-+
-+ PR c++/37766
-+ * pt.c (type_unification_real): Call convert_template_argument
-+ for function default template arguments.
-+ (check_default_tmpl_args): Suggest -std=c++0x when function default
-+ template args seen in C++98 mode.
-+
-+2009-10-11 Jason Merrill <jason@redhat.com>
-+
-+ PR c++/37204
-+ * typeck.c (build_reinterpret_cast_1): Handle rvalue refs
-+ properly.
-+
- 2009-10-15 Release Manager
-
- * GCC 4.4.2 released.
-Index: gcc/cp/pt.c
-===================================================================
---- gcc/cp/pt.c (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/cp/pt.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -3670,7 +3670,8 @@
- else if (is_friend_decl)
- msg = "default template arguments may not be used in function template friend declarations";
- else if (TREE_CODE (decl) == FUNCTION_DECL && (cxx_dialect == cxx98))
-- msg = "default template arguments may not be used in function templates";
-+ msg = ("default template arguments may not be used in function templates "
-+ "without -std=c++0x or -std=gnu++0x");
- else if (is_partial)
- msg = "default template arguments may not be used in partial specializations";
- else
-@@ -12657,9 +12658,11 @@
- to explicitly check cxx_dialect here. */
- if (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)))
- {
-- tree arg = tsubst_template_arg
-- (TREE_PURPOSE (TREE_VEC_ELT (tparms, i)),
-- targs, tf_none, NULL_TREE);
-+ tree parm = TREE_VALUE (TREE_VEC_ELT (tparms, i));
-+ tree arg = TREE_PURPOSE (TREE_VEC_ELT (tparms, i));
-+ arg = tsubst_template_arg (arg, targs, tf_none, NULL_TREE);
-+ arg = convert_template_argument (parm, arg, targs, tf_none,
-+ i, NULL_TREE);
- if (arg == error_mark_node)
- return 1;
- else
-Index: gcc/cp/parser.c
-===================================================================
---- gcc/cp/parser.c (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/cp/parser.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -1198,8 +1198,12 @@
- /* The construct is optional. If it is not present, then no error
- should be issued. */
- CP_PARSER_FLAGS_OPTIONAL = 0x1,
-- /* When parsing a type-specifier, do not allow user-defined types. */
-- CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES = 0x2
-+ /* When parsing a type-specifier, treat user-defined type-names
-+ as non-type identifiers. */
-+ CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES = 0x2,
-+ /* When parsing a type-specifier, do not try to parse a class-specifier
-+ or enum-specifier. */
-+ CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS = 0x4
- } cp_parser_flags;
-
- /* The different kinds of declarators we want to parse. */
-@@ -1735,10 +1739,11 @@
- (cp_parser *);
- static tree cp_parser_template_type_arg
- (cp_parser *);
-+static tree cp_parser_trailing_type_id (cp_parser *);
- static tree cp_parser_type_id_1
-- (cp_parser *, bool);
-+ (cp_parser *, bool, bool);
- static void cp_parser_type_specifier_seq
-- (cp_parser *, bool, cp_decl_specifier_seq *);
-+ (cp_parser *, bool, bool, cp_decl_specifier_seq *);
- static tree cp_parser_parameter_declaration_clause
- (cp_parser *);
- static tree cp_parser_parameter_declaration_list
-@@ -5740,6 +5745,7 @@
- = "types may not be defined in a new-type-id";
- /* Parse the type-specifier-seq. */
- cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
-+ /*is_trailing_return=*/false,
- &type_specifier_seq);
- /* Restore the old message. */
- parser->type_definition_forbidden_message = saved_message;
-@@ -7414,6 +7420,7 @@
- = "types may not be defined in conditions";
- /* Parse the type-specifier-seq. */
- cp_parser_type_specifier_seq (parser, /*is_condition==*/true,
-+ /*is_trailing_return=*/false,
- &type_specifiers);
- /* Restore the saved message. */
- parser->type_definition_forbidden_message = saved_message;
-@@ -8918,12 +8925,25 @@
- cp_parser_parse_definitely (parser);
- else
- {
-+ bool saved_greater_than_is_operator_p;
-+
- /* Abort our attempt to parse an id-expression or member access
- expression. */
- cp_parser_abort_tentative_parse (parser);
-
-+ /* Within a parenthesized expression, a `>' token is always
-+ the greater-than operator. */
-+ saved_greater_than_is_operator_p
-+ = parser->greater_than_is_operator_p;
-+ parser->greater_than_is_operator_p = true;
-+
- /* Parse a full expression. */
- expr = cp_parser_expression (parser, /*cast_p=*/false, NULL);
-+
-+ /* The `>' token might be the end of a template-id or
-+ template-parameter-list now. */
-+ parser->greater_than_is_operator_p
-+ = saved_greater_than_is_operator_p;
- }
-
- /* Go back to evaluating expressions. */
-@@ -9032,6 +9052,7 @@
- attributes = cp_parser_attributes_opt (parser);
- /* Parse the type-specifiers. */
- cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
-+ /*is_trailing_return=*/false,
- &type_specifiers);
- /* If that didn't work, stop. */
- if (type_specifiers.type == error_mark_node)
-@@ -10994,6 +11015,9 @@
- switch (keyword)
- {
- case RID_ENUM:
-+ if ((flags & CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS))
-+ goto elaborated_type_specifier;
-+
- /* Look for the enum-specifier. */
- type_spec = cp_parser_enum_specifier (parser);
- /* If that worked, we're done. */
-@@ -11016,6 +11040,9 @@
- case RID_CLASS:
- case RID_STRUCT:
- case RID_UNION:
-+ if ((flags & CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS))
-+ goto elaborated_type_specifier;
-+
- /* Parse tentatively so that we can back up if we don't find a
- class-specifier. */
- cp_parser_parse_tentatively (parser);
-@@ -11882,6 +11909,7 @@
-
- /* Parse the type-specifier-seq. */
- cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
-+ /*is_trailing_return=*/false,
- &type_specifiers);
-
- /* At this point this is surely not elaborated type specifier. */
-@@ -13713,7 +13741,7 @@
- /* Parse a late-specified return type, if any. This is not a separate
- non-terminal, but part of a function declarator, which looks like
-
-- -> type-id
-+ -> trailing-type-specifier-seq abstract-declarator(opt)
-
- Returns the type indicated by the type-id. */
-
-@@ -13731,7 +13759,7 @@
- /* Consume the ->. */
- cp_lexer_consume_token (parser->lexer);
-
-- return cp_parser_type_id (parser);
-+ return cp_parser_trailing_type_id (parser);
- }
-
- /* Parse a declarator-id.
-@@ -13784,13 +13812,15 @@
- Returns the TYPE specified. */
-
- static tree
--cp_parser_type_id_1 (cp_parser* parser, bool is_template_arg)
-+cp_parser_type_id_1 (cp_parser* parser, bool is_template_arg,
-+ bool is_trailing_return)
- {
- cp_decl_specifier_seq type_specifier_seq;
- cp_declarator *abstract_declarator;
-
- /* Parse the type-specifier-seq. */
- cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
-+ is_trailing_return,
- &type_specifier_seq);
- if (type_specifier_seq.type == error_mark_node)
- return error_mark_node;
-@@ -13828,14 +13858,19 @@
-
- static tree cp_parser_type_id (cp_parser *parser)
- {
-- return cp_parser_type_id_1 (parser, false);
-+ return cp_parser_type_id_1 (parser, false, false);
- }
-
- static tree cp_parser_template_type_arg (cp_parser *parser)
- {
-- return cp_parser_type_id_1 (parser, true);
-+ return cp_parser_type_id_1 (parser, true, false);
- }
-
-+static tree cp_parser_trailing_type_id (cp_parser *parser)
-+{
-+ return cp_parser_type_id_1 (parser, false, true);
-+}
-+
- /* Parse a type-specifier-seq.
-
- type-specifier-seq:
-@@ -13849,11 +13884,15 @@
- If IS_CONDITION is true, we are at the start of a "condition",
- e.g., we've just seen "if (".
-
-+ If IS_TRAILING_RETURN is true, we are in a trailing-return-type,
-+ i.e. we've just seen "->".
-+
- Sets *TYPE_SPECIFIER_SEQ to represent the sequence. */
-
- static void
- cp_parser_type_specifier_seq (cp_parser* parser,
- bool is_condition,
-+ bool is_trailing_return,
- cp_decl_specifier_seq *type_specifier_seq)
- {
- bool seen_type_specifier = false;
-@@ -13863,6 +13902,12 @@
- /* Clear the TYPE_SPECIFIER_SEQ. */
- clear_decl_specs (type_specifier_seq);
-
-+ /* In the context of a trailing return type, enum E { } is an
-+ elaborated-type-specifier followed by a function-body, not an
-+ enum-specifier. */
-+ if (is_trailing_return)
-+ flags |= CP_PARSER_FLAGS_NO_TYPE_DEFINITIONS;
-+
- /* Parse the type-specifiers and attributes. */
- while (true)
- {
-@@ -16566,6 +16611,7 @@
-
- /* Parse the type-specifier-seq. */
- cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
-+ /*is_trailing_return=*/false,
- &type_specifiers);
- /* If it's a `)', then there is no declarator. */
- if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
-@@ -21250,6 +21296,7 @@
-
- cp_parser_parse_tentatively (parser);
- cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
-+ /*is_trailing_return=*/false,
- &type_specifiers);
- if (cp_parser_parse_definitely (parser))
- {
-Index: gcc/dbxout.c
-===================================================================
---- gcc/dbxout.c (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/dbxout.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -349,6 +349,7 @@
- {
- dbxout_init,
- dbxout_finish,
-+ debug_nothing_void,
- debug_nothing_int_charstar,
- debug_nothing_int_charstar,
- dbxout_start_source_file,
-@@ -385,6 +386,7 @@
- {
- dbxout_init,
- dbxout_finish,
-+ debug_nothing_void,
- debug_nothing_int_charstar,
- debug_nothing_int_charstar,
- dbxout_start_source_file,
-Index: gcc/config.in
-===================================================================
---- gcc/config.in (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/config.in (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -839,6 +839,12 @@
- #endif
-
-
-+/* Define 0/1 if your assembler supports .cfi_sections. */
-+#ifndef USED_FOR_TARGET
-+#undef HAVE_GAS_CFI_SECTIONS_DIRECTIVE
-+#endif
-+
-+
- /* Define if your assembler uses the new HImode fild and fist notation. */
- #ifndef USED_FOR_TARGET
- #undef HAVE_GAS_FILDS_FISTS
-Index: gcc/dwarf2out.c
-===================================================================
---- gcc/dwarf2out.c (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/dwarf2out.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -145,8 +145,19 @@
- #endif
- if (!flag_dwarf2_cfi_asm || !dwarf2out_do_frame ())
- return false;
-- if (saved_do_cfi_asm || !eh_personality_libfunc)
-+ if (saved_do_cfi_asm)
- return true;
-+ if (!HAVE_GAS_CFI_SECTIONS_DIRECTIVE)
-+ {
-+#ifdef TARGET_UNWIND_INFO
-+ return false;
-+#else
-+ if (USING_SJLJ_EXCEPTIONS || (!flag_unwind_tables && !flag_exceptions))
-+ return false;
-+#endif
-+ }
-+ if (!eh_personality_libfunc)
-+ return true;
- if (!HAVE_GAS_CFI_PERSONALITY_DIRECTIVE)
- return false;
-
-@@ -4583,6 +4594,7 @@
-
- static void dwarf2out_init (const char *);
- static void dwarf2out_finish (const char *);
-+static void dwarf2out_assembly_start (void);
- static void dwarf2out_define (unsigned int, const char *);
- static void dwarf2out_undef (unsigned int, const char *);
- static void dwarf2out_start_source_file (unsigned, const char *);
-@@ -4605,6 +4617,7 @@
- {
- dwarf2out_init,
- dwarf2out_finish,
-+ dwarf2out_assembly_start,
- dwarf2out_define,
- dwarf2out_undef,
- dwarf2out_start_source_file,
-@@ -16187,8 +16200,24 @@
- switch_to_section (cold_text_section);
- ASM_OUTPUT_LABEL (asm_out_file, cold_text_section_label);
- }
-+
- }
-
-+/* Called before cgraph_optimize starts outputtting functions, variables
-+ and toplevel asms into assembly. */
-+
-+static void
-+dwarf2out_assembly_start (void)
-+{
-+ if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE && dwarf2out_do_cfi_asm ())
-+ {
-+#ifndef TARGET_UNWIND_INFO
-+ if (USING_SJLJ_EXCEPTIONS || (!flag_unwind_tables && !flag_exceptions))
-+#endif
-+ fprintf (asm_out_file, "\t.cfi_sections\t.debug_frame\n");
-+ }
-+}
-+
- /* A helper function for dwarf2out_finish called through
- ht_forall. Emit one queued .debug_str string. */
-
-Index: gcc/unwind-dw2.c
-===================================================================
---- gcc/unwind-dw2.c (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/unwind-dw2.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -789,22 +789,22 @@
- result = second ^ first;
- break;
- case DW_OP_le:
-- result = (_Unwind_Sword) first <= (_Unwind_Sword) second;
-+ result = (_Unwind_Sword) second <= (_Unwind_Sword) first;
- break;
- case DW_OP_ge:
-- result = (_Unwind_Sword) first >= (_Unwind_Sword) second;
-+ result = (_Unwind_Sword) second >= (_Unwind_Sword) first;
- break;
- case DW_OP_eq:
-- result = (_Unwind_Sword) first == (_Unwind_Sword) second;
-+ result = (_Unwind_Sword) second == (_Unwind_Sword) first;
- break;
- case DW_OP_lt:
-- result = (_Unwind_Sword) first < (_Unwind_Sword) second;
-+ result = (_Unwind_Sword) second < (_Unwind_Sword) first;
- break;
- case DW_OP_gt:
-- result = (_Unwind_Sword) first > (_Unwind_Sword) second;
-+ result = (_Unwind_Sword) second > (_Unwind_Sword) first;
- break;
- case DW_OP_ne:
-- result = (_Unwind_Sword) first != (_Unwind_Sword) second;
-+ result = (_Unwind_Sword) second != (_Unwind_Sword) first;
- break;
-
- default:
-Index: gcc/ada/init.c
-===================================================================
---- gcc/ada/init.c (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/ada/init.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -290,28 +290,21 @@
- extern void __gnat_set_code_loc (struct sigcontext *, char *);
- extern size_t __gnat_machine_state_length (void);
-
--/* __gnat_adjust_context_for_raise - see comments along with the default
-- version later in this file. */
--
- #define HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE
-
- void
--__gnat_adjust_context_for_raise (int signo, void *context)
-+__gnat_adjust_context_for_raise (int signo, void *ucontext)
- {
-- struct sigcontext * sigcontext = (struct sigcontext *) context;
-+ struct sigcontext *sigcontext = (struct sigcontext *) ucontext;
-
-- /* The fallback code fetches the faulting insn address from sc_pc, so
-- adjust that when need be. For SIGFPE, the required adjustment depends
-- on the trap shadow situation (see man ieee). */
-+ /* The unwinder expects the signal context to contain the address of the
-+ faulting instruction. For SIGFPE, this depends on the trap shadow
-+ situation (see man ieee). We nonetheless always compensate for it,
-+ considering that PC designates the instruction following the one that
-+ trapped. This is not necessarily true but corresponds to what we have
-+ always observed. */
- if (signo == SIGFPE)
-- {
-- /* ??? We never adjust here, considering that sc_pc always
-- designates the instruction following the one which trapped.
-- This is not necessarily true but corresponds to what we have
-- always observed. */
-- }
-- else
-- sigcontext->sc_pc ++;
-+ sigcontext->sc_pc--;
- }
-
- static void
-@@ -2154,8 +2147,11 @@
- void *ucontext ATTRIBUTE_UNUSED)
- {
- /* We used to compensate here for the raised from call vs raised from signal
-- exception discrepancy with the GCC ZCX scheme, but this is now dealt with
-- generically (except for the Alpha and IA-64), see GCC PR other/26208.
-+ exception discrepancy with the GCC ZCX scheme, but this now can be dealt
-+ with generically in the unwinder (see GCC PR other/26208). This however
-+ requires the use of the _Unwind_GetIPInfo routine in raise-gcc.c, which
-+ is predicated on the definition of HAVE_GETIPINFO at compile time. Only
-+ the VMS ports still do the compensation described in the few lines below.
-
- *** Call vs signal exception discrepancy with GCC ZCX scheme ***
-
-Index: gcc/ada/ChangeLog
-===================================================================
---- gcc/ada/ChangeLog (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/ada/ChangeLog (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -1,3 +1,13 @@
-+2009-10-24 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ * init.c (__gnat_adjust_context_for_raise): Mention _Unwind_GetIPInfo.
-+ * gcc-interface/Makefile.in (GNATLIBCFLAGS_FOR_C): Add HAVE_GETIPINFO.
-+ Pass GNATLIBCFLAGS_FOR_C to recursive invocations.
-+
-+ Backport from mainline:
-+ 2009-04-10 Eric Botcazou <ebotcazou@adacore.com>
-+ * init.c: Adjust EH support code on Alpha/Tru64.
-+
- 2009-10-15 Release Manager
-
- * GCC 4.4.2 released.
-Index: gcc/ada/gcc-interface/Makefile.in
-===================================================================
---- gcc/ada/gcc-interface/Makefile.in (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/ada/gcc-interface/Makefile.in (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -106,8 +106,11 @@
- FORCE_DEBUG_ADAFLAGS = -g
- GNATLIBFLAGS = -gnatpg -nostdinc
- GNATLIBCFLAGS = -g -O2
-+# Pretend that _Unwind_GetIPInfo is available for the target by default. This
-+# should be autodetected during the configuration of libada and passed down to
-+# here, but we need something for --disable-libada and hope for the best.
- GNATLIBCFLAGS_FOR_C = $(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS) -fexceptions \
-- -DIN_RTS
-+ -DIN_RTS -DHAVE_GETIPINFO
- ALL_ADAFLAGS = $(CFLAGS) $(ADA_CFLAGS) $(ADAFLAGS)
- MOST_ADAFLAGS = $(CFLAGS) $(ADA_CFLAGS) $(SOME_ADAFLAGS)
- THREAD_KIND = native
-@@ -2074,6 +2077,7 @@
- $(MAKE) $(FLAGS_TO_PASS) \
- GNATLIBFLAGS="$(GNATLIBFLAGS)" \
- GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS)" \
-+ GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
- MULTISUBDIR="$(MULTISUBDIR)" \
- THREAD_KIND="$(THREAD_KIND)" \
- gnatlib
-@@ -2099,6 +2103,7 @@
- $(MAKE) $(FLAGS_TO_PASS) \
- GNATLIBFLAGS="$(GNATLIBFLAGS)" \
- GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
-+ GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
- MULTISUBDIR="$(MULTISUBDIR)" \
- THREAD_KIND="$(THREAD_KIND)" \
- gnatlib-shared-default
-@@ -2107,6 +2112,7 @@
- $(MAKE) $(FLAGS_TO_PASS) \
- GNATLIBFLAGS="$(GNATLIBFLAGS)" \
- GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
-+ GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
- MULTISUBDIR="$(MULTISUBDIR)" \
- THREAD_KIND="$(THREAD_KIND)" \
- gnatlib
-@@ -2116,6 +2122,7 @@
- $(MAKE) $(FLAGS_TO_PASS) \
- GNATLIBFLAGS="$(GNATLIBFLAGS)" \
- GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS)" \
-+ GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
- MULTISUBDIR="$(MULTISUBDIR)" \
- THREAD_KIND="$(THREAD_KIND)" \
- gnatlib-shared-win32
-@@ -2124,6 +2131,7 @@
- $(MAKE) $(FLAGS_TO_PASS) \
- GNATLIBFLAGS="$(GNATLIBFLAGS)" \
- GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
-+ GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
- MULTISUBDIR="$(MULTISUBDIR)" \
- THREAD_KIND="$(THREAD_KIND)" \
- gnatlib
-@@ -2137,6 +2145,7 @@
- $(MAKE) $(FLAGS_TO_PASS) \
- GNATLIBFLAGS="$(GNATLIBFLAGS)" \
- GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS)" \
-+ GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
- MULTISUBDIR="$(MULTISUBDIR)" \
- THREAD_KIND="$(THREAD_KIND)" \
- gnatlib
-@@ -2156,6 +2165,7 @@
- GNATLIBFLAGS="$(GNATLIBFLAGS)" \
- GNATLIBCFLAGS="$(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS) \
- -fno-common" \
-+ GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C) -fno-common" \
- MULTISUBDIR="$(MULTISUBDIR)" \
- THREAD_KIND="$(THREAD_KIND)" \
- gnatlib
-@@ -2179,6 +2189,7 @@
- $(MAKE) $(FLAGS_TO_PASS) \
- GNATLIBFLAGS="$(GNATLIBFLAGS)" \
- GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
-+ GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
- MULTISUBDIR="$(MULTISUBDIR)" \
- THREAD_KIND="$(THREAD_KIND)" \
- gnatlib
-@@ -2207,6 +2218,7 @@
- $(MAKE) $(FLAGS_TO_PASS) \
- GNATLIBFLAGS="$(GNATLIBFLAGS)" \
- GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
-+ GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
- MULTISUBDIR="$(MULTISUBDIR)" \
- THREAD_KIND="$(THREAD_KIND)" \
- TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" \
-@@ -2220,6 +2232,7 @@
- EH_MECHANISM="" \
- GNATLIBFLAGS="$(GNATLIBFLAGS)" \
- GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
-+ GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
- MULTISUBDIR="$(MULTISUBDIR)" \
- THREAD_KIND="$(THREAD_KIND)" \
- TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" gnatlib
-@@ -2232,6 +2245,7 @@
- EH_MECHANISM="-gcc" \
- GNATLIBFLAGS="$(GNATLIBFLAGS)" \
- GNATLIBCFLAGS="$(GNATLIBCFLAGS)" \
-+ GNATLIBCFLAGS_FOR_C="$(GNATLIBCFLAGS_FOR_C)" \
- MULTISUBDIR="$(MULTISUBDIR)" \
- THREAD_KIND="$(THREAD_KIND)" \
- TARGET_LIBGCC2_CFLAGS="$(TARGET_LIBGCC2_CFLAGS)" gnatlib
-Index: gcc/fortran/symbol.c
-===================================================================
---- gcc/fortran/symbol.c (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/fortran/symbol.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -2693,7 +2693,7 @@
- if (p->gfc_new)
- {
- /* Symbol was new. */
-- if (p->attr.in_common && p->common_block->head)
-+ if (p->attr.in_common && p->common_block && p->common_block->head)
- {
- /* If the symbol was added to any common block, it
- needs to be removed to stop the resolver looking
-Index: gcc/fortran/ChangeLog
-===================================================================
---- gcc/fortran/ChangeLog (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/fortran/ChangeLog (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -1,3 +1,11 @@
-+2009-10-19 Tobias Burnus <burnus@net-b.de>
-+ Steven G. Kargl <kargl@gcc.gnu.org>
-+
-+ PR fortran/41755
-+ * symbol.c (gfc_undo_symbols): Add NULL check.
-+ * match.c (gfc_match_equivalence): Add check for
-+ missing comma.
-+
- 2009-10-15 Release Manager
-
- * GCC 4.4.2 released.
-Index: gcc/fortran/match.c
-===================================================================
---- gcc/fortran/match.c (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/fortran/match.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -3269,7 +3269,10 @@
- if (gfc_match_eos () == MATCH_YES)
- break;
- if (gfc_match_char (',') != MATCH_YES)
-- goto syntax;
-+ {
-+ gfc_error ("Expecting a comma in EQUIVALENCE at %C");
-+ goto cleanup;
-+ }
- }
-
- return MATCH_YES;
-Index: gcc/ira-lives.c
-===================================================================
---- gcc/ira-lives.c (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/ira-lives.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -500,7 +500,7 @@
- for (use = 0; use < recog_data.n_operands; use++)
- {
- if (use == def || recog_data.operand_type[use] == OP_OUT)
-- return;
-+ continue;
-
- if (recog_op_alt[use][alt].anything_ok)
- use_cl = ALL_REGS;
-@@ -513,7 +513,7 @@
- if ((use_match = recog_op_alt[use][alt].matches) >= 0)
- {
- if (use_match == def)
-- return;
-+ continue;
-
- if (recog_op_alt[use_match][alt].anything_ok)
- use_cl = ALL_REGS;
-Index: gcc/configure.ac
-===================================================================
---- gcc/configure.ac (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/configure.ac (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -2297,6 +2297,17 @@
- then echo 1; else echo 0; fi`],
- [Define 0/1 if your assembler supports .cfi_personality.])
-
-+gcc_GAS_CHECK_FEATURE([cfi sections directive],
-+ gcc_cv_as_cfi_sections_directive, ,,
-+[ .text
-+ .cfi_sections .debug_frame, .eh_frame
-+ .cfi_startproc
-+ .cfi_endproc])
-+AC_DEFINE_UNQUOTED(HAVE_GAS_CFI_SECTIONS_DIRECTIVE,
-+ [`if test $gcc_cv_as_cfi_sections_directive = yes;
-+ then echo 1; else echo 0; fi`],
-+ [Define 0/1 if your assembler supports .cfi_sections.])
-+
- # GAS versions up to and including 2.11.0 may mis-optimize
- # .eh_frame data.
- gcc_GAS_CHECK_FEATURE(eh_frame optimization, gcc_cv_as_eh_frame,
-Index: gcc/BASE-VER
-===================================================================
---- gcc/BASE-VER (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/BASE-VER (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -1 +1 @@
--4.4.2
-+4.4.3
-Index: gcc/sdbout.c
-===================================================================
---- gcc/sdbout.c (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/sdbout.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -307,6 +307,7 @@
- {
- sdbout_init, /* init */
- sdbout_finish, /* finish */
-+ debug_nothing_void, /* assembly_start */
- debug_nothing_int_charstar, /* define */
- debug_nothing_int_charstar, /* undef */
- sdbout_start_source_file, /* start_source_file */
-Index: gcc/config/s390/s390.c
-===================================================================
---- gcc/config/s390/s390.c (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/config/s390/s390.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -9799,9 +9799,12 @@
- if (!REG_P (*op0) || !REG_P (*op1))
- return false;
-
-+ if (GET_MODE_CLASS (GET_MODE (*op0)) != MODE_INT)
-+ return false;
-+
- /* Swap the COMPARE arguments and its mask if there is a
- conflicting access in the previous insn. */
-- prev_insn = PREV_INSN (insn);
-+ prev_insn = prev_active_insn (insn);
- if (prev_insn != NULL_RTX && INSN_P (prev_insn)
- && reg_referenced_p (*op1, PATTERN (prev_insn)))
- s390_swap_cmp (cond, op0, op1, insn);
-@@ -9812,7 +9815,7 @@
- the operands, or if swapping them would cause a conflict
- with the previous insn, issue a NOP after the COMPARE in
- order to separate the two instuctions. */
-- next_insn = NEXT_INSN (insn);
-+ next_insn = next_active_insn (insn);
- if (next_insn != NULL_RTX && INSN_P (next_insn)
- && s390_non_addr_reg_read_p (*op1, next_insn))
- {
-Index: gcc/config/i386/i386.md
-===================================================================
---- gcc/config/i386/i386.md (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/config/i386/i386.md (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -6487,7 +6487,7 @@
- switch (get_attr_type (insn))
- {
- case TYPE_LEA:
-- operands[2] = SET_SRC (XVECEXP (PATTERN (insn), 0, 0));
-+ operands[2] = XEXP (SET_SRC (XVECEXP (PATTERN (insn), 0, 0)), 0);
- return "lea{l}\t{%a2, %k0|%k0, %a2}";
-
- case TYPE_INCDEC:
-Index: gcc/config/arm/arm.c
-===================================================================
---- gcc/config/arm/arm.c (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/config/arm/arm.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -10975,7 +10975,7 @@
- {
- /* We're only using DImode here because it's a convenient size. */
- ops[0] = gen_rtx_REG (DImode, REGNO (reg) + 2 * i);
-- ops[1] = adjust_address (mem, SImode, 8 * i);
-+ ops[1] = adjust_address (mem, DImode, 8 * i);
- if (reg_overlap_mentioned_p (ops[0], mem))
- {
- gcc_assert (overlap == -1);
-Index: gcc/config/pa/t-hpux-shlib
-===================================================================
---- gcc/config/pa/t-hpux-shlib (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/config/pa/t-hpux-shlib (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -8,6 +8,7 @@
- SHLIB_SLIBDIR_QUAL = @shlib_slibdir_qual@
-
- SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
-+ -Wl,+h -Wl,$(SHLIB_SONAME) \
- -o $(SHLIB_DIR)/$(SHLIB_NAME).tmp @multilib_flags@ $(SHLIB_OBJS) && \
- rm -f $(SHLIB_DIR)/$(SHLIB_SONAME) && \
- if [ -f $(SHLIB_DIR)/$(SHLIB_NAME) ]; then \
-Index: gcc/config/pa/linux-atomic.c
-===================================================================
---- gcc/config/pa/linux-atomic.c (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/config/pa/linux-atomic.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -24,14 +24,9 @@
- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
-
--/* FIXME: work around build failure for hppa64-linux-gnu target. */
--#ifndef _LP64
--#include <errno.h>
--#else
- #define EFAULT 14
- #define EBUSY 16
- #define ENOSYS 251
--#endif
-
- /* All PA-RISC implementations supported by linux have strongly
- ordered loads and stores. Only cache flushes and purges can be
-Index: gcc/config/pa/pa.md
-===================================================================
---- gcc/config/pa/pa.md (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/config/pa/pa.md (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -3191,6 +3191,40 @@
- DONE;
- }")
-
-+;; Handle HImode input reloads requiring a general register as a
-+;; scratch register.
-+(define_expand "reload_inhi"
-+ [(set (match_operand:HI 0 "register_operand" "=Z")
-+ (match_operand:HI 1 "non_hard_reg_operand" ""))
-+ (clobber (match_operand:HI 2 "register_operand" "=&r"))]
-+ ""
-+ "
-+{
-+ if (emit_move_sequence (operands, HImode, operands[2]))
-+ DONE;
-+
-+ /* We don't want the clobber emitted, so handle this ourselves. */
-+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1]));
-+ DONE;
-+}")
-+
-+;; Handle HImode output reloads requiring a general register as a
-+;; scratch register.
-+(define_expand "reload_outhi"
-+ [(set (match_operand:HI 0 "non_hard_reg_operand" "")
-+ (match_operand:HI 1 "register_operand" "Z"))
-+ (clobber (match_operand:HI 2 "register_operand" "=&r"))]
-+ ""
-+ "
-+{
-+ if (emit_move_sequence (operands, HImode, operands[2]))
-+ DONE;
-+
-+ /* We don't want the clobber emitted, so handle this ourselves. */
-+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1]));
-+ DONE;
-+}")
-+
- (define_insn ""
- [(set (match_operand:HI 0 "move_dest_operand"
- "=r,r,r,r,r,Q,!*q,!r")
-@@ -3315,6 +3349,40 @@
- DONE;
- }")
-
-+;; Handle QImode input reloads requiring a general register as a
-+;; scratch register.
-+(define_expand "reload_inqi"
-+ [(set (match_operand:QI 0 "register_operand" "=Z")
-+ (match_operand:QI 1 "non_hard_reg_operand" ""))
-+ (clobber (match_operand:QI 2 "register_operand" "=&r"))]
-+ ""
-+ "
-+{
-+ if (emit_move_sequence (operands, QImode, operands[2]))
-+ DONE;
-+
-+ /* We don't want the clobber emitted, so handle this ourselves. */
-+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1]));
-+ DONE;
-+}")
-+
-+;; Handle QImode output reloads requiring a general register as a
-+;; scratch register.
-+(define_expand "reload_outqi"
-+ [(set (match_operand:QI 0 "non_hard_reg_operand" "")
-+ (match_operand:QI 1 "register_operand" "Z"))
-+ (clobber (match_operand:QI 2 "register_operand" "=&r"))]
-+ ""
-+ "
-+{
-+ if (emit_move_sequence (operands, QImode, operands[2]))
-+ DONE;
-+
-+ /* We don't want the clobber emitted, so handle this ourselves. */
-+ emit_insn (gen_rtx_SET (VOIDmode, operands[0], operands[1]));
-+ DONE;
-+}")
-+
- (define_insn ""
- [(set (match_operand:QI 0 "move_dest_operand"
- "=r,r,r,r,r,Q,!*q,!r")
-@@ -7503,17 +7571,6 @@
- operands[0] = index;
- }
-
-- /* In 64bit mode we must make sure to wipe the upper bits of the register
-- just in case the addition overflowed or we had random bits in the
-- high part of the register. */
-- if (TARGET_64BIT)
-- {
-- rtx index = gen_reg_rtx (DImode);
--
-- emit_insn (gen_extendsidi2 (index, operands[0]));
-- operands[0] = gen_rtx_SUBREG (SImode, index, 4);
-- }
--
- if (!INT_5_BITS (operands[2]))
- operands[2] = force_reg (SImode, operands[2]);
-
-@@ -7530,6 +7587,17 @@
- emit_insn (gen_cmpsi (operands[0], operands[2]));
- emit_jump_insn (gen_bgtu (operands[4]));
-
-+ /* In 64bit mode we must make sure to wipe the upper bits of the register
-+ just in case the addition overflowed or we had random bits in the
-+ high part of the register. */
-+ if (TARGET_64BIT)
-+ {
-+ rtx index = gen_reg_rtx (DImode);
-+
-+ emit_insn (gen_extendsidi2 (index, operands[0]));
-+ operands[0] = index;
-+ }
-+
- if (TARGET_BIG_SWITCH)
- {
- if (TARGET_64BIT)
-@@ -7590,8 +7658,7 @@
- ;;; 64-bit code, 32-bit relative branch table.
- (define_insn "casesi64p"
- [(set (pc) (mem:DI (plus:DI
-- (mult:DI (sign_extend:DI
-- (match_operand:SI 0 "register_operand" "r"))
-+ (mult:DI (match_operand:DI 0 "register_operand" "r")
- (const_int 8))
- (label_ref (match_operand 1 "" "")))))
- (clobber (match_scratch:DI 2 "=&r"))
-Index: gcc/config/pa/pa.c
-===================================================================
---- gcc/config/pa/pa.c (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ gcc/config/pa/pa.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -1620,7 +1620,7 @@
- /* D might not fit in 14 bits either; for such cases load D into
- scratch reg. */
- if (GET_CODE (operand1) == MEM
-- && !memory_address_p (Pmode, XEXP (operand1, 0)))
-+ && !memory_address_p (GET_MODE (operand0), XEXP (operand1, 0)))
- {
- /* We are reloading the address into the scratch register, so we
- want to make sure the scratch register is a full register. */
-Index: libstdc++-v3/include/bits/atomic_0.h
-===================================================================
---- libstdc++-v3/include/bits/atomic_0.h (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ libstdc++-v3/include/bits/atomic_0.h (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -82,14 +82,15 @@
- __r; })
-
- /// atomic_flag
-- struct atomic_flag : private __atomic_flag_base
-+ struct atomic_flag : public __atomic_flag_base
- {
- atomic_flag() = default;
- ~atomic_flag() = default;
- atomic_flag(const atomic_flag&) = delete;
- atomic_flag& operator=(const atomic_flag&) = delete;
-
-- atomic_flag(bool __i) { _M_i = __i; } // XXX deleted copy ctor != agg
-+ // Conversion to ATOMIC_FLAG_INIT.
-+ atomic_flag(bool __i): __atomic_flag_base({ __i }) { }
-
- bool
- test_and_set(memory_order __m = memory_order_seq_cst) volatile;
-Index: libstdc++-v3/include/bits/atomic_2.h
-===================================================================
---- libstdc++-v3/include/bits/atomic_2.h (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ libstdc++-v3/include/bits/atomic_2.h (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -44,14 +44,15 @@
- namespace __atomic2
- {
- /// atomic_flag
-- struct atomic_flag : private __atomic_flag_base
-+ struct atomic_flag : public __atomic_flag_base
- {
- atomic_flag() = default;
- ~atomic_flag() = default;
- atomic_flag(const atomic_flag&) = delete;
- atomic_flag& operator=(const atomic_flag&) = delete;
-
-- atomic_flag(bool __i) { _M_i = __i; } // XXX deleted copy ctor != agg
-+ // Conversion to ATOMIC_FLAG_INIT.
-+ atomic_flag(bool __i): __atomic_flag_base({ __i }) { }
-
- bool
- test_and_set(memory_order __m = memory_order_seq_cst) volatile
-Index: libstdc++-v3/include/c_compatibility/stdatomic.h
-===================================================================
---- libstdc++-v3/include/c_compatibility/stdatomic.h (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ libstdc++-v3/include/c_compatibility/stdatomic.h (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -186,8 +186,11 @@
- _GLIBCXX_END_EXTERN_C
- _GLIBCXX_END_NAMESPACE
-
--// Inject into global namespace. XXX
--#if defined(__cplusplus) && !defined(_GLIBCXX_STDATOMIC)
-+// Inject into global namespace.
-+#ifdef __cplusplus
-+
-+#include <cstdatomic>
-+
- using std::memory_order;
- using std::memory_order_relaxed;
- using std::memory_order_consume;
-Index: libstdc++-v3/src/atomic.cc
-===================================================================
---- libstdc++-v3/src/atomic.cc (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ libstdc++-v3/src/atomic.cc (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -80,16 +80,16 @@
- atomic_flag_test_and_set_explicit(volatile __atomic_flag_base* __a,
- memory_order __m)
- {
-- volatile atomic_flag d(__a->_M_i);
-- return d.test_and_set(__m);
-+ volatile atomic_flag* d = static_cast<volatile atomic_flag*>(__a);
-+ return d->test_and_set(__m);
- }
-
- void
- atomic_flag_clear_explicit(volatile __atomic_flag_base* __a,
- memory_order __m)
- {
-- volatile atomic_flag d(__a->_M_i);
-- return d.clear(__m);
-+ volatile atomic_flag* d = static_cast<volatile atomic_flag*>(__a);
-+ return d->clear(__m);
- }
-
- void
-Index: libstdc++-v3/ChangeLog
-===================================================================
---- libstdc++-v3/ChangeLog (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ libstdc++-v3/ChangeLog (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -1,3 +1,21 @@
-+2009-10-16 Benjamin Kosnik <bkoz@redhat.com>
-+
-+ * include/c_compatibility/stdatomic.h: Include cstdatomic if
-+ __cplusplus.
-+
-+2009-10-15 Benjamin Kosnik <bkoz@redhat.com>
-+
-+ PR libstdc++/40654
-+ PR libstdc++/40826
-+ * src/atomic.cc (atomic_flag_test_and_set_explicit): Add
-+ static_cast from base to derived.
-+ (atomic_flag_clear_explicit): Same.
-+ * include/bits/atomic_2.h (__atomic2::atomic_flag): Public derivation.
-+ Remove value type constructor.
-+ * include/bits/atomic_0.h (__atomic0::atomic_flag): Same.
-+ * include/std/future (_Future_state): Use ATOMIC_FLAG_INIT to
-+ initialized the atomic_flag member.
-+
- 2009-10-15 Release Manager
-
- * GCC 4.4.2 released.
-Index: libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/1.cc
-===================================================================
---- libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/1.cc (.../tags/gcc_4_4_2_release) (wersja 0)
-+++ libstdc++-v3/testsuite/29_atomics/atomic_flag/cons/1.cc (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -0,0 +1,27 @@
-+// { dg-options "-std=gnu++0x" }
-+// { dg-do compile }
-+
-+// Copyright (C) 2008, 2009 Free Software Foundation, Inc.
-+//
-+// This file is part of the GNU ISO C++ Library. This library is free
-+// software; you can redistribute it and/or modify it under the
-+// terms of the GNU General Public License as published by the
-+// Free Software Foundation; either version 3, or (at your option)
-+// any later version.
-+
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+
-+// You should have received a copy of the GNU General Public License along
-+// with this library; see the file COPYING3. If not see
-+// <http://www.gnu.org/licenses/>.
-+
-+#include <stdatomic.h>
-+
-+void test01()
-+{
-+ using namespace std;
-+ atomic_flag af = ATOMIC_FLAG_INIT;
-+}
-Index: libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.c
-===================================================================
---- libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.c (.../tags/gcc_4_4_2_release) (wersja 0)
-+++ libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.c (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -0,0 +1,34 @@
-+// { dg-options "-x c -shared-libgcc -lstdc++" }
-+
-+// Copyright (C) 2009 Free Software Foundation, Inc.
-+//
-+// This file is part of the GNU ISO C++ Library. This library is free
-+// software; you can redistribute it and/or modify it under the
-+// terms of the GNU General Public License as published by the
-+// Free Software Foundation; either version 3, or (at your option)
-+// any later version.
-+
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+
-+// You should have received a copy of the GNU General Public License along
-+// with this library; see the file COPYING3. If not see
-+// <http://www.gnu.org/licenses/>.
-+
-+#include <cassert>
-+#include <stdatomic.h>
-+
-+// libstdc++/40826
-+// libstdc++/40654
-+int main()
-+{
-+ atomic_flag f = ATOMIC_FLAG_INIT;
-+
-+ atomic_flag_clear(&f); // set to false
-+ assert( false == atomic_flag_test_and_set(&f) ); // return previous false, set to true
-+ assert( true == atomic_flag_test_and_set(&f) ); // return true
-+
-+ return 0;
-+}
-Index: libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.cc
-===================================================================
---- libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.cc (.../tags/gcc_4_4_2_release) (wersja 0)
-+++ libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.cc (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -0,0 +1,33 @@
-+// { dg-options "-std=gnu++0x" }
-+
-+// Copyright (C) 2009 Free Software Foundation, Inc.
-+//
-+// This file is part of the GNU ISO C++ Library. This library is free
-+// software; you can redistribute it and/or modify it under the
-+// terms of the GNU General Public License as published by the
-+// Free Software Foundation; either version 3, or (at your option)
-+// any later version.
-+
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+
-+// You should have received a copy of the GNU General Public License along
-+// with this library; see the file COPYING3. If not see
-+// <http://www.gnu.org/licenses/>.
-+
-+#include <cstdatomic>
-+#include <testsuite_hooks.h>
-+
-+int main()
-+{
-+ bool test __attribute__((unused)) = true;
-+ std::atomic_flag f = ATOMIC_FLAG_INIT;
-+
-+ f.clear(); // set to false
-+ VERIFY( false == f.test_and_set() ); // return previous false, set to true
-+ VERIFY( true == f.test_and_set() ); // return true
-+
-+ return 0;
-+}
-Index: libada/configure
-===================================================================
---- libada/configure (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ libada/configure (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -272,7 +272,7 @@
- PACKAGE_BUGREPORT=
-
- ac_unique_file="Makefile.in"
--ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os target_noncanonical build_libsubdir build_subdir host_subdir target_subdir MAINT multi_basedir toolexecdir toolexeclibdir CC ac_ct_CC EXEEXT OBJEXT CFLAGS enable_shared LN_S default_gnatlib_target LDFLAGS CPPFLAGS warn_cflags LIBOBJS LTLIBOBJS'
-+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os target_noncanonical build_libsubdir build_subdir host_subdir target_subdir MAINT multi_basedir toolexecdir toolexeclibdir CC ac_ct_CC EXEEXT OBJEXT CFLAGS enable_shared LN_S default_gnatlib_target have_getipinfo LDFLAGS CPPFLAGS warn_cflags LIBOBJS LTLIBOBJS'
- ac_subst_files=''
- ac_pwd=`pwd`
-
-@@ -815,6 +815,7 @@
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-build-libsubdir=DIR Directory where to find libraries for build system
-+ --with-system-libunwind use installed libunwind
-
- Some influential environment variables:
- CC C compiler command
-@@ -2527,6 +2528,51 @@
- fi
-
-
-+# Check for _Unwind_GetIPInfo
-+
-+
-+# Check whether --with-system-libunwind or --without-system-libunwind was given.
-+if test "${with_system_libunwind+set}" = set; then
-+ withval="$with_system_libunwind"
-+
-+fi;
-+ # If system-libunwind was not specifically set, pick a default setting.
-+ if test x$with_system_libunwind = x; then
-+ case ${target} in
-+ ia64-*-hpux*) with_system_libunwind=yes ;;
-+ *) with_system_libunwind=no ;;
-+ esac
-+ fi
-+ # Based on system-libunwind and target, do we have ipinfo?
-+ if test x$with_system_libunwind = xyes; then
-+ case ${target} in
-+ ia64-*-*) have_unwind_getipinfo=no ;;
-+ *) have_unwind_getipinfo=yes ;;
-+ esac
-+ else
-+ # Darwin before version 9 does not have _Unwind_GetIPInfo.
-+
-+ case ${target} in
-+ *-*-darwin[3-8]|*-*-darwin[3-8].*) have_unwind_getipinfo=no ;;
-+ *) have_unwind_getipinfo=yes ;;
-+ esac
-+
-+ fi
-+
-+ if test x$have_unwind_getipinfo = xyes; then
-+
-+cat >>confdefs.h <<\_ACEOF
-+#define HAVE_GETIPINFO 1
-+_ACEOF
-+
-+ fi
-+
-+have_getipinfo=
-+if test x$have_unwind_getipinfo = xyes; then
-+ have_getipinfo=-DHAVE_GETIPINFO
-+fi
-+
-+
- ac_ext=c
- ac_cpp='$CPP $CPPFLAGS'
- ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-@@ -3953,6 +3999,7 @@
- s,@enable_shared@,$enable_shared,;t t
- s,@LN_S@,$LN_S,;t t
- s,@default_gnatlib_target@,$default_gnatlib_target,;t t
-+s,@have_getipinfo@,$have_getipinfo,;t t
- s,@LDFLAGS@,$LDFLAGS,;t t
- s,@CPPFLAGS@,$CPPFLAGS,;t t
- s,@warn_cflags@,$warn_cflags,;t t
-Index: libada/Makefile.in
-===================================================================
---- libada/Makefile.in (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ libada/Makefile.in (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -56,6 +56,8 @@
-
- TARGET_LIBGCC2_CFLAGS=
- GNATLIBCFLAGS= -g -O2
-+GNATLIBCFLAGS_FOR_C = $(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS) -fexceptions \
-+ -DIN_RTS @have_getipinfo@
-
- # Get target-specific overrides for TARGET_LIBGCC2_CFLAGS.
- host_subdir = @host_subdir@
-@@ -78,6 +80,7 @@
- "SHELL=$(SHELL)" \
- "GNATLIBFLAGS=$(GNATLIBFLAGS) $(MULTIFLAGS)" \
- "GNATLIBCFLAGS=$(GNATLIBCFLAGS) $(MULTIFLAGS)" \
-+ "GNATLIBCFLAGS_FOR_C=$(GNATLIBCFLAGS_FOR_C) $(MULTIFLAGS)" \
- "TARGET_LIBGCC2_CFLAGS=$(TARGET_LIBGCC2_CFLAGS)" \
- "THREAD_KIND=$(THREAD_KIND)" \
- "TRACE=$(TRACE)" \
-Index: libada/configure.ac
-===================================================================
---- libada/configure.ac (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ libada/configure.ac (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -18,6 +18,7 @@
- sinclude(../config/acx.m4)
- sinclude(../config/multi.m4)
- sinclude(../config/override.m4)
-+sinclude(../config/unwind_ipinfo.m4)
-
- AC_INIT
- AC_PREREQ([2.59])
-@@ -130,6 +131,14 @@
- fi
- AC_SUBST([default_gnatlib_target])
-
-+# Check for _Unwind_GetIPInfo
-+GCC_CHECK_UNWIND_GETIPINFO
-+have_getipinfo=
-+if test x$have_unwind_getipinfo = xyes; then
-+ have_getipinfo=-DHAVE_GETIPINFO
-+fi
-+AC_SUBST(have_getipinfo)
-+
- AC_PROG_CC
- warn_cflags=
- if test "x$GCC" = "xyes"; then
-Index: libada/ChangeLog
-===================================================================
---- libada/ChangeLog (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ libada/ChangeLog (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -1,3 +1,11 @@
-+2009-10-24 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ * Makefile.in (GNATLIBCFLAGS_FOR_C): New variable.
-+ (LIBADA_FLAGS_TO_PASS): Add GNATLIBCFLAGS_FOR_C.
-+ * configure.ac: Include config/unwind_ipinfo.m4.
-+ Check for _Unwind_GetIPInfo.
-+ * configure: Regenerate.
-+
- 2009-10-15 Release Manager
-
- * GCC 4.4.2 released.
-Index: libjava/classpath/tools/gnu/classpath/tools/jar/Creator.java
-===================================================================
---- libjava/classpath/tools/gnu/classpath/tools/jar/Creator.java (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ libjava/classpath/tools/gnu/classpath/tools/jar/Creator.java (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -216,11 +216,14 @@
- manifest = createManifest(parameters);
- /* If no version is specified, provide the same manifest version default
- * as Sun's jar tool */
-- Attributes attr = manifest.getMainAttributes();
-- if (attr.getValue(Attributes.Name.MANIFEST_VERSION) == null)
-- attr.putValue(Attributes.Name.MANIFEST_VERSION.toString(), "1.0");
-- attr.putValue("Created-By", System.getProperty("java.version") +
-+ if (parameters.wantManifest)
-+ {
-+ Attributes attr = manifest.getMainAttributes();
-+ if (attr.getValue(Attributes.Name.MANIFEST_VERSION) == null)
-+ attr.putValue(Attributes.Name.MANIFEST_VERSION.toString(), "1.0");
-+ attr.putValue("Created-By", System.getProperty("java.version") +
- " (" + System.getProperty("java.vendor") + ")");
-+ }
- outputStream = new JarOutputStream(os, manifest);
- // FIXME: this sets the method too late for the manifest file.
- outputStream.setMethod(parameters.storageMode);
-Index: libjava/classpath/tools/classes/gnu/classpath/tools/jar/Creator.class
-===================================================================
-Nie można wyświetlić: plik binarny.
-svn:mime-type = application/octet-stream
-Index: libjava/classpath/ChangeLog
-===================================================================
---- libjava/classpath/ChangeLog (.../tags/gcc_4_4_2_release) (wersja 153570)
-+++ libjava/classpath/ChangeLog (.../branches/gcc-4_4-branch) (wersja 153570)
-@@ -1,3 +1,10 @@
-+2009-10-22 Richard Guenther <rguenther@suse.de>
++ * src/powerpc/aix_closure.S (ffi_closure_ASM): Adjust for Darwin64
++ change to return value of ffi_closure_helper_DARWIN and load type
++ from return type.
+
-+ PR cp-tools/39177
-+ * tools/gnu/classpath/tools/jar/Creator.java (writeCommandLineEntries):
-+ Do not use uninitialized manifest.
-+ * tools/classes/gnu/classpath/tools/jar/Creator.class: Re-generated.
++ From Tom Honermann <tom.honermann@oracle.com>:
++ * src/powerpc/aix.S: Declare .ffi_prep_args. Insert nops after
++ branch instructions.
++ * src/powerpc/aix_closure.S: Declare .ffi_closure_helper_DARWIN.
+
- 2009-10-15 Release Manager
+ 2012-03-22 Release Manager
- * GCC 4.4.2 released.
+ * GCC 4.7.0 released.