Index: libgomp/ChangeLog
===================================================================
---- libgomp/ChangeLog (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ libgomp/ChangeLog (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -1,3 +1,17 @@
-+2008-03-13 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR middle-end/35185
-+ * testsuite/libgomp.c++/pr35185.C: New test.
-+
-+2008-03-12 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR middle-end/35549
-+ * testsuite/libgomp.c/pr35549.c: New test.
-+
-+2008-03-06 Jakub Jelinek <jakub@redhat.com>
+--- 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>
+
-+ * testsuite/libgomp.c/atomic-3.c: New test.
++ PR middle-end/52547
++ * testsuite/libgomp.c/pr52547.c: New test.
+
- 2008-03-05 Release Manager
+ 2012-03-22 Release Manager
- * GCC 4.3.0 released.
-Index: libgomp/testsuite/libgomp.c++/pr35185.C
+ * GCC 4.7.0 released.
+Index: libgomp/testsuite/libgomp.c/pr52547.c
===================================================================
---- libgomp/testsuite/libgomp.c++/pr35185.C (.../tags/gcc_4_3_0_release) (revision 0)
-+++ libgomp/testsuite/libgomp.c++/pr35185.C (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,33 @@
-+// PR middle-end/35185
-+// { dg-do run }
-+
-+extern "C" void abort ();
+--- 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 } */
+
-+struct S
-+{
-+ S () : s (6) {}
-+ ~S () {}
-+ int s;
-+};
++extern void abort (void);
+
-+__attribute__((noinline))
-+bool
-+bar (S s)
++__attribute__((noinline, noclone)) int
++baz (int *x, int (*fn) (int *))
+{
-+ return s.s != 6;
++ return fn (x);
+}
+
-+int
-+main ()
++__attribute__((noinline, noclone)) int
++foo (int x, int *y)
+{
-+ S s;
-+ int err = 0;
-+#pragma omp parallel shared (s)
-+ {
-+ if (bar (s))
-+ #pragma omp atomic
-+ err++;
-+ }
-+ if (err)
-+ abort ();
++ 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;
+}
-Index: libgomp/testsuite/libgomp.c/pr35549.c
-===================================================================
---- libgomp/testsuite/libgomp.c/pr35549.c (.../tags/gcc_4_3_0_release) (revision 0)
-+++ libgomp/testsuite/libgomp.c/pr35549.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,30 @@
-+/* PR middle-end/35549 */
-+/* { dg-do run } */
-+
-+#include <omp.h>
-+#include <stdlib.h>
+
+int
-+main (void)
++main ()
+{
-+ int i = 6, n = 0;
-+ omp_set_dynamic (0);
-+ omp_set_nested (1);
-+ #pragma omp parallel shared (i) num_threads (3)
-+ {
-+ if (omp_get_num_threads () != 3)
-+ #pragma omp atomic
-+ n += 1;
-+ #pragma omp parallel shared (i) num_threads (4)
-+ {
-+ if (omp_get_num_threads () != 4)
-+ #pragma omp atomic
-+ n += 1;
-+ #pragma omp critical
-+ i += 1;
-+ }
-+ }
-+ if (n == 0 && i != 6 + 3 * 4)
++ int a[100], i;
++ for (i = 0; i < 100; i++)
++ a[i] = i;
++ if (foo (100, a))
+ abort ();
+ return 0;
+}
-Index: libgomp/testsuite/libgomp.c/atomic-3.c
-===================================================================
---- libgomp/testsuite/libgomp.c/atomic-3.c (.../tags/gcc_4_3_0_release) (revision 0)
-+++ libgomp/testsuite/libgomp.c/atomic-3.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,50 @@
-+/* { dg-do run } */
-+/* { dg-options "-fopenmp -O0" } */
-+
-+#include <omp.h>
-+#include <stdlib.h>
-+
-+short e[64];
-+int g;
-+_Complex double d, f;
-+int num_threads;
+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
+
-+__attribute__((noinline)) void
-+foo (int x, long long y)
-+{
-+#pragma omp parallel num_threads (4)
-+ {
-+ int i;
-+ #pragma omp barrier
-+ for (i = 0; i < 2400; i++)
++ /**
+ * @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)
+ {
-+ if (i == 0)
-+ num_threads = omp_get_num_threads ();
-+ #pragma omp atomic
-+ e[0] += x;
-+ #pragma omp atomic
-+ e[16] += x;
-+ #pragma omp atomic
-+ g += y;
-+ #pragma omp atomic
-+ __real__ d += x;
-+ #pragma omp atomic
-+ __imag__ f += 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
+
-+int
-+main (void)
-+{
-+ int i;
-+ foo (3, 3LL);
-+ if (g != 3 * 2400 * num_threads
-+ || __real__ d != g || __imag__ d != 0
-+ || __real__ f != 0 || __imag__ f != g)
-+ abort ();
-+ for (i = 0; i < 64; i++)
-+ if (e[i] != ((i && i != 16) ? 0 : g))
-+ abort ();
-+ return 0;
-+}
-Index: gcc/doc/include/texinfo.tex
-===================================================================
---- gcc/doc/include/texinfo.tex (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/doc/include/texinfo.tex (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -3,7 +3,7 @@
- % Load plain if necessary, i.e., if running under initex.
- \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
- %
--\def\texinfoversion{2008-02-04.16}
-+\def\texinfoversion{2008-03-07.10}
- %
- % Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
- % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-@@ -917,16 +917,21 @@
- \temp
- }
++ /**
+ * @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());
++ }
+ };
--% @include file insert text of that file as input.
-+% @include FILE -- \input text of FILE.
- %
- \def\include{\parseargusing\filenamecatcodes\includezzz}
- \def\includezzz#1{%
- \pushthisfilestack
- \def\thisfile{#1}%
- {%
-- \makevalueexpandable
-- \input #1
-- }%
-+ \makevalueexpandable % we want to expand any @value in FILE.
-+ \turnoffactive % and allow special characters in the expansion
-+ \edef\temp{\noexpand\input #1 }%
-+ %
-+ % This trickery is to read FILE outside of a group, in case it makes
-+ % definitions, etc.
-+ \expandafter
-+ }\temp
- \popthisfilestack
- }
- \def\filenamecatcodes{%
-@@ -5725,7 +5730,7 @@
- \let\/=\ptexslash
- \let\*=\ptexstar
- \let\t=\ptext
-- \expandafter \let\csname top \endcsname=\ptextop % outer
-+ \expandafter \let\csname top\endcsname=\ptextop % outer
- \let\frenchspacing=\plainfrenchspacing
- %
- \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
-Index: gcc/java/jcf-parse.c
+ template<typename _IteratorL, typename _IteratorR, typename _Sequence>
+Index: libstdc++-v3/include/std/array
===================================================================
---- gcc/java/jcf-parse.c (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/java/jcf-parse.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -1208,7 +1208,7 @@
- #ifdef USE_MAPPED_LOCATION
+--- 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
{
- tree source_name = identifier_subst (class_name, "", '.', '/', ".java");
-- const char *sfname = IDENTIFIER_POINTER (source_name);
-+ const char *sfname = find_sourcefile (IDENTIFIER_POINTER (source_name));
- linemap_add (line_table, LC_ENTER, false, sfname, 0);
- input_location = linemap_line_start (line_table, 0, 1);
- file_start_location = input_location;
-Index: gcc/java/ChangeLog
+- 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: 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/java/ChangeLog (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/java/ChangeLog (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -1,3 +1,8 @@
-+2008-03-06 Andrew Haley <aph@redhat.com>
+--- 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>
++
++ * config/abi/post/sparc-linux-gnu/baseline_symbols.txt: Update.
++
++2012-03-23 Paolo Carlini <paolo.carlini@oracle.com>
++
++ * include/bits/forward_list.h: Fix comments.
++
++2012-03-23 Paweł Sikora <pawel.sikora@agmk.net>
+
-+ * jcf-parse.c (give_name_to_class): Call find_sourcefile to find
-+ full pathname of source file.
++ PR libstdc++/52540
++ * include/Makefile.am (c++config.h): Fix sed rule to not break
++ the _GLIBCXX_EXTERN_TEMPLATE redefinition.
++ * include/Makefile.in: Regenerate.
+
- 2008-03-05 Release Manager
++2012-03-22 Jonathan Wakely <jwakely.gcc@gmail.com>
++
++ PR libstdc++/52433
++ * include/debug/safe_iterator.h (_Safe_iterator): Add move
++ constructor and move assignment operator.
++ * testsuite/23_containers/vector/debug/52433.cc: New.
++
++2012-03-22 Paolo Carlini <paolo.carlini@oracle.com>
++
++ * include/std/array (array<>::at(size_type) const): Fix version
++ for undefined __EXCEPTIONS.
++
+ 2012-03-22 Release Manager
- * GCC 4.3.0 released.
-Index: gcc/DATESTAMP
-===================================================================
---- gcc/DATESTAMP (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/DATESTAMP (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -1 +1 @@
--20080305
-+20080313
-Index: gcc/tree.c
+ * GCC 4.7.0 released.
+Index: libstdc++-v3/testsuite/23_containers/vector/debug/52433.cc
===================================================================
---- gcc/tree.c (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/tree.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -4067,6 +4067,16 @@
- return NULL_TREE;
- }
-
-+ if (TREE_CODE (node) == TYPE_DECL
-+ && TREE_CODE (TREE_TYPE (node)) != RECORD_TYPE
-+ && TREE_CODE (TREE_TYPE (node)) != UNION_TYPE)
-+ {
-+ *no_add_attrs = true;
-+ warning (OPT_Wattributes, "%qs attribute ignored",
-+ IDENTIFIER_POINTER (name));
-+ return NULL_TREE;
-+ }
+--- 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 }
+
- /* Report error on dllimport ambiguities seen now before they cause
- any damage. */
- else if (is_attribute_p ("dllimport", name))
-Index: gcc/fold-const.c
-===================================================================
---- gcc/fold-const.c (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/fold-const.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -5066,9 +5066,10 @@
-
- Note that all these transformations are correct if A is
- NaN, since the two alternatives (A and -A) are also NaNs. */
-- if ((FLOAT_TYPE_P (TREE_TYPE (arg01))
-- ? real_zerop (arg01)
-- : integer_zerop (arg01))
-+ if (!HONOR_SIGNED_ZEROS (TYPE_MODE (type))
-+ && (FLOAT_TYPE_P (TREE_TYPE (arg01))
-+ ? real_zerop (arg01)
-+ : integer_zerop (arg01))
- && ((TREE_CODE (arg2) == NEGATE_EXPR
- && operand_equal_p (TREE_OPERAND (arg2, 0), arg1, 0))
- /* In the case that A is of the form X-Y, '-A' (arg2) may
-@@ -5121,7 +5122,8 @@
- both transformations are correct when A is NaN: A != 0
- is then true, and A == 0 is false. */
-
-- if (integer_zerop (arg01) && integer_zerop (arg2))
-+ if (!HONOR_SIGNED_ZEROS (TYPE_MODE (type))
-+ && integer_zerop (arg01) && integer_zerop (arg2))
- {
- if (comp_code == NE_EXPR)
- return pedantic_non_lvalue (fold_convert (type, arg1));
-@@ -5155,7 +5157,8 @@
- a number and A is not. The conditions in the original
- expressions will be false, so all four give B. The min()
- and max() versions would give a NaN instead. */
-- if (operand_equal_for_comparison_p (arg01, arg2, arg00)
-+ if (!HONOR_SIGNED_ZEROS (TYPE_MODE (type))
-+ && operand_equal_for_comparison_p (arg01, arg2, arg00)
- /* Avoid these transformations if the COND_EXPR may be used
- as an lvalue in the C++ front-end. PR c++/19199. */
- && (in_gimple_form
-Index: gcc/omp-low.c
-===================================================================
---- gcc/omp-low.c (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/omp-low.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -456,7 +456,7 @@
- }
-
- static inline tree
--maybe_lookup_decl (tree var, omp_context *ctx)
-+maybe_lookup_decl (const_tree var, omp_context *ctx)
- {
- tree *n;
- n = (tree *) pointer_map_contains (ctx->cb.decl_map, var);
-@@ -479,18 +479,18 @@
- return n ? (tree) n->value : NULL_TREE;
- }
-
--/* Return true if DECL should be copied by pointer. SHARED_P is true
-- if DECL is to be shared. */
-+/* Return true if DECL should be copied by pointer. SHARED_CTX is
-+ the parallel context if DECL is to be shared. */
-
- static bool
--use_pointer_for_field (const_tree decl, bool shared_p)
-+use_pointer_for_field (const_tree decl, omp_context *shared_ctx)
- {
- if (AGGREGATE_TYPE_P (TREE_TYPE (decl)))
- return true;
-
- /* We can only use copy-in/copy-out semantics for shared variables
- when we know the value is not accessible from an outer scope. */
-- if (shared_p)
-+ if (shared_ctx)
- {
- /* ??? Trivially accessible from anywhere. But why would we even
- be passing an address in this case? Should we simply assert
-@@ -510,6 +510,34 @@
- address taken. */
- if (TREE_ADDRESSABLE (decl))
- return true;
-+
-+ /* Disallow copy-in/out in nested parallel if
-+ decl is shared in outer parallel, otherwise
-+ each thread could store the shared variable
-+ in its own copy-in location, making the
-+ variable no longer really shared. */
-+ if (!TREE_READONLY (decl) && shared_ctx->is_nested)
-+ {
-+ omp_context *up;
++// PR libstdc++/52433
+
-+ for (up = shared_ctx->outer; up; up = up->outer)
-+ if (maybe_lookup_decl (decl, up))
-+ break;
++#include <vector>
+
-+ if (up && is_parallel_ctx (up))
-+ {
-+ tree c;
++struct X
++{
++ std::vector<int>::iterator i;
+
-+ for (c = OMP_PARALLEL_CLAUSES (up->stmt);
-+ c; c = OMP_CLAUSE_CHAIN (c))
-+ if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_SHARED
-+ && OMP_CLAUSE_DECL (c) == decl)
-+ break;
++ X() = default;
++ X(const X&) = default;
++ X(X&&) = default;
++ X& operator=(const X&) = default;
++ X& operator=(X&&) = default;
++};
+
-+ if (c)
-+ return true;
-+ }
-+ }
- }
-
- return false;
-@@ -596,7 +624,7 @@
- }
- else if (is_parallel_ctx (ctx))
- {
-- bool by_ref = use_pointer_for_field (var, false);
-+ bool by_ref = use_pointer_for_field (var, NULL);
- x = build_receiver_ref (var, by_ref, ctx);
- }
- else if (ctx->outer)
-@@ -966,7 +994,7 @@
- gcc_assert (is_parallel_ctx (ctx));
- decl = OMP_CLAUSE_DECL (c);
- gcc_assert (!is_variable_sized (decl));
-- by_ref = use_pointer_for_field (decl, true);
-+ by_ref = use_pointer_for_field (decl, ctx);
- /* Global variables don't need to be copied,
- the receiver side will use them directly. */
- if (is_global_var (maybe_lookup_decl_in_outer_ctx (decl, ctx)))
-@@ -1001,7 +1029,7 @@
- && ! is_global_var (maybe_lookup_decl_in_outer_ctx (decl,
- ctx)))
- {
-- by_ref = use_pointer_for_field (decl, false);
-+ by_ref = use_pointer_for_field (decl, NULL);
- install_var_field (decl, by_ref, ctx);
- }
- install_var_local (decl, ctx);
-@@ -1014,7 +1042,7 @@
-
- case OMP_CLAUSE_COPYIN:
- decl = OMP_CLAUSE_DECL (c);
-- by_ref = use_pointer_for_field (decl, false);
-+ by_ref = use_pointer_for_field (decl, NULL);
- install_var_field (decl, by_ref, ctx);
- break;
-
-@@ -1751,7 +1779,7 @@
- /* Set up the DECL_VALUE_EXPR for shared variables now. This
- needs to be delayed until after fixup_child_record_type so
- that we get the correct type during the dereference. */
-- by_ref = use_pointer_for_field (var, true);
-+ by_ref = use_pointer_for_field (var, ctx);
- x = build_receiver_ref (var, by_ref, ctx);
- SET_DECL_VALUE_EXPR (new_var, x);
- DECL_HAS_VALUE_EXPR_P (new_var) = 1;
-@@ -1794,7 +1822,7 @@
- break;
-
- case OMP_CLAUSE_COPYIN:
-- by_ref = use_pointer_for_field (var, false);
-+ by_ref = use_pointer_for_field (var, NULL);
- x = build_receiver_ref (var, by_ref, ctx);
- x = lang_hooks.decls.omp_clause_assign_op (c, new_var, x);
- append_to_statement_list (x, ©in_seq);
-@@ -2007,7 +2035,7 @@
- continue;
-
- var = OMP_CLAUSE_DECL (c);
-- by_ref = use_pointer_for_field (var, false);
-+ by_ref = use_pointer_for_field (var, NULL);
-
- ref = build_sender_ref (var, ctx);
- x = lookup_decl_in_outer_ctx (var, ctx);
-@@ -2059,7 +2087,7 @@
- continue;
- if (is_variable_sized (val))
- continue;
-- by_ref = use_pointer_for_field (val, false);
-+ by_ref = use_pointer_for_field (val, NULL);
-
- switch (OMP_CLAUSE_CODE (c))
- {
-@@ -2129,7 +2157,7 @@
- mapping for OVAR. */
- var = lookup_decl_in_outer_ctx (ovar, ctx);
-
-- if (use_pointer_for_field (ovar, true))
-+ if (use_pointer_for_field (ovar, ctx))
- {
- x = build_sender_ref (ovar, ctx);
- var = build_fold_addr_expr (var);
-@@ -4852,184 +4880,177 @@
- pop_gimplify_context (NULL_TREE);
- }
-
-+/* Callback for lower_omp_1. Return non-NULL if *tp needs to be
-+ regimplified. */
-
--/* Pass *TP back through the gimplifier within the context determined by WI.
-- This handles replacement of DECL_VALUE_EXPR, as well as adjusting the
-- flags on ADDR_EXPR. */
--
--static void
--lower_regimplify (tree *tp, struct walk_stmt_info *wi)
-+static tree
-+lower_omp_2 (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
- {
-- enum gimplify_status gs;
-- tree pre = NULL;
-+ tree t = *tp;
-
-- if (wi->is_lhs)
-- gs = gimplify_expr (tp, &pre, NULL, is_gimple_lvalue, fb_lvalue);
-- else if (wi->val_only)
-- gs = gimplify_expr (tp, &pre, NULL, is_gimple_val, fb_rvalue);
-- else
-- gs = gimplify_expr (tp, &pre, NULL, is_gimple_formal_tmp_var, fb_rvalue);
-- gcc_assert (gs == GS_ALL_DONE);
-+ /* Any variable with DECL_VALUE_EXPR needs to be regimplified. */
-+ if (TREE_CODE (t) == VAR_DECL && DECL_HAS_VALUE_EXPR_P (t))
-+ return t;
-
-- if (pre)
-- tsi_link_before (&wi->tsi, pre, TSI_SAME_STMT);
--}
-+ /* If a global variable has been privatized, TREE_CONSTANT on
-+ ADDR_EXPR might be wrong. */
-+ if (TREE_CODE (t) == ADDR_EXPR)
-+ recompute_tree_invariant_for_addr_expr (t);
-
--/* Copy EXP into a temporary. Insert the initialization statement before TSI. */
--
--static tree
--init_tmp_var (tree exp, tree_stmt_iterator *tsi)
--{
-- tree t, stmt;
--
-- t = create_tmp_var (TREE_TYPE (exp), NULL);
-- DECL_GIMPLE_REG_P (t) = 1;
-- stmt = build_gimple_modify_stmt (t, exp);
-- SET_EXPR_LOCUS (stmt, EXPR_LOCUS (tsi_stmt (*tsi)));
-- tsi_link_before (tsi, stmt, TSI_SAME_STMT);
--
-- return t;
-+ *walk_subtrees = !TYPE_P (t) && !DECL_P (t);
-+ return NULL_TREE;
- }
-
--/* Similarly, but copy from the temporary and insert the statement
-- after the iterator. */
--
--static tree
--save_tmp_var (tree exp, tree_stmt_iterator *tsi)
-+static void
-+lower_omp_1 (tree *tp, omp_context *ctx, tree_stmt_iterator *tsi)
- {
-- tree t, stmt;
-+ tree t = *tp;
-
-- t = create_tmp_var (TREE_TYPE (exp), NULL);
-- DECL_GIMPLE_REG_P (t) = 1;
-- stmt = build_gimple_modify_stmt (exp, t);
-- SET_EXPR_LOCUS (stmt, EXPR_LOCUS (tsi_stmt (*tsi)));
-- tsi_link_after (tsi, stmt, TSI_SAME_STMT);
-+ if (!t)
-+ return;
-
-- return t;
--}
-+ if (EXPR_HAS_LOCATION (t))
-+ input_location = EXPR_LOCATION (t);
-
--/* Callback for walk_stmts. Lower the OpenMP directive pointed by TP. */
--
--static tree
--lower_omp_1 (tree *tp, int *walk_subtrees, void *data)
--{
-- struct walk_stmt_info *wi = data;
-- omp_context *ctx = wi->info;
-- tree t = *tp;
--
- /* If we have issued syntax errors, avoid doing any heavy lifting.
- Just replace the OpenMP directives with a NOP to avoid
- confusing RTL expansion. */
-- if (errorcount && OMP_DIRECTIVE_P (*tp))
-+ if (errorcount && OMP_DIRECTIVE_P (t))
- {
- *tp = build_empty_stmt ();
-- return NULL_TREE;
-+ return;
- }
-
-- *walk_subtrees = 0;
-- switch (TREE_CODE (*tp))
-+ switch (TREE_CODE (t))
- {
-+ case STATEMENT_LIST:
-+ {
-+ tree_stmt_iterator i;
-+ for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
-+ lower_omp_1 (tsi_stmt_ptr (i), ctx, &i);
-+ }
-+ break;
++X test01()
++{
++ X x;
++ x = X();
++ return x;
++}
+
-+ case COND_EXPR:
-+ lower_omp_1 (&COND_EXPR_THEN (t), ctx, NULL);
-+ lower_omp_1 (&COND_EXPR_ELSE (t), ctx, NULL);
-+ if (ctx
-+ && walk_tree (&COND_EXPR_COND (t), lower_omp_2, ctx, NULL))
+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;
+ {
-+ tree pre = NULL;
-+ gimplify_expr (&COND_EXPR_COND (t), &pre, NULL,
-+ is_gimple_condexpr, fb_rvalue);
-+ if (pre)
-+ {
-+ if (tsi)
-+ tsi_link_before (tsi, pre, TSI_SAME_STMT);
-+ else
-+ {
-+ append_to_statement_list (t, &pre);
-+ *tp = pre;
-+ }
-+ }
++ 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));
+ }
-+ break;
-+ case CATCH_EXPR:
-+ lower_omp_1 (&CATCH_BODY (t), ctx, NULL);
-+ break;
-+ case EH_FILTER_EXPR:
-+ lower_omp_1 (&EH_FILTER_FAILURE (t), ctx, NULL);
-+ break;
-+ case TRY_CATCH_EXPR:
-+ case TRY_FINALLY_EXPR:
-+ lower_omp_1 (&TREE_OPERAND (t, 0), ctx, NULL);
-+ lower_omp_1 (&TREE_OPERAND (t, 1), ctx, NULL);
-+ break;
-+ case BIND_EXPR:
-+ lower_omp_1 (&BIND_EXPR_BODY (t), ctx, NULL);
-+ break;
-+ case RETURN_EXPR:
-+ lower_omp_1 (&TREE_OPERAND (t, 0), ctx, NULL);
-+ break;
-+
- case OMP_PARALLEL:
- ctx = maybe_lookup_ctx (t);
- lower_omp_parallel (tp, ctx);
- break;
--
- case OMP_FOR:
- ctx = maybe_lookup_ctx (t);
- gcc_assert (ctx);
- lower_omp_for (tp, ctx);
- break;
--
- case OMP_SECTIONS:
- ctx = maybe_lookup_ctx (t);
- gcc_assert (ctx);
- lower_omp_sections (tp, ctx);
- break;
--
- case OMP_SINGLE:
- ctx = maybe_lookup_ctx (t);
- gcc_assert (ctx);
- lower_omp_single (tp, ctx);
- break;
--
- case OMP_MASTER:
- ctx = maybe_lookup_ctx (t);
- gcc_assert (ctx);
- lower_omp_master (tp, ctx);
- break;
--
- case OMP_ORDERED:
- ctx = maybe_lookup_ctx (t);
- gcc_assert (ctx);
- lower_omp_ordered (tp, ctx);
- break;
--
- case OMP_CRITICAL:
- ctx = maybe_lookup_ctx (t);
- gcc_assert (ctx);
- lower_omp_critical (tp, ctx);
- break;
-
-- case VAR_DECL:
-- if (ctx && DECL_HAS_VALUE_EXPR_P (t))
-+ default:
-+ if (ctx && walk_tree (tp, lower_omp_2, ctx, NULL))
- {
-- lower_regimplify (&t, wi);
-- if (wi->val_only)
-+ /* The gimplifier doesn't gimplify CALL_EXPR_STATIC_CHAIN.
-+ Handle that here. */
-+ tree call = get_call_expr_in (t);
-+ if (call
-+ && CALL_EXPR_STATIC_CHAIN (call)
-+ && walk_tree (&CALL_EXPR_STATIC_CHAIN (call), lower_omp_2,
-+ ctx, NULL))
- {
-- if (wi->is_lhs)
-- t = save_tmp_var (t, &wi->tsi);
-- else
-- t = init_tmp_var (t, &wi->tsi);
-+ tree pre = NULL;
-+ gimplify_expr (&CALL_EXPR_STATIC_CHAIN (call), &pre, NULL,
-+ is_gimple_val, fb_rvalue);
-+ if (pre)
-+ {
-+ if (tsi)
-+ tsi_link_before (tsi, pre, TSI_SAME_STMT);
-+ else
-+ {
-+ append_to_statement_list (t, &pre);
-+ lower_omp_1 (&pre, ctx, NULL);
-+ *tp = pre;
-+ return;
-+ }
-+ }
- }
-- *tp = t;
-- }
-- break;
-
-- case ADDR_EXPR:
-- if (ctx)
-- lower_regimplify (tp, wi);
-- break;
--
-- case ARRAY_REF:
-- case ARRAY_RANGE_REF:
-- case REALPART_EXPR:
-- case IMAGPART_EXPR:
-- case COMPONENT_REF:
-- case VIEW_CONVERT_EXPR:
-- if (ctx)
-- lower_regimplify (tp, wi);
-- break;
--
-- case INDIRECT_REF:
-- if (ctx)
-- {
-- wi->is_lhs = false;
-- wi->val_only = true;
-- lower_regimplify (&TREE_OPERAND (t, 0), wi);
-+ if (tsi == NULL)
-+ gimplify_stmt (tp);
-+ else
-+ {
-+ tree pre = NULL;
-+ gimplify_expr (tp, &pre, NULL, is_gimple_stmt, fb_none);
-+ if (pre)
-+ tsi_link_before (tsi, pre, TSI_SAME_STMT);
-+ }
- }
- break;
--
-- default:
-- if (!TYPE_P (t) && !DECL_P (t))
-- *walk_subtrees = 1;
-- break;
+ return ret;
}
--
-- return NULL_TREE;
- }
-
- static void
- lower_omp (tree *stmt_p, omp_context *ctx)
- {
-- struct walk_stmt_info wi;
--
-- memset (&wi, 0, sizeof (wi));
-- wi.callback = lower_omp_1;
-- wi.info = ctx;
-- wi.val_only = true;
-- wi.want_locations = true;
--
-- walk_stmts (&wi, stmt_p);
-+ lower_omp_1 (stmt_p, ctx, NULL);
- }
- \f
- /* Main entry point. */
-Index: gcc/tree-ssa-dse.c
+ 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/tree-ssa-dse.c (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/tree-ssa-dse.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -470,24 +470,23 @@
- vuse_vec_p vv;
- tree stmt_lhs;
-
-- if (LOADED_SYMS (use_stmt))
-+ /* If use_stmt is or might be a nop assignment, e.g. for
-+ struct { ... } S a, b, *p; ...
-+ b = a; b = b;
-+ or
-+ b = a; b = *p; where p might be &b,
-+ or
-+ *p = a; *p = b; where p might be &b,
-+ or
-+ *p = *u; *p = *v; where p might be v, then USE_STMT
-+ acts as a use as well as definition, so store in STMT
-+ is not dead. */
-+ if (LOADED_SYMS (use_stmt)
-+ && bitmap_intersect_p (LOADED_SYMS (use_stmt),
-+ STORED_SYMS (use_stmt)))
- {
-- tree use_base
-- = get_base_address (GIMPLE_STMT_OPERAND (use_stmt, 0));
-- /* If use_stmt is or might be a nop assignment, e.g. for
-- struct { ... } S a, b, *p; ...
-- b = a; b = b;
-- or
-- b = a; b = *p; where p might be &b, then USE_STMT
-- acts as a use as well as definition, so store in STMT
-- is not dead. */
-- if (TREE_CODE (use_base) == VAR_DECL
-- && bitmap_bit_p (LOADED_SYMS (use_stmt),
-- DECL_UID (use_base)))
-- {
-- record_voperand_set (dse_gd->stores, &bd->stores, ann->uid);
-- return;
-- }
-+ record_voperand_set (dse_gd->stores, &bd->stores, ann->uid);
-+ return;
- }
-
- if (dump_file && (dump_flags & TDF_DETAILS))
+--- 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_3_0_release) (revision 133190)
-+++ gcc/DEV-PHASE (.../branches/gcc-4_3-branch) (revision 133190)
+--- 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_3_0_release) (revision 133190)
-+++ gcc/ChangeLog (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -1,3 +1,158 @@
-+2008-03-13 Jakub Jelinek <jakub@redhat.com>
+--- 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.
+
-+ PR middle-end/35185
-+ * omp-low.c (lower_regimplify, init_tmp_var, save_tmp_var): Removed.
-+ (lower_omp_2): New function.
-+ (lower_omp_1, lower_omp): Rewritten.
++ Backport from 2012-03-21 mainline r185605.
+
-+2008-03-12 Jakub Jelinek <jakub@redhat.com>
++ 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.
+
-+ PR middle-end/35549
-+ * omp-low.c (maybe_lookup_decl): Constify first argument.
-+ (use_pointer_for_field): Change last argument from bool to
-+ omp_context *. Disallow shared copy-in/out in nested
-+ parallel if decl is shared in outer parallel too.
-+ (build_outer_var_ref, scan_sharing_clauses,
-+ lower_rec_input_clauses, lower_copyprivate_clauses,
-+ lower_send_clauses, lower_send_shared_vars): Adjust callers.
++ Backport from 2012-03-13 mainline r185329.
+
-+2008-03-12 Uros Bizjak <ubizjak@gmail.com>
++ 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.
+
-+ PR target/35540
-+ * config/i386/i386.md (paritysi2, paritydi2): Use register_operand
-+ constraint for operand 1.
-+ (paritysi2_cmp): Use register_operand constraint for operand 2.
-+ Use earlyclobber modifier for operand 1. Remove support for
-+ memory operands.
-+ (paritydi2_cmp): Use register_operand constraint for operand 3.
-+ Use earlyclobber modifier for operand 1. Remove support for
-+ memory operands.
++ Backport from 2012-03-12 mainline r185256.
+
-+2008-03-11 Uros Bizjak <ubizjak@gmail.com>
++ 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 middle-end/35526
-+ * expr.c (store_expr): Call emit_block_move if the mode
-+ of "temp" RTX is BLKmode.
++ Backport from 2012-03-12 mainline r185253.
+
-+2008-03-10 Vladimir Makarov <vmakarov@redhat.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/i386/sse.md (ssse3_pmaddubswv8hi3, ssse3_pmaddubswv4hi3):
-+ Remove commutativity hint.
++ Backport from 2012-03-08 mainline r185105.
+
-+2008-03-10 Jakub Jelinek <jakub@redhat.com>
++ * config/avr/avr.md (*addhi3, addhi3_clobber): Add "w" alternative
++ for constants in [-63,63].
+
-+ PR c/35438
-+ PR c/35439
-+ * c-parser.c (c_parser_omp_threadprivate): Don't add vars with
-+ errorneous type. Check that v is a VAR_DECL.
++ Backport from 2012-03-08 mainline r185100.
+
-+ PR middle-end/35099
-+ * tree-cfg.c (new_label_mapper): Update cfun->last_label_uid.
++ 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".
+
-+2008-03-10 Uros Bizjak <ubizjak@gmail.com>
++ Backport from 2012-03-07 mainline r185043.
+
-+ Backport from mainline:
-+ 2008-03-09 Uros Bizjak <ubizjak@gmail.com>
-+
-+ PR target/35496
-+ * config/i386/i386.c (ix86_constant_alignment): Compute alignment using
-+ ALIGN_MODE_128 for VECTOR_CST and INTEGER_CST in addition to REAL_CST.
++ PR target/52484
++ * config/avr/avr.md (xload<mode>_A): Add R22... to register footprint.
++
++ Backport from 2012-03-07 mainline r185032.
+
-+ 2008-03-04 Uros Bizjak <ubizjak@gmail.com>
++ 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.
+
-+ PR middle-end/35456
-+ * fold-const.c (fold_cond_expr_with_comparison): Prevent
-+ transformations for modes that have signed zeros.
-+ * ifcvt.c (noce_try_abs): Ditto.
++ Backport from 2012-03-07 mainline r185031.
+
-+2008-03-09 Kaz Kojima <kkojima@gcc.gnu.org>
++ 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.
+
-+ Backport from mainline:
-+ PR target/35225
-+ * config/sh/sh.c (find_barrier): Don't go past 'from' argument.
++ 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>
+
-+2008-03-09 Kaz Kojima <kkojima@gcc.gnu.org>
++ Backport from mainline r185259.
+
-+ Backport from mainline:
-+ PR target/35190
-+ * config/sh/sh.md (jump_compact): Disable for crossing jumps.
++ 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>
+
-+ * config/sh/sh.c (find_barrier): Don't go past
-+ NOTE_INSN_SWITCH_TEXT_SECTIONS note.
++ 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.
+
-+2008-03-08 Jakub Jelinek <jakub@redhat.com>
++ * config/i386/smmintrin.h: Avoid /* within a comment.
++ * config/i386/nmmintrin.h: Likewise.
+
-+ PR target/35498
-+ * config/rs6000/rs6000.c (rs6000_expand_compare_and_swapqhi): Shift
-+ wdst back after sync_compare_and_swapqhi_internal.
++2012-03-22 Richard Guenther <rguenther@suse.de>
+
-+2008-03-07 Joseph Myers <joseph@codesourcery.com>
++ * BASE-VER: Set to 4.7.1.
++ * DEV-PHASE: Set to prerelease.
+
-+ * doc/include/texinfo.tex: Update to version 2008-03-07.10.
+ 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.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 @@
++/* { dg-options "-std=gnu99" } */
++/* { dg-do run } */
+
-+2008-03-07 Richard Guenther <rguenther@suse.de>
++#define __as __flash
+
-+ Backport from mainline:
-+ 2008-03-05 Richard Guenther <rguenther@suse.de>
++#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 } */
+
-+ PR tree-optimization/35472
-+ * tree-ssa-dse.c (dse_optimize_stmt): Do not delete a store
-+ whose single use_stmt has a overlapping set of loaded and
-+ stored symbols as that use_stmt might be a noop assignment then.
++#define __as __flash1
+
-+2008-03-06 H.J. Lu <hongjiu.lu@intel.com>
++#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 } */
+
-+ Backport from mainline:
-+ 2008-02-18 H.J. Lu <hongjiu.lu@intel.com>
-+
-+ PR target/35189
-+ * config/i386/i386.c (OPTION_MASK_ISA_MMX_SET): New.
-+ (OPTION_MASK_ISA_3DNOW_SET): Likewise.
-+ (OPTION_MASK_ISA_SSE_SET): Likewise.
-+ (OPTION_MASK_ISA_SSE2_SET): Likewise.
-+ (OPTION_MASK_ISA_SSE3_SET): Likewise.
-+ (OPTION_MASK_ISA_SSSE3_SET): Likewise.
-+ (OPTION_MASK_ISA_SSE4_1_SET): Likewise.
-+ (OPTION_MASK_ISA_SSE4_2_SET): Likewise.
-+ (OPTION_MASK_ISA_SSE4_SET): Likewise.
-+ (OPTION_MASK_ISA_SSE4A_SET): Likewise.
-+ (OPTION_MASK_ISA_SSE5_SET): Likewise.
-+ (OPTION_MASK_ISA_3DNOW_A_UNSET): Likewise.
-+ (OPTION_MASK_ISA_MMX_UNSET): Updated.
-+ (OPTION_MASK_ISA_3DNOW_UNSET): Updated.
-+ (OPTION_MASK_ISA_SSE_UNSET): Likewise.
-+ (OPTION_MASK_ISA_SSE3_UNSET): Likewise.
-+ (OPTION_MASK_ISA_SSSE3_UNSET): Likewise.
-+ (OPTION_MASK_ISA_SSE4_1_UNSET): Likewise.
-+ (OPTION_MASK_ISA_SSE4_2_UNSET): Likewise.
-+ (OPTION_MASK_ISA_SSE4A_UNSET): Likewise.
-+ (OPTION_MASK_ISA_SSE5_UNSET): Likewise.
-+ (OPTION_MASK_ISA_SSE4): Removed.
-+ (ix86_handle_option): Turn on bits in ix86_isa_flags and
-+ ix86_isa_flags_explicit with OPTION_MASK_ISA_XXX_SET for -mXXX.
-+ (override_options): Don't turn on implied SSE/MMX bits in
-+ ix86_isa_flags.
-+
-+2008-03-06 Jakub Jelinek <jakub@redhat.com>
-+
-+ * gimplify.c (goa_lhs_expr_p): Allow different ADDR_EXPR nodes
-+ for the same VAR_DECL.
-+
-+2008-03-06 Daniel Jacobowitz <dan@codesourcery.com>
-+
-+ * expmed.c (extract_bit_field): Always use adjust_address for MEM.
-+
-+2008-03-06 Joseph Myers <joseph@codesourcery.com>
-+
-+ PR target/33963
-+ * tree.c (handle_dll_attribute): Disallow TYPE_DECLs for types
-+ other than structures and unions.
-+
-+2008-03-06 Jakub Jelinek <jakub@redhat.com>
-+
-+ * BASE-VER: Set to 4.3.1.
-+ * DEV-PHASE: Set to prerelease.
++#define __as __flash
+
- 2008-03-05 Release Manager
-
- * GCC 4.3.0 released.
-@@ -56,12 +211,12 @@
- Uros Bizjak <ubizjak@gmail.com>
-
- PR target/25477
-- * gcc/config/darwin-protos.h: Add darwin_patch_builtins prototype.
-- * gcc/config/darwin-ppc-ldouble-patch.def: New file.
-- * gcc/config/rs6000/darwin.h (SUBTARGET_INIT_BUILTINS): New macro.
-- * gcc/config/rs6000/rs6000.c (rs6000_init_builtins): Call
-+ * config/darwin-protos.h: Add darwin_patch_builtins prototype.
-+ * config/darwin-ppc-ldouble-patch.def: New file.
-+ * config/rs6000/darwin.h (SUBTARGET_INIT_BUILTINS): New macro.
-+ * config/rs6000/rs6000.c (rs6000_init_builtins): Call
- SUBTARGET_INIT_BUILTINS if defined.
-- * gcc/config/darwin.c (darwin_patch_builtin,
-+ * config/darwin.c (darwin_patch_builtin,
- darwin_patch_builtins): New functions.
-
- 2008-02-27 Richard Guenther <rguenther@suse.de>
-@@ -2122,7 +2277,7 @@
- 2008-01-02 Arthur Norman <acn1@cam.ac.uk>
-
- PR target/34013
-- * gcc/config/i386/i386.c (ix86_expand_prologue): Save red-zone
-+ * config/i386/i386.c (ix86_expand_prologue): Save red-zone
- while stack probing.
-
- 2008-01-01 Douglas Gregor <doug.gregor@gmail.com>
-Index: gcc/testsuite/gcc.c-torture/execute/20080222-1.c
++#include "addr-space-2.h"
+Index: gcc/testsuite/gcc.target/avr/torture/addr-space-2-1.c
===================================================================
---- gcc/testsuite/gcc.c-torture/execute/20080222-1.c (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/gcc.c-torture/execute/20080222-1.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,22 @@
-+extern void abort (void);
+--- 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 } */
+
-+struct container
-+{
-+ unsigned char data[1];
-+};
++#define __as __flash1
+
-+unsigned char space[6] = {1, 2, 3, 4, 5, 6};
++#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 } */
+
-+int
-+foo (struct container *p)
-+{
-+ return p->data[4];
-+}
++#define __as __memx
+
-+int
-+main ()
-+{
-+ if (foo ((struct container *) space) != 5)
-+ abort ();
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.c-torture/execute/pr35472.c
-===================================================================
---- gcc/testsuite/gcc.c-torture/execute/pr35472.c (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/gcc.c-torture/execute/pr35472.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,22 @@
-+extern void abort (void);
-+extern void *memset (void *s, int c, __SIZE_TYPE__ n);
-+struct S { int i[16]; };
-+struct S *p;
-+void __attribute__((noinline))
-+foo(struct S *a, struct S *b) { a->i[0] = -1; p = b; }
-+void test (void)
-+{
-+ struct S a, b;
-+ memset (&a.i[0], '\0', sizeof (a.i));
-+ memset (&b.i[0], '\0', sizeof (b.i));
-+ foo (&a, &b);
-+ *p = a;
-+ *p = b;
-+ if (b.i[0] != -1)
-+ abort ();
-+}
-+int main()
-+{
-+ test();
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.c-torture/execute/pr35456.c
++#include "addr-space-1.h"
+Index: gcc/testsuite/gcc.target/avr/torture/addr-space-1.h
===================================================================
---- gcc/testsuite/gcc.c-torture/execute/pr35456.c (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/gcc.c-torture/execute/pr35456.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,21 @@
-+extern void abort (void);
+--- 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>
+
-+double
-+__attribute__ ((noinline))
-+not_fabs (double x)
++typedef struct
+{
-+ return x >= 0.0 ? x : -x;
-+}
++ 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"
++ }
++ };
++
++const __as volatile a_t V =
++ {
++ 12+1, 345+1, 678910+1, 1234567891011ll+1,
++ {
++ "XXX..XXX",
++ "YYY..YYY"
++ }
++ };
++
++a_t A2;
++volatile a_t V2;
+
-+int main()
++int main (void)
+{
-+ double x = -0.0;
-+ double y;
++ if (A.i1 != 12
++ || A.i1 != V.i1 -1)
++ abort();
+
-+ y = not_fabs (x);
++ if (A.i2 != 345
++ || A.i2 != V.i2 -1)
++ abort();
+
-+ if (!__builtin_signbit (y))
++ if (A.i4 != 678910
++ || A.i4 != V.i4 -1)
+ abort();
+
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.target/i386/isa-1.c
-===================================================================
---- gcc/testsuite/gcc.target/i386/isa-1.c (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/gcc.target/i386/isa-1.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,34 @@
-+/* { dg-do run } */
-+/* { dg-options "-march=x86-64 -msse4" } */
++ if (A.i8 != 1234567891011ll
++ || A.i8 != V.i8 -1)
++ abort();
+
-+extern void abort (void);
++ A2 = A;
++ V2 = V;
+
-+int
-+main ()
-+{
-+#if !defined __SSE__
-+ abort ();
-+#endif
-+#if !defined __SSE2__
-+ abort ();
-+#endif
-+#if !defined __SSE3__
-+ abort ();
-+#endif
-+#if !defined __SSSE3__
-+ abort ();
-+#endif
-+#if !defined __SSE4_1__
-+ abort ();
-+#endif
-+#if !defined __SSE4_2__
-+ abort ();
-+#endif
-+#if defined __SSE4A__
-+ abort ();
-+#endif
-+#if defined __SSE5__
-+ abort ();
-+#endif
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.target/i386/isa-9.c
-===================================================================
---- gcc/testsuite/gcc.target/i386/isa-9.c (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/gcc.target/i386/isa-9.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,34 @@
-+/* { dg-do run } */
-+/* { dg-options "-march=amdfam10 -mno-sse5" } */
++ if (A2.i1 != 12
++ || A2.i1 != V2.i1 -1)
++ abort();
+
-+extern void abort (void);
++ if (A2.i2 != 345
++ || A2.i2 != V2.i2 -1)
++ abort();
+
-+int
-+main ()
-+{
-+#if !defined __SSE__
-+ abort ();
-+#endif
-+#if !defined __SSE2__
-+ abort ();
-+#endif
-+#if !defined __SSE3__
-+ abort ();
-+#endif
-+#if defined __SSSE3__
-+ abort ();
-+#endif
-+#if defined __SSE4_1__
-+ abort ();
-+#endif
-+#if defined __SSE4_2__
-+ abort ();
-+#endif
-+#if !defined __SSE4A__
-+ abort ();
-+#endif
-+#if defined __SSE5__
-+ abort ();
-+#endif
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.target/i386/isa-12.c
-===================================================================
---- gcc/testsuite/gcc.target/i386/isa-12.c (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/gcc.target/i386/isa-12.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,34 @@
-+/* { dg-do run } */
-+/* { dg-options "-march=x86-64 -msse5 -mno-sse3" } */
++ if (A2.i4 != 678910
++ || A2.i4 != V2.i4 -1)
++ abort();
+
-+extern void abort (void);
++ if (A2.i8 != 1234567891011ll
++ || A2.i8 != V2.i8 -1)
++ abort();
+
-+int
-+main ()
-+{
-+#if !defined __SSE__
-+ abort ();
-+#endif
-+#if !defined __SSE2__
-+ abort ();
-+#endif
-+#if defined __SSE3__
-+ abort ();
-+#endif
-+#if defined __SSSE3__
-+ abort ();
-+#endif
-+#if defined __SSE4_1__
-+ abort ();
-+#endif
-+#if defined __SSE4_2__
-+ abort ();
-+#endif
-+#if defined __SSE4A__
-+ abort ();
-+#endif
-+#if defined __SSE5__
-+ abort ();
-+#endif
++ 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.target/i386/isa-2.c
+Index: gcc/testsuite/gcc.target/avr/torture/addr-space-2-x.c
===================================================================
---- gcc/testsuite/gcc.target/i386/isa-2.c (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/gcc.target/i386/isa-2.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,34 @@
+--- 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 "-march=x86-64 -msse4 -msse5" } */
+
-+extern void abort (void);
++/* --no-warn because: "assembling 24-bit address needs binutils extension"
++ see binutils PR13503. */
+
-+int
-+main ()
-+{
-+#if !defined __SSE__
-+ abort ();
-+#endif
-+#if !defined __SSE2__
-+ abort ();
-+#endif
-+#if !defined __SSE3__
-+ abort ();
-+#endif
-+#if !defined __SSSE3__
-+ abort ();
-+#endif
-+#if !defined __SSE4_1__
-+ abort ();
-+#endif
-+#if !defined __SSE4_2__
-+ abort ();
-+#endif
-+#if !defined __SSE4A__
-+ abort ();
-+#endif
-+#if !defined __SSE5__
-+ abort ();
-+#endif
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.target/i386/isa-13.c
-===================================================================
---- gcc/testsuite/gcc.target/i386/isa-13.c (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/gcc.target/i386/isa-13.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,34 @@
-+/* { dg-do run } */
-+/* { dg-options "-march=x86-64 -msse5 -mno-sse2" } */
++#define __as __memx
+
++#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);
+
-+int
-+main ()
++typedef struct T
+{
-+#if !defined __SSE__
-+ abort ();
-+#endif
-+#if defined __SSE2__
-+ abort ();
-+#endif
-+#if defined __SSE3__
-+ abort ();
-+#endif
-+#if defined __SSSE3__
-+ abort ();
-+#endif
-+#if defined __SSE4_1__
-+ abort ();
-+#endif
-+#if defined __SSE4_2__
-+ abort ();
-+#endif
-+#if defined __SSE4A__
-+ abort ();
-+#endif
-+#if defined __SSE5__
-+ abort ();
-+#endif
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.target/i386/isa-3.c
-===================================================================
---- gcc/testsuite/gcc.target/i386/isa-3.c (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/gcc.target/i386/isa-3.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,34 @@
-+/* { dg-do run } */
-+/* { dg-options "-march=x86-64 -msse4 -msse5 -msse4a" } */
++ char val;
++ const __as struct T *l, *r;
++} tree;
+
-+extern void abort (void);
++/*
++ abcd
++ / \
++ ab cd
++ / \ / \
++ a b c d
++*/
+
-+int
-+main ()
++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 };
++
++const __as tree ab = { 'A', &a, &b };
++const __as tree cd = { 'C', &c, &d };
++
++const __as tree abcd = { '*', &ab, &cd };
++
++static void
++test1 (void)
+{
-+#if !defined __SSE__
-+ abort ();
-+#endif
-+#if !defined __SSE2__
-+ abort ();
-+#endif
-+#if !defined __SSE3__
-+ abort ();
-+#endif
-+#if !defined __SSSE3__
-+ abort ();
-+#endif
-+#if !defined __SSE4_1__
-+ abort ();
-+#endif
-+#if !defined __SSE4_2__
-+ abort ();
-+#endif
-+#if !defined __SSE4A__
-+ abort ();
-+#endif
-+#if !defined __SSE5__
-+ abort ();
-+#endif
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.target/i386/isa-14.c
-===================================================================
---- gcc/testsuite/gcc.target/i386/isa-14.c (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/gcc.target/i386/isa-14.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,34 @@
-+/* { dg-do run } */
-+/* { dg-options "-march=x86-64 -msse5 -mno-sse" } */
++ if (abcd.val != '*')
++ abort();
+
-+extern void abort (void);
++ if (abcd.l->val != 'A')
++ abort();
++ if (abcd.r->val != 'C')
++ abort();
+
-+int
-+main ()
++ 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 void
++test2 (const __as tree *t)
+{
-+#if defined __SSE__
-+ abort ();
-+#endif
-+#if defined __SSE2__
-+ abort ();
-+#endif
-+#if defined __SSE3__
-+ abort ();
-+#endif
-+#if defined __SSSE3__
-+ abort ();
-+#endif
-+#if defined __SSE4_1__
-+ abort ();
-+#endif
-+#if defined __SSE4_2__
-+ abort ();
-+#endif
-+#if defined __SSE4A__
-+ abort ();
-+#endif
-+#if defined __SSE5__
-+ abort ();
-+#endif
-+ return 0;
++ 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();
+}
-Index: gcc/testsuite/gcc.target/i386/isa-4.c
-===================================================================
---- gcc/testsuite/gcc.target/i386/isa-4.c (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/gcc.target/i386/isa-4.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,34 @@
-+/* { dg-do run } */
-+/* { dg-options "-march=core2 -msse5 -mno-sse4" } */
+
-+extern void abort (void);
++static void
++test3 (const __as tree *pt)
++{
++ tree t = *pt;
++
++ if (t.val != '*')
++ abort();
+
-+int
-+main ()
++ 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)
+{
-+#if !defined __SSE__
-+ abort ();
-+#endif
-+#if !defined __SSE2__
-+ abort ();
-+#endif
-+#if !defined __SSE3__
-+ abort ();
-+#endif
-+#if !defined __SSSE3__
-+ abort ();
-+#endif
-+#if defined __SSE4_1__
-+ abort ();
-+#endif
-+#if defined __SSE4_2__
-+ abort ();
-+#endif
-+#if !defined __SSE4A__
-+ abort ();
-+#endif
-+#if !defined __SSE5__
-+ abort ();
-+#endif
++ 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.target/i386/isa-5.c
+Index: gcc/testsuite/gcc.target/avr/torture/addr-space-1-g.c
===================================================================
---- gcc/testsuite/gcc.target/i386/isa-5.c (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/gcc.target/i386/isa-5.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,34 @@
+--- 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 } */
-+/* { dg-options "-march=core2 -msse4a -mno-sse4" } */
+
-+extern void abort (void);
++#define __as
+
-+int
-+main ()
-+{
-+#if !defined __SSE__
-+ abort ();
-+#endif
-+#if !defined __SSE2__
-+ abort ();
-+#endif
-+#if !defined __SSE3__
-+ abort ();
-+#endif
-+#if !defined __SSSE3__
-+ abort ();
-+#endif
-+#if defined __SSE4_1__
-+ abort ();
-+#endif
-+#if defined __SSE4_2__
-+ abort ();
-+#endif
-+#if !defined __SSE4A__
-+ abort ();
-+#endif
-+#if defined __SSE5__
-+ abort ();
-+#endif
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.target/i386/pr35540.c
++#include "addr-space-1.h"
+Index: gcc/testsuite/gcc.target/avr/torture/addr-space-2-g.c
===================================================================
---- gcc/testsuite/gcc.target/i386/pr35540.c (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/gcc.target/i386/pr35540.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,45 @@
+--- 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 "-O2" } */
+
-+extern void abort (void);
++#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
++#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" } */
++
++typedef int V __attribute__((vector_size (sizeof (int) * 4)));
+
-+int __attribute__ ((noinline))
-+test (unsigned int *a, int b)
++void
++f1 (V *p)
+{
-+ return b ? 1 : __builtin_parity (*a);
++ V mask = { 1, 2, 3, 0 };
++ *p = __builtin_shuffle (*p, mask);
+}
+
-+int __attribute__ ((noinline))
-+testl (unsigned long *a, int b)
++void
++f2 (V *p, V *q)
+{
-+ return b ? 1 : __builtin_parityl (*a);
++ V mask = { 1, 2, 3, 0 };
++ *p = __builtin_shuffle (*p, *q, mask);
+}
+
-+int __attribute__ ((noinline))
-+testll (unsigned long long *a, int b)
++void
++f3 (V *p, V *mask)
+{
-+ return b ? 1 : __builtin_parityll (*a);
++ V a = { 1, 2, 3, 0 };
++ *p = __builtin_shuffle (a, *mask);
+}
+
-+int
-+main ()
++void
++f4 (V *p, V *mask)
+{
-+ unsigned int a = 0;
-+ unsigned long al;
-+ unsigned long long all;
++ 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_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>
+
-+ a = 0x12345670;
-+ if (test (&a, 0))
-+ abort ();
++ PR c++/52487
++ * g++.dg/cpp0x/lambda/lambda-ice7.C: New.
+
-+ al = 0x12345670ul;
-+ if (testl (&al, 0))
-+ abort();
++2012-03-22 Tobias Burnus <burnus@net-b.de>
+
-+#if 1
-+ all = 0x12345678abcdef0ull;
-+ if (testll (&all, 0))
-+ abort ();
-+#endif
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.target/i386/isa-6.c
-===================================================================
---- gcc/testsuite/gcc.target/i386/isa-6.c (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/gcc.target/i386/isa-6.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,34 @@
-+/* { dg-do run } */
-+/* { dg-options "-march=amdfam10 -mno-sse4" } */
++ PR fortran/52452
++ * gfortran.dg/intrinsic_8.f90: New.
+
-+extern void abort (void);
++2012-03-22 Jakub Jelinek <jakub@redhat.com>
+
-+int
-+main ()
-+{
-+#if !defined __SSE__
-+ abort ();
-+#endif
-+#if !defined __SSE2__
-+ abort ();
-+#endif
-+#if !defined __SSE3__
-+ abort ();
-+#endif
-+#if defined __SSSE3__
-+ abort ();
-+#endif
-+#if defined __SSE4_1__
-+ abort ();
-+#endif
-+#if defined __SSE4_2__
-+ abort ();
-+#endif
-+#if !defined __SSE4A__
-+ abort ();
-+#endif
-+#if defined __SSE5__
-+ abort ();
-+#endif
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.target/i386/isa-7.c
++ PR c++/52671
++ * g++.dg/ext/attrib44.C: New test.
++
++2012-03-22 Jason Merrill <jason@redhat.com>
++
++ * g++.dg/torture/pr52582.C: New.
++
++2012-03-22 Georg-Johann Lay <avr@gjlay.de>
++
++ Backport from 2012-03-20 mainline r185583.
++
++ * gcc.target/avr/progmem.h (pgm_read_char): Define depending on
++ __AVR_HAVE_LPMX__
++
++ Backport from 2012-03-20 mainline r185570.
++
++ 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.
++
++ Backport from 2012-03-12 mainline r185255.
++
++ 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.
++
++2012-03-22 Jakub Jelinek <jakub@redhat.com>
++
++ Backported from mainline
++ 2012-03-14 Jakub Jelinek <jakub@redhat.com>
++
++ PR c++/52521
++ * g++.dg/cpp0x/udlit-args2.C: New test.
++
++ 2012-03-13 Jakub Jelinek <jakub@redhat.com>
++
++ PR c/52577
++ * gcc.dg/Wunused-var-3.c: New test.
++
+ 2012-03-22 Release Manager
+
+ * GCC 4.7.0 released.
+Index: gcc/testsuite/g++.dg/ext/attrib44.C
===================================================================
---- gcc/testsuite/gcc.target/i386/isa-7.c (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/gcc.target/i386/isa-7.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,34 @@
-+/* { dg-do run } */
-+/* { dg-options "-march=amdfam10 -msse5 -mno-sse4" } */
+--- 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" }
+
-+extern void abort (void);
++struct A; // { dg-error "forward declaration" }
+
-+int
-+main ()
++void foo(A& a)
+{
-+#if !defined __SSE__
-+ abort ();
-+#endif
-+#if !defined __SSE2__
-+ abort ();
-+#endif
-+#if !defined __SSE3__
-+ abort ();
-+#endif
-+#if defined __SSSE3__
-+ abort ();
-+#endif
-+#if defined __SSE4_1__
-+ abort ();
-+#endif
-+#if defined __SSE4_2__
-+ abort ();
-+#endif
-+#if !defined __SSE4A__
-+ abort ();
-+#endif
-+#if !defined __SSE5__
-+ abort ();
-+#endif
-+ return 0;
++ [=](){a;}; // { dg-error "invalid use of incomplete type" }
+}
-Index: gcc/testsuite/gcc.target/i386/isa-10.c
+Index: gcc/testsuite/g++.dg/cpp0x/udlit-args2.C
===================================================================
---- gcc/testsuite/gcc.target/i386/isa-10.c (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/gcc.target/i386/isa-10.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,34 @@
-+/* { dg-do run } */
-+/* { dg-options "-march=x86-64 -msse5 -mno-sse4" } */
+--- 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 }
+
-+extern void abort (void);
++#include <cstddef>
+
-+int
-+main ()
++int operator "" _a (const char *);
++int operator "" _a (const char *, std::size_t);
++int a = 123_a;
++int a2 = "abc"_a;
++
++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
++
++inline void *operator new (__SIZE_TYPE__, void *p) throw ()
+{
-+#if !defined __SSE__
-+ abort ();
-+#endif
-+#if !defined __SSE2__
-+ abort ();
-+#endif
-+#if !defined __SSE3__
-+ abort ();
-+#endif
-+#if defined __SSSE3__
-+ abort ();
-+#endif
-+#if defined __SSE4_1__
-+ abort ();
-+#endif
-+#if defined __SSE4_2__
-+ abort ();
-+#endif
-+#if !defined __SSE4A__
-+ abort ();
-+#endif
-+#if !defined __SSE5__
-+ abort ();
-+#endif
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.target/i386/isa-8.c
-===================================================================
---- gcc/testsuite/gcc.target/i386/isa-8.c (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/gcc.target/i386/isa-8.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,34 @@
-+/* { dg-do run } */
-+/* { dg-options "-march=amdfam10 -msse5 -mno-sse4a" } */
-+
-+extern void abort (void);
-+
-+int
-+main ()
-+{
-+#if !defined __SSE__
-+ abort ();
-+#endif
-+#if !defined __SSE2__
-+ abort ();
-+#endif
-+#if !defined __SSE3__
-+ abort ();
-+#endif
-+#if defined __SSSE3__
-+ abort ();
-+#endif
-+#if defined __SSE4_1__
-+ abort ();
-+#endif
-+#if defined __SSE4_2__
-+ abort ();
-+#endif
-+#if defined __SSE4A__
-+ abort ();
-+#endif
-+#if defined __SSE5__
-+ abort ();
-+#endif
-+ return 0;
-+}
-Index: gcc/testsuite/gcc.target/i386/isa-11.c
-===================================================================
---- gcc/testsuite/gcc.target/i386/isa-11.c (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/gcc.target/i386/isa-11.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,34 @@
-+/* { dg-do run } */
-+/* { dg-options "-march=x86-64 -msse5 -mno-ssse3" } */
-+
-+extern void abort (void);
-+
-+int
-+main ()
-+{
-+#if !defined __SSE__
-+ abort ();
-+#endif
-+#if !defined __SSE2__
-+ abort ();
-+#endif
-+#if !defined __SSE3__
-+ abort ();
-+#endif
-+#if defined __SSSE3__
-+ abort ();
-+#endif
-+#if defined __SSE4_1__
-+ abort ();
-+#endif
-+#if defined __SSE4_2__
-+ abort ();
-+#endif
-+#if !defined __SSE4A__
-+ abort ();
-+#endif
-+#if !defined __SSE5__
-+ abort ();
-+#endif
-+ return 0;
-+}
-Index: gcc/testsuite/gnat.dg/frame_overflow.adb
-===================================================================
---- gcc/testsuite/gnat.dg/frame_overflow.adb (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/testsuite/gnat.dg/frame_overflow.adb (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -1,15 +1,17 @@
- -- { dg-do compile }
-
-+with System;
-+
- procedure frame_overflow is
-
-- type Bitpos_Range_T is new Positive;
-+ type Bitpos_Range_T is range 1..2**(System.Word_Size-1)-1;
- type Bitmap_Array_T is array (Bitpos_Range_T) of Boolean;
-
- type Bitmap_T is record
- Bits : Bitmap_Array_T := (others => False);
- end record;
-
-- function -- { dg-error "too large" "" }
-+ function -- { dg-error "too large" }
- Set_In (Bitmap : Bitmap_T; Bitpos : Bitpos_Range_T) return Bitmap_T
- is
- Result: Bitmap_T := Bitmap;
-@@ -18,7 +20,7 @@
- return Result;
- end;
-
-- function -- { dg-error "too large" "" }
-+ function -- { dg-error "too large" }
- Negate (Bitmap : Bitmap_T) return Bitmap_T is
- Result: Bitmap_T;
- begin
-Index: gcc/testsuite/gcc.dg/gomp/pr35439.c
-===================================================================
---- gcc/testsuite/gcc.dg/gomp/pr35439.c (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/gcc.dg/gomp/pr35439.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,6 @@
-+/* PR c/35439 */
-+/* { dg-do compile } */
-+/* { dg-options "-fopenmp" } */
-+
-+void x[1]; /* { dg-error "array of voids" } */
-+#pragma omp threadprivate(x)
-Index: gcc/testsuite/gcc.dg/gomp/pr35244.c
-===================================================================
---- gcc/testsuite/gcc.dg/gomp/pr35244.c (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/gcc.dg/gomp/pr35244.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,20 @@
-+/* PR c++/35244 */
-+/* { dg-do compile } */
-+/* { dg-require-effective-target tls_native } */
-+/* { dg-options "-fopenmp" } */
-+
-+int v1;
-+typedef struct A A;
-+typedef int i;
-+#pragma omp threadprivate (i) /* { dg-error "expected identifier before" } */
-+#pragma omp threadprivate (A) /* { dg-error "expected identifier before" } */
-+#pragma omp threadprivate (v1)
-+
-+void foo ()
-+{
-+ static int v4;
-+ {
-+ static int v5;
-+#pragma omp threadprivate (v4, v5)
-+ }
-+}
-Index: gcc/testsuite/gcc.dg/gomp/pr35438.c
-===================================================================
---- gcc/testsuite/gcc.dg/gomp/pr35438.c (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/gcc.dg/gomp/pr35438.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,6 @@
-+/* PR c/35438 */
-+/* { dg-do compile } */
-+/* { dg-options "-fopenmp" } */
-+
-+void foo ();
-+#pragma omp threadprivate(foo) /* { dg-error "is not a variable" } */
-Index: gcc/testsuite/gcc.dg/gomp/pr34964.c
-===================================================================
---- gcc/testsuite/gcc.dg/gomp/pr34964.c (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/gcc.dg/gomp/pr34964.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,6 @@
-+/* PR c++/34964 */
-+/* { dg-do compile } */
-+/* { dg-options "-fopenmp" } */
-+
-+char x[] = 0; /* { dg-error "invalid initializer" } */
-+#pragma omp threadprivate (x)
-Index: gcc/testsuite/ChangeLog
-===================================================================
---- gcc/testsuite/ChangeLog (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/testsuite/ChangeLog (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -1,3 +1,123 @@
-+2008-03-12 Uros Bizjak <ubizjak@gmail.com>
-+
-+ PR target/35540
-+ * gcc.target/i386/pr35540.c: New test.
-+
-+2008-03-11 Uros Bizjak <ubizjak@gmail.com>
-+
-+ * g++.dg/inherit/override-attribs.C: Require ilp32 x86 target.
-+
-+2008-03-11 Uros Bizjak <ubizjak@gmail.com>
-+
-+ PR middle-end/35526
-+ * g++.dg/torture/pr35526.C: New test.
-+
-+2008-03-10 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR c++/35328
-+ * g++.dg/gomp/pr35328.C: New test.
-+
-+ PR c++/35337
-+ * g++.dg/gomp/pr35337.C: New test.
-+
-+ PR c/35438
-+ PR c/35439
-+ * gcc.dg/gomp/pr35438.c: New test.
-+ * gcc.dg/gomp/pr35439.c: New test.
-+
-+ PR middle-end/35099
-+ * g++.dg/gomp/pr35099.C: New test.
-+
-+2008-03-10 Uros Bizjak <ubizjak@gmail.com>
-+
-+ Backport from mainline:
-+ 2008-03-04 Uros Bizjak <ubizjak@gmail.com>
-+
-+ PR middle-end/35456
-+ * gcc.c-torture/execute/pr35456.c: New test.
-+
-+2008-03-09 Eric Botcazou <ebotcazou@adacore.com>
-+
-+ * gnat.dg/frame_overflow.adb: Improve portability.
-+
-+2008-03-08 H.J. Lu <hongjiu.lu@intel.com>
-+
-+ Backport from mainline:
-+ 2008-03-08 H.J. Lu <hongjiu.lu@intel.com>
-+
-+ PR target/35350
-+ * gcc.target/i386/isa-1.c: Add -march=x86-64.
-+ * gcc.target/i386/isa-2.c: Likewise.
-+ * gcc.target/i386/isa-3.c: Likewise.
-+ * gcc.target/i386/isa-10.c: Likewise.
-+ * gcc.target/i386/isa-11.c: Likewise.
-+ * gcc.target/i386/isa-12.c: Likewise.
-+ * gcc.target/i386/isa-13.c: Likewise.
-+ * gcc.target/i386/isa-14.c: Likewise.
-+
-+2008-03-07 Richard Guenther <rguenther@suse.de>
-+
-+ Backport from mainline:
-+ 2008-03-05 Richard Guenther <rguenther@suse.de>
-+
-+ PR tree-optimization/35472
-+ * gcc.c-torture/execute/pr35472.c: New testcase.
-+
-+2008-03-06 H.J. Lu <hongjiu.lu@intel.com>
-+
-+ Backport from mainline:
-+ 2008-02-18 H.J. Lu <hongjiu.lu@intel.com>
-+
-+ PR target/35189
-+ * gcc.target/i386/isa-1.c: New.
-+ * gcc.target/i386/isa-2.c: Likewise.
-+ * gcc.target/i386/isa-3.c: Likewise.
-+ * gcc.target/i386/isa-4.c: Likewise.
-+ * gcc.target/i386/isa-5.c: Likewise.
-+ * gcc.target/i386/isa-6.c: Likewise.
-+ * gcc.target/i386/isa-7.c: Likewise.
-+ * gcc.target/i386/isa-8.c: Likewise.
-+ * gcc.target/i386/isa-9.c: Likewise.
-+ * gcc.target/i386/isa-10.c: Likewise.
-+ * gcc.target/i386/isa-11.c: Likewise.
-+ * gcc.target/i386/isa-12.c: Likewise.
-+ * gcc.target/i386/isa-13.c: Likewise.
-+ * gcc.target/i386/isa-14.c: Likewise.
-+
-+2008-03-06 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR c++/35028
-+ * g++.dg/gomp/pr35028.C: New test.
-+
-+ PR c++/34964
-+ PR c++/35244
-+ * gcc.dg/gomp/pr34964.c: New test.
-+ * g++.dg/gomp/pr34964.C: New test.
-+ * gcc.dg/gomp/pr35244.c: New test.
-+ * g++.dg/gomp/pr35244.C: New test.
-+
-+ PR c++/35078
-+ * g++.dg/gomp/pr35078.C: New test.
-+
-+2008-03-06 Daniel Jacobowitz <dan@codesourcery.com>
-+
-+ * gcc.c-torture/execute/20080222-1.c: New test.
-+
-+2008-03-06 Paolo Carlini <pcarlini@suse.de>
-+
-+ PR c++/35323
-+ * g++.dg/lookup/crash7.C: New.
-+
-+2008-03-06 Paolo Carlini <pcarlini@suse.de>
-+
-+ PR c++/35333
-+ * g++.dg/other/error26.C: New.
-+
-+2008-03-06 Paolo Carlini <pcarlini@suse.de>
-+
-+ PR c++/35338
-+ * g++.dg/other/error25.C: New.
-+
- 2008-03-05 Release Manager
-
- * GCC 4.3.0 released.
-Index: gcc/testsuite/g++.dg/other/error25.C
-===================================================================
---- gcc/testsuite/g++.dg/other/error25.C (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/g++.dg/other/error25.C (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,5 @@
-+// PR c++/35338
-+// { dg-options "" }
-+
-+int i = 0r; // { dg-error "unnamed-fixed" }
-+bool b = !0r; // { dg-error "0.0|argument" }
-Index: gcc/testsuite/g++.dg/other/error26.C
-===================================================================
---- gcc/testsuite/g++.dg/other/error26.C (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/g++.dg/other/error26.C (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,6 @@
-+// PR c++/35333
-+
-+void foo(__complex__ double x)
-+{
-+ __builtin_conj(x)(); // { dg-error "~x" }
-+}
-Index: gcc/testsuite/g++.dg/lookup/crash7.C
-===================================================================
---- gcc/testsuite/g++.dg/lookup/crash7.C (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/g++.dg/lookup/crash7.C (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,9 @@
-+// PR c++/35323
-+// { dg-options "" }
-+
-+void foo(int);
-+
-+void bar()
-+{
-+ foo(1r); // { dg-error "unnamed-fixed" }
-+}
-Index: gcc/testsuite/g++.dg/gomp/pr34964.C
-===================================================================
---- gcc/testsuite/g++.dg/gomp/pr34964.C (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/g++.dg/gomp/pr34964.C (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,6 @@
-+// PR c++/34964
-+// { dg-do compile }
-+// { dg-options "-fopenmp" }
-+
-+char x[] = 0; // { dg-error "initializer fails to determine size" }
-+#pragma omp threadprivate (x)
-Index: gcc/testsuite/g++.dg/gomp/pr35328.C
-===================================================================
---- gcc/testsuite/g++.dg/gomp/pr35328.C (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/g++.dg/gomp/pr35328.C (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,31 @@
-+// PR c++/35328
-+// { dg-do compile }
-+// { dg-options "-fopenmp" }
-+
-+struct A
-+{
-+ ~A ()(); // { dg-error "declared as function returning a function" }
-+};
-+struct B
-+{
-+ B ()(); // { dg-error "declared as function returning a function" }
-+};
-+struct C
-+{
-+ C ();
-+ C (const C &)(); // { dg-error "declared as function returning a function" }
-+};
-+
-+void
-+foo ()
-+{
-+ A a;
-+ B b;
-+ C c;
-+ #pragma omp parallel firstprivate (a)
-+ ;
-+ #pragma omp parallel private (b)
-+ ;
-+ #pragma omp parallel firstprivate (c)
-+ ;
-+}
-Index: gcc/testsuite/g++.dg/gomp/pr35337.C
-===================================================================
---- gcc/testsuite/g++.dg/gomp/pr35337.C (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/g++.dg/gomp/pr35337.C (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,20 @@
-+// PR c++/35337
-+// { dg-do compile }
-+// { dg-options "-fopenmp" }
-+
-+struct A { };
-+
-+void
-+foo ()
-+{
-+#pragma omp parallel firstprivate(A) // { dg-error "struct A\[^\n\]*is not a variable" }
-+ ;
-+}
-+
-+void
-+bar ()
-+{
-+#pragma omp for lastprivate(A) // { dg-error "struct A\[^\n\]*is not a variable" }
-+ for (int i = 0; i < 10; i++)
-+ ;
++ return p;
+}
-Index: gcc/testsuite/g++.dg/gomp/pr35244.C
-===================================================================
---- gcc/testsuite/g++.dg/gomp/pr35244.C (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/g++.dg/gomp/pr35244.C (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,30 @@
-+// PR c++/35244
-+// { dg-do compile }
-+// { dg-require-effective-target tls_native }
-+// { dg-options "-fopenmp" }
-+
-+int v1;
-+namespace N1
-+{
-+ int v2;
-+}
-+namespace N2
-+{
-+ int v3;
-+}
-+using N1::v2;
-+using namespace N2;
-+struct A;
-+typedef int i;
-+#pragma omp threadprivate (i) // { dg-error "is not file, namespace or block scope variable" }
-+#pragma omp threadprivate (A) // { dg-error "is not file, namespace or block scope variable" }
-+#pragma omp threadprivate (v1, v2, v3)
-+
-+void foo ()
-+{
-+ static int v4;
-+ {
-+ static int v5;
-+#pragma omp threadprivate (v4, v5)
-+ }
-+}
-Index: gcc/testsuite/g++.dg/gomp/pr35078.C
-===================================================================
---- gcc/testsuite/g++.dg/gomp/pr35078.C (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/g++.dg/gomp/pr35078.C (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,20 @@
-+// PR c++/35078
-+// { dg-do compile }
-+// { dg-options "-fopenmp" }
-+
-+template<int> void
-+foo ()
-+{
-+#pragma omp parallel for
-+ for (int& i = 0; i < 10; ++i) // { dg-error "invalid type for iteration variable" }
-+ ;
-+}
-+
-+void
-+bar ()
-+{
-+ int j = 0;
-+#pragma omp parallel for
-+ for (int& i = j; i < 10; ++i) // { dg-error "invalid type for iteration variable" }
-+ ;
-+}
-Index: gcc/testsuite/g++.dg/gomp/pr35099.C
-===================================================================
---- gcc/testsuite/g++.dg/gomp/pr35099.C (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/g++.dg/gomp/pr35099.C (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,39 @@
-+// PR middle-end/35099
-+// { dg-do compile }
-+// { dg-options "-O2 -fopenmp" }
-+
-+struct A
-+{
-+ ~A () throw ();
-+ void foo ();
-+};
-+
+struct B
+{
-+ B () { A ().foo (); }
-+};
-+
-+void
-+bar ()
-+{
-+#pragma omp parallel
-+ {
-+ #pragma omp single
-+ B ();
-+ #pragma omp for
-+ for (int i = 0; i < 2; ++i)
-+ B ();
-+ }
-+}
-+
-+void
-+baz ()
-+{
-+#pragma omp parallel
-+ {
-+ #pragma omp single
-+ B ();
-+ #pragma omp single
-+ B ();
-+ }
-+}
-Index: gcc/testsuite/g++.dg/gomp/pr35028.C
-===================================================================
---- gcc/testsuite/g++.dg/gomp/pr35028.C (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/g++.dg/gomp/pr35028.C (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,19 @@
-+// PR c++/35028
-+// { dg-do compile }
-+// { dg-options "-fopenmp" }
-+
-+struct A
-+{
-+ A ();
-+ A (const A &, ...);
-+ ~A ();
-+ A operator++ (int);
++ virtual ~B ();
++ B ();
+};
-+
-+void
-+foo ()
-+{
-+ A a;
-+ #pragma omp parallel firstprivate (a)
-+ a++;
-+}
-Index: gcc/testsuite/g++.dg/inherit/override-attribs.C
-===================================================================
---- gcc/testsuite/g++.dg/inherit/override-attribs.C (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/testsuite/g++.dg/inherit/override-attribs.C (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -1,5 +1,7 @@
- // PR c++/14688
--// { dg-do compile { target i?86-*-* } }
-+// { dg-do compile { target i?86-*-* x86_64-*-* } }
-+// { dg-require-effective-target ilp32 }
-+
- class one
- {
- public:
-Index: gcc/testsuite/g++.dg/torture/pr35526.C
-===================================================================
---- gcc/testsuite/g++.dg/torture/pr35526.C (.../tags/gcc_4_3_0_release) (revision 0)
-+++ gcc/testsuite/g++.dg/torture/pr35526.C (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,18 @@
-+/* { dg-do compile } */
-+
-+extern void *memcpy (void *__dest, __const void *__src, __SIZE_TYPE__ __n);
-+
-+char internal_crash_read_ip[] = { 0xb8 };
-+
-+struct u_internal_crash_read_t
-+{
-+ char ip[sizeof (internal_crash_read_ip)];
-+}
-+u_internal_crash_read;
-+
-+void
-+gSignalHandler (int psignalNr, int pinfo, int pctx)
-+{
-+ memcpy (u_internal_crash_read.ip, internal_crash_read_ip,
-+ sizeof (internal_crash_read_ip));
-+}
-Index: gcc/cp/typeck.c
-===================================================================
---- gcc/cp/typeck.c (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/cp/typeck.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -962,6 +962,8 @@
- if (TREE_CODE (t1) != ARRAY_TYPE
- && TYPE_QUALS (t1) != TYPE_QUALS (t2))
- return false;
-+ if (TYPE_FOR_JAVA (t1) != TYPE_FOR_JAVA (t2))
-+ return false;
-
- /* Allow for two different type nodes which have essentially the same
- definition. Note that we already checked for equality of the type
-@@ -971,9 +973,6 @@
- && TYPE_MAIN_VARIANT (t1) == TYPE_MAIN_VARIANT (t2))
- return true;
-
-- if (TYPE_FOR_JAVA (t1) != TYPE_FOR_JAVA (t2))
-- return false;
--
- /* Compare the types. Break out if they could be the same. */
- switch (TREE_CODE (t1))
- {
-Index: gcc/cp/decl.c
-===================================================================
---- gcc/cp/decl.c (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/cp/decl.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -3164,19 +3164,10 @@
- tree type, decl;
- if (size > 0)
- type = make_signed_type (size);
-- else if (size == -1)
-- { /* "__java_boolean". */
-- if ((TYPE_MODE (boolean_type_node)
-- == smallest_mode_for_size (1, MODE_INT)))
-- type = build_variant_type_copy (boolean_type_node);
-- else
-- /* ppc-darwin has SImode bool, make jboolean a 1-bit
-- integer type without boolean semantics there. */
-- type = make_unsigned_type (1);
-- }
- else if (size > -32)
-- { /* "__java_char". */
-+ { /* "__java_char" or ""__java_boolean". */
- type = make_unsigned_type (-size);
-+ /*if (size == -1) TREE_SET_CODE (type, BOOLEAN_TYPE);*/
- }
- else
- { /* "__java_float" or ""__java_double". */
-Index: gcc/cp/error.c
-===================================================================
---- gcc/cp/error.c (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/cp/error.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -326,6 +326,7 @@
- case BOOLEAN_TYPE:
- case COMPLEX_TYPE:
- case VECTOR_TYPE:
-+ case FIXED_POINT_TYPE:
- pp_type_specifier_seq (cxx_pp, t);
- break;
-
-@@ -2079,7 +2080,9 @@
- case VEC_DELETE_EXPR:
- case MODOP_EXPR:
- case ABS_EXPR:
-+ case CONJ_EXPR:
- case VECTOR_CST:
-+ case FIXED_CST:
- pp_expression (cxx_pp, t);
- break;
-
-Index: gcc/cp/ChangeLog
-===================================================================
---- gcc/cp/ChangeLog (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/cp/ChangeLog (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -1,3 +1,63 @@
-+2008-03-12 Richard Guenther <rguenther@suse.de>
-+
-+ PR c++/35469
-+ Revert:
-+ 2008-02-04 Richard Guenther <rguenther@suse.de>
-+
-+ PR java/35035
-+ * decl.c (record_builtin_java_type): Make jboolean a
-+ integer type again where its mode doesn't match that of bool.
-+
-+ 2008-01-25 Richard Guenther <rguenther@suse.de>
-+
-+ PR c++/33887
-+ * decl.c (record_builtin_java_type): Make __java_boolean
-+ a variant of bool.
-+ * typeck.c (structural_comptypes): Move TYPE_FOR_JAVA check
-+ after TYPE_MAIN_VARIANT check.
-+
-+2008-03-10 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR c++/35328
-+ * semantics.c (finish_omp_clauses): Look through NOP_EXPR even
-+ if errorcount.
-+
-+ PR c++/35337
-+ * semantics.c (finish_omp_clauses): Use %qD instead of %qE for
-+ DECL_P in not a variable and appears more than once error messages.
-+
-+2008-03-06 Jakub Jelinek <jakub@redhat.com>
-+
-+ PR c++/35028
-+ * cp-gimplify.c (cxx_omp_clause_apply_fn): Handle vararg copy ctors.
-+
-+ PR c++/34964
-+ PR c++/35244
-+ * semantics.c (finish_omp_threadprivate): Do nothing for error_operand_p
-+ vars. Afterwards ensure v is VAR_DECL.
-+
-+ PR c++/35078
-+ * parser.c (cp_parser_omp_for_loop): If DECL has REFERENCE_TYPE, don't
-+ call cp_finish_decl.
-+ * semantics.c (finish_omp_for): Fail if DECL doesn't have integral type
-+ early.
-+
-+2008-03-06 Paolo Carlini <pcarlini@suse.de>
-+
-+ PR c++/35323
-+ * name-lookup.c (arg_assoc_type): Handle FIXED_POINT_TYPE.
-+
-+2008-03-06 Paolo Carlini <pcarlini@suse.de>
-+
-+ PR c++/35333
-+ * error.c (dump_expr): Handle CONJ_EXPR.
-+
-+2008-03-06 Paolo Carlini <pcarlini@suse.de>
-+
-+ PR c++/35338
-+ * error.c (dump_type): Handle FIXED_POINT_TYPE.
-+ (dump_expr): Handle FIXED_CST.
-+
- 2008-03-05 Release Manager
-
- * GCC 4.3.0 released.
-Index: gcc/cp/cp-gimplify.c
-===================================================================
---- gcc/cp/cp-gimplify.c (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/cp/cp-gimplify.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -844,7 +844,8 @@
- if (arg2)
- argarray[i++] = p2;
- /* Handle default arguments. */
-- for (parm = defparm; parm != void_list_node; parm = TREE_CHAIN (parm), i++)
-+ for (parm = defparm; parm && parm != void_list_node;
-+ parm = TREE_CHAIN (parm), i++)
- argarray[i] = convert_default_arg (TREE_VALUE (parm),
- TREE_PURPOSE (parm), fn, i);
- t = build_call_a (fn, i, argarray);
-@@ -875,7 +876,7 @@
- if (arg2)
- argarray[i++] = build_fold_addr_expr (arg2);
- /* Handle default arguments. */
-- for (parm = defparm; parm != void_list_node;
-+ for (parm = defparm; parm && parm != void_list_node;
- parm = TREE_CHAIN (parm), i++)
- argarray[i] = convert_default_arg (TREE_VALUE (parm),
- TREE_PURPOSE (parm),
-Index: gcc/cp/semantics.c
-===================================================================
---- gcc/cp/semantics.c (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/cp/semantics.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -3400,13 +3400,16 @@
- {
- if (processing_template_decl)
- break;
-- error ("%qE is not a variable in clause %<firstprivate%>", t);
-+ if (DECL_P (t))
-+ error ("%qD is not a variable in clause %<firstprivate%>", t);
-+ else
-+ error ("%qE is not a variable in clause %<firstprivate%>", t);
- remove = true;
- }
- else if (bitmap_bit_p (&generic_head, DECL_UID (t))
- || bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
- {
-- error ("%qE appears more than once in data clauses", t);
-+ error ("%qD appears more than once in data clauses", t);
- remove = true;
- }
- else
-@@ -3419,13 +3422,16 @@
- {
- if (processing_template_decl)
- break;
-- error ("%qE is not a variable in clause %<lastprivate%>", t);
-+ if (DECL_P (t))
-+ error ("%qD is not a variable in clause %<lastprivate%>", t);
-+ else
-+ error ("%qE is not a variable in clause %<lastprivate%>", t);
- remove = true;
- }
- else if (bitmap_bit_p (&generic_head, DECL_UID (t))
- || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
- {
-- error ("%qE appears more than once in data clauses", t);
-+ error ("%qD appears more than once in data clauses", t);
- remove = true;
- }
- else
-@@ -3661,7 +3667,7 @@
- complete_ctor_identifier,
- t, inner_type, LOOKUP_NORMAL);
-
-- if (targetm.cxx.cdtor_returns_this ())
-+ if (targetm.cxx.cdtor_returns_this () || errorcount)
- /* Because constructors and destructors return this,
- the call will have been cast to "void". Remove the
- cast here. We would like to use STRIP_NOPS, but it
-@@ -3683,7 +3689,7 @@
- t = build_special_member_call (t, complete_dtor_identifier,
- NULL, inner_type, LOOKUP_NORMAL);
-
-- if (targetm.cxx.cdtor_returns_this ())
-+ if (targetm.cxx.cdtor_returns_this () || errorcount)
- /* Because constructors and destructors return this,
- the call will have been cast to "void". Remove the
- cast here. We would like to use STRIP_NOPS, but it
-@@ -3742,9 +3748,14 @@
- {
- tree v = TREE_PURPOSE (t);
-
-+ if (error_operand_p (v))
-+ ;
-+ else if (TREE_CODE (v) != VAR_DECL)
-+ error ("%<threadprivate%> %qD is not file, namespace "
-+ "or block scope variable", v);
- /* If V had already been marked threadprivate, it doesn't matter
- whether it had been used prior to this point. */
-- if (TREE_USED (v)
-+ else if (TREE_USED (v)
- && (DECL_LANG_SPECIFIC (v) == NULL
- || !CP_DECL_THREADPRIVATE_P (v)))
- error ("%qE declared %<threadprivate%> after first use", v);
-@@ -3903,6 +3914,16 @@
- return NULL;
- }
-
-+ if (!INTEGRAL_TYPE_P (TREE_TYPE (decl)))
-+ {
-+ location_t elocus = locus;
-+
-+ if (EXPR_HAS_LOCATION (init))
-+ elocus = EXPR_LOCATION (init);
-+ error ("%Hinvalid type for iteration variable %qE", &elocus, decl);
-+ return NULL;
-+ }
-+
- if (pre_body == NULL || IS_EMPTY_STMT (pre_body))
- pre_body = NULL;
- else if (! processing_template_decl)
-Index: gcc/cp/name-lookup.c
-===================================================================
---- gcc/cp/name-lookup.c (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/cp/name-lookup.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -1,5 +1,5 @@
- /* Definitions for C++ name lookup routines.
-- Copyright (C) 2003, 2004, 2005, 2006, 2007
-+ Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008
- Free Software Foundation, Inc.
- Contributed by Gabriel Dos Reis <gdr@integrable-solutions.net>
-
-@@ -4594,6 +4594,7 @@
- case COMPLEX_TYPE:
- case VECTOR_TYPE:
- case BOOLEAN_TYPE:
-+ case FIXED_POINT_TYPE:
- return false;
- case RECORD_TYPE:
- if (TYPE_PTRMEMFUNC_P (type))
-Index: gcc/cp/parser.c
-===================================================================
---- gcc/cp/parser.c (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/cp/parser.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -20074,8 +20074,11 @@
-
- init = cp_parser_assignment_expression (parser, false);
-
-- cp_finish_decl (decl, NULL_TREE, /*init_const_expr_p=*/false,
-- asm_specification, LOOKUP_ONLYCONVERTING);
-+ if (TREE_CODE (TREE_TYPE (decl)) == REFERENCE_TYPE)
-+ init = error_mark_node;
-+ else
-+ cp_finish_decl (decl, NULL_TREE, /*init_const_expr_p=*/false,
-+ asm_specification, LOOKUP_ONLYCONVERTING);
-
- if (pushed_scope)
- pop_scope (pushed_scope);
-Index: gcc/ifcvt.c
-===================================================================
---- gcc/ifcvt.c (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/ifcvt.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -1737,6 +1737,10 @@
- rtx cond, earliest, target, seq, a, b, c;
- int negate;
-
-+ /* Reject modes with signed zeros. */
-+ if (HONOR_SIGNED_ZEROS (GET_MODE (if_info->x)))
-+ return FALSE;
-+
- /* Recognize A and B as constituting an ABS or NABS. The canonical
- form is a branch around the negation, taken when the object is the
- first operand of a comparison against 0 that evaluates to true. */
-Index: gcc/expr.c
-===================================================================
---- gcc/expr.c (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/expr.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -4654,7 +4654,8 @@
- temp = convert_to_mode (GET_MODE (target), temp, unsignedp);
- emit_move_insn (target, temp);
- }
-- else if (GET_MODE (target) == BLKmode)
-+ else if (GET_MODE (target) == BLKmode
-+ || GET_MODE (temp) == BLKmode)
- emit_block_move (target, temp, expr_size (exp),
- (call_param_p
- ? BLOCK_OP_CALL_PARM
-Index: gcc/BASE-VER
-===================================================================
---- gcc/BASE-VER (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/BASE-VER (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -1 +1 @@
--4.3.0
-+4.3.1
-Index: gcc/gimplify.c
-===================================================================
---- gcc/gimplify.c (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/gimplify.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -5464,7 +5464,11 @@
- expr = TREE_OPERAND (expr, 0);
- addr = TREE_OPERAND (addr, 0);
- }
-- return expr == addr;
-+ if (expr == addr)
-+ return true;
-+ return (TREE_CODE (addr) == ADDR_EXPR
-+ && TREE_CODE (expr) == ADDR_EXPR
-+ && TREE_OPERAND (addr, 0) == TREE_OPERAND (expr, 0));
- }
- if (TREE_CODE (addr) == ADDR_EXPR && expr == TREE_OPERAND (addr, 0))
- return true;
-Index: gcc/expmed.c
-===================================================================
---- gcc/expmed.c (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/expmed.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -1339,18 +1339,15 @@
- || (offset * BITS_PER_UNIT % bitsize == 0
- && MEM_ALIGN (op0) % bitsize == 0)))))
- {
-- if (mode1 != GET_MODE (op0))
-+ if (MEM_P (op0))
-+ op0 = adjust_address (op0, mode1, offset);
-+ else if (mode1 != GET_MODE (op0))
- {
-- if (MEM_P (op0))
-- op0 = adjust_address (op0, mode1, offset);
-- else
-- {
-- rtx sub = simplify_gen_subreg (mode1, op0, GET_MODE (op0),
-- byte_offset);
-- if (sub == NULL)
-- goto no_subreg_mode_swap;
-- op0 = sub;
-- }
-+ rtx sub = simplify_gen_subreg (mode1, op0, GET_MODE (op0),
-+ byte_offset);
-+ if (sub == NULL)
-+ goto no_subreg_mode_swap;
-+ op0 = sub;
- }
- if (mode1 != mode)
- return convert_to_mode (tmode, op0, unsignedp);
-Index: gcc/tree-cfg.c
-===================================================================
---- gcc/tree-cfg.c (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/tree-cfg.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -5893,6 +5893,8 @@
- m->base.from = decl;
- m->to = create_artificial_label ();
- LABEL_DECL_UID (m->to) = LABEL_DECL_UID (decl);
-+ if (LABEL_DECL_UID (m->to) >= cfun->last_label_uid)
-+ cfun->last_label_uid = LABEL_DECL_UID (m->to) + 1;
-
- slot = htab_find_slot_with_hash (hash, m, m->hash, INSERT);
- gcc_assert (*slot == NULL);
-Index: gcc/c-parser.c
-===================================================================
---- gcc/c-parser.c (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/c-parser.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -1,6 +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 Free Software Foundation, Inc.
-+ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008
-+ Free Software Foundation, Inc.
-
- Parser actions based on the old Bison parser; structure somewhat
- influenced by and fragments based on the C++ parser.
-@@ -7964,10 +7965,14 @@
-
- /* If V had already been marked threadprivate, it doesn't matter
- whether it had been used prior to this point. */
-- if (TREE_USED (v) && !C_DECL_THREADPRIVATE_P (v))
-+ if (TREE_CODE (v) != VAR_DECL)
-+ error ("%qD is not a variable", v);
-+ else if (TREE_USED (v) && !C_DECL_THREADPRIVATE_P (v))
- error ("%qE declared %<threadprivate%> after first use", v);
- else if (! TREE_STATIC (v) && ! DECL_EXTERNAL (v))
- error ("automatic variable %qE cannot be %<threadprivate%>", v);
-+ else if (TREE_TYPE (v) == error_mark_node)
-+ ;
- else if (! COMPLETE_TYPE_P (TREE_TYPE (v)))
- error ("%<threadprivate%> %qE has incomplete type", v);
- else
-Index: gcc/config/i386/i386.md
-===================================================================
---- gcc/config/i386/i386.md (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/config/i386/i386.md (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -15440,7 +15440,7 @@
-
- (define_expand "paritydi2"
- [(set (match_operand:DI 0 "register_operand" "")
-- (parity:DI (match_operand:DI 1 "nonimmediate_operand" "")))]
-+ (parity:DI (match_operand:DI 1 "register_operand" "")))]
- "! TARGET_POPCNT"
- {
- rtx scratch = gen_reg_rtx (QImode);
-@@ -15468,10 +15468,10 @@
-
- (define_insn_and_split "paritydi2_cmp"
- [(set (reg:CC FLAGS_REG)
-- (parity:CC (match_operand:DI 3 "nonimmediate_operand" "0,m")))
-- (clobber (match_scratch:DI 0 "=r,X"))
-- (clobber (match_scratch:SI 1 "=r,r"))
-- (clobber (match_scratch:HI 2 "=Q,Q"))]
-+ (parity:CC (match_operand:DI 3 "register_operand" "0")))
-+ (clobber (match_scratch:DI 0 "=r"))
-+ (clobber (match_scratch:SI 1 "=&r"))
-+ (clobber (match_scratch:HI 2 "=Q"))]
- "! TARGET_POPCNT"
- "#"
- "&& reload_completed"
-@@ -15487,20 +15487,18 @@
- {
- operands[4] = gen_lowpart (SImode, operands[3]);
-
-- if (MEM_P (operands[3]))
-- emit_move_insn (operands[1], gen_highpart (SImode, operands[3]));
-- else if (! TARGET_64BIT)
-- operands[1] = gen_highpart (SImode, operands[3]);
-- else
-+ if (TARGET_64BIT)
- {
- emit_move_insn (operands[1], gen_lowpart (SImode, operands[3]));
- emit_insn (gen_lshrdi3 (operands[3], operands[3], GEN_INT (32)));
- }
-+ else
-+ operands[1] = gen_highpart (SImode, operands[3]);
- })
-
- (define_expand "paritysi2"
- [(set (match_operand:SI 0 "register_operand" "")
-- (parity:SI (match_operand:SI 1 "nonimmediate_operand" "")))]
-+ (parity:SI (match_operand:SI 1 "register_operand" "")))]
- "! TARGET_POPCNT"
- {
- rtx scratch = gen_reg_rtx (QImode);
-@@ -15519,9 +15517,9 @@
-
- (define_insn_and_split "paritysi2_cmp"
- [(set (reg:CC FLAGS_REG)
-- (parity:CC (match_operand:SI 2 "nonimmediate_operand" "0,m")))
-- (clobber (match_scratch:SI 0 "=r,X"))
-- (clobber (match_scratch:HI 1 "=Q,Q"))]
-+ (parity:CC (match_operand:SI 2 "register_operand" "0")))
-+ (clobber (match_scratch:SI 0 "=r"))
-+ (clobber (match_scratch:HI 1 "=&Q"))]
- "! TARGET_POPCNT"
- "#"
- "&& reload_completed"
-@@ -15536,13 +15534,8 @@
- {
- operands[3] = gen_lowpart (HImode, operands[2]);
-
-- if (MEM_P (operands[2]))
-- emit_move_insn (operands[1], gen_highpart (HImode, operands[2]));
-- else
-- {
-- emit_move_insn (operands[1], gen_lowpart (HImode, operands[2]));
-- emit_insn (gen_lshrsi3 (operands[2], operands[2], GEN_INT (16)));
-- }
-+ emit_move_insn (operands[1], gen_lowpart (HImode, operands[2]));
-+ emit_insn (gen_lshrsi3 (operands[2], operands[2], GEN_INT (16)));
- })
-
- (define_insn "*parityhi2_cmp"
-Index: gcc/config/i386/sse.md
-===================================================================
---- gcc/config/i386/sse.md (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/config/i386/sse.md (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -6402,7 +6402,7 @@
- (mult:V8HI
- (zero_extend:V8HI
- (vec_select:V4QI
-- (match_operand:V16QI 1 "nonimmediate_operand" "%0")
-+ (match_operand:V16QI 1 "nonimmediate_operand" "0")
- (parallel [(const_int 0)
- (const_int 2)
- (const_int 4)
-@@ -6456,7 +6456,7 @@
- (mult:V4HI
- (zero_extend:V4HI
- (vec_select:V4QI
-- (match_operand:V8QI 1 "nonimmediate_operand" "%0")
-+ (match_operand:V8QI 1 "nonimmediate_operand" "0")
- (parallel [(const_int 0)
- (const_int 2)
- (const_int 4)
-Index: gcc/config/i386/i386.c
-===================================================================
---- gcc/config/i386/i386.c (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/config/i386/i386.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -1768,35 +1768,65 @@
- was set or cleared on the command line. */
- static int ix86_isa_flags_explicit;
-
--/* Define a set of ISAs which aren't available for a given ISA. MMX
-- and SSE ISAs are handled separately. */
-+/* Define a set of ISAs which are available when a given ISA is
-+ enabled. MMX and SSE ISAs are handled separately. */
-
-+#define OPTION_MASK_ISA_MMX_SET OPTION_MASK_ISA_MMX
-+#define OPTION_MASK_ISA_3DNOW_SET \
-+ (OPTION_MASK_ISA_3DNOW | OPTION_MASK_ISA_MMX_SET)
-+
-+#define OPTION_MASK_ISA_SSE_SET OPTION_MASK_ISA_SSE
-+#define OPTION_MASK_ISA_SSE2_SET \
-+ (OPTION_MASK_ISA_SSE2 | OPTION_MASK_ISA_SSE_SET)
-+#define OPTION_MASK_ISA_SSE3_SET \
-+ (OPTION_MASK_ISA_SSE3 | OPTION_MASK_ISA_SSE2_SET)
-+#define OPTION_MASK_ISA_SSSE3_SET \
-+ (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_SSE3_SET)
-+#define OPTION_MASK_ISA_SSE4_1_SET \
-+ (OPTION_MASK_ISA_SSE4_1 | OPTION_MASK_ISA_SSSE3_SET)
-+#define OPTION_MASK_ISA_SSE4_2_SET \
-+ (OPTION_MASK_ISA_SSE4_2 | OPTION_MASK_ISA_SSE4_1_SET)
-+
-+/* SSE4 includes both SSE4.1 and SSE4.2. -msse4 should be the same
-+ as -msse4.2. */
-+#define OPTION_MASK_ISA_SSE4_SET OPTION_MASK_ISA_SSE4_2_SET
-+
-+#define OPTION_MASK_ISA_SSE4A_SET \
-+ (OPTION_MASK_ISA_SSE4A | OPTION_MASK_ISA_SSE3_SET)
-+#define OPTION_MASK_ISA_SSE5_SET \
-+ (OPTION_MASK_ISA_SSE5 | OPTION_MASK_ISA_SSE4A_SET)
-+
-+/* Define a set of ISAs which aren't available when a given ISA is
-+ disabled. MMX and SSE ISAs are handled separately. */
-+
- #define OPTION_MASK_ISA_MMX_UNSET \
-- (OPTION_MASK_ISA_3DNOW | OPTION_MASK_ISA_3DNOW_UNSET)
--#define OPTION_MASK_ISA_3DNOW_UNSET OPTION_MASK_ISA_3DNOW_A
-+ (OPTION_MASK_ISA_MMX | OPTION_MASK_ISA_3DNOW_UNSET)
-+#define OPTION_MASK_ISA_3DNOW_UNSET \
-+ (OPTION_MASK_ISA_3DNOW | OPTION_MASK_ISA_3DNOW_A_UNSET)
-+#define OPTION_MASK_ISA_3DNOW_A_UNSET OPTION_MASK_ISA_3DNOW_A
-
- #define OPTION_MASK_ISA_SSE_UNSET \
-- (OPTION_MASK_ISA_SSE2 | OPTION_MASK_ISA_SSE2_UNSET)
-+ (OPTION_MASK_ISA_SSE | OPTION_MASK_ISA_SSE2_UNSET)
- #define OPTION_MASK_ISA_SSE2_UNSET \
-- (OPTION_MASK_ISA_SSE3 | OPTION_MASK_ISA_SSE3_UNSET)
-+ (OPTION_MASK_ISA_SSE2 | OPTION_MASK_ISA_SSE3_UNSET)
- #define OPTION_MASK_ISA_SSE3_UNSET \
-- (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_SSSE3_UNSET)
-+ (OPTION_MASK_ISA_SSE3 \
-+ | OPTION_MASK_ISA_SSSE3_UNSET \
-+ | OPTION_MASK_ISA_SSE4A_UNSET )
- #define OPTION_MASK_ISA_SSSE3_UNSET \
-- (OPTION_MASK_ISA_SSE4_1 | OPTION_MASK_ISA_SSE4_1_UNSET)
-+ (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_SSE4_1_UNSET)
- #define OPTION_MASK_ISA_SSE4_1_UNSET \
-- (OPTION_MASK_ISA_SSE4_2 | OPTION_MASK_ISA_SSE4_2_UNSET)
--#define OPTION_MASK_ISA_SSE4_2_UNSET OPTION_MASK_ISA_SSE4A
-+ (OPTION_MASK_ISA_SSE4_1 | OPTION_MASK_ISA_SSE4_2_UNSET)
-+#define OPTION_MASK_ISA_SSE4_2_UNSET OPTION_MASK_ISA_SSE4_2
-
--/* SSE4 includes both SSE4.1 and SSE4.2. -msse4 should be the same
-- as -msse4.1 -msse4.2. -mno-sse4 should the same as -mno-sse4.1. */
--#define OPTION_MASK_ISA_SSE4 \
-- (OPTION_MASK_ISA_SSE4_1 | OPTION_MASK_ISA_SSE4_2)
-+/* SSE4 includes both SSE4.1 and SSE4.2. -mno-sse4 should the same
-+ as -mno-sse4.1. */
- #define OPTION_MASK_ISA_SSE4_UNSET OPTION_MASK_ISA_SSE4_1_UNSET
-
--#define OPTION_MASK_ISA_SSE4A_UNSET OPTION_MASK_ISA_SSE4
-+#define OPTION_MASK_ISA_SSE4A_UNSET \
-+ (OPTION_MASK_ISA_SSE4A | OPTION_MASK_ISA_SSE5_UNSET)
-
--#define OPTION_MASK_ISA_SSE5_UNSET \
-- (OPTION_MASK_ISA_3DNOW | OPTION_MASK_ISA_3DNOW_UNSET)
-+#define OPTION_MASK_ISA_SSE5_UNSET OPTION_MASK_ISA_SSE5
-
- /* Vectorization library interface and handlers. */
- tree (*ix86_veclib_handler)(enum built_in_function, tree, tree) = NULL;
-@@ -1810,18 +1840,26 @@
- switch (code)
- {
- case OPT_mmmx:
-- ix86_isa_flags_explicit |= OPTION_MASK_ISA_MMX;
-- if (!value)
-+ if (value)
- {
-+ ix86_isa_flags |= OPTION_MASK_ISA_MMX_SET;
-+ ix86_isa_flags_explicit |= OPTION_MASK_ISA_MMX_SET;
-+ }
-+ else
-+ {
- ix86_isa_flags &= ~OPTION_MASK_ISA_MMX_UNSET;
- ix86_isa_flags_explicit |= OPTION_MASK_ISA_MMX_UNSET;
- }
- return true;
-
- case OPT_m3dnow:
-- ix86_isa_flags_explicit |= OPTION_MASK_ISA_3DNOW;
-- if (!value)
-+ if (value)
- {
-+ ix86_isa_flags |= OPTION_MASK_ISA_3DNOW_SET;
-+ ix86_isa_flags_explicit |= OPTION_MASK_ISA_3DNOW_SET;
-+ }
-+ else
-+ {
- ix86_isa_flags &= ~OPTION_MASK_ISA_3DNOW_UNSET;
- ix86_isa_flags_explicit |= OPTION_MASK_ISA_3DNOW_UNSET;
- }
-@@ -1831,62 +1869,86 @@
- return false;
-
- case OPT_msse:
-- ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE;
-- if (!value)
-+ if (value)
- {
-+ ix86_isa_flags |= OPTION_MASK_ISA_SSE_SET;
-+ ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE_SET;
-+ }
-+ else
-+ {
- ix86_isa_flags &= ~OPTION_MASK_ISA_SSE_UNSET;
- ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE_UNSET;
- }
- return true;
-
- case OPT_msse2:
-- ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE2;
-- if (!value)
-+ if (value)
- {
-+ ix86_isa_flags |= OPTION_MASK_ISA_SSE2_SET;
-+ ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE2_SET;
-+ }
-+ else
-+ {
- ix86_isa_flags &= ~OPTION_MASK_ISA_SSE2_UNSET;
- ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE2_UNSET;
- }
- return true;
-
- case OPT_msse3:
-- ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE3;
-- if (!value)
-+ if (value)
- {
-+ ix86_isa_flags |= OPTION_MASK_ISA_SSE3_SET;
-+ ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE3_SET;
-+ }
-+ else
-+ {
- ix86_isa_flags &= ~OPTION_MASK_ISA_SSE3_UNSET;
- ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE3_UNSET;
- }
- return true;
-
- case OPT_mssse3:
-- ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSSE3;
-- if (!value)
-+ if (value)
- {
-+ ix86_isa_flags |= OPTION_MASK_ISA_SSSE3_SET;
-+ ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSSE3_SET;
-+ }
-+ else
-+ {
- ix86_isa_flags &= ~OPTION_MASK_ISA_SSSE3_UNSET;
- ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSSE3_UNSET;
- }
- return true;
-
- case OPT_msse4_1:
-- ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_1;
-- if (!value)
-+ if (value)
- {
-+ ix86_isa_flags |= OPTION_MASK_ISA_SSE4_1_SET;
-+ ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_1_SET;
-+ }
-+ else
-+ {
- ix86_isa_flags &= ~OPTION_MASK_ISA_SSE4_1_UNSET;
- ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_1_UNSET;
- }
- return true;
-
- case OPT_msse4_2:
-- ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_2;
-- if (!value)
-+ if (value)
- {
-+ ix86_isa_flags |= OPTION_MASK_ISA_SSE4_2_SET;
-+ ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_2_SET;
-+ }
-+ else
-+ {
- ix86_isa_flags &= ~OPTION_MASK_ISA_SSE4_2_UNSET;
- ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_2_UNSET;
- }
- return true;
-
- case OPT_msse4:
-- ix86_isa_flags |= OPTION_MASK_ISA_SSE4;
-- ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4;
-+ ix86_isa_flags |= OPTION_MASK_ISA_SSE4_SET;
-+ ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4_SET;
- return true;
-
- case OPT_mno_sse4:
-@@ -1895,18 +1957,26 @@
- return true;
-
- case OPT_msse4a:
-- ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4A;
-- if (!value)
-+ if (value)
- {
-+ ix86_isa_flags |= OPTION_MASK_ISA_SSE4A_SET;
-+ ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4A_SET;
-+ }
-+ else
-+ {
- ix86_isa_flags &= ~OPTION_MASK_ISA_SSE4A_UNSET;
- ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE4A_UNSET;
- }
- return true;
-
- case OPT_msse5:
-- ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE5;
-- if (!value)
-+ if (value)
- {
-+ ix86_isa_flags |= OPTION_MASK_ISA_SSE5_SET;
-+ ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE5_SET;
-+ }
-+ else
-+ {
- ix86_isa_flags &= ~OPTION_MASK_ISA_SSE5_UNSET;
- ix86_isa_flags_explicit |= OPTION_MASK_ISA_SSE5_UNSET;
- }
-@@ -2530,34 +2600,6 @@
- if (!TARGET_80387)
- target_flags |= MASK_NO_FANCY_MATH_387;
-
-- /* Turn on SSE4A bultins for -msse5. */
-- if (TARGET_SSE5)
-- ix86_isa_flags |= OPTION_MASK_ISA_SSE4A;
--
-- /* Turn on SSE4.1 builtins for -msse4.2. */
-- if (TARGET_SSE4_2)
-- ix86_isa_flags |= OPTION_MASK_ISA_SSE4_1;
--
-- /* Turn on SSSE3 builtins for -msse4.1. */
-- if (TARGET_SSE4_1)
-- ix86_isa_flags |= OPTION_MASK_ISA_SSSE3;
--
-- /* Turn on SSE3 builtins for -mssse3. */
-- if (TARGET_SSSE3)
-- ix86_isa_flags |= OPTION_MASK_ISA_SSE3;
--
-- /* Turn on SSE3 builtins for -msse4a. */
-- if (TARGET_SSE4A)
-- ix86_isa_flags |= OPTION_MASK_ISA_SSE3;
--
-- /* Turn on SSE2 builtins for -msse3. */
-- if (TARGET_SSE3)
-- ix86_isa_flags |= OPTION_MASK_ISA_SSE2;
--
-- /* Turn on SSE builtins for -msse2. */
-- if (TARGET_SSE2)
-- ix86_isa_flags |= OPTION_MASK_ISA_SSE;
--
- /* Turn on MMX builtins for -msse. */
- if (TARGET_SSE)
- {
-@@ -2565,10 +2607,6 @@
- x86_prefetch_sse = true;
- }
-
-- /* Turn on MMX builtins for 3Dnow. */
-- if (TARGET_3DNOW)
-- ix86_isa_flags |= OPTION_MASK_ISA_MMX;
--
- /* Turn on popcnt instruction for -msse4.2 or -mabm. */
- if (TARGET_SSE4_2 || TARGET_ABM)
- x86_popcnt = true;
-@@ -16736,7 +16774,8 @@
- int
- ix86_constant_alignment (tree exp, int align)
- {
-- if (TREE_CODE (exp) == REAL_CST)
-+ if (TREE_CODE (exp) == REAL_CST || TREE_CODE (exp) == VECTOR_CST
-+ || TREE_CODE (exp) == INTEGER_CST)
- {
- if (TYPE_MODE (TREE_TYPE (exp)) == DFmode && align < 64)
- return 64;
-Index: gcc/config/sh/sh.c
-===================================================================
---- gcc/config/sh/sh.c (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/config/sh/sh.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -3838,6 +3838,7 @@
- rtx barrier_before_mova = 0, found_barrier = 0, good_barrier = 0;
- int si_limit;
- int hi_limit;
-+ rtx orig = from;
-
- /* For HImode: range is 510, add 4 because pc counts from address of
- second instruction after this one, subtract 2 for the jump instruction
-@@ -3897,6 +3898,7 @@
-
- if (GET_CODE (from) == BARRIER)
- {
-+ rtx next;
-
- found_barrier = from;
-
-@@ -3905,6 +3907,14 @@
- this kind of barrier. */
- if (barrier_align (from) > 2)
- good_barrier = from;
-+
-+ /* If we are at the end of a hot/cold block, dump the constants
-+ here. */
-+ next = NEXT_INSN (from);
-+ if (next
-+ && NOTE_P (next)
-+ && NOTE_KIND (next) == NOTE_INSN_SWITCH_TEXT_SECTIONS)
-+ break;
- }
-
- if (broken_move (from))
-@@ -4061,7 +4071,8 @@
- /* If we exceeded the range, then we must back up over the last
- instruction we looked at. Otherwise, we just need to undo the
- NEXT_INSN at the end of the loop. */
-- if (count_hi > hi_limit || count_si > si_limit)
-+ if (PREV_INSN (from) != orig
-+ && (count_hi > hi_limit || count_si > si_limit))
- from = PREV_INSN (PREV_INSN (from));
- else
- from = PREV_INSN (from);
-Index: gcc/config/sh/sh.md
-===================================================================
---- gcc/config/sh/sh.md (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/config/sh/sh.md (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -7378,7 +7378,7 @@
- (define_insn "jump_compact"
- [(set (pc)
- (label_ref (match_operand 0 "" "")))]
-- "TARGET_SH1"
-+ "TARGET_SH1 && !find_reg_note (insn, REG_CROSSING_JUMP, NULL_RTX)"
- "*
- {
- /* The length is 16 if the delay slot is unfilled. */
-Index: gcc/config/rs6000/rs6000.c
-===================================================================
---- gcc/config/rs6000/rs6000.c (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ gcc/config/rs6000/rs6000.c (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -13858,6 +13858,9 @@
- emit_insn (gen_sync_compare_and_swapqhi_internal (wdst, mask,
- oldval, newval, mem));
-
-+ /* Shift the result back. */
-+ emit_insn (gen_lshrsi3 (wdst, wdst, shift));
-+
- emit_move_insn (dst, gen_lowpart (mode, wdst));
- }
-
-Index: libstdc++-v3/include/bits/stl_multimap.h
-===================================================================
---- libstdc++-v3/include/bits/stl_multimap.h (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ libstdc++-v3/include/bits/stl_multimap.h (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -197,7 +197,7 @@
- template<typename _InputIterator>
- multimap(_InputIterator __first, _InputIterator __last)
- : _M_t()
-- { _M_t._M_insert_unique(__first, __last); }
-+ { _M_t._M_insert_equal(__first, __last); }
-
- /**
- * @brief Builds a %multimap from a range.
-Index: libstdc++-v3/include/debug/functions.h
-===================================================================
---- libstdc++-v3/include/debug/functions.h (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ libstdc++-v3/include/debug/functions.h (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -268,35 +268,31 @@
- return __check_sorted_aux(__first, __last, __pred, _Category());
- }
-
-- template<typename _InputIterator1, typename _InputIterator2>
-+ template<typename _InputIterator>
- inline bool
-- __check_sorted_set_aux(const _InputIterator1& __first,
-- const _InputIterator1& __last,
-- const _InputIterator2&, std::__true_type)
-+ __check_sorted_set_aux(const _InputIterator& __first,
-+ const _InputIterator& __last,
-+ std::__true_type)
- { return __check_sorted(__first, __last); }
-
-- template<typename _InputIterator1, typename _InputIterator2>
-+ template<typename _InputIterator>
- inline bool
-- __check_sorted_set_aux(const _InputIterator1&,
-- const _InputIterator1&,
-- const _InputIterator2&, std::__false_type)
-+ __check_sorted_set_aux(const _InputIterator&,
-+ const _InputIterator&,
-+ std::__false_type)
- { return true; }
-
-- template<typename _InputIterator1, typename _InputIterator2,
-- typename _Predicate>
-+ template<typename _InputIterator, typename _Predicate>
- inline bool
-- __check_sorted_set_aux(const _InputIterator1& __first,
-- const _InputIterator1& __last,
-- const _InputIterator2&, _Predicate __pred,
-- std::__true_type)
-+ __check_sorted_set_aux(const _InputIterator& __first,
-+ const _InputIterator& __last,
-+ _Predicate __pred, std::__true_type)
- { return __check_sorted(__first, __last, __pred); }
-
-- template<typename _InputIterator1, typename _InputIterator2,
-- typename _Predicate>
-+ template<typename _InputIterator, typename _Predicate>
- inline bool
-- __check_sorted_set_aux(const _InputIterator1&,
-- const _InputIterator1&,
-- const _InputIterator2&, _Predicate,
-+ __check_sorted_set_aux(const _InputIterator&,
-+ const _InputIterator&, _Predicate,
- std::__false_type)
- { return true; }
-
-Index: libstdc++-v3/include/tr1/tuple
-===================================================================
---- libstdc++-v3/include/tr1/tuple (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ libstdc++-v3/include/tr1/tuple (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -329,7 +329,7 @@
- {
- typedef tuple<_TElements...> _Tp;
- typedef tuple<_UElements...> _Up;
-- return (__tuple_compare<tuple_size<_Tp>::value - tuple_size<_Tp>::value,
-+ return (__tuple_compare<tuple_size<_Tp>::value - tuple_size<_Up>::value,
- 0, tuple_size<_Tp>::value, _Tp, _Up>::__eq(__t, __u));
- }
-
-@@ -340,7 +340,7 @@
- {
- typedef tuple<_TElements...> _Tp;
- typedef tuple<_UElements...> _Up;
-- return (__tuple_compare<tuple_size<_Tp>::value - tuple_size<_Tp>::value,
-+ return (__tuple_compare<tuple_size<_Tp>::value - tuple_size<_Up>::value,
- 0, tuple_size<_Tp>::value, _Tp, _Up>::__less(__t, __u));
- }
-
-Index: libstdc++-v3/include/std/tuple
++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
===================================================================
---- libstdc++-v3/include/std/tuple (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ libstdc++-v3/include/std/tuple (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -468,7 +468,7 @@
- {
- typedef tuple<_TElements...> _Tp;
- typedef tuple<_UElements...> _Up;
-- return (__tuple_compare<tuple_size<_Tp>::value - tuple_size<_Tp>::value,
-+ return (__tuple_compare<tuple_size<_Tp>::value - tuple_size<_Up>::value,
- 0, tuple_size<_Tp>::value, _Tp, _Up>::__eq(__t, __u));
- }
-
-@@ -479,7 +479,7 @@
+--- 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)
{
- typedef tuple<_TElements...> _Tp;
- typedef tuple<_UElements...> _Up;
-- return (__tuple_compare<tuple_size<_Tp>::value - tuple_size<_Tp>::value,
-+ return (__tuple_compare<tuple_size<_Tp>::value - tuple_size<_Up>::value,
- 0, tuple_size<_Tp>::value, _Tp, _Up>::__less(__t, __u));
+ 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;
}
-
-Index: libstdc++-v3/ChangeLog
++ 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
===================================================================
---- libstdc++-v3/ChangeLog (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ libstdc++-v3/ChangeLog (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -1,3 +1,24 @@
-+2008-03-13 Dennis Czeremin <dennis.czeremin@smiths-heimann.com>
-+
-+ PR libstdc++/35566
-+ * include/bits/stl_multimap.h (multimap<>::multimap(_InputIterator,
-+ _InputIterator)): Forward to _M_insert_equal, not _M_insert_unique.
-+
-+2008-03-13 Paolo Carlini <pcarlini@suse.de>
-+
-+ PR libstdc++/35541
-+ * include/debug/functions.h (__check_sorted_set_aux): Fix signature.
-+ * testsuite/25_algorithms/set_difference/35541.cc: New.
+--- 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>
+
-+2008-03-06 Chris Jefferson <chris@bubblescope.net>
-+ Paolo Carlini <pcarlini@suse.de>
++ PR c++/52487
++ * class.c (check_field_decls): Call literal_type_p only
++ on complete types.
+
-+ PR libstdc++/35480
-+ * include/tr1/tuple (operator==, operator<): Fix.
-+ * include/std/tuple (operator==, operator<): Likewise.
-+ * testsuite/tr1/6_containers/tuple/comparison_operators/35480.cc: New.
-+ * testsuite/20_util/tuple/comparison_operators/35480.cc: Likewise.
++2012-03-22 Jakub Jelinek <jakub@redhat.com>
+
- 2008-03-05 Release Manager
-
- * GCC 4.3.0 released.
-Index: libstdc++-v3/testsuite/25_algorithms/set_difference/35541.cc
-===================================================================
---- libstdc++-v3/testsuite/25_algorithms/set_difference/35541.cc (.../tags/gcc_4_3_0_release) (revision 0)
-+++ libstdc++-v3/testsuite/25_algorithms/set_difference/35541.cc (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,36 @@
-+// Copyright (C) 2008 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 2, or (at your option)
-+// any later version.
++ PR c++/52671
++ * decl.c (check_tag_decl): Only use CLASSTYPE_TEMPLATE_INSTANTIATION
++ on CLASS_TYPE_P types.
+
-+// 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.
++2012-03-22 Jason Merrill <jason@redhat.com>
+
-+// You should have received a copy of the GNU General Public License along
-+// with this library; see the file COPYING. If not, write to the Free
-+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-+// USA.
++ PR c++/52582
++ * method.c (implicitly_declare_fn): Set DECL_EXTERNAL.
+
-+// { dg-options "-D_GLIBCXX_DEBUG" }
-+// { dg-do compile }
++2012-03-22 Jakub Jelinek <jakub@redhat.com>
+
-+// libstdc++/35541
++ Backported from mainline
++ 2012-03-14 Jakub Jelinek <jakub@redhat.com>
+
-+#include <set>
-+#include <iterator>
-+#include <algorithm>
++ PR c++/52521
++ * parser.c (lookup_literal_operator): Return fn only if
++ processed all arguments from args vector and argtypes is
++ void_list_node.
+
-+void test01()
-+{
-+ std::set<std::pair<unsigned,int> > mFactors;
-+ std::set<std::pair<unsigned,int> > secondFactor;
-+ std::set_difference(mFactors.begin(), mFactors.end(),
-+ mFactors.begin(), mFactors.end(),
-+ std::insert_iterator<std::set<std::pair<unsigned,int> > >
-+ (secondFactor, secondFactor.end()));
-+}
-Index: libstdc++-v3/testsuite/tr1/6_containers/tuple/comparison_operators/35480.cc
+ 2012-03-22 Release Manager
+
+ * GCC 4.7.0 released.
+Index: gcc/cp/parser.c
===================================================================
---- libstdc++-v3/testsuite/tr1/6_containers/tuple/comparison_operators/35480.cc (.../tags/gcc_4_3_0_release) (revision 0)
-+++ libstdc++-v3/testsuite/tr1/6_containers/tuple/comparison_operators/35480.cc (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,33 @@
-+// { dg-do compile }
-+
-+// Copyright (C) 2008 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 2, 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.
+--- 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>
+
-+// You should have received a copy of the GNU General Public License along
-+// with this library; see the file COPYING. If not, write to the Free
-+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-+// USA.
++ PR fortran/52452
++ * resolve.c (resolve_intrinsic): Don't search for a
++ function if we know that it is a subroutine.
+
-+// Tuple
+ 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));
++ }
+
-+#include <tr1/tuple>
+ 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")])
+
-+// libstdc++/35480
-+void test01()
-+{
-+ std::tr1::tuple<int> t1( 1 );
-+ std::tr1::tuple<int, int> t2( 1, 2 );
-+ if ( t1 < t2 ) {} // { dg-error "here" }
-+ if ( t1 == t2 ) {} // { dg-error "here" }
-+}
-+// { dg-excess-errors "incomplete type" }
-Index: libstdc++-v3/testsuite/20_util/tuple/comparison_operators/35480.cc
-===================================================================
---- libstdc++-v3/testsuite/20_util/tuple/comparison_operators/35480.cc (.../tags/gcc_4_3_0_release) (revision 0)
-+++ libstdc++-v3/testsuite/20_util/tuple/comparison_operators/35480.cc (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -0,0 +1,34 @@
-+// { dg-options "-std=gnu++0x" }
-+// { dg-do compile }
+
-+// Copyright (C) 2008 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 2, or (at your option)
-+// any later version.
++;; Similar to above for the complementary situation when there is no [E]LPMx.
++;; Clobber Z in that case.
+
-+// 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.
++(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")])
++
++
+ (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;
+ }
+
++ /* For old devices without LPMx, prefer __flash loads per libcall. */
+
-+// You should have received a copy of the GNU General Public License along
-+// with this library; see the file COPYING. If not, write to the Free
-+// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-+// USA.
+ 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;
++ }
+
-+// Tuple
++ /* ; 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.
+-
+-(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);
+-
+- if (!avr_mem_flash_p (operands[1])
+- || !REG_P (addr)
+- || reg_overlap_mentioned_p (addr, operands[0]))
+- {
+- FAIL;
+- }
+-
+- 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);
+- })
+-
+ ;;==========================================================================
+ ;; 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'. */
+
-+#include <tuple>
++/* 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. */
+
-+// libstdc++/35480
-+void test01()
++static bool
++avr_mode_dependent_address_p (const_rtx addr)
+{
-+ std::tuple<int> t1( 1 );
-+ std::tuple<int, int> t2( 1, 2 );
-+ if ( t1 < t2 ) {} // { dg-error "here" }
-+ if ( t1 == t2 ) {} // { dg-error "here" }
++ return GET_MODE (addr) != Pmode;
+}
-+// { dg-excess-errors "incomplete type" }
-Index: libjava/ChangeLog
-===================================================================
---- libjava/ChangeLog (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ libjava/ChangeLog (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -1,3 +1,8 @@
-+2008-03-13 Andrew Haley <aph@redhat.com>
+
-+ * link.cc (_Jv_Linker::resolve_method_entry): Remove broken class
-+ loader test.
+
- 2008-03-05 Release Manager
+ /* Helper function for `avr_legitimate_address_p'. */
- * GCC 4.3.0 released.
-Index: libjava/link.cc
-===================================================================
---- libjava/link.cc (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ libjava/link.cc (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -359,40 +359,6 @@
- throw new java::lang::NoSuchMethodError (sb->toString());
- }
+ 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);
+ }
-- // if (found_class->loader != klass->loader), then we
-- // must actually check that the types of arguments
-- // correspond. That is, for each argument type, and
-- // the return type, doing _Jv_FindClassFromSignature
-- // with either loader should produce the same result,
-- // i.e., exactly the same jclass object. JVMS 5.4.3.3
-- if (found_class->loader != klass->loader)
+ /* 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.
+-
+- Return a QImode d-register or NULL_RTX if nothing found. */
+-
+-static rtx
+-avr_find_unused_d_reg (rtx insn, rtx exclude)
+-{
+- int regno;
+- bool isr_p = (interrupt_function_p (current_function_decl)
+- || signal_function_p (current_function_decl));
+-
+- for (regno = 16; regno < 32; regno++)
+- {
+- rtx reg = all_regs_rtx[regno];
+-
+- if ((exclude
+- && reg_overlap_mentioned_p (exclude, reg))
+- || fixed_regs[regno])
+- {
+- continue;
+- }
+-
+- /* Try non-live register */
+-
+- 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;
+- }
+-
+- /* 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;
+-}
+-
+-
+-/* Helper function for the next function in the case where only restricted
+- version of LPM instruction is available. */
+-
+-static const char*
+-avr_out_lpm_no_lpmx (rtx insn, rtx *xop, int *plen)
+-{
+- rtx dest = xop[0];
+- rtx addr = xop[1];
+- int n_bytes = GET_MODE_SIZE (GET_MODE (dest));
+- int regno_dest;
+-
+- regno_dest = REGNO (dest);
+-
+- /* The implicit target register of LPM. */
+- xop[3] = lpm_reg_rtx;
+-
+- switch (GET_CODE (addr))
- {
-- JArray<jclass> *found_args, *klass_args;
-- jclass found_return, klass_return;
+- default:
+- gcc_unreachable();
+-
+- case REG:
+-
+- gcc_assert (REG_Z == REGNO (addr));
+-
+- switch (n_bytes)
+- {
+- default:
+- gcc_unreachable();
+-
+- case 1:
+- avr_asm_len ("%4lpm", xop, plen, 1);
+-
+- if (regno_dest != LPM_REGNO)
+- avr_asm_len ("mov %0,%3", xop, plen, 1);
+-
+- return "";
-
-- _Jv_GetTypesFromSignature (the_method,
-- found_class,
-- &found_args,
-- &found_return);
-- _Jv_GetTypesFromSignature (the_method,
-- klass,
-- &klass_args,
-- &klass_return);
+- 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 */
-
-- jclass *found_arg = elements (found_args);
-- jclass *klass_arg = elements (klass_args);
+- case POST_INC:
-
-- for (int i = 0; i < found_args->length; i++)
-- {
-- if (*(found_arg++) != *(klass_arg++))
-- throw new java::lang::LinkageError (JvNewStringLatin1
-- ("argument type mismatch with different loaders"));
-- }
-- if (found_return != klass_return)
-- throw new java::lang::LinkageError (JvNewStringLatin1
-- ("return type mismatch with different loaders"));
+- gcc_assert (REG_Z == REGNO (XEXP (addr, 0))
+- && n_bytes <= 4);
+-
+- 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);
+-
+- if (n_bytes >= 2)
+- avr_asm_len ("%4lpm" CR_TAB
+- "mov %B0,%3" CR_TAB
+- "adiw %2,1", xop, plen, 3);
+-
+- if (n_bytes >= 3)
+- avr_asm_len ("%4lpm" CR_TAB
+- "mov %C0,%3" CR_TAB
+- "adiw %2,1", xop, plen, 3);
+-
+- 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 "";
+-}
+-
+-
+ /* 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);
- }
--
- return the_method;
+- 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 "";
++}
+
+- 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)
++{
++ 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 "";
}
-Index: fixincludes/ChangeLog
-===================================================================
---- fixincludes/ChangeLog (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ fixincludes/ChangeLog (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -1,3 +1,10 @@
-+2008-03-06 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-+
-+ * inclhack.def (solaris_math_10): New.
-+ * tests/base/iso/math_c99.h: Update.
-+
-+ * fixincl.x: Regenerate.
+@@ -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)
++{
++ rtx mem = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode));
++ MEM_VOLATILE_P (mem) = 1;
++ return mem;
++}
+
- 2008-03-05 Release Manager
+ 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);
+ }
- * GCC 4.3.0 released.
-Index: fixincludes/fixincl.x
-===================================================================
---- fixincludes/fixincl.x (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ fixincludes/fixincl.x (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -2,11 +2,11 @@
- *
- * DO NOT EDIT THIS FILE (fixincl.x)
- *
-- * It has been AutoGen-ed Monday February 4, 2008 at 09:22:58 PM GMTST
-+ * It has been AutoGen-ed Wednesday February 20, 2008 at 05:10:00 AM CET
- * From the definitions inclhack.def
- * and the template file fixincl
- */
--/* DO NOT SVN-MERGE THIS FILE, EITHER Mon Feb 4 21:22:58 GMTST 2008
-+/* DO NOT SVN-MERGE THIS FILE, EITHER Wed Feb 20 05:10:00 CET 2008
- *
- * You must regenerate it. Use the ./genfixes script.
- *
-@@ -15,25 +15,30 @@
- * certain ANSI-incompatible system header files which are fixed to work
- * correctly with ANSI C and placed in a directory that GNU C will search.
- *
-- * This file contains 211 fixup descriptions.
-+ * This file contains 212 fixup descriptions.
- *
- * See README for more information.
- *
- * inclhack copyright (c) 1998, 1999, 2000, 2001
- * The Free Software Foundation, Inc.
- *
-- * inclhack is free software: you can redistribute it and/or modify it
-- * under the terms of the GNU General Public License as published by the
-- * Free Software Foundation, either version 3 of the License, or
-- * (at your option) any later version.
-+ * inclhack is free software.
- *
-- * inclhack is distributed in the hope that it will be useful, but
-- * WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * You may redistribute it and/or modify it under the terms of the
-+ * GNU General Public License, as published by the Free Software
-+ * Foundation; either version 2 of the License, or (at your option)
-+ * any later version.
-+ *
-+ * inclhack 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 program. If not, see <http://www.gnu.org/licenses/>.
-+ * You should have received a copy of the GNU General Public License
-+ * along with inclhack. If not, write to:
-+ * The Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor
-+ * Boston, MA 02110-1301, USA.
- */
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * *
-@@ -5886,6 +5891,45 @@
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * *
- *
-+ * Description of Solaris_Math_10 fix
-+ */
-+tSCC zSolaris_Math_10Name[] =
-+ "solaris_math_10";
+-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))))]
++ "
++{
++ operands[3] = gen_reg_rtx (<MODE>mode);
++ operands[4] = gen_reg_rtx (<MODE>mode);
++}")
++
++(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)))]
++ "
++{
++ operands[3] = gen_reg_rtx (<MODE>mode);
++ operands[4] = gen_reg_rtx (<MODE>mode);
++}")
++
++(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)))]
++ "
++{
++ operands[3] = gen_reg_rtx (<MODE>mode);
++ operands[4] = gen_reg_rtx (<MODE>mode);
++}")
++
++(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);
++}")
+
-+/*
-+ * File name selection pattern
-+ */
-+tSCC zSolaris_Math_10List[] =
-+ "iso/math_c99.h\0";
-+/*
-+ * Machine/OS name selection pattern
-+ */
-+#define apzSolaris_Math_10Machs (const char**)NULL
+ ;; 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>
+
-+/*
-+ * content selection pattern - do fix if pattern found
-+ */
-+tSCC zSolaris_Math_10Select0[] =
-+ "@\\(#\\)math_c99.h[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
++ Backport from mainline:
++ 2012-03-09 David Edelsohn <dje.gcc@gmail.com>
+
-+#define SOLARIS_MATH_10_TEST_CT 1
-+static tTestDesc aSolaris_Math_10Tests[] = {
-+ { TT_EGREP, zSolaris_Math_10Select0, (regex_t*)NULL }, };
++ * 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.
+
-+/*
-+ * Fix Command Arguments for Solaris_Math_10
-+ */
-+static const char* apzSolaris_Math_10Patch[] = {
-+ "format",
-+ "#define\tisinf(x) __builtin_isinf(x)",
-+ "^#define[ \t]+isinf\\(x\\)[ \t]+__extension__\\([ \t]*\\\\\n\
-+[ \t]*\\{[ \t]*__typeof\\(x\\)[ \t]*__x_i[ \t]*=[ \t]*\\(x\\);[ \t]*\\\\\n\
-+[ \t]*__x_i[ \t]*==[ \t]*\\(__typeof\\(__x_i\\)\\)[ \t]*INFINITY[ \t]*\\|\\|[ \t]*\\\\\n\
-+[ \t]*__x_i[ \t]*==[ \t]*\\(__typeof\\(__x_i\\)\\)[ \t]*\\(-INFINITY\\);[ \t]*\\}\\)",
-+ (char*)NULL };
-+
-+/* * * * * * * * * * * * * * * * * * * * * * * * * *
-+ *
- * Description of Solaris_Mutex_Init_1 fix
- */
- tSCC zSolaris_Mutex_Init_1Name[] =
-@@ -8567,9 +8611,9 @@
- *
- * List of all fixes
- */
--#define REGEX_COUNT 254
-+#define REGEX_COUNT 255
- #define MACH_LIST_SIZE_LIMIT 261
--#define FIX_COUNT 211
-+#define FIX_COUNT 212
-
- /*
- * Enumerate the fixes
-@@ -8718,6 +8762,7 @@
- SOLARIS_MATH_4_FIXIDX,
- SOLARIS_MATH_8_FIXIDX,
- SOLARIS_MATH_9_FIXIDX,
-+ SOLARIS_MATH_10_FIXIDX,
- SOLARIS_MUTEX_INIT_1_FIXIDX,
- SOLARIS_MUTEX_INIT_2_FIXIDX,
- SOLARIS_RWLOCK_INIT_1_FIXIDX,
-@@ -9504,6 +9549,11 @@
- SOLARIS_MATH_9_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
- aSolaris_Math_9Tests, apzSolaris_Math_9Patch, 0 },
-
-+ { zSolaris_Math_10Name, zSolaris_Math_10List,
-+ apzSolaris_Math_10Machs,
-+ SOLARIS_MATH_10_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE,
-+ aSolaris_Math_10Tests, apzSolaris_Math_10Patch, 0 },
-+
- { zSolaris_Mutex_Init_1Name, zSolaris_Mutex_Init_1List,
- apzSolaris_Mutex_Init_1Machs,
- SOLARIS_MUTEX_INIT_1_TEST_CT, FD_MACH_ONLY,
-Index: fixincludes/tests/base/iso/math_c99.h
-===================================================================
---- fixincludes/tests/base/iso/math_c99.h (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ fixincludes/tests/base/iso/math_c99.h (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -77,3 +77,10 @@
- #undef isunordered
- #define isunordered(x, y) __builtin_isunordered(x, y)
- #endif /* SOLARIS_MATH_9_CHECK */
-+
-+
-+#if defined( SOLARIS_MATH_10_CHECK )
-+#pragma ident "@(#)math_c99.h 1.12 07/01/21 SMI"
-+#undef isinf
-+#define isinf(x) __builtin_isinf(x)
-+#endif /* SOLARIS_MATH_10_CHECK */
-Index: fixincludes/inclhack.def
-===================================================================
---- fixincludes/inclhack.def (.../tags/gcc_4_3_0_release) (revision 133190)
-+++ fixincludes/inclhack.def (.../branches/gcc-4_3-branch) (revision 133190)
-@@ -3223,6 +3223,30 @@
- };
-
- /*
-+ * On Solaris 11, if you do isinf(NaN) you'll get a floating point
-+ * exception. Provide an alternative using GCC's builtin.
-+ */
-+
-+fix = {
-+ hackname = solaris_math_10;
-+ select = '@\(#\)math_c99.h' "[ \t]+1.[0-9]+[ \t]+[0-9/]+ SMI";
-+ files = iso/math_c99.h;
-+ c_fix = format;
-+ c_fix_arg = "#define\tisinf(x) __builtin_isinf(x)";
-+ c_fix_arg = "^#define[ \t]+isinf\\(x\\)[ \t]+__extension__\\([ \t]*\\\\\n"
-+ "[ \t]*\\{[ \t]*__typeof\\(x\\)[ \t]*__x_i[ \t]*=[ \t]*\\(x\\);[ \t]*\\\\\n"
-+ "[ \t]*__x_i[ \t]*==[ \t]*\\(__typeof\\(__x_i\\)\\)[ \t]*INFINITY[ \t]*\\|\\|[ \t]*\\\\\n"
-+ "[ \t]*__x_i[ \t]*==[ \t]*\\(__typeof\\(__x_i\\)\\)[ \t]*\\(-INFINITY\\);[ \t]*\\}\\)";
-+ test_text =
-+ '#pragma ident "@(#)math_c99.h 1.12 07/01/21 SMI"'"\n"
-+ "#undef isinf\n"
-+ "#define isinf(x) __extension__( \\\\\n"
-+ " { __typeof(x) __x_i = (x); \\\\\n"
-+ " __x_i == (__typeof(__x_i)) INFINITY || \\\\\n"
-+ " __x_i == (__typeof(__x_i)) (-INFINITY); })";
-+};
++ 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.
+
-+/*
- * Sun Solaris 2.5.1, 2.6 defines PTHREAD_{MUTEX|COND}_INITIALIZER
- * incorrectly, so we replace them with versions that correspond to
- * the definition. We also explicitly name this fix "1" and the next
+ 2012-03-22 Release Manager
+
+ * GCC 4.7.0 released.