]> git.pld-linux.org Git - packages/gcc.git/blobdiff - gcc-branch.diff
- patch merged.
[packages/gcc.git] / gcc-branch.diff
index c755e6b0b5674d945c19780945bd608fefb78b14..2b5c76b0f454519c59fb46a6a6c541c901100b4c 100644 (file)
-Index: gcc/c-family/ChangeLog
-===================================================================
---- gcc/c-family/ChangeLog     (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ gcc/c-family/ChangeLog     (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -1,3 +1,15 @@
-+2011-11-04  Eric Botcazou  <ebotcazou@adacore.com>
-+
-+      PR c++/50608
-+      * c-common.c (c_fully_fold_internal) <ADDR_EXPR>: Call fold_offsetof_1.
-+      (fold_offsetof_1): Make global.  Remove STOP_REF argument and adjust.
-+      <INDIRECT_REF>: Return the argument.
-+      <ARRAY_REF>: Remove special code for negative offset.
-+      Call fold_build_pointer_plus instead of size_binop.
-+      (fold_offsetof): Remove STOP_REF argument and adjust.
-+      * c-common.h (fold_offsetof_1): Declare.
-+      (fold_offsetof): Remove STOP_REF argument.
-+
- 2011-10-26  Release Manager
-       * GCC 4.6.2 released.
-Index: gcc/c-family/c-common.c
+Index: libgomp/ChangeLog
 ===================================================================
---- gcc/c-family/c-common.c    (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ gcc/c-family/c-common.c    (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -1236,13 +1236,7 @@
-         && (op1 = get_base_address (op0)) != NULL_TREE
-         && TREE_CODE (op1) == INDIRECT_REF
-         && TREE_CONSTANT (TREE_OPERAND (op1, 0)))
--      {
--        tree offset = fold_offsetof (op0, op1);
--        op1
--          = fold_convert_loc (loc, TREE_TYPE (expr), TREE_OPERAND (op1, 0));
--        ret = fold_build2_loc (loc, POINTER_PLUS_EXPR, TREE_TYPE (expr), op1,
--                               offset);
--      }
-+      ret = fold_convert_loc (loc, TREE_TYPE (expr), fold_offsetof_1 (op0));
-       else if (op0 != orig_op0 || in_init)
-       ret = in_init
-         ? fold_build1_initializer_loc (loc, code, TREE_TYPE (expr), op0)
-@@ -8459,20 +8453,15 @@
-     return uc;
- }
--/* Build the result of __builtin_offsetof.  EXPR is a nested sequence of
--   component references, with STOP_REF, or alternatively an INDIRECT_REF of
--   NULL, at the bottom; much like the traditional rendering of offsetof as a
--   macro.  Returns the folded and properly cast result.  */
-+/* Fold an offsetof-like expression.  EXPR is a nested sequence of component
-+   references with an INDIRECT_REF of a constant at the bottom; much like the
-+   traditional rendering of offsetof as a macro.  Return the folded result.  */
--static tree
--fold_offsetof_1 (tree expr, tree stop_ref)
-+tree
-+fold_offsetof_1 (tree expr)
- {
--  enum tree_code code = PLUS_EXPR;
-   tree base, off, t;
+--- libgomp/ChangeLog  (.../tags/gcc_4_7_0_release)    (wersja 185750)
++++ libgomp/ChangeLog  (.../branches/gcc-4_7-branch)   (wersja 185750)
+@@ -1,3 +1,8 @@
++2012-03-22  Jakub Jelinek  <jakub@redhat.com>
++
++      PR middle-end/52547
++      * testsuite/libgomp.c/pr52547.c: New test.
++
+ 2012-03-22  Release Manager
  
--  if (expr == stop_ref && TREE_CODE (expr) != ERROR_MARK)
--    return size_zero_node;
--
-   switch (TREE_CODE (expr))
-     {
-     case ERROR_MARK:
-@@ -8489,15 +8478,15 @@
-     case NOP_EXPR:
-     case INDIRECT_REF:
--      if (!integer_zerop (TREE_OPERAND (expr, 0)))
-+      if (!TREE_CONSTANT (TREE_OPERAND (expr, 0)))
-       {
-         error ("cannot apply %<offsetof%> to a non constant address");
-         return error_mark_node;
-       }
--      return size_zero_node;
-+      return TREE_OPERAND (expr, 0);
+       * GCC 4.7.0 released.
+Index: libgomp/testsuite/libgomp.c/pr52547.c
+===================================================================
+--- libgomp/testsuite/libgomp.c/pr52547.c      (.../tags/gcc_4_7_0_release)    (wersja 0)
++++ libgomp/testsuite/libgomp.c/pr52547.c      (.../branches/gcc-4_7-branch)   (wersja 185750)
+@@ -0,0 +1,36 @@
++/* PR middle-end/52547 */
++/* { dg-do run } */
++
++extern void abort (void);
++
++__attribute__((noinline, noclone)) int
++baz (int *x, int (*fn) (int *))
++{
++  return fn (x);
++}
++
++__attribute__((noinline, noclone)) int
++foo (int x, int *y)
++{
++  int i, e = 0;
++#pragma omp parallel for reduction(|:e)
++  for (i = 0; i < x; ++i)
++    {
++      __label__ lab;
++      int bar (int *z) { return z - y; }
++      if (baz (&y[i], bar) != i)
++      e |= 1;
++    }
++  return e;
++}
++
++int
++main ()
++{
++  int a[100], i;
++  for (i = 0; i < 100; i++)
++    a[i] = i;
++  if (foo (100, a))
++    abort ();
++  return 0;
++}
+Index: 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++ -*-
  
-     case COMPONENT_REF:
--      base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
-+      base = fold_offsetof_1 (TREE_OPERAND (expr, 0));
-       if (base == error_mark_node)
-       return base;
+-// Copyright (C) 2003, 2004, 2005, 2006, 2009, 2010, 2011
++// Copyright (C) 2003, 2004, 2005, 2006, 2009, 2010, 2011, 2012
+ // Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+@@ -169,7 +169,25 @@
+                             ._M_iterator(__x, "other"));
+       }
++#ifdef __GXX_EXPERIMENTAL_CXX0X__
+       /**
++       * @brief Move construction.
++       * @post __x is singular and unattached
++       */
++      _Safe_iterator(_Safe_iterator&& __x) : _M_current()
++      {
++      _GLIBCXX_DEBUG_VERIFY(!__x._M_singular()
++                            || __x._M_current == _Iterator(),
++                            _M_message(__msg_init_copy_singular)
++                            ._M_iterator(*this, "this")
++                            ._M_iterator(__x, "other"));
++      std::swap(_M_current, __x._M_current);
++      this->_M_attach(__x._M_sequence);
++      __x._M_detach();
++      }
++#endif
++
++      /**
+        *  @brief Converting constructor from a mutable iterator to a
+        *  constant iterator.
+       */
+@@ -208,7 +226,28 @@
+       return *this;
+       }
++#ifdef __GXX_EXPERIMENTAL_CXX0X__
+       /**
++       * @brief Move assignment.
++       * @post __x is singular and unattached
++       */
++      _Safe_iterator&
++      operator=(_Safe_iterator&& __x)
++      {
++      _GLIBCXX_DEBUG_VERIFY(!__x._M_singular()
++                            || __x._M_current == _Iterator(),
++                            _M_message(__msg_copy_singular)
++                            ._M_iterator(*this, "this")
++                            ._M_iterator(__x, "other"));
++      _M_current = __x._M_current;
++      _M_attach(__x._M_sequence);
++      __x._M_detach();
++      __x._M_current = _Iterator();
++      return *this;
++      }
++#endif
++
++      /**
+        *  @brief Iterator dereference.
+        *  @pre iterator is dereferenceable
+        */
+@@ -422,7 +461,9 @@
+       /// Is this iterator equal to the sequence's before_begin() iterator if
+       /// any?
+       bool _M_is_before_begin() const
+-      { return _BeforeBeginHelper<_Sequence>::_M_Is(base(), _M_get_sequence()); }
++      {
++      return _BeforeBeginHelper<_Sequence>::_M_Is(base(), _M_get_sequence());
++      }
+     };
+   template<typename _IteratorL, typename _IteratorR, typename _Sequence>
+Index: libstdc++-v3/include/std/array
+===================================================================
+--- libstdc++-v3/include/std/array     (.../tags/gcc_4_7_0_release)    (wersja 185750)
++++ libstdc++-v3/include/std/array     (.../branches/gcc-4_7-branch)   (wersja 185750)
+@@ -1,6 +1,7 @@
+ // <array> -*- C++ -*-
+-// Copyright (C) 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
++// Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012
++// Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library.  This library is free
+ // software; you can redistribute it and/or modify it under the
+@@ -174,8 +175,9 @@
+       const_reference
+       at(size_type __n) const
+       {
+-      return __n < _Nm ?
+-             _M_instance[__n] : __throw_out_of_range(__N("array::at"));
++      if (__n >= _Nm)
++        std::__throw_out_of_range(__N("array::at"));
++      return _M_instance[__n];
+       }
+ #endif
+Index: 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++ -*-
  
-@@ -8515,21 +8504,14 @@
-       break;
+-// 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
+===================================================================
+--- 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>
++
++      PR libstdc++/52540
++      * include/Makefile.am (c++config.h): Fix sed rule to not break
++      the _GLIBCXX_EXTERN_TEMPLATE redefinition.
++      * include/Makefile.in: Regenerate.
++
++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
  
-     case ARRAY_REF:
--      base = fold_offsetof_1 (TREE_OPERAND (expr, 0), stop_ref);
-+      base = fold_offsetof_1 (TREE_OPERAND (expr, 0));
-       if (base == error_mark_node)
-       return base;
-       t = TREE_OPERAND (expr, 1);
--      if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) < 0)
--      {
--        code = MINUS_EXPR;
--        t = fold_build1_loc (input_location, NEGATE_EXPR, TREE_TYPE (t), t);
--      }
--      t = convert (sizetype, t);
--      off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
-       /* Check if the offset goes beyond the upper bound of the array.  */
--      if (code == PLUS_EXPR && TREE_CODE (t) == INTEGER_CST)
-+      if (TREE_CODE (t) == INTEGER_CST && tree_int_cst_sgn (t) >= 0)
-       {
-         tree upbound = array_ref_up_bound (expr);
-         if (upbound != NULL_TREE
-@@ -8569,26 +8551,30 @@
-               }
-           }
-       }
+       * GCC 4.7.0 released.
+Index: libstdc++-v3/testsuite/23_containers/vector/debug/52433.cc
+===================================================================
+--- libstdc++-v3/testsuite/23_containers/vector/debug/52433.cc (.../tags/gcc_4_7_0_release)    (wersja 0)
++++ libstdc++-v3/testsuite/23_containers/vector/debug/52433.cc (.../branches/gcc-4_7-branch)   (wersja 185750)
+@@ -0,0 +1,43 @@
++// Copyright (C) 2012 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library.  This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3.  If not see
++// <http://www.gnu.org/licenses/>.
++//
++// { dg-require-debug-mode "" }
++// { dg-options "-std=gnu++0x" }
++// { dg-do compile }
 +
-+      t = convert (sizetype, t);
-+      off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
-       break;
++// PR libstdc++/52433
++
++#include <vector>
++
++struct X
++{
++    std::vector<int>::iterator i;
++
++    X() = default;
++    X(const X&) = default;
++    X(X&&) = default;
++    X& operator=(const X&) = default;
++    X& operator=(X&&) = default;
++};
++
++X test01()
++{
++    X x;
++    x = X();
++    return x;
++}
++
+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
  
-     case COMPOUND_EXPR:
-       /* Handle static members of volatile structs.  */
-       t = TREE_OPERAND (expr, 1);
-       gcc_assert (TREE_CODE (t) == VAR_DECL);
--      return fold_offsetof_1 (t, stop_ref);
-+      return fold_offsetof_1 (t);
+       * 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 @@
  
-     default:
-       gcc_unreachable ();
+       ret = d_operator_name (di);
+       if (ret != NULL && ret->type == DEMANGLE_COMPONENT_OPERATOR)
+-      di->expansion += sizeof "operator" + ret->u.s_operator.op->len - 2;
++      {
++        di->expansion += sizeof "operator" + ret->u.s_operator.op->len - 2;
++        if (!strcmp (ret->u.s_operator.op->code, "li"))
++          ret = d_make_comp (di, DEMANGLE_COMPONENT_UNARY, ret,
++                             d_source_name (di));
++      }
+       return ret;
      }
--  return size_binop (code, base, off);
-+  return fold_build2 (POINTER_PLUS_EXPR, TREE_TYPE (base), base, off);
- }
-+/* Likewise, but convert it to the return type of offsetof.  */
+   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>
 +
- tree
--fold_offsetof (tree expr, tree stop_ref)
-+fold_offsetof (tree expr)
- {
--  /* Convert back from the internal sizetype to size_t.  */
--  return convert (size_type_node, fold_offsetof_1 (expr, stop_ref));
-+  return convert (size_type_node, fold_offsetof_1 (expr));
- }
++      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
  
- /* Warn for A ?: C expressions (with B omitted) where A is a boolean 
-Index: gcc/c-family/c-common.h
+       * GCC 4.7.0 released.
+Index: libgcc/config/avr/lib1funcs.S
 ===================================================================
---- gcc/c-family/c-common.h    (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ gcc/c-family/c-common.h    (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -916,7 +916,8 @@
+--- 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
  
- extern void verify_sequence_points (tree);
+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
  
--extern tree fold_offsetof (tree, tree);
-+extern tree fold_offsetof_1 (tree);
-+extern tree fold_offsetof (tree);
+       * 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 @@
  
- /* Places where an lvalue, or modifiable lvalue, may be required.
-    Used to select diagnostic messages in lvalue_error and
+       if (flags & CPP_N_USERDEF)
+         {
++          char *str;
++          tree literal;
+           tree suffix_id = get_identifier (suffix);
+           int len = tok->val.str.len - strlen (suffix);
+           /* If this is going to be used as a C string to pass to a
+@@ -350,9 +352,9 @@
+                                           (const char *) tok->val.str.text);
+           TREE_TYPE (num_string) = char_array_type_node;
+           num_string = fix_string_type (num_string);
+-          char *str = CONST_CAST (char *, TREE_STRING_POINTER (num_string));
++          str = CONST_CAST (char *, TREE_STRING_POINTER (num_string));
+           str[len] = '\0';
+-          tree literal = build_userdef_literal (suffix_id, *value,
++          literal = build_userdef_literal (suffix_id, *value,
+                                                 num_string);
+           *value = literal;
+         }
 Index: gcc/DATESTAMP
 ===================================================================
---- gcc/DATESTAMP      (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ gcc/DATESTAMP      (.../branches/gcc-4_6-branch)   (wersja 181284)
+--- gcc/DATESTAMP      (.../tags/gcc_4_7_0_release)    (wersja 185750)
++++ gcc/DATESTAMP      (.../branches/gcc-4_7-branch)   (wersja 185750)
 @@ -1 +1 @@
--20111026
-+20111111
+-20120322
++20120323
 Index: gcc/DEV-PHASE
 ===================================================================
---- gcc/DEV-PHASE      (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ gcc/DEV-PHASE      (.../branches/gcc-4_6-branch)   (wersja 181284)
+--- 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_6_2_release)    (wersja 181284)
-+++ gcc/ChangeLog      (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -1,3 +1,85 @@
-+2011-11-10  Jakub Jelinek  <jakub@redhat.com>
-+
-+      PR middle-end/51077
-+      * tree-object-size.c (addr_object_size): Check TREE_CODE of
-+      MEM_REF's operand rather than code of the MEM_REF itself.
+--- 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.
++
++      Backport from 2012-03-21 mainline r185605.
++
++      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.
 +
-+2011-11-07  Alan Modra  <amodra@gmail.com>
++      Backport from 2012-03-13 mainline r185329.
 +
-+      PR target/30282
-+      * config/rs6000/rs6000.c (rs6000_emit_stack_reset): Always emit
-+      blockage for ABI_V4.
++      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.
 +
-+2011-11-04  Eric Botcazou  <ebotcazou@adacore.com>
++      Backport from 2012-03-12 mainline r185256.
 +
-+      PR c++/50608
-+      * c-parser.c (c_parser_postfix_expression) <RID_OFFSETOF>: Adjust call
-+      to fold_offsetof.
-+      * c-typeck.c (build_unary_op) <ADDR_EXPR>: Call fold_offsetof_1.
++      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.
 +
-+2011-11-04  Eric Botcazou  <ebotcazou@adacore.com>
++      Backport from 2012-03-12 mainline r185253.
 +
-+      PR target/50979
-+      * config/sparc/sparc.h (ASM_CPU_SPEC): Pass -Av8 if -mcpu=v8.
++      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.
 +
-+2011-11-03  Uros Bizjak  <ubizjak@gmail.com>
++      Backport from 2012-03-08 mainline r185105.
 +
-+      * config/i386/i386.md (lround<X87MODEF:mode><SWI248x:mode>2,
-+      rint<mode>2, floor<mode>2, lfloor<MODEF:mode><SWI48:mode>2,
-+      btrunc<mode>2, lwp_lwpval<mode>3): Use operands[N] instead of operandN.
++      * config/avr/avr.md (*addhi3, addhi3_clobber): Add "w" alternative
++      for constants in [-63,63].
 +
-+2011-11-02  Eric Botcazou  <ebotcazou@adacore.com>
++      Backport from 2012-03-08 mainline r185100.
 +
-+      PR target/50945
-+      * config/sparc/sparc.md (movsf_insn): Reindent constraints.
-+      (movsf_insn_no_fpu): Likewise.
-+      (movdf_insn_sp32): Likewise.
-+      (movdf_insn_sp32_no_fpu): Likewise.
-+      (movdf_insn_sp32_v9): Likewise.  Remove redundant GY constraint.
-+      (movdf_insn_sp32_v9_no_fpu): Likewise.
-+      (movdf_insn_sp64): Likewise.
-+      (movdf_insn_sp64_no_fpu): Likewise.
-+      (movtf_insn_sp32): Likewise.
-+      (movtf_insn_sp32_no_fpu): Likewise.
-+      (movtf_insn_sp64): Likewise.
-+      (movtf_insn_sp64_hq): Likewise.
-+      (movtf_insn_sp64_no_fpu): Likewise.
++      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".
 +
-+2011-11-02  Bernd Schmidt  <bernds@codesourcery.com>
++      Backport from 2012-03-07 mainline r185043.
 +
-+      * cfgcleanup.c (try_head_merge_bb): If get_condition returns
-+      NULL for a jump that is a cc0 insn, pick the previous insn for
-+      move_before.
++      PR target/52484
++      * config/avr/avr.md (xload<mode>_A): Add R22... to register footprint.
++
++      Backport from 2012-03-07 mainline r185032.
 +
-+2011-11-01  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.
 +
-+      * config/i386/i386.md (splitters for int-float conversion): Use
-+      SUBREG_REG on SUBREGs in splitter constraints.
++      Backport from 2012-03-07 mainline r185031.
 +
-+2011-11-01  Julian Brown  <julian@codesourcery.com>
++      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.
 +
-+      PR rtl-optimization/47918
-+      * reload1.c (set_initial_label_offsets): Use initial offsets
-+      for labels on the nonlocal_goto_handler_labels chain.
++      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>
 +
-+2011-10-29  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
++      Backport from mainline r185259.
 +
-+      PR target/50691
-+      * config/pa/pa.c (emit_move_sequence): Legitimize TLS symbol references.
-+      * config/pa/pa.h (LEGITIMATE_CONSTANT_P): Return false for
-+      TLS_MODEL_GLOBAL_DYNAMIC and TLS_MODEL_LOCAL_DYNAMIC symbol references.
++      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>
 +
-+2011-10-27  Uros Bizjak  <ubizjak@gmail.com>
++      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.
 +
-+      PR target/50875
-+      * config/i386/sse.md (*avx_unpcklpd256): Remove extra insn
-+      constraints.  Change alternative 1 to "x,m,1".
++      * config/i386/smmintrin.h: Avoid /* within a comment.
++      * config/i386/nmmintrin.h: Likewise.
 +
-+2011-10-26  Jakub Jelinek  <jakub@redhat.com>
++2012-03-22  Richard Guenther  <rguenther@suse.de>
 +
-+      * BASE-VER: Set to 4.6.3.
++      * BASE-VER: Set to 4.7.1.
 +      * DEV-PHASE: Set to prerelease.
 +
- 2011-10-26  Release Manager
-       * GCC 4.6.2 released.
-@@ -144,8 +226,8 @@
- 2011-10-07  Bernd Schmidt  <bernds@codesourcery.com>
--      PR target/49049
--      * config/arm/arm.md (arm_subsi3_insn): Lose the last alternative.
-+      PR target/49049
-+      * config/arm/arm.md (arm_subsi3_insn): Lose the last alternative.
+ 2012-03-22  Release Manager
  
- 2011-10-06  Jakub Jelinek  <jakub@redhat.com>
-Index: gcc/testsuite/gfortran.dg/pr50875.f90
+       * GCC 4.7.0 released.
+Index: gcc/testsuite/gcc.target/avr/torture/addr-space-1-0.c
 ===================================================================
---- gcc/testsuite/gfortran.dg/pr50875.f90      (.../tags/gcc_4_6_2_release)    (wersja 0)
-+++ gcc/testsuite/gfortran.dg/pr50875.f90      (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -0,0 +1,39 @@
-+! { dg-do compile { target { i?86-*-* x86_64-*-* } } }
-+! { dg-options "-O3 -mavx" }
-+!
-+! PR fortran/50875.f90
+--- 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 } */
 +
-+module test
++#define __as __flash
++
++#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 } */
 +
-+  implicit none
++#define __as __flash1
 +
-+  integer, parameter :: dp=kind(1.d0)
++#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 } */
 +
-+  integer :: P = 2
++#define __as __flash
 +
-+  real(kind=dp), allocatable :: real_array_A(:),real_array_B(:,:)
-+  complex(kind=dp), allocatable :: cmplx_array_A(:) 
++#include "addr-space-2.h"
+Index: gcc/testsuite/gcc.target/avr/torture/addr-space-2-1.c
+===================================================================
+--- gcc/testsuite/gcc.target/avr/torture/addr-space-2-1.c      (.../tags/gcc_4_7_0_release)    (wersja 0)
++++ gcc/testsuite/gcc.target/avr/torture/addr-space-2-1.c      (.../branches/gcc-4_7-branch)   (wersja 185750)
+@@ -0,0 +1,6 @@
++/* { dg-options "-std=gnu99 -Tavr51-flash1.x" } */
++/* { dg-do run } */
 +
-+contains
++#define __as __flash1
 +
-+  subroutine routine_A
++#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 } */
 +
-+    integer :: i
++#define __as __memx
 +
-+    allocate(cmplx_array_A(P),real_array_B(P,P),real_array_A(P))
++#include "addr-space-1.h"
+Index: gcc/testsuite/gcc.target/avr/torture/addr-space-1.h
+===================================================================
+--- gcc/testsuite/gcc.target/avr/torture/addr-space-1.h        (.../tags/gcc_4_7_0_release)    (wersja 0)
++++ gcc/testsuite/gcc.target/avr/torture/addr-space-1.h        (.../branches/gcc-4_7-branch)   (wersja 185750)
+@@ -0,0 +1,83 @@
++#include <stdlib.h>
++#include <string.h>
 +
-+    real_array_A = 1
-+    real_array_B = 1
++typedef struct
++{
++  char i1;
++  short i2;
++  long i4;
++  long long i8;
++  char str[2][10];
++} a_t;
++
++const __as a_t A =
++  {
++    12, 345, 678910, 1234567891011ll,
++    {
++      "xxx..xxx",
++      "yyy..yyy"
++    }
++  };
++
++const __as volatile a_t V =
++  {
++    12+1, 345+1, 678910+1, 1234567891011ll+1,
++    {
++      "XXX..XXX",
++      "YYY..YYY"
++    }
++  };
 +
-+    do i = 1, p
-+       cmplx_array_A = cmplx(real_array_B(:,i),0.0_dp,dp)
-+       cmplx_array_A = cmplx_array_A * exp(cmplx(0.0_dp,real_array_A+1))
-+    end do
++a_t A2;
++volatile a_t V2;
 +
-+    deallocate(cmplx_array_A,real_array_B,real_array_A)
++int main (void)
++{
++  if (A.i1 != 12
++      || A.i1 != V.i1 -1)
++    abort();
++
++  if (A.i2 != 345
++      || A.i2 != V.i2 -1)
++    abort();
++
++  if (A.i4 != 678910
++      || A.i4 != V.i4 -1)
++    abort();
++
++  if (A.i8 != 1234567891011ll
++      || A.i8 != V.i8 -1)
++    abort();
++
++  A2 = A;
++  V2 = V;
++
++  if (A2.i1 != 12
++      || A2.i1 != V2.i1 -1)
++    abort();
++
++  if (A2.i2 != 345
++      || A2.i2 != V2.i2 -1)
++    abort();
++
++  if (A2.i4 != 678910
++      || A2.i4 != V2.i4 -1)
++    abort();
++
++  if (A2.i8 != 1234567891011ll
++      || A2.i8 != V2.i8 -1)
++    abort();
++
++  if (strcmp (A2.str[0], "xxx..xxx"))
++    abort();
++  if (strcmp (A2.str[1], "yyy..yyy"))
++    abort();
++
++  if (strcmp ((const char*) V2.str[0], "XXX..XXX"))
++    abort();
++  if (strcmp ((const char*) V2.str[1], "YYY..YYY"))
++   abort();
++  
++  exit (0);
++  return 0;
++}
+Index: gcc/testsuite/gcc.target/avr/torture/addr-space-2-x.c
+===================================================================
+--- 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 } */
 +
-+  end subroutine routine_A
++/* --no-warn because: "assembling 24-bit address needs binutils extension"
++   see binutils PR13503.  */
 +
-+end module test
++#define __as __memx
 +
-+! { dg-final { cleanup-modules "test" } }
-Index: gcc/testsuite/gcc.c-torture/compile/pr51077.c
++#include "addr-space-2.h"
+Index: gcc/testsuite/gcc.target/avr/torture/addr-space-2.h
 ===================================================================
---- gcc/testsuite/gcc.c-torture/compile/pr51077.c      (.../tags/gcc_4_6_2_release)    (wersja 0)
-+++ gcc/testsuite/gcc.c-torture/compile/pr51077.c      (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -0,0 +1,15 @@
-+/* PR middle-end/51077 */
+--- 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);
 +
-+struct S { unsigned char s, t[256]; };
++typedef struct T
++{
++  char val;
++  const __as struct T *l, *r;
++} tree;
++
++/*
++                    abcd   
++                   /    \
++                 ab      cd
++                /  \    /  \
++               a    b  c    d
++*/
++
++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 (abcd.val != '*')
++    abort();
++
++  if (abcd.l->val != 'A')
++    abort();
++  if (abcd.r->val != 'C')
++    abort();
++
++  if (abcd.l->l->val != 'a')
++    abort();
++  if (abcd.l->r->val != 'b')
++    abort();
++  if (abcd.r->l->val != 'c')
++    abort();
++  if (abcd.r->r->val != 'd')
++    abort();
++}
 +
-+void
-+foo (const struct S *x, struct S *y, int z)
++static void
++test2 (const __as tree *t)
 +{
-+  int i;
-+  for (i = 0; i < 8; i++)
-+    {
-+      const struct S *a = &x[i];
-+      __builtin___memcpy_chk (y->t, a->t, z, __builtin_object_size (y->t, 0));
-+      y = (struct S *) &y->t[z];
-+    }
++  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.c-torture/compile/20110913-1.c
++
++static void
++test3 (const __as tree *pt)
++{
++  tree t = *pt;
++  
++  if (t.val != '*')
++    abort();
++
++  if (t.l->val != 'A')
++    abort();
++  if (t.r->val != 'C')
++    abort();
++
++  if (t.l->l->val != 'a')
++    abort();
++  if (t.l->r->val != 'b')
++    abort();
++  if (t.r->l->val != 'c')
++    abort();
++  if (t.r->r->val != 'd')
++    abort();
++}
++
++int main (void)
++{
++  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/avr/torture/addr-space-1-g.c
 ===================================================================
---- gcc/testsuite/gcc.c-torture/compile/20110913-1.c   (.../tags/gcc_4_6_2_release)    (wersja 0)
-+++ gcc/testsuite/gcc.c-torture/compile/20110913-1.c   (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -0,0 +1,26 @@
-+struct ieee754_double {
-+  double d;
-+};
-+extern const float __exp_deltatable[178];
-+float __ieee754_expf (float x)
+--- 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 } */
++
++#define __as
++
++#include "addr-space-1.h"
+Index: gcc/testsuite/gcc.target/avr/torture/addr-space-2-g.c
+===================================================================
+--- 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 } */
++
++#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)));
++
++void
++f1 (V *p)
 +{
-+  static const float himark = 88.72283935546875;
-+  static const float lomark = -103.972084045410;
-+  if (__builtin_isless(x, himark) && __builtin_isgreater(x, lomark))
-+    {
-+      int tval;
-+      double x22, t, result, dx;
-+      float delta;
-+      struct ieee754_double ex2_u;
-+      dx -= t;
-+      tval = (int) (t * 512.0);
-+      if (t >= 0)
-+      delta = - __exp_deltatable[tval];
-+      else
-+      delta = __exp_deltatable[-tval];
-+      x22 = (0.5000000496709180453 * dx + 1.0000001192102037084) * dx + delta;
-+      result = x22 * ex2_u.d + ex2_u.d;
-+      return (float) result;
-+    }
-+  return x;
++  V mask = { 1, 2, 3, 0 };
++  *p = __builtin_shuffle (*p, mask);
++}
++
++void
++f2 (V *p, V *q)
++{
++  V mask = { 1, 2, 3, 0 };
++  *p = __builtin_shuffle (*p, *q, mask);
++}
++
++void
++f3 (V *p, V *mask)
++{
++  V a = { 1, 2, 3, 0 };
++  *p = __builtin_shuffle (a, *mask);
++}
++
++void
++f4 (V *p, V *mask)
++{
++  V a = { 1, 2, 3, 0 };
++  V b = { 2, 3, 4, 1 };
++  *p = __builtin_shuffle (a, b, *mask);
 +}
 Index: gcc/testsuite/ChangeLog
 ===================================================================
---- gcc/testsuite/ChangeLog    (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ gcc/testsuite/ChangeLog    (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -1,3 +1,32 @@
-+2011-11-10  Jakub Jelinek  <jakub@redhat.com>
+--- 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>
 +
-+      PR middle-end/51077
-+      * gcc.c-torture/compile/pr51077.c: New test.
++      PR c++/52487
++      * g++.dg/cpp0x/lambda/lambda-ice7.C: New.
 +
-+2011-11-07  Jason Merrill  <jason@redhat.com>
++2012-03-22  Tobias Burnus  <burnus@net-b.de>
 +
-+      PR c++/50870
-+      * g++.dg/cpp0x/decltype35.C: New.
++      PR fortran/52452
++      * gfortran.dg/intrinsic_8.f90: New.
 +
-+2011-11-04  Eric Botcazou  <ebotcazou@adacore.com>
++2012-03-22  Jakub Jelinek  <jakub@redhat.com>
 +
-+      * g++.dg/other/offsetof7.C: New test.
++      PR c++/52671
++      * g++.dg/ext/attrib44.C: New test.
 +
-+2011-11-02  Bernd Schmidt  <bernds@codesourcery.com>
++2012-03-22  Jason Merrill  <jason@redhat.com>
 +
-+      * gcc.c-torture/compile/20110907.c: New file.
++      * g++.dg/torture/pr52582.C: New.
 +
-+2011-10-29  Paolo Carlini  <paolo.carlini@oracle.com>
++2012-03-22  Georg-Johann Lay  <avr@gjlay.de>
 +
-+      PR c++/50901
-+      * g++.dg/cpp0x/pr50901.C: New.
++      Backport from 2012-03-20 mainline r185583.
 +
-+2011-10-27  Uros Bizjak  <ubizjak@gmail.com>
-+          Steven G. Kargl  <kargl@gcc.gnu.org>
++      * gcc.target/avr/progmem.h (pgm_read_char): Define depending on
++      __AVR_HAVE_LPMX__
 +
-+      PR target/50875
-+      * gfortran.dg/pr50875.f90: New test.
++      Backport from 2012-03-20 mainline r185570.
 +
- 2011-10-26  Release Manager
-       * GCC 4.6.2 released.
-Index: gcc/testsuite/g++.dg/other/offsetof7.C
-===================================================================
---- gcc/testsuite/g++.dg/other/offsetof7.C     (.../tags/gcc_4_6_2_release)    (wersja 0)
-+++ gcc/testsuite/g++.dg/other/offsetof7.C     (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -0,0 +1,17 @@
-+// PR c++/50608
-+// Testcase by <dberger@oubliette.org>
-+// { dg-do compile }
++      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.
 +
-+struct A {
-+    int offset;
-+};
++      Backport from 2012-03-12 mainline r185255.
 +
-+struct B: public A {
-+};
++      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.
 +
-+struct C {
-+    A a;
-+    B b;
-+};
++2012-03-22  Jakub Jelinek  <jakub@redhat.com>
 +
-+int fails = __builtin_offsetof (C, b.offset);
-Index: gcc/testsuite/g++.dg/cpp0x/pr50901.C
++      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/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/pr50901.C       (.../tags/gcc_4_6_2_release)    (wersja 0)
-+++ gcc/testsuite/g++.dg/cpp0x/pr50901.C       (.../branches/gcc-4_6-branch)   (wersja 181284)
+--- 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" }
 +
-+template<class T> int foo(int a)
++struct A;         // { dg-error "forward declaration" }
++
++void foo(A& a)
 +{
-+  const unsigned b = a < 0 ? -a : a;
-+  return 0;
++  [=](){a;};      // { dg-error "invalid use of incomplete type" }
 +}
-+
-+int i = foo<float>(1);
-Index: gcc/testsuite/g++.dg/cpp0x/decltype35.C
+Index: gcc/testsuite/g++.dg/cpp0x/udlit-args2.C
 ===================================================================
---- gcc/testsuite/g++.dg/cpp0x/decltype35.C    (.../tags/gcc_4_6_2_release)    (wersja 0)
-+++ gcc/testsuite/g++.dg/cpp0x/decltype35.C    (.../branches/gcc-4_6-branch)   (wersja 181284)
+--- 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++/50870
-+// { dg-options -std=c++0x }
++// PR c++/52521
++// { dg-do compile }
++// { dg-options -std=c++11 }
 +
-+template <class V>
-+  struct impl
-+  {
-+    template <class T> static T create();
-+  };
++#include <cstddef>
 +
-+template <class T, class U, class V, class
-+      = decltype(impl<V>::template create<T>()
-+             -> impl<V>::template create<U>())>
-+struct tester { };
++int operator "" _a (const char *);
++int operator "" _a (const char *, std::size_t);
++int a = 123_a;
++int a2 = "abc"_a;
 +
-+tester<impl<float>*, int, float> ti;
-Index: gcc/cp/typeck.c
++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/cp/typeck.c    (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ gcc/cp/typeck.c    (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -4835,9 +4835,7 @@
-       && TREE_CONSTANT (TREE_OPERAND (val, 0)))
+--- 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 ()
++{
++  return p;
++}
++struct B
++{
++  virtual ~B ();
++  B ();
++};
++struct A : B
++{
++  A () : B () {}
++  virtual void bar ();
++};
++void
++foo ()
++{
++  char a[64];
++  B *b = new (&a) A ();
++  b->~B ();
++}
+Index: gcc/cp/class.c
+===================================================================
+--- gcc/cp/class.c     (.../tags/gcc_4_7_0_release)    (wersja 185750)
++++ gcc/cp/class.c     (.../branches/gcc-4_7-branch)   (wersja 185750)
+@@ -3145,8 +3145,9 @@
+       CLASSTYPE_NON_AGGREGATE (t) = 1;
+       /* If at least one non-static data member is non-literal, the whole
+-         class becomes non-literal.  */
+-      if (!literal_type_p (type))
++         class becomes non-literal.  Note: if the type is incomplete we
++       will complain later on.  */
++      if (COMPLETE_TYPE_P (type) && !literal_type_p (type))
+         CLASSTYPE_LITERAL_P (t) = false;
+       /* A standard-layout class is a class that:
+Index: gcc/cp/decl.c
+===================================================================
+--- gcc/cp/decl.c      (.../tags/gcc_4_7_0_release)    (wersja 185750)
++++ gcc/cp/decl.c      (.../branches/gcc-4_7-branch)   (wersja 185750)
+@@ -4219,7 +4219,8 @@
+   if (declspecs->attributes)
      {
-       tree type = build_pointer_type (argtype);
--      tree op0 = fold_convert (type, TREE_OPERAND (val, 0));
--      tree op1 = fold_convert (sizetype, fold_offsetof (arg, val));
--      return fold_build2 (POINTER_PLUS_EXPR, type, op0, op1);
-+      return fold_convert (type, fold_offsetof_1 (arg));
+       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;
      }
-   /* Handle complex lvalues (when permitted)
++  DECL_EXTERNAL (fn) = true;
+   DECL_NOT_REALLY_EXTERN (fn) = 1;
+   DECL_DECLARED_INLINE_P (fn) = 1;
+   gcc_assert (!TREE_USED (fn));
 Index: gcc/cp/ChangeLog
 ===================================================================
---- gcc/cp/ChangeLog   (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ gcc/cp/ChangeLog   (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -1,3 +1,22 @@
-+2011-11-07  Jason Merrill  <jason@redhat.com>
+--- 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>
++
++      PR c++/52487
++      * class.c (check_field_decls): Call literal_type_p only
++      on complete types.
++
++2012-03-22  Jakub Jelinek  <jakub@redhat.com>
++
++      PR c++/52671
++      * decl.c (check_tag_decl): Only use CLASSTYPE_TEMPLATE_INSTANTIATION
++      on CLASS_TYPE_P types.
 +
-+      PR c++/50870
-+      * pt.c (tsubst_copy): Handle NAMESPACE_DECL.
-+      (tsubst_copy_and_build) [COMPONENT_REF]: Handle a still-dependent
-+      object.
++2012-03-22  Jason Merrill  <jason@redhat.com>
 +
-+2011-11-04  Eric Botcazou  <ebotcazou@adacore.com>
++      PR c++/52582
++      * method.c (implicitly_declare_fn): Set DECL_EXTERNAL.
 +
-+      PR c++/50608
-+      * semantics.c (finish_offsetof): Adjust call to fold_offsetof.
-+      * typeck.c (cp_build_addr_expr_1): Call fold_offsetof_1.
++2012-03-22  Jakub Jelinek  <jakub@redhat.com>
 +
-+2011-10-29  Paolo Carlini  <paolo.carlini@oracle.com>
++      Backported from mainline
++      2012-03-14  Jakub Jelinek  <jakub@redhat.com>
 +
-+      PR c++/50901
-+      * call.c (build_new_op_1): Handle ABS_EXPR together with the
-+      other unary EXPR.
++      PR c++/52521
++      * parser.c (lookup_literal_operator): Return fn only if
++      processed all arguments from args vector and argtypes is
++      void_list_node.
 +
- 2011-10-26  Release Manager
+ 2012-03-22  Release Manager
  
-       * GCC 4.6.2 released.
-Index: gcc/cp/pt.c
+       * GCC 4.7.0 released.
+Index: gcc/cp/parser.c
 ===================================================================
---- gcc/cp/pt.c        (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ gcc/cp/pt.c        (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -11439,6 +11439,9 @@
-       mark_used (t);
-       return t;
-+    case NAMESPACE_DECL:
-+      return t;
-+
-     case OVERLOAD:
-       /* An OVERLOAD will always be a non-dependent overload set; an
-        overload set from function scope will just be represented with an
-@@ -13179,7 +13182,9 @@
-       if (member == error_mark_node)
-         return error_mark_node;
--      if (object_type && !CLASS_TYPE_P (object_type))
-+      if (type_dependent_expression_p (object))
-+        /* We can't do much here.  */;
-+      else if (!CLASS_TYPE_P (object_type))
-         {
-           if (SCALAR_TYPE_P (object_type))
-             {
-Index: gcc/cp/semantics.c
-===================================================================
---- gcc/cp/semantics.c (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ gcc/cp/semantics.c (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -3348,7 +3348,7 @@
+--- 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;
+       }
      }
-   if (TREE_CODE (expr) == INDIRECT_REF && REFERENCE_REF_P (expr))
-     expr = TREE_OPERAND (expr, 0);
--  return fold_offsetof (expr, NULL_TREE);
-+  return fold_offsetof (expr);
- }
+Index: gcc/fortran/ChangeLog
+===================================================================
+--- gcc/fortran/ChangeLog      (.../tags/gcc_4_7_0_release)    (wersja 185750)
++++ gcc/fortran/ChangeLog      (.../branches/gcc-4_7-branch)   (wersja 185750)
+@@ -1,3 +1,9 @@
++2012-03-22  Tobias Burnus  <burnus@net-b.de>
++
++      PR fortran/52452
++      * resolve.c (resolve_intrinsic): Don't search for a
++      function if we know that it is a subroutine.
++
+ 2012-03-22  Release Manager
  
- /* Replace the AGGR_INIT_EXPR at *TP with an equivalent CALL_EXPR.  This
-Index: gcc/cp/call.c
+       * GCC 4.7.0 released.
+Index: gcc/fortran/resolve.c
 ===================================================================
---- gcc/cp/call.c      (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ gcc/cp/call.c      (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -4996,6 +4996,7 @@
-     case POSTDECREMENT_EXPR:
-     case REALPART_EXPR:
-     case IMAGPART_EXPR:
-+    case ABS_EXPR:
-       return cp_build_unary_op (code, arg1, candidates != 0, complain);
-     case ARRAY_REF:
+--- 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_6_2_release)    (wersja 181284)
-+++ gcc/BASE-VER       (.../branches/gcc-4_6-branch)   (wersja 181284)
+--- gcc/BASE-VER       (.../tags/gcc_4_7_0_release)    (wersja 185750)
++++ gcc/BASE-VER       (.../branches/gcc-4_7-branch)   (wersja 185750)
 @@ -1 +1 @@
--4.6.2
-+4.6.3
-Index: gcc/c-typeck.c
-===================================================================
---- gcc/c-typeck.c     (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ gcc/c-typeck.c     (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -3802,11 +3802,7 @@
-       if (val && TREE_CODE (val) == INDIRECT_REF
-           && TREE_CONSTANT (TREE_OPERAND (val, 0)))
-       {
--        tree op0 = fold_convert_loc (location, sizetype,
--                                     fold_offsetof (arg, val)), op1;
--
--        op1 = fold_convert_loc (location, argtype, TREE_OPERAND (val, 0));
--        ret = fold_build2_loc (location, POINTER_PLUS_EXPR, argtype, op1, op0);
-+        ret = fold_convert_loc (location, argtype, fold_offsetof_1 (arg));
-         goto return_build_unary_op;
-       }
-Index: gcc/cfgcleanup.c
+-4.7.0
++4.7.1
+Index: gcc/tree-nested.c
 ===================================================================
---- gcc/cfgcleanup.c   (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ gcc/cfgcleanup.c   (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -1969,7 +1969,14 @@
-   cond = get_condition (jump, &move_before, true, false);
-   if (cond == NULL_RTX)
--    move_before = jump;
-+    {
-+#ifdef HAVE_cc0
-+      if (reg_mentioned_p (cc0_rtx, jump))
-+      move_before = prev_nonnote_nondebug_insn (jump);
-+      else
-+#endif
-+      move_before = jump;
-+    }
+--- 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;
  
-   for (ix = 0; ix < nedges; ix++)
-     if (EDGE_SUCC (bb, ix)->dest == EXIT_BLOCK_PTR)
-@@ -2131,7 +2138,14 @@
-       jump = BB_END (final_dest_bb);
-       cond = get_condition (jump, &move_before, true, false);
-       if (cond == NULL_RTX)
--      move_before = jump;
-+      {
-+#ifdef HAVE_cc0
-+        if (reg_mentioned_p (cc0_rtx, jump))
-+          move_before = prev_nonnote_nondebug_insn (jump);
-+        else
-+#endif
-+          move_before = jump;
-+      }
+     default:
++      *handled_ops_p = false;
++      return NULL_TREE;
+       break;
      }
  
-   do
-Index: gcc/po/ChangeLog
-===================================================================
---- gcc/po/ChangeLog   (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ gcc/po/ChangeLog   (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -1,3 +1,7 @@
-+2011-10-30  Joseph Myers  <joseph@codesourcery.com>
-+
-+      * ja.po: Update.
-+
- 2011-10-26  Release Manager
+-  *handled_ops_p = false;
++  *handled_ops_p = true;
+   return NULL_TREE;
+ }
  
-       * GCC 4.6.2 released.
-Index: gcc/po/ja.po
+Index: gcc/output.h
 ===================================================================
---- gcc/po/ja.po       (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ gcc/po/ja.po       (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -20,7 +20,7 @@
- "Project-Id-Version: gcc 4.6.1\n"
- "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
- "POT-Creation-Date: 2011-06-21 10:27+0000\n"
--"PO-Revision-Date: 2011-10-25 22:36+0900\n"
-+"PO-Revision-Date: 2011-10-30 18:48+0900\n"
- "Last-Translator: Yasuaki Taniguchi <yasuakit@gmail.com>\n"
- "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
- "Language: ja\n"
-@@ -834,12 +834,12 @@
- #: gcov.c:420
- #, c-format
- msgid "  -a, --all-blocks                Show information for every basic block\n"
--msgstr ""
-+msgstr "  -a, --all-blocks                各基本ブロックに関する情報を表示する\n"
- #: gcov.c:421
- #, c-format
- msgid "  -b, --branch-probabilities      Include branch probabilities in output\n"
--msgstr ""
-+msgstr "  -b, --branch-probabilities      出力に分岐可能性情報を含める\n"
- #: gcov.c:422
- #, c-format
-@@ -847,6 +847,8 @@
- "  -c, --branch-counts             Given counts of branches taken\n"
- "                                    rather than percentages\n"
- msgstr ""
-+"  -c, --branch-counts             分岐に関する百分率では無く行われた\n"
-+"                                    回数を取得する\n"
- #: gcov.c:424
- #, c-format
-@@ -859,21 +861,23 @@
- "  -l, --long-file-names           Use long output file names for included\n"
- "                                    source files\n"
- msgstr ""
-+"  -l, --long-file-names           インクルードされたソースファイルに関する長い\n"
-+"                                    出力ファイル名を使用する\n"
- #: gcov.c:427
- #, c-format
- msgid "  -f, --function-summaries        Output summaries for each function\n"
--msgstr ""
-+msgstr "  -f, --function-summaries        各関数に関する要約を出力する\n"
- #: gcov.c:428
- #, c-format
- msgid "  -o, --object-directory DIR|FILE Search for object files in DIR or called FILE\n"
--msgstr ""
-+msgstr "  -o, --object-directory DIR|FILE オブジェクトファイルを DIR 内または呼び出し用 FILE 内で検索する\n"
- #: gcov.c:429
- #, c-format
- msgid "  -p, --preserve-paths            Preserve all pathname components\n"
--msgstr ""
-+msgstr "  -p, --preserve-paths            すべてのパス名要素を保護する\n"
- #: gcov.c:430
- #, c-format
-@@ -977,7 +981,7 @@
- #: gcov.c:1045
- #, c-format
- msgid "%s:cannot open data file, assuming not executed\n"
--msgstr ""
-+msgstr "%s:データファイルを開けません。実行されていないと見なします\n"
- #: gcov.c:1052
- #, c-format
-@@ -1027,7 +1031,7 @@
- #: gcov.c:1379
- #, c-format
- msgid "%s:graph is unsolvable for '%s'\n"
--msgstr ""
-+msgstr "%s: '%s' 用のグラフが解決できません\n"
- #: gcov.c:1459
- #, c-format
-@@ -1037,7 +1041,7 @@
- #: gcov.c:1462
- #, c-format
- msgid "Lines executed:%s of %d\n"
--msgstr ""
-+msgstr "実行された行:%s of %d\n"
- #: gcov.c:1466
- #, c-format
-@@ -1047,7 +1051,7 @@
- #: gcov.c:1472
- #, c-format
- msgid "Branches executed:%s of %d\n"
--msgstr ""
-+msgstr "実行された分岐:%s of %d\n"
- #: gcov.c:1476
- #, c-format
-@@ -1057,12 +1061,12 @@
- #: gcov.c:1482
- #, c-format
- msgid "No branches\n"
--msgstr ""
-+msgstr "分岐がありません\n"
- #: gcov.c:1484
- #, c-format
- msgid "Calls executed:%s of %d\n"
--msgstr ""
-+msgstr "実行された呼び出し:%s of %d\n"
- #: gcov.c:1488
- #, c-format
-@@ -1075,24 +1079,24 @@
- msgstr "%s: '%s' に対する行がありません\n"
- #: gcov.c:1843
--#, fuzzy, c-format
-+#, c-format
- msgid "call   %2d returned %s\n"
--msgstr "呼び出し %d の戻り = %d\n"
-+msgstr ""
- #: gcov.c:1848
--#, fuzzy, c-format
-+#, c-format
- msgid "call   %2d never executed\n"
--msgstr "呼び出し %d は一度も実行せず\n"
-+msgstr ""
- #: gcov.c:1853
--#, fuzzy, c-format
-+#, c-format
- msgid "branch %2d taken %s%s\n"
--msgstr "ブランチ %d 受理 = %d%%\n"
-+msgstr ""
- #: gcov.c:1857
--#, fuzzy, c-format
-+#, c-format
- msgid "branch %2d never executed\n"
--msgstr "ブランチ %d は一度も実行されず\n"
-+msgstr ""
- #: gcov.c:1862
- #, c-format
-@@ -1100,9 +1104,9 @@
- msgstr ""
- #: gcov.c:1865
--#, fuzzy, c-format
-+#, c-format
- msgid "unconditional %2d never executed\n"
--msgstr "呼び出し %d は一度も実行せず\n"
-+msgstr ""
- #: gcov.c:1901
- #, c-format
-@@ -1412,11 +1416,11 @@
- #: opts.c:1183
- msgid "The following options take separate arguments"
--msgstr ""
-+msgstr "次のオプションは分離した引数を取ります"
- #: opts.c:1185
- msgid "The following options take joined arguments"
--msgstr ""
-+msgstr "次のオプションは結合した引数を取ります"
- #: opts.c:1196
- msgid "The following options are language-related"
-@@ -1472,7 +1476,7 @@
- #: targhooks.c:1469
- #, c-format
- msgid "created and used with differing settings of '%s'"
--msgstr ""
-+msgstr "作成時と使用時で '%s' の設定が異なります"
- #: targhooks.c:1471
- msgid "out of memory"
-@@ -1480,11 +1484,11 @@
- #: targhooks.c:1486
- msgid "created and used with different settings of -fpic"
--msgstr ""
-+msgstr "作成時と使用時で -fpic の設定が異なります"
- #: targhooks.c:1488
- msgid "created and used with different settings of -fpie"
--msgstr ""
-+msgstr "作成時と使用時で -fpie の設定が異なります"
- #: tlink.c:386
- #, c-format
-@@ -1717,11 +1721,11 @@
- #: params.def:100
- msgid "The maximum depth of recursive inlining for inline functions"
--msgstr ""
-+msgstr "インライン関数を再帰的にインライン化する時の最大深度"
- #: params.def:105
- msgid "The maximum depth of recursive inlining for non-inline functions"
--msgstr ""
-+msgstr "非インライン関数を再帰的にインライン化する時の最大深度"
- #: params.def:110
- msgid "Inline recursively only when the probability of call being executed exceeds the parameter"
-@@ -1761,16 +1765,15 @@
- #: params.def:180
- msgid "The size of function body to be considered large"
--msgstr ""
-+msgstr "大きいと見なされる関数本体のサイズ"
- #: params.def:184
- msgid "Maximal growth due to inlining of large function (in percent)"
- msgstr ""
- #: params.def:188
--#, fuzzy
- msgid "The size of translation unit to be considered large"
--msgstr "翻訳単位全体をファイルにダンプする"
-+msgstr "大きいと見なされる翻訳単位のサイズ"
- #: params.def:192
- msgid "How much can given compilation unit grow because of the inlining (in percent)"
-@@ -1786,20 +1789,19 @@
- #: params.def:204
- msgid "The size of stack frame to be considered large"
--msgstr ""
-+msgstr "大きいと見なされるスタックフレームのサイズ"
- #: params.def:208
- msgid "Maximal stack frame growth due to inlining (in percent)"
--msgstr ""
-+msgstr "インライン化によって増加するスタックフレームの最大量 (百分率)"
- #: params.def:215
- msgid "The maximum amount of memory to be allocated by GCSE"
--msgstr ""
-+msgstr "GCSE によって配置されるメモリの最大量"
- #: params.def:222
--#, fuzzy
- msgid "The maximum ratio of insertions to deletions of expressions in GCSE"
--msgstr "RPTS 用の最大反復数を指定する"
-+msgstr ""
- #: params.def:233
- msgid "The threshold ratio for performing partial redundancy elimination after reload"
-@@ -1963,9 +1965,8 @@
- msgstr ""
- #: params.def:470
--#, fuzzy
- msgid "Bound on number of iv uses in loop optimized in iv optimizations"
--msgstr "目立たない、コストのかかる最適化を行なう"
-+msgstr ""
- #: params.def:478
- msgid "If number of candidates in the set is smaller, we always try to remove unused ivs during its optimization"
-@@ -2044,9 +2045,8 @@
- msgstr ""
- #: params.def:594
--#, fuzzy
- msgid "The maximum number of iterations through CFG to extend regions"
--msgstr "RPTS 用の最大反復数を指定する"
-+msgstr ""
- #: params.def:599
- msgid "The maximum conflict delay for an insn to be considered for speculative motion"
-@@ -2077,9 +2077,8 @@
- msgstr ""
- #: params.def:637
--#, fuzzy
- msgid "The upper bound for sharing integer constants"
--msgstr "`%s' の列挙値が整数定数ではありません"
-+msgstr "整数定数を共有するための上限値"
- #: params.def:656
- msgid "Minimum number of virtual mappings to consider switching to full virtual renames"
-@@ -2111,11 +2110,11 @@
- #: params.def:714
- msgid "The number of insns executed before prefetch is completed"
--msgstr ""
-+msgstr "プリフェッチが完了する前に実行される命令数"
- #: params.def:721
- msgid "The number of prefetches that can run at the same time"
--msgstr ""
-+msgstr "同時に実行可能なプリフェッチの数"
- #: params.def:728
- msgid "The size of L1 cache"
-@@ -2162,9 +2161,8 @@
- msgstr ""
- #: params.def:806
--#, fuzzy
- msgid "maximum number of parameters in a SCoP"
--msgstr "RPTS 用の最大反復数を指定する"
-+msgstr "SCoP 内のパラメータの最大数"
- #: params.def:813
- msgid "maximum number of basic blocks per function to be analyzed by Graphite"
-@@ -2597,9 +2595,9 @@
- msgstr "無効な %%E 値"
- #: config/alpha/alpha.c:5431 config/alpha/alpha.c:5479
--#, fuzzy, c-format
-+#, c-format
- msgid "unknown relocation unspec"
--msgstr "不明な設定済コンストラクタ型です"
-+msgstr ""
- #: config/alpha/alpha.c:5440 config/crx/crx.c:1119
- #: config/rs6000/rs6000.c:16490 config/spu/spu.c:1726
-@@ -3000,32 +2998,32 @@
- #: config/i386/i386.c:14106 config/i386/i386.c:14146
- #, c-format
- msgid "operand is not a condition code, invalid operand code 'D'"
--msgstr ""
-+msgstr "被演算子は条件コードではありません。無効な被演算子コード 'D' です"
- #: config/i386/i386.c:14172
- #, c-format
- msgid "operand is neither a constant nor a condition code, invalid operand code 'C'"
--msgstr ""
-+msgstr "被演算子は定数でも条件コードでもありません。無効な被演算子コード 'C' です"
- #: config/i386/i386.c:14182
- #, c-format
- msgid "operand is neither a constant nor a condition code, invalid operand code 'F'"
--msgstr ""
-+msgstr "被演算子は定数でも条件コードでもありません。無効な被演算子コード 'F' です"
- #: config/i386/i386.c:14200
- #, c-format
- msgid "operand is neither a constant nor a condition code, invalid operand code 'c'"
--msgstr ""
-+msgstr "被演算子は定数でも条件コードでもありません。無効な被演算子コード 'c' です"
- #: config/i386/i386.c:14210
- #, c-format
- msgid "operand is neither a constant nor a condition code, invalid operand code 'f'"
--msgstr ""
-+msgstr "被演算子は定数でも条件コードでもありません。無効な被演算子コード 'f' です"
- #: config/i386/i386.c:14313
- #, c-format
- msgid "operand is not a condition code, invalid operand code 'Y'"
--msgstr ""
-+msgstr "被演算子は条件コードではありません。無効な被演算子コード 'Y' です"
- #: config/i386/i386.c:14339
- #, c-format
-@@ -3098,7 +3096,7 @@
- #: config/lm32/lm32.c:529
- #, c-format
- msgid "only 0.0 can be loaded as an immediate"
--msgstr ""
-+msgstr "即値としてロードできるのは 0.0 のみです"
- #: config/lm32/lm32.c:599
- msgid "bad operand"
-@@ -3138,15 +3136,15 @@
- #: config/m32r/m32r.c:2290
- msgid "pre-increment address is not a register"
--msgstr ""
-+msgstr "前置増分アドレスがレジスタではありません"
- #: config/m32r/m32r.c:2297
- msgid "pre-decrement address is not a register"
--msgstr ""
-+msgstr "前置減分アドレスがレジスタではありません"
- #: config/m32r/m32r.c:2304
- msgid "post-increment address is not a register"
--msgstr ""
-+msgstr "後置増分アドレスがレジスタではありません"
- #: config/m32r/m32r.c:2380 config/m32r/m32r.c:2394
- #: config/rs6000/rs6000.c:25500
-@@ -3252,7 +3250,7 @@
- #: config/mmix/mmix.c:1589 config/mmix/mmix.c:1719
- msgid "MMIX Internal: Expected a CONST_INT, not this"
--msgstr ""
-+msgstr "MMIX 内部: CONST_INT が予期されますが、異なっています"
- #: config/mmix/mmix.c:1668
- msgid "MMIX Internal: Bad value for 'm', not a CONST_INT"
-@@ -3260,11 +3258,11 @@
- #: config/mmix/mmix.c:1687
- msgid "MMIX Internal: Expected a register, not this"
--msgstr ""
-+msgstr "MMIX 内部: レジスタが予期されますが、異なっています"
- #: config/mmix/mmix.c:1697
- msgid "MMIX Internal: Expected a constant, not this"
--msgstr ""
-+msgstr "MMIX 内部: 定数が予期されますが、異なっています"
- #. We need the original here.
- #: config/mmix/mmix.c:1781
-@@ -3301,7 +3299,7 @@
- #: config/picochip/picochip.c:2983 config/picochip/picochip.c:3015
- msgid "Bad address, not (reg+disp):"
--msgstr ""
-+msgstr "誤ったアドレスです。 (reg+disp) ではありません:"
- #: config/picochip/picochip.c:3029
- msgid "Bad address, not register:"
-@@ -3526,15 +3524,15 @@
- #: config/sh/sh.c:9271
- msgid "created and used with different architectures / ABIs"
--msgstr ""
-+msgstr "作成時と使用時で アーキテクチャ/ABI が異なります"
- #: config/sh/sh.c:9273
- msgid "created and used with different ABIs"
--msgstr ""
-+msgstr "作成時と使用時で ABI が異なります"
- #: config/sh/sh.c:9275
- msgid "created and used with different endianness"
--msgstr ""
-+msgstr "作成時と使用時でエンディアンが異なります"
- #: config/sparc/sparc.c:7445 config/sparc/sparc.c:7451
- #, c-format
-@@ -3617,7 +3615,7 @@
- #: config/vax/vax.c:427
- #, c-format
- msgid "symbol with offset used in PIC mode"
--msgstr ""
-+msgstr "PIC モードで使用されるオフセット付きのシンボルです"
- #: config/vax/vax.c:513
- #, c-format
-@@ -3837,19 +3835,19 @@
- msgstr "%s:%d:%d:   ここから再帰的に実体化されました"
- #: cp/error.c:2913
--#, fuzzy, c-format
-+#, c-format
- msgid "%s:%d:%d:   instantiated from here"
- msgstr "%s:%d:%d:   ここから実体化されました"
- #: cp/error.c:2918
- #, c-format
- msgid "%s:%d:   recursively instantiated from here"
--msgstr ""
-+msgstr "%s:%d:   ここから再帰的に実体化されました"
- #: cp/error.c:2919
--#, fuzzy, c-format
-+#, c-format
- msgid "%s:%d:   instantiated from here"
--msgstr "%s:%d:   ここで実体化されました\n"
-+msgstr "%s:%d:   ここから実体化されました"
- #: cp/error.c:2962
- #, c-format
-@@ -4029,22 +4027,21 @@
- #: fortran/expr.c:607
- #, c-format
- msgid "Constant expression required at %C"
--msgstr ""
-+msgstr "%C では定数式が要求されます"
- #: fortran/expr.c:610
- #, c-format
- msgid "Integer expression required at %C"
--msgstr ""
-+msgstr "%C では整数式が要求されます"
- #: fortran/expr.c:615
--#, fuzzy, c-format
-+#, c-format
- msgid "Integer value too large in expression at %C"
--msgstr "式の整数がオーバーフローしました"
-+msgstr "%C の式内で整数値が大きすぎます"
- #: fortran/expr.c:3147
--#, fuzzy
- msgid "array assignment"
--msgstr "代入"
-+msgstr "配列代入"
- #: fortran/gfortranspec.c:303
- #, c-format
-@@ -4080,7 +4077,7 @@
- #: fortran/io.c:551
- msgid "Unexpected element '%c' in format string at %L"
--msgstr ""
-+msgstr "予期しない要素 '%c' が書式文字列内 (位置 %L) にあります"
- #: fortran/io.c:553
- msgid "Unexpected end of format string"
-@@ -4088,15 +4085,15 @@
- #: fortran/io.c:554
- msgid "Zero width in format descriptor"
--msgstr ""
-+msgstr "幅 0 の書式記述子です"
- #: fortran/io.c:574
- msgid "Missing leading left parenthesis"
--msgstr ""
-+msgstr "前に左小括弧がありません"
- #: fortran/io.c:603
- msgid "Left parenthesis required after '*'"
--msgstr ""
-+msgstr "'*' の後には左小括弧が必要です"
- #: fortran/io.c:634
- msgid "Expected P edit descriptor"
-@@ -4116,9 +4113,8 @@
- msgstr ""
- #: fortran/io.c:844
--#, fuzzy
- msgid "E specifier not allowed with g0 descriptor"
--msgstr "型指定子 `%s' は struct や class の後には使えません"
-+msgstr ""
- #: fortran/io.c:914
- msgid "Positive exponent width required"
-@@ -4362,9 +4358,8 @@
- msgstr ""
- #: fortran/resolve.c:6233
--#, fuzzy
- msgid "End expression in DO loop"
--msgstr "オペランドとして無効な式"
-+msgstr ""
- #: fortran/resolve.c:6237
- msgid "Step expression in DO loop"
-@@ -4564,7 +4559,7 @@
- #: java/jcf-dump.c:1148
- #, c-format
- msgid "  --extdirs PATH          Set extensions directory path\n"
--msgstr ""
-+msgstr "  --extdirs PATH          拡張のディレクトリパスを設定する\n"
- #: java/jcf-dump.c:1149
- #, c-format
-@@ -4734,18 +4729,18 @@
- #: config/pa/pa-hpux11.h:111 config/pa/pa64-hpux.h:30 config/pa/pa64-hpux.h:33
- #: config/pa/pa64-hpux.h:42 config/pa/pa64-hpux.h:45
- msgid "warning: consider linking with '-static' as system libraries with"
--msgstr ""
-+msgstr "警告: システムライブラリとリンクする時は '-static' を指定することを検討してください"
- #: config/pa/pa-hpux10.h:90 config/pa/pa-hpux10.h:93 config/pa/pa-hpux10.h:101
- #: config/pa/pa-hpux10.h:104 config/pa/pa-hpux11.h:109
- #: config/pa/pa-hpux11.h:112 config/pa/pa64-hpux.h:31 config/pa/pa64-hpux.h:34
- #: config/pa/pa64-hpux.h:43 config/pa/pa64-hpux.h:46
- msgid "  profiling support are only provided in archive format"
--msgstr ""
-+msgstr "  プロファイリングサポートは書庫フォーマット内でのみ提供されます"
- #: config/rs6000/darwin.h:99
- msgid " conflicting code gen style switches are used"
--msgstr ""
-+msgstr " 競合しているコード生成スタイルスイッチが使用されています"
- #: config/arm/arm.h:178
- msgid "-msoft-float and -mhard_float may not be used together"
-@@ -4805,7 +4800,7 @@
- #: config/i386/linux-unwind.h:186
- msgid "ax ; {int $0x80 | syscall"
--msgstr ""
-+msgstr "ax ; {int $0x80 | syscall"
- #: config/s390/tpf.h:120
- msgid "static is not supported on TPF-OS"
-@@ -4869,7 +4864,7 @@
- #: java/lang.opt:206
- msgid "--extdirs=<path>\tSet the extension directory path"
--msgstr ""
-+msgstr "--extdirs=<path>\t拡張のディレクトリパスを設定する"
- #: java/lang.opt:216
- msgid "Input file is a file with a list of filenames to compile"
-@@ -5388,7 +5383,7 @@
- #: config/frv/frv.opt:31
- msgid "Enable label alignment optimizations"
--msgstr ""
-+msgstr "ラベル整列最適化を有効にする"
- #: config/frv/frv.opt:35
- msgid "Dynamically allocate cc registers"
-@@ -5452,7 +5447,7 @@
- #: config/frv/frv.opt:116
- msgid "Enable use of GPREL for read-only data in FDPIC"
--msgstr ""
-+msgstr "FDPIC 内の読み取り専用データ用 GPREL の使用を有効にする"
- #: config/frv/frv.opt:120 config/rs6000/rs6000.opt:216
- #: config/pdp11/pdp11.opt:67
-@@ -5460,9 +5455,8 @@
- msgstr "ハードウェア浮動小数点を利用する"
- #: config/frv/frv.opt:124 config/bfin/bfin.opt:77
--#, fuzzy
- msgid "Enable inlining of PLT in function calls"
--msgstr "関数呼び出しの前後でレジスタの保存を有効にする"
-+msgstr "関数呼び出し内で PLT のインライン化を有効にする"
- #: config/frv/frv.opt:128
- msgid "Enable PIC support for building libraries"
-@@ -5478,7 +5472,7 @@
- #: config/frv/frv.opt:140
- msgid "Use media instructions"
--msgstr ""
-+msgstr "media 命令を使用する"
- #: config/frv/frv.opt:144
- msgid "Use multiply add/subtract instructions"
-@@ -5494,7 +5488,7 @@
- #: config/frv/frv.opt:157
- msgid "Do not mark ABI switches in e_flags"
--msgstr ""
-+msgstr "e_flags 内の ABI スイッチをマークしない"
- #: config/frv/frv.opt:161
- msgid "Remove redundant membars"
-@@ -5506,7 +5500,7 @@
- #: config/frv/frv.opt:169
- msgid "Enable setting GPRs to the result of comparisons"
--msgstr ""
-+msgstr "比較結果を汎用レジスタに設定することを有効にする"
- #: config/frv/frv.opt:173
- msgid "Change the amount of scheduler lookahead"
-@@ -5565,9 +5559,8 @@
- msgstr ""
- #: config/mn10300/mn10300.opt:56
--#, fuzzy
- msgid "Allow gcc to generate LIW instructions"
--msgstr "gcc が repeat/erepeat 命令を使用することを許可する"
-+msgstr "gcc が LIW 命令を生成することを許可する"
- #: config/s390/tpf.opt:23
- msgid "Enable TPF-OS tracing code"
-@@ -5640,11 +5633,11 @@
- #: config/s390/s390.opt:91
- msgid "Warn if a function uses alloca or creates an array with dynamic size"
--msgstr ""
-+msgstr "関数で alloca を使用するか、または動的サイズの配列を作成した場合に、警告する"
- #: config/s390/s390.opt:95
- msgid "Warn if a single function's framesize exceeds the given framesize"
--msgstr ""
-+msgstr "一つの関数のフレームサイズが与えられたフレームサイズを超過する場合に警告する"
- #: config/s390/s390.opt:99
- msgid "z/Architecture"
-@@ -5692,7 +5685,7 @@
- #: config/ia64/ia64.opt:56
- msgid "gp is constant (but save/restore gp on indirect calls)"
--msgstr "gp を定数とする(但、間接呼び出しでは gp を save/restore する)"
-+msgstr "gp を定数とする(ただし、間接呼び出しでは gp を save/restore する)"
- #: config/ia64/ia64.opt:60
- msgid "Generate self-relocatable code"
-@@ -5741,39 +5734,39 @@
- #: config/ia64/ia64.opt:107 config/spu/spu.opt:72 config/sh/sh.opt:258
- #: config/pa/pa.opt:51
- msgid "Specify range of registers to make fixed"
--msgstr ""
-+msgstr "固定するレジスタの範囲を指定する"
- #: config/ia64/ia64.opt:119
- msgid "Use data speculation before reload"
--msgstr ""
-+msgstr "reload 前にデータ投機を使用する"
- #: config/ia64/ia64.opt:123
- msgid "Use data speculation after reload"
--msgstr ""
-+msgstr "reload 後にデータ投機を使用する"
- #: config/ia64/ia64.opt:127
- msgid "Use control speculation"
--msgstr ""
-+msgstr "制御投機を使用する"
- #: config/ia64/ia64.opt:131
- msgid "Use in block data speculation before reload"
--msgstr ""
-+msgstr "reload 前にブロック内データ投機を使用する"
- #: config/ia64/ia64.opt:135
- msgid "Use in block data speculation after reload"
--msgstr ""
-+msgstr "reload 後にブロック内データ投機を使用する"
- #: config/ia64/ia64.opt:139
- msgid "Use in block control speculation"
--msgstr ""
-+msgstr "ブロック内制御投機を使用する"
- #: config/ia64/ia64.opt:143
- msgid "Use simple data speculation check"
--msgstr ""
-+msgstr "単純データ投機検査を使用する"
- #: config/ia64/ia64.opt:147
- msgid "Use simple data speculation check for control speculation"
--msgstr ""
-+msgstr "制御投機用の単純データ投機検査を使用する"
- #: config/ia64/ia64.opt:151
- msgid "If set, data speculative instructions will be chosen for schedule only if there are no other choices at the moment "
-@@ -5789,7 +5782,7 @@
- #: config/ia64/ia64.opt:163
- msgid "Place a stop bit after every cycle when scheduling"
--msgstr ""
-+msgstr "スケジューリング時の各サイクル後にストップビットを配置する"
- #: config/ia64/ia64.opt:167
- msgid "Assume that floating-point stores and loads are not likely to cause conflict when placed into one instruction group"
-@@ -5805,7 +5798,7 @@
- #: config/ia64/ia64.opt:179
- msgid "Don't generate checks for control speculation in selective scheduling"
--msgstr ""
-+msgstr "選択的スケジューリング内では制御投機用の検査を生成しない"
- #: config/ia64/vms_symvec_libgcc_s.opt:3
- msgid "! It would be better to auto-generate this file."
-@@ -6109,7 +6102,7 @@
- #: config/m68k/m68k.opt:160 config/bfin/bfin.opt:61
- msgid "Enable separate data segment"
--msgstr ""
-+msgstr "分離データセグメントを有効にする"
- #: config/m68k/m68k.opt:164 config/bfin/bfin.opt:57
- msgid "ID of shared library to build"
-@@ -6149,7 +6142,7 @@
- #: config/i386/mingw.opt:23
- msgid "Warn about none ISO msvcrt scanf/printf width extensions"
--msgstr ""
-+msgstr "非 ISO の msvcrt scanf/printf の幅拡張に関して警告する"
- #: config/i386/mingw.opt:27
- msgid "For nested functions on stack executable permission is set."
-@@ -6201,7 +6194,7 @@
- #: config/i386/i386.opt:114
- msgid "Data greater than given threshold will go into .ldata section in x86-64 medium model"
--msgstr ""
-+msgstr "x86-64 メディアモデルでは与えられた閾値より大きいデータを .ldata セクションに配置する"
- #: config/i386/i386.opt:118
- msgid "Use given x86-64 code model"
-@@ -6217,16 +6210,15 @@
- #: config/i386/i386.opt:129
- msgid "Always use Dynamic Realigned Argument Pointer (DRAP) to realign stack"
--msgstr ""
-+msgstr "スタックを再整列するために動的再整列引数ポインタ (Dynamic Realigned Argument Pointer, DRAP) を常に使用する"
- #: config/i386/i386.opt:133
- msgid "Return values of functions in FPU registers"
- msgstr "FPU レジスタ内の機能の値を返す"
- #: config/i386/i386.opt:137
--#, fuzzy
- msgid "Generate floating point mathematics using given instruction set"
--msgstr "ハードウェア浮動小数点命令を使用する"
-+msgstr "与えられた命令集合を使用して浮動小数数値計算を生成する"
- #: config/i386/i386.opt:149
- msgid "Inline all known string operations"
-@@ -6314,8 +6306,9 @@
- msgstr "8 バイトベクトルをメモリに返す"
- #: config/i386/i386.opt:253
-+#, fuzzy
- msgid "Generate reciprocals instead of divss and sqrtss."
--msgstr ""
-+msgstr "divss および sqrtss の代わりに逆数 (reciprocal) を生成する"
- #: config/i386/i386.opt:257
- msgid "Generate cld instruction in the function prologue."
-@@ -6331,7 +6324,7 @@
- #: config/i386/i386.opt:271
- msgid "Use 128-bit AVX instructions instead of 256-bit AVX instructions in the auto-vectorizer."
--msgstr ""
-+msgstr "自動ベクトル化で 256 ビット AVX 命令の代わりに 128 ビット AVX 命令を使用する"
- #: config/i386/i386.opt:277
- msgid "Generate 32bit i386 code"
-@@ -6382,9 +6375,8 @@
- msgstr "SSE4.1 と SSE4.2 の組み込み関数とコード生成をサポートしない"
- #: config/i386/i386.opt:328
--#, fuzzy
- msgid "%<-msse5%> was removed"
--msgstr "'-msse5' は削除されました"
-+msgstr "%<-msse5%> は削除されました"
- #: config/i386/i386.opt:333
- msgid "Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 and AVX built-in functions and code generation"
-@@ -6544,7 +6536,7 @@
- #: config/rs6000/rs6000.opt:152
- msgid "Use PowerPC General Purpose group optional instructions"
--msgstr "PowerPC 一般用途グループオプション命令を使用する"
-+msgstr "PowerPC 汎用グループオプション命令を使用する"
- #: config/rs6000/rs6000.opt:156
- msgid "Use PowerPC Graphics group optional instructions"
-@@ -7002,7 +6994,7 @@
- #: config/mcore/mcore.opt:56 config/fr30/fr30.opt:27
- msgid "Assume that run-time support has been provided, so omit -lsim from the linker command line"
--msgstr ""
-+msgstr "実行時サポートが提供されると見なし、リンカコマンドラインに -lsim を含めない"
- #: config/mcore/mcore.opt:60
- msgid "Use arbitrary sized immediates in bit operations"
-@@ -7014,7 +7006,7 @@
- #: config/mcore/mcore.opt:71
- msgid "Set the maximum amount for a single stack increment operation"
--msgstr "単一のスタックインクリメント操作の最大値を設定する"
-+msgstr "単一のスタック増分操作の最大値を設定する"
- #: config/mcore/mcore.opt:75
- msgid "Always treat bitfields as int-sized"
-@@ -7234,7 +7226,7 @@
- #: config/sh/sh.opt:246
- msgid "Division strategy, one of: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp, call-div1, call-fp, call-table"
--msgstr ""
-+msgstr "除算戦略、次のいずれか: call, call2, fp, inv, inv:minlat, inv20u, inv20l, inv:call, inv:call2, inv:fp, call-div1, call-fp, call-table"
- #: config/sh/sh.opt:250
- msgid "Specify name for 32 bit signed division function"
-@@ -7282,7 +7274,7 @@
- #: config/sh/sh.opt:298
- msgid "Mark MAC register as call-clobbered"
--msgstr ""
-+msgstr "MAC レジスタを呼び出しで破壊されるとマークする"
- #: config/sh/sh.opt:304
- msgid "Make structs a multiple of 4 bytes (warning: ABI altered)"
-@@ -7960,7 +7952,7 @@
- #: config/m68hc11/m68hc11.opt:49
- msgid "Auto pre/post decrement increment allowed"
--msgstr "自動 pre/post デクリメント インクリメントを許容する"
-+msgstr "自動 前置/後置 減分/増分 を許容する"
- #: config/m68hc11/m68hc11.opt:53
- msgid "Min/max instructions allowed"
-@@ -7972,7 +7964,7 @@
- #: config/m68hc11/m68hc11.opt:61
- msgid "Auto pre/post decrement increment not allowed"
--msgstr "自動 pre/post デクリメント インクリメントを許容しない"
-+msgstr "自動 前置/後置 減分/増分を許容しない"
- #: config/m68hc11/m68hc11.opt:65
- msgid "Use jsr and rts for function calls and returns"
-@@ -8346,7 +8338,7 @@
- #: config/bfin/bfin.opt:69
- msgid "Link with the fast floating-point library"
--msgstr ""
-+msgstr "高速な浮動小数ライブラリとリンクする"
- #: config/bfin/bfin.opt:81
- msgid "Do stack checking using bounds in L1 scratch memory"
-@@ -8382,7 +8374,7 @@
- #: config/picochip/picochip.opt:31
- msgid "Specify whether the byte access instructions should be used. Enabled by default."
--msgstr ""
-+msgstr "バイトアクセス命令を使用するかどうかを指定する。デフォルトでは有効となる"
- #: config/picochip/picochip.opt:35
- msgid "Enable debug output to be generated."
-@@ -8390,11 +8382,11 @@
- #: config/picochip/picochip.opt:39
- msgid "Allow a symbol value to be used as an immediate value in an instruction."
--msgstr ""
-+msgstr "命令内でシンボル値が即値として使用されることを許可する"
- #: config/picochip/picochip.opt:43
- msgid "Generate warnings when inefficient code is known to be generated."
--msgstr ""
-+msgstr "非効率なコードが生成された時に警告する"
- #: config/vxworks.opt:36
- msgid "Assume the VxWorks RTP environment"
-@@ -8418,7 +8410,7 @@
- #: config/darwin.opt:205
- msgid "Warn if constant CFString objects contain non-portable characters"
--msgstr ""
-+msgstr "定数 CFString オブジェクトが移植性の無い文字を含む場合に警告する"
- #: config/darwin.opt:210
- msgid "Generate AT&T-style stubs for Mach-O"
-@@ -8430,7 +8422,7 @@
- #: config/darwin.opt:218
- msgid "Generate code suitable for fast turn around debugging"
--msgstr ""
-+msgstr "デバッグを高速に行うために適したコードを生成する"
- #: config/darwin.opt:227
- msgid "The earliest MacOS X version on which this program will run"
-@@ -8442,15 +8434,15 @@
- #: config/darwin.opt:235
- msgid "Generate code for darwin loadable kernel extensions"
--msgstr ""
-+msgstr "darwin ロード可能カーネル拡張用のコードを生成する"
- #: config/darwin.opt:239
- msgid "Generate code for the kernel or loadable kernel extensions"
--msgstr ""
-+msgstr "カーネル用、またはロード可能カーネル拡張用のコードを生成する"
- #: config/darwin.opt:243
- msgid "-iframework <dir>\tAdd <dir> to the end of the system framework include path"
--msgstr ""
-+msgstr "-iframework <dir>\t<dir> をシステムフレームワークインクルードパスの末尾に加える"
- #: config/lynx.opt:23
- msgid "Support legacy multi-threading"
-@@ -8737,7 +8729,6 @@
- msgstr ""
- #: config/microblaze/microblaze.opt:92
--#, fuzzy
- msgid "Use hardware floating point conversion instructions"
- msgstr "ハードウェア浮動小数点変換命令を使用する"
-@@ -8862,7 +8853,7 @@
- #: c-family/c.opt:249
- msgid "-MT <target>\tAdd an unquoted target"
--msgstr ""
-+msgstr "-MT <target>\tターゲット (引用符を付けない) を追加する"
- #: c-family/c.opt:253
- msgid "Do not generate #line directives"
-@@ -8898,11 +8889,11 @@
- #: c-family/c.opt:288
- msgid "Warn about C constructs that are not in the common subset of C and C++"
--msgstr ""
-+msgstr "C と C++ の共通部分集合では無い C 構文に関して警告する"
- #: c-family/c.opt:292
- msgid "Warn about C++ constructs whose meaning differs between ISO C++ 1998 and ISO C++ 200x"
--msgstr ""
-+msgstr "ISO C++ 1998 と ISO C++ 200x で意味が異なる C++ 構文に関して警告する"
- #: c-family/c.opt:296
- msgid "Warn about casts which discard qualifiers"
-@@ -8962,7 +8953,7 @@
- #: c-family/c.opt:352
- msgid "Warn about stray tokens after #elif and #endif"
--msgstr ""
-+msgstr "#elif および #endif の後にあるはぐれたトークンに関して警告する"
- #: c-family/c.opt:356
- msgid "Warn about comparison of different enum types"
-@@ -8977,9 +8968,8 @@
- msgstr "浮動小数点数の等価比較に関して警告する"
- #: c-family/c.opt:372
--#, fuzzy
- msgid "Warn about printf/scanf/strftime/strfmon format string anomalies"
--msgstr "printf/scanf/strftime/strfmon 形式の変則的なものに関して警告する"
-+msgstr "printf/scanf/strftime/strfmon 書式文字列異常に関して警告する"
- #: c-family/c.opt:376
- msgid "Warn if passing too many arguments to a function for its format string"
-@@ -8998,9 +8988,8 @@
- msgstr "セキュリティ問題になる可能性がある書式関数に関して警告する"
- #: c-family/c.opt:392
--#, fuzzy
- msgid "Warn about strftime formats yielding 2-digit years"
--msgstr "strftime 形式が二桁で年を表している時の警告しない"
-+msgstr "strftime 書式が 2 桁の年の場合に警告する"
- #: c-family/c.opt:396
- msgid "Warn about zero-length formats"
-@@ -9409,7 +9398,7 @@
- #: c-family/c.opt:823
- msgid "Don't emit dllexported inline functions unless needed"
--msgstr ""
-+msgstr "必要が無い限り dllexported インライン関数を発行しない"
- #: c-family/c.opt:830
- msgid "Allow implicit conversions between vectors with differing numbers of subparts and/or differing element types."
-@@ -9501,7 +9490,7 @@
- #: c-family/c.opt:942
- msgid "Generate run time type descriptor information"
--msgstr ""
-+msgstr "実行時型記述子情報を生成する"
- #: c-family/c.opt:946
- msgid "Use the same size for double as for float"
-@@ -9889,19 +9878,16 @@
- msgstr "関数が __attribute__((pure)) の候補となりそうな場合に警告する"
- #: common.opt:608
--#, fuzzy
- msgid "Warn about enumerated switches, with no default, missing a case"
--msgstr "列挙定数の switch で case 指定が欠けているものに関して警告する"
-+msgstr "列挙定数を使用した switch 文で default 文が無いか特定の case が無い場合に警告する"
- #: common.opt:612
--#, fuzzy
- msgid "Warn about enumerated switches missing a \"default:\" statement"
--msgstr "列挙定数の switch で case 指定が欠けているものに関して警告する"
-+msgstr "列挙定数を使用した switch 文で \"default:\" 文が無い場合に警告する"
- #: common.opt:616
--#, fuzzy
- msgid "Warn about all enumerated switches missing a specific case"
--msgstr "列挙定数の switch で case 指定が欠けているものに関して警告する"
-+msgstr "列挙定数を使用した switch 文で特定の case が無い場合に警告する"
- #: common.opt:620
- msgid "Do not suppress warnings from system headers"
-@@ -10000,9 +9986,8 @@
- msgstr "自動増加/減少命令を生成する"
- #: common.opt:821
--#, fuzzy
- msgid "Generate code to check bounds before indexing arrays"
--msgstr "配列の添字と添字境界を検査するコードを生成する"
-+msgstr "配列の添え字を使用する前に境界検査を行うコードを生成する"
- #: common.opt:825
- #, fuzzy
-@@ -10043,7 +10028,7 @@
- #: common.opt:864
- msgid "Looks for opportunities to reduce stack adjustments and stack references."
--msgstr ""
-+msgstr "スタック調整およびスタック参照を削減する機会を探す"
- #: common.opt:868
- msgid "Do not put uninitialized globals in the common section"
-@@ -10058,18 +10043,16 @@
- msgstr ""
- #: common.opt:884
--#, fuzzy
- msgid "Perform comparison elimination after register allocation has finished"
--msgstr "グローバル共通部分式を除去する"
-+msgstr "レジスタは位置が完了した後に比較の除去を行う"
- #: common.opt:888
- msgid "Do not perform optimizations increasing noticeably stack usage"
--msgstr ""
-+msgstr "スタック使用量を著しく増加させる最適化を行わない"
- #: common.opt:892
--#, fuzzy
- msgid "Perform a register copy-propagation optimization pass"
--msgstr "最適化過程のレジスタつけ変えを行なう"
-+msgstr ""
- #: common.opt:896
- msgid "Perform cross-jumping optimization"
-@@ -10101,7 +10084,7 @@
- #: common.opt:928
- msgid "Map one directory name to another in debug information"
--msgstr ""
-+msgstr "デバッグ情報内のディレクトリー名を他のものにマップする"
- #: common.opt:934
- msgid "Defer popping functions args from stack until later"
-@@ -10116,9 +10099,8 @@
- msgstr "無意味な null ポインタ検査を削除する"
- #: common.opt:946
--#, fuzzy
- msgid "Try to convert virtual calls to direct ones."
--msgstr "リンカが PIC 呼び出しを直接呼び出しに変更することを許可するように試みる"
-+msgstr "仮想呼び出しを直接呼び出しに変換することを試みる"
- #: common.opt:950
- #, fuzzy
-@@ -10137,7 +10119,7 @@
- #: common.opt:978
- msgid "-fdump-final-insns=filename\tDump to filename the insns at the end of translation"
--msgstr ""
-+msgstr "-fdump-final-insns=filename\t翻訳終了時に filename へ命令をダンプする"
- #: common.opt:982
- msgid "-fdump-go-spec=filename\tWrite all declarations to file as Go code"
-@@ -10173,7 +10155,7 @@
- #: common.opt:1014 common.opt:1018
- msgid "Perform unused type elimination in debug info"
--msgstr ""
-+msgstr "デバッグ情報内で使用されていない型の除去を行う"
- #: common.opt:1022
- msgid "Do not suppress C++ class debug information."
-@@ -10181,25 +10163,24 @@
- #: common.opt:1026
- msgid "Generate debug information to support Identical Code Folding (ICF)"
--msgstr ""
-+msgstr "Identical Code Folding (ICF) をサポートするためのデバッグ情報を生成する"
- #: common.opt:1030
- msgid "Enable exception handling"
- msgstr "例外処理を有効にする"
- #: common.opt:1034
--#, fuzzy
- msgid "Perform a number of minor, expensive optimizations"
--msgstr "目立たない、コストのかかる最適化を行なう"
-+msgstr "多くの、目立たないがコストが高い最適化を行う"
- #: common.opt:1038
- msgid "-fexcess-precision=[fast|standard]\tSpecify handling of excess floating-point precision"
--msgstr ""
-+msgstr "-fexcess-precision=[fast|standard]\t余分な浮動小数点精度の取り扱いを指定する"
- #: common.opt:1041
- #, c-format
- msgid "unknown excess precision style %qs"
--msgstr ""
-+msgstr "不明な余分な精度スタイル %qs です"
- #: common.opt:1054
- msgid "Assume no NaNs or infinities are generated"
-@@ -10222,52 +10203,45 @@
- msgstr ""
- #: common.opt:1077
--#, fuzzy, c-format
-+#, c-format
- msgid "unknown floating point contraction style %qs"
--msgstr "浮動小数点定数を TOC 内に配置する"
-+msgstr "不明な浮動小数短縮形 %qs です"
- #: common.opt:1094
- msgid "Allow function addresses to be held in registers"
- msgstr "関数アドレスをレジスタに持たせる事を許可する"
- #: common.opt:1098
--#, fuzzy
- msgid "Place each function into its own section"
--msgstr "各々の関数をそれ自身のセクションに配置する"
-+msgstr "それぞれの関数をそれ自身のセクションに配置する"
- #: common.opt:1102
--#, fuzzy
- msgid "Perform global common subexpression elimination"
--msgstr "グローバル共通部分式を除去する"
-+msgstr "大域共通部分式の除去を行う"
- #: common.opt:1106
--#, fuzzy
- msgid "Perform enhanced load motion during global common subexpression elimination"
--msgstr "グローバル共通部分式を除去する"
-+msgstr ""
- #: common.opt:1110
--#, fuzzy
- msgid "Perform store motion after global common subexpression elimination"
--msgstr "グローバル共通部分式を除去する"
-+msgstr ""
- #: common.opt:1114
- msgid "Perform redundant load after store elimination in global common subexpression"
- msgstr ""
- #: common.opt:1119
--#, fuzzy
- msgid "Perform global common subexpression elimination after register allocation"
--msgstr "グローバル共通部分式を除去する"
-+msgstr "レジスタ配置後に大域共通部分式の除去を行う"
- #: common.opt:1125
--#, fuzzy
- msgid "Enable in and out of Graphite representation"
--msgstr "自動テンプレート実体化を有効にする"
-+msgstr ""
- #: common.opt:1129
--#, fuzzy
- msgid "Enable Graphite Identity transformation"
--msgstr "呼び出しグラフ情報を送出する"
-+msgstr ""
- #: common.opt:1133
- msgid "Mark all loops as parallel"
-@@ -10306,9 +10280,8 @@
- msgstr ""
- #: common.opt:1173
--#, fuzzy
- msgid "Perform conversion of conditional jumps to conditional execution"
--msgstr "条件的な実行への変更のための閾値を変更する"
-+msgstr ""
- #: common.opt:1177
- msgid "Convert conditional jumps in innermost loops to branchless equivalents"
-@@ -10376,13 +10349,12 @@
- msgstr ""
- #: common.opt:1253
--#, fuzzy
- msgid "Discover pure and const functions"
--msgstr "使われない仮想関数を切り捨てる"
-+msgstr "純粋および定数関数を見つける"
- #: common.opt:1257
- msgid "Discover readonly and non addressable static variables"
--msgstr ""
-+msgstr "読み取り専用およびアドレス付けできない静的変数を見つける"
- #: common.opt:1261
- msgid "Perform matrix layout flattening and transposing based"
-@@ -10415,9 +10387,8 @@
- msgstr ""
- #: common.opt:1305
--#, fuzzy
- msgid "Share slots for saving different hard registers."
--msgstr "引数レジスタにローカルのものを格納する"
-+msgstr ""
- #: common.opt:1309
- msgid "Share stack slots for spilled pseudo-registers."
-@@ -10621,19 +10592,19 @@
- #: common.opt:1521
- msgid "Enable basic program profiling code"
--msgstr ""
-+msgstr "基本プログラムプロファイリングコードを有効にする"
- #: common.opt:1525
- msgid "Insert arc-based program profiling code"
--msgstr ""
-+msgstr "円弧ベースプログラムプロファイリングコードを挿入する"
- #: common.opt:1529
- msgid "Set the top-level directory for storing the profile data."
--msgstr ""
-+msgstr "プロファイルデータ保存用の最上位ディレクリーを設定する"
- #: common.opt:1534
- msgid "Enable correction of flow inconsistent profile data input"
--msgstr ""
-+msgstr "フロー一貫性が無いデータ入力の訂正を有効にする"
- #: common.opt:1538
- msgid "Enable common options for generating profile info for profile feedback directed optimizations"
-@@ -10653,7 +10624,7 @@
- #: common.opt:1554
- msgid "Insert code to profile values of expressions"
--msgstr ""
-+msgstr "式の値をプロファイルするためのコードを挿入する"
- #: common.opt:1561
- msgid "-frandom-seed=<string>\tMake compile reproducible using <string>"
-@@ -11836,7 +11807,7 @@
- #: c-decl.c:1150
- #, gcc-internal-format
- msgid "nested function %q+D declared but never defined"
--msgstr ""
-+msgstr "入れ子になった関数 %q+D が宣言されましたが定義されていません"
- #: c-decl.c:1162
- #, gcc-internal-format
-@@ -11893,7 +11864,7 @@
- #: c-decl.c:1613
- #, gcc-internal-format
- msgid "prototype for %q+D follows non-prototype definition"
--msgstr ""
-+msgstr "非プロトタイプ定義に続いて %q+D 用のプロトタイプがあります"
- #: c-decl.c:1628
- #, gcc-internal-format
-@@ -11969,9 +11940,9 @@
- msgstr "%q+D が異なる型で再定義されました"
- #: c-decl.c:1818
--#, fuzzy, gcc-internal-format
-+#, gcc-internal-format
- msgid "redefinition of typedef %q+D with variably modified type"
--msgstr "%q+D が異なる型で再定義されました"
-+msgstr ""
- #: c-decl.c:1825
- #, gcc-internal-format
-@@ -12016,17 +11987,17 @@
- #: c-decl.c:2001
- #, gcc-internal-format
- msgid "extern declaration of %q+D follows declaration with no linkage"
--msgstr ""
-+msgstr "リンク無し宣言の後に %q+D の extern 宣言が続いています"
- #: c-decl.c:2037
- #, gcc-internal-format
- msgid "declaration of %q+D with no linkage follows extern declaration"
--msgstr ""
-+msgstr "extern 宣言の後にリンク無し %q+D の宣言が続いています"
- #: c-decl.c:2043
- #, gcc-internal-format
- msgid "redeclaration of %q+D with no linkage"
--msgstr ""
-+msgstr "リンク無し %q+D の再定義です"
- #: c-decl.c:2069
- #, gcc-internal-format
-@@ -12354,7 +12325,7 @@
- #: c-decl.c:4614
- #, gcc-internal-format
- msgid "defining a type in a compound literal is invalid in C++"
--msgstr ""
-+msgstr "複合リテラル内での型定義は C++ では無効です"
- #: c-decl.c:4666 c-decl.c:4681
- #, gcc-internal-format
-@@ -13393,23 +13364,23 @@
- #: c-parser.c:1829
- #, gcc-internal-format
- msgid "expression in static assertion is not an integer"
--msgstr ""
-+msgstr "静的アサーション内の式が整数ではありません"
- #: c-parser.c:1836
- #, gcc-internal-format
- msgid "expression in static assertion is not an integer constant expression"
--msgstr ""
-+msgstr "静的アサーション内の式が整数定数式ではありません"
- #: c-parser.c:1841
- #, gcc-internal-format
- msgid "expression in static assertion is not constant"
--msgstr ""
-+msgstr "静的アサーション内の式が定数ではありません"
- #. Report the error.
- #: c-parser.c:1846 cp/semantics.c:4719
- #, gcc-internal-format
- msgid "static assertion failed: %E"
--msgstr ""
-+msgstr "静的アサーションに失敗しました: %E"
- #: c-parser.c:2207 c-parser.c:3063 c-parser.c:3709 c-parser.c:3983
- #: c-parser.c:5084 c-parser.c:5175 c-parser.c:5800 c-parser.c:6083
-@@ -14125,12 +14096,12 @@
- #: c-typeck.c:3578
- #, gcc-internal-format
- msgid "increment of enumeration value is invalid in C++"
--msgstr "列挙値のインクリメントは C++ では無効です"
-+msgstr "列挙値の増分は C++ では無効です"
- #: c-typeck.c:3581
- #, gcc-internal-format
- msgid "decrement of enumeration value is invalid in C++"
--msgstr "列挙値のデクリメントは C++ では無効です"
-+msgstr "列挙値の減分は C++ では無効です"
- #: c-typeck.c:3594
- #, gcc-internal-format
-@@ -14140,22 +14111,22 @@
- #: c-typeck.c:3613 c-typeck.c:3645
- #, gcc-internal-format
- msgid "wrong type argument to increment"
--msgstr "インクリメントする引数の型が間違っています"
-+msgstr "増分する引数の型が間違っています"
- #: c-typeck.c:3615 c-typeck.c:3648
- #, gcc-internal-format
- msgid "wrong type argument to decrement"
--msgstr "デクリメントする引数の型が間違っています"
-+msgstr "減分する引数の型が間違っています"
- #: c-typeck.c:3635
- #, gcc-internal-format
- msgid "increment of pointer to unknown structure"
--msgstr "不明な構造体へのポインタのインクリメントです"
-+msgstr "不明な構造体へのポインタの増分です"
- #: c-typeck.c:3638
- #, gcc-internal-format
- msgid "decrement of pointer to unknown structure"
--msgstr "不明な構造体へのポインタのデクリメントです"
-+msgstr "不明な構造体へのポインタの減分です"
- #: c-typeck.c:3722
- #, gcc-internal-format
-@@ -14170,12 +14141,12 @@
- #: c-typeck.c:3895 c-family/c-common.c:8658
- #, gcc-internal-format
- msgid "increment of read-only location %qE"
--msgstr "読み取り専用位置 %qE のインクリメントです"
-+msgstr "読み取り専用位置 %qE の増分です"
- #: c-typeck.c:3898 c-family/c-common.c:8659
- #, gcc-internal-format
- msgid "decrement of read-only location %qE"
--msgstr "読み取り専用位置 %qE のデクリメントです"
-+msgstr "読み取り専用位置 %qE の減分です"
- #: c-typeck.c:3939
- #, gcc-internal-format
-@@ -19787,12 +19758,12 @@
- #: c-family/c-common.c:8611
- #, gcc-internal-format
- msgid "increment of member %qD in read-only object"
--msgstr "読み取り専用オブジェクト内のメンバ %qD のインクリメントです"
-+msgstr "読み取り専用オブジェクト内のメンバ %qD の増分です"
- #: c-family/c-common.c:8613
- #, gcc-internal-format
- msgid "decrement of member %qD in read-only object"
--msgstr "読み取り専用オブジェクト内のメンバ %qD のデクリメントです"
-+msgstr "読み取り専用オブジェクト内のメンバ %qD の減分です"
- #: c-family/c-common.c:8615
- #, gcc-internal-format
-@@ -19807,12 +19778,12 @@
- #: c-family/c-common.c:8620
- #, gcc-internal-format
- msgid "increment of read-only member %qD"
--msgstr "読み取り専用メンバ %qD のインクリメントです"
-+msgstr "読み取り専用メンバ %qD の増分です"
- #: c-family/c-common.c:8621
- #, gcc-internal-format
- msgid "decrement of read-only member %qD"
--msgstr "読み取り専用メンバ %qD のデクリメントです"
-+msgstr "読み取り専用メンバ %qD の減分です"
- #: c-family/c-common.c:8622
- #, gcc-internal-format
-@@ -19827,12 +19798,12 @@
- #: c-family/c-common.c:8627
- #, gcc-internal-format
- msgid "increment of read-only variable %qD"
--msgstr "読み取り専用変数 %qD のインクリメントです"
-+msgstr "読み取り専用変数 %qD の増分です"
- #: c-family/c-common.c:8628
- #, gcc-internal-format
- msgid "decrement of read-only variable %qD"
--msgstr "読み取り専用変数 %qD のデクリメントです"
-+msgstr "読み取り専用変数 %qD の減分です"
- #: c-family/c-common.c:8629
- #, gcc-internal-format
-@@ -19847,12 +19818,12 @@
- #: c-family/c-common.c:8633
- #, gcc-internal-format
- msgid "increment of read-only parameter %qD"
--msgstr "読み取り専用パラメータ %qD のインクリメントです"
-+msgstr "読み取り専用パラメータ %qD の増分です"
- #: c-family/c-common.c:8634
- #, gcc-internal-format
- msgid "decrement of read-only parameter %qD"
--msgstr "読み取り専用パラメータ %qD のデクリメントです"
-+msgstr "読み取り専用パラメータ %qD の減分です"
- #: c-family/c-common.c:8635
- #, gcc-internal-format
-@@ -19867,12 +19838,12 @@
- #: c-family/c-common.c:8642
- #, gcc-internal-format
- msgid "increment of read-only named return value %qD"
--msgstr "読み取り専用名前付き戻り値 %qD のインクリメントです"
-+msgstr "読み取り専用名前付き戻り値 %qD の増分です"
- #: c-family/c-common.c:8644
- #, gcc-internal-format
- msgid "decrement of read-only named return value %qD"
--msgstr "読み取り専用名前付き戻り値 %qD のデクリメントです"
-+msgstr "読み取り専用名前付き戻り値 %qD の減分です"
- #: c-family/c-common.c:8646
- #, gcc-internal-format
-@@ -19887,12 +19858,12 @@
- #: c-family/c-common.c:8652
- #, gcc-internal-format
- msgid "increment of function %qD"
--msgstr "関数 %qD のインクリメントです"
-+msgstr "関数 %qD の増分です"
- #: c-family/c-common.c:8653
- #, gcc-internal-format
- msgid "decrement of function %qD"
--msgstr "関数 %qD のデクリメントです"
-+msgstr "関数 %qD の減分です"
- #: c-family/c-common.c:8654
- #, gcc-internal-format
-@@ -19912,12 +19883,12 @@
- #: c-family/c-common.c:8677
- #, gcc-internal-format
- msgid "lvalue required as increment operand"
--msgstr "インクリメントの被演算子として左辺値が必要です"
-+msgstr "増分の被演算子として左辺値が必要です"
- #: c-family/c-common.c:8680
- #, gcc-internal-format
- msgid "lvalue required as decrement operand"
--msgstr "デクリメントの被演算子として左辺値が必要です"
-+msgstr "減分の被演算子として左辺値が必要です"
- #: c-family/c-common.c:8683
- #, gcc-internal-format
-@@ -20556,12 +20527,12 @@
- #: c-family/c-omp.c:375 cp/semantics.c:4431
- #, gcc-internal-format
- msgid "missing increment expression"
--msgstr "インクリメント式がありません"
-+msgstr "増分式がありません"
- #: c-family/c-omp.c:444 cp/semantics.c:4287
- #, gcc-internal-format
- msgid "invalid increment expression"
--msgstr "無効なインクリメント式です"
-+msgstr "無効な増分式です"
- #: c-family/c-opts.c:303
- #, gcc-internal-format
-@@ -20571,7 +20542,7 @@
- #: c-family/c-opts.c:306
- #, gcc-internal-format
- msgid "obsolete option -I- used, please use -iquote instead"
--msgstr "廃止あれたオプション -I- が使用されています。代わりに -iquote を使用してください"
-+msgstr "廃止されたオプション -I- が使用されています。代わりに -iquote を使用してください"
- #: c-family/c-opts.c:486
- #, gcc-internal-format
-Index: gcc/tree-object-size.c
-===================================================================
---- gcc/tree-object-size.c     (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ gcc/tree-object-size.c     (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -175,7 +175,7 @@
-       unsigned HOST_WIDE_INT sz;
-       if (!osi || (object_size_type & 1) != 0
--        || TREE_CODE (pt_var) != SSA_NAME)
-+        || TREE_CODE (TREE_OPERAND (pt_var, 0)) != SSA_NAME)
-       {
-         sz = compute_builtin_object_size (TREE_OPERAND (pt_var, 0),
-                                           object_size_type & ~1);
+--- 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_6_2_release)    (wersja 181284)
-+++ gcc/c-parser.c     (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -6294,7 +6294,7 @@
-             c_parser_error (parser, "expected identifier");
-           c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
-                                      "expected %<)%>");
--          expr.value = fold_offsetof (offsetof_ref, NULL_TREE);
-+          expr.value = fold_offsetof (offsetof_ref);
-         }
-         break;
-       case RID_CHOOSE_EXPR:
-Index: gcc/config/sparc/sparc.md
+--- 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/sparc/sparc.md  (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ gcc/config/sparc/sparc.md  (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -1813,8 +1813,8 @@
- })
- (define_insn "*movsf_insn"
--  [(set (match_operand:V32 0 "nonimmediate_operand" "=d,f,*r,*r,*r,f,*r,m,m")
--      (match_operand:V32 1 "input_operand"        "GY,f,*rRY,Q,S,m,m,f,*rGY"))]
-+  [(set (match_operand:V32 0 "nonimmediate_operand" "=d,f,  *r,*r,*r,f,*r,m,   m")
-+      (match_operand:V32 1 "input_operand"        "GY,f,*rRY, Q, S,m, m,f,*rGY"))]
-   "TARGET_FPU
-    && (register_operand (operands[0], <V32:MODE>mode)
-        || register_or_zero_operand (operands[1], <V32:MODE>mode))"
-@@ -1861,8 +1861,8 @@
- ;; when -mno-fpu.
- (define_insn "*movsf_insn_no_fpu"
--  [(set (match_operand:SF 0 "nonimmediate_operand" "=r,r,r,r,m")
--      (match_operand:SF 1 "input_operand"    "rR,Q,S,m,rG"))]
-+  [(set (match_operand:SF 0 "nonimmediate_operand" "=r,r,r,r, m")
-+      (match_operand:SF 1 "input_operand"        "rR,Q,S,m,rG"))]
-   "! TARGET_FPU
-    && (register_operand (operands[0], SFmode)
-        || register_or_zero_operand (operands[1], SFmode))"
-@@ -1948,8 +1948,8 @@
- ;; Be careful, fmovd does not exist when !v9.
- (define_insn "*movdf_insn_sp32"
--  [(set (match_operand:DF 0 "nonimmediate_operand" "=e,W,U,T,o,e,*r,o,e,o")
--      (match_operand:DF 1 "input_operand"    "W#F,e,T,U,G,e,*rFo,*r,o#F,e"))]
-+  [(set (match_operand:DF 0 "nonimmediate_operand" "= e,W,U,T,o,e,  *r, o,  e,o")
-+      (match_operand:DF 1 "input_operand"        "W#F,e,T,U,G,e,*rFo,*r,o#F,e"))]
-   "TARGET_FPU
-    && ! TARGET_V9
-    && (register_operand (operands[0], DFmode)
-@@ -1969,8 +1969,8 @@
-   (set_attr "length" "*,*,*,*,2,2,2,2,2,2")])
- (define_insn "*movdf_insn_sp32_no_fpu"
--  [(set (match_operand:DF 0 "nonimmediate_operand" "=U,T,o,r,o")
--      (match_operand:DF 1 "input_operand"    "T,U,G,ro,r"))]
-+  [(set (match_operand:DF 0 "nonimmediate_operand" "=U,T,o, r,o")
-+      (match_operand:DF 1 "input_operand"        " T,U,G,ro,r"))]
-   "! TARGET_FPU
-    && ! TARGET_V9
-    && (register_operand (operands[0], DFmode)
-@@ -1986,8 +1986,8 @@
- ;; We have available v9 double floats but not 64-bit integer registers.
- (define_insn "*movdf_insn_sp32_v9"
--  [(set (match_operand:V64 0 "nonimmediate_operand" "=b,e,e,T,W,U,T,f,*r,o")
--        (match_operand:V64 1 "input_operand" "GY,e,W#F,GY,e,T,U,o#F,*roGYDF,*rGYf"))]
-+  [(set (match_operand:V64 0 "nonimmediate_operand" "=b,e,  e, T,W,U,T,  f,   *r,    o")
-+      (match_operand:V64 1 "input_operand"        "GY,e,W#F,GY,e,T,U,o#F,*roFD,*rGYf"))]
-   "TARGET_FPU
-    && TARGET_V9
-    && ! TARGET_ARCH64
-@@ -2009,8 +2009,8 @@
-    (set_attr "fptype" "double,double,*,*,*,*,*,*,*,*")])
- (define_insn "*movdf_insn_sp32_v9_no_fpu"
--  [(set (match_operand:DF 0 "nonimmediate_operand" "=U,T,T,r,o")
--      (match_operand:DF 1 "input_operand"    "T,U,G,ro,rG"))]
-+  [(set (match_operand:DF 0 "nonimmediate_operand" "=U,T,T, r, o")
-+      (match_operand:DF 1 "input_operand"        " T,U,G,ro,rG"))]
-   "! TARGET_FPU
-    && TARGET_V9
-    && ! TARGET_ARCH64
-@@ -2027,8 +2027,8 @@
- ;; We have available both v9 double floats and 64-bit integer registers.
- (define_insn "*movdf_insn_sp64"
--  [(set (match_operand:V64 0 "nonimmediate_operand" "=b,e,e,W,*r,*r,m,*r")
--        (match_operand:V64 1 "input_operand"    "GY,e,W#F,e,*rGY,m,*rGY,DF"))]
-+  [(set (match_operand:V64 0 "nonimmediate_operand" "=b,e,  e,W,  *r,*r,   m,*r")
-+      (match_operand:V64 1 "input_operand"        "GY,e,W#F,e,*rGY, m,*rGY,FD"))]
-   "TARGET_FPU
-    && TARGET_ARCH64
-    && (register_operand (operands[0], <V64:MODE>mode)
-@@ -2047,8 +2047,8 @@
-    (set_attr "fptype" "double,double,*,*,*,*,*,*")])
- (define_insn "*movdf_insn_sp64_no_fpu"
--  [(set (match_operand:DF 0 "nonimmediate_operand" "=r,r,m")
--        (match_operand:DF 1 "input_operand"    "r,m,rG"))]
-+  [(set (match_operand:DF 0 "nonimmediate_operand" "=r,r, m")
-+      (match_operand:DF 1 "input_operand"         "r,m,rG"))]
-   "! TARGET_FPU
-    && TARGET_ARCH64
-    && (register_operand (operands[0], DFmode)
-@@ -2288,8 +2288,8 @@
- })
- (define_insn "*movtf_insn_sp32"
--  [(set (match_operand:TF 0 "nonimmediate_operand" "=b,e,o,U,r")
--      (match_operand:TF 1 "input_operand"    "G,oe,GeUr,o,roG"))]
-+  [(set (match_operand:TF 0 "nonimmediate_operand" "=b, e,   o,U,  r")
-+      (match_operand:TF 1 "input_operand"        " G,oe,GeUr,o,roG"))]
-   "TARGET_FPU
-    && ! TARGET_ARCH64
-    && (register_operand (operands[0], TFmode)
-@@ -2302,8 +2302,8 @@
- ;; when -mno-fpu.
- (define_insn "*movtf_insn_sp32_no_fpu"
--  [(set (match_operand:TF 0 "nonimmediate_operand" "=o,U,o,r,o")
--      (match_operand:TF 1 "input_operand"    "G,o,U,roG,r"))]
-+  [(set (match_operand:TF 0 "nonimmediate_operand" "=o,U,o,  r,o")
-+      (match_operand:TF 1 "input_operand"        " G,o,U,roG,r"))]
-   "! TARGET_FPU
-    && ! TARGET_ARCH64
-    && (register_operand (operands[0], TFmode)
-@@ -2312,8 +2312,8 @@
-   [(set_attr "length" "4")])
- (define_insn "*movtf_insn_sp64"
--  [(set (match_operand:TF 0 "nonimmediate_operand" "=b,e,o,r")
--        (match_operand:TF 1 "input_operand"    "G,oe,Ger,roG"))]
-+  [(set (match_operand:TF 0 "nonimmediate_operand" "=b, e,  o,  r")
-+      (match_operand:TF 1 "input_operand"         "G,oe,Ger,roG"))]
-   "TARGET_FPU
-    && TARGET_ARCH64
-    && ! TARGET_HARD_QUAD
-@@ -2323,8 +2323,8 @@
-   [(set_attr "length" "2")])
- (define_insn "*movtf_insn_sp64_hq"
--  [(set (match_operand:TF 0 "nonimmediate_operand" "=b,e,e,m,o,r")
--        (match_operand:TF 1 "input_operand"    "G,e,m,e,rG,roG"))]
-+  [(set (match_operand:TF 0 "nonimmediate_operand" "=b,e,e,m, o,  r")
-+      (match_operand:TF 1 "input_operand"         "G,e,m,e,rG,roG"))]
-   "TARGET_FPU
-    && TARGET_ARCH64
-    && TARGET_HARD_QUAD
-@@ -2341,8 +2341,8 @@
-    (set_attr "length" "2,*,*,*,2,2")])
- (define_insn "*movtf_insn_sp64_no_fpu"
--  [(set (match_operand:TF 0 "nonimmediate_operand" "=r,o")
--        (match_operand:TF 1 "input_operand"    "orG,rG"))]
-+  [(set (match_operand:TF 0 "nonimmediate_operand" "=  r, o")
-+      (match_operand:TF 1 "input_operand"         "orG,rG"))]
-   "! TARGET_FPU
-    && TARGET_ARCH64
-    && (register_operand (operands[0], TFmode)
-Index: gcc/config/sparc/sparc.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/sparc/sparc.h   (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ gcc/config/sparc/sparc.h   (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -408,6 +408,7 @@
- %{mcpu=sparclite:-Asparclite} \
- %{mcpu=sparclite86x:-Asparclite} \
- %{mcpu=f930:-Asparclite} %{mcpu=f934:-Asparclite} \
-+%{mcpu=v8:-Av8} \
- %{mv8plus:-Av8plus} \
- %{mcpu=v9:-Av9} \
- %{mcpu=ultrasparc:%{!mv8plus:-Av9a}} \
-Index: gcc/config/i386/i386.md
+--- 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/i386/i386.md    (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ gcc/config/i386/i386.md    (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -5103,7 +5103,7 @@
-    && reload_completed
-    && (SSE_REG_P (operands[0])
-        || (GET_CODE (operands[0]) == SUBREG
--         && SSE_REG_P (operands[0])))"
-+         && SSE_REG_P (SUBREG_REG (operands[0]))))"
-   [(set (match_dup 0) (float:MODEF (match_dup 1)))])
- (define_split
-@@ -5116,7 +5116,7 @@
-    && reload_completed
-    && (SSE_REG_P (operands[0])
-        || (GET_CODE (operands[0]) == SUBREG
--         && SSE_REG_P (operands[0])))"
-+         && SSE_REG_P (SUBREG_REG (operands[0]))))"
-   [(set (match_dup 2) (match_dup 1))
-    (set (match_dup 0) (float:MODEF (match_dup 2)))])
-@@ -5207,7 +5207,7 @@
-    && reload_completed
-    && (SSE_REG_P (operands[0])
-        || (GET_CODE (operands[0]) == SUBREG
--         && SSE_REG_P (operands[0])))"
-+         && SSE_REG_P (SUBREG_REG (operands[0]))))"
-   [(const_int 0)]
- {
-   rtx op1 = operands[1];
-@@ -5248,7 +5248,7 @@
-    && reload_completed
-    && (SSE_REG_P (operands[0])
-        || (GET_CODE (operands[0]) == SUBREG
--         && SSE_REG_P (operands[0])))"
-+         && SSE_REG_P (SUBREG_REG (operands[0]))))"
-   [(const_int 0)]
- {
-   operands[3] = simplify_gen_subreg (<ssevecmode>mode, operands[0],
-@@ -5270,7 +5270,7 @@
-    && reload_completed
-    && (SSE_REG_P (operands[0])
-        || (GET_CODE (operands[0]) == SUBREG
--         && SSE_REG_P (operands[0])))"
-+         && SSE_REG_P (SUBREG_REG (operands[0]))))"
-   [(const_int 0)]
- {
-   rtx op1 = operands[1];
-@@ -5314,7 +5314,7 @@
-    && reload_completed
-    && (SSE_REG_P (operands[0])
-        || (GET_CODE (operands[0]) == SUBREG
--         && SSE_REG_P (operands[0])))"
-+         && SSE_REG_P (SUBREG_REG (operands[0]))))"
-   [(const_int 0)]
- {
-   operands[3] = simplify_gen_subreg (<ssevecmode>mode, operands[0],
-@@ -5375,7 +5375,7 @@
-    && reload_completed
-    && (SSE_REG_P (operands[0])
-        || (GET_CODE (operands[0]) == SUBREG
--         && SSE_REG_P (operands[0])))"
-+         && SSE_REG_P (SUBREG_REG (operands[0]))))"
-   [(set (match_dup 0) (float:MODEF (match_dup 1)))])
- (define_insn "*float<SSEMODEI24:mode><MODEF:mode>2_sse_nointerunit"
-@@ -5410,7 +5410,7 @@
-    && reload_completed
-    && (SSE_REG_P (operands[0])
-        || (GET_CODE (operands[0]) == SUBREG
--         && SSE_REG_P (operands[0])))"
-+         && SSE_REG_P (SUBREG_REG (operands[0]))))"
-   [(set (match_dup 2) (match_dup 1))
-    (set (match_dup 0) (float:MODEF (match_dup 2)))])
-@@ -5423,7 +5423,7 @@
-    && reload_completed
-    && (SSE_REG_P (operands[0])
-        || (GET_CODE (operands[0]) == SUBREG
--         && SSE_REG_P (operands[0])))"
-+         && SSE_REG_P (SUBREG_REG (operands[0]))))"
-   [(set (match_dup 0) (float:MODEF (match_dup 1)))])
- (define_insn "*float<SSEMODEI24:mode><X87MODEF:mode>2_i387_with_temp"
-@@ -14625,7 +14625,7 @@
-       emit_insn (gen_sse4_1_round<mode>2
-                  (operands[0], operands[1], GEN_INT (0x04)));
-       else
--      ix86_expand_rint (operand0, operand1);
-+      ix86_expand_rint (operands[0], operands[1]);
-     }
-   else
-     {
-@@ -14649,9 +14649,9 @@
-   if (optimize_insn_for_size_p ())
-     FAIL;
-   if (TARGET_64BIT || (<MODE>mode != DFmode))
--    ix86_expand_round (operand0, operand1);
-+    ix86_expand_round (operands[0], operands[1]);
-   else
--    ix86_expand_rounddf_32 (operand0, operand1);
-+    ix86_expand_rounddf_32 (operands[0], operands[1]);
-   DONE;
- })
-@@ -14796,7 +14796,7 @@
- {
-   if (optimize_insn_for_size_p ())
-     FAIL;
--  ix86_expand_lround (operand0, operand1);
-+  ix86_expand_lround (operands[0], operands[1]);
-   DONE;
- })
-@@ -14871,9 +14871,9 @@
-       emit_insn (gen_sse4_1_round<mode>2
-                  (operands[0], operands[1], GEN_INT (0x01)));
-       else if (TARGET_64BIT || (<MODE>mode != DFmode))
--      ix86_expand_floorceil (operand0, operand1, true);
-+      ix86_expand_floorceil (operands[0], operands[1], true);
-       else
--      ix86_expand_floorceildf_32 (operand0, operand1, true);
-+      ix86_expand_floorceildf_32 (operands[0], operands[1], true);
-     }
-   else
-     {
-@@ -15053,7 +15053,7 @@
- {
-   if (TARGET_64BIT && optimize_insn_for_size_p ())
-     FAIL;
--  ix86_expand_lfloorceil (operand0, operand1, true);
-+  ix86_expand_lfloorceil (operands[0], operands[1], true);
-   DONE;
- })
-@@ -15128,9 +15128,9 @@
-       else if (optimize_insn_for_size_p ())
-       FAIL;
-       else if (TARGET_64BIT || (<MODE>mode != DFmode))
--      ix86_expand_floorceil (operand0, operand1, false);
-+      ix86_expand_floorceil (operands[0], operands[1], false);
-       else
--      ix86_expand_floorceildf_32 (operand0, operand1, false);
-+      ix86_expand_floorceildf_32 (operands[0], operands[1], false);
-     }
-   else
-     {
-@@ -15308,7 +15308,7 @@
-   "SSE_FLOAT_MODE_P (<MODEF:MODE>mode) && TARGET_SSE_MATH
-    && !flag_trapping_math"
- {
--  ix86_expand_lfloorceil (operand0, operand1, false);
-+  ix86_expand_lfloorceil (operands[0], operands[1], false);
-   DONE;
- })
-@@ -15383,9 +15383,9 @@
-       else if (optimize_insn_for_size_p ())
-       FAIL;
-       else if (TARGET_64BIT || (<MODE>mode != DFmode))
--      ix86_expand_trunc (operand0, operand1);
-+      ix86_expand_trunc (operands[0], operands[1]);
-       else
--      ix86_expand_truncdf_32 (operand0, operand1);
-+      ix86_expand_truncdf_32 (operands[0], operands[1]);
-     }
-   else
-     {
-@@ -18285,8 +18285,8 @@
-                    (match_operand:SI 3 "const_int_operand" "i")]
-                   UNSPECV_LWPVAL_INTRINSIC)]
-   "TARGET_LWP"
--  "/* Avoid unused variable warning.  */
--   (void) operand0;")
-+  ;; Avoid unused variable warning.
-+  "(void) operands[0];")
- (define_insn "*lwp_lwpval<mode>3_1"
-   [(unspec_volatile [(match_operand:SWI48 0 "register_operand" "r")
-Index: gcc/config/i386/sse.md
+--- 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));
++    }
++
+   if ((dstclass == FPUL_REGS
+        && REGCLASS_HAS_GENERAL_REG (srcclass))
+       || (srcclass == FPUL_REGS
+Index: gcc/config/avr/avr.md
 ===================================================================
---- gcc/config/i386/sse.md     (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ gcc/config/i386/sse.md     (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -4521,15 +4521,14 @@
-   [(set (match_operand:V4DF 0 "register_operand"         "=x,x")
-       (vec_select:V4DF
-         (vec_concat:V8DF
--          (match_operand:V4DF 1 "nonimmediate_operand" "xm,x")
--          (match_operand:V4DF 2 "nonimmediate_operand" " 1,xm"))
-+          (match_operand:V4DF 1 "nonimmediate_operand" " x,m")
-+          (match_operand:V4DF 2 "nonimmediate_operand" "xm,1"))
-         (parallel [(const_int 0) (const_int 4)
-                    (const_int 2) (const_int 6)])))]
--  "TARGET_AVX
--   && (!MEM_P (operands[1]) || rtx_equal_p (operands[1], operands[2]))"
-+  "TARGET_AVX"
+--- 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")])
++
++
++;; Similar to above for the complementary situation when there is no [E]LPMx.
++;; Clobber Z in that case.
++
++(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.  */
++
+     if (avr_load_libgcc_p (src))
+       {
+-        /* For the small devices, do loads per libgcc call.  */
+-        emit_insn (gen_load<mode>_libgcc (dest, src));
++        emit_move_insn (gen_rtx_REG (Pmode, REG_Z),
++                        force_reg (Pmode, XEXP (src, 0)));
++
++        emit_insn (gen_load_<mode>_libgcc ());
++        emit_move_insn (dest, gen_rtx_REG (<MODE>mode, 22));
+         DONE;
+       }
++
++    /* ; FIXME:  Hack around PR rtl-optimization/52543.
++       ; lower-subreg.c splits loads from the 16-bit address spaces which
++       ; causes code bloat because each load need his setting of RAMPZ.
++       ; Moreover, the split will happen in such a way that the loads don't
++       ; take advantage of POST_INC addressing.  Thus, we use UNSPEC to
++       ; represent these loads instead.  Notice that this is legitimate
++       ; because the memory content does not change:  Loads from the same
++       ; address will yield the same value.
++       ; POST_INC addressing would make the addresses mode_dependent and could
++       ; work around that PR, too.  However, notice that it is *not* legitimate
++       ; to expand to POST_INC at expand time:  The following passes assert
++       ; that pre-/post-modify addressing is introduced by .auto_inc_dec and
++       ; does not exist before that pass.  */
++
++    if (avr_mem_flash_p (src)
++        && (GET_MODE_SIZE (<MODE>mode) > 1
++            || MEM_ADDR_SPACE (src) != ADDR_SPACE_FLASH))
++      {
++        rtx xsegment = GEN_INT (avr_addrspace[MEM_ADDR_SPACE (src)].segment);
++        if (!AVR_HAVE_ELPM)
++          xsegment = const0_rtx;
++        if (xsegment != const0_rtx)
++          xsegment = force_reg (QImode, xsegment);
++
++        emit_move_insn (gen_rtx_REG (Pmode, REG_Z),
++                        force_reg (Pmode, XEXP (src, 0)));
++
++        if ((CONST_INT_P (xsegment) && AVR_HAVE_LPMX)
++            || (REG_P (xsegment) && AVR_HAVE_ELPMX))
++          emit_insn (gen_load_<mode> (dest, xsegment));
++        else
++          emit_insn (gen_load_<mode>_clobber (dest, xsegment));
++        DONE;
++      }
++
++    /* ; The only address-space for which we use plain MEM and reload
++       ; machinery are 1-byte loads from __flash.  */
+   })
+ ;;========================================================================
+@@ -677,40 +755,6 @@
+     operands[5] = gen_rtx_REG (HImode, REGNO (operands[3]));
+   })
+-;; For LPM loads from AS1 we split 
+-;;    R = *Z
+-;; to
+-;;    R = *Z++
+-;;    Z = Z - sizeof (R)
+-;;
+-;; so that the second instruction can be optimized out.
+-
+-(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))]
+   ""
    "@
--   vmovddup\t{%1, %0|%0, %1}
--   vunpcklpd\t{%2, %1, %0|%0, %1, %2}"
-+   vunpcklpd\t{%2, %1, %0|%0, %1, %2}
-+   vmovddup\t{%1, %0|%0, %1}"
-   [(set_attr "type" "sselog")
-    (set_attr "prefix" "vex")
-    (set_attr "mode" "V4DF")])
-Index: gcc/config/rs6000/rs6000.c
-===================================================================
---- gcc/config/rs6000/rs6000.c (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ gcc/config/rs6000/rs6000.c (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -20227,7 +20227,7 @@
- {
-   /* This blockage is needed so that sched doesn't decide to move
-      the sp change before the register restores.  */
--  if (frame_reg_rtx != sp_reg_rtx
-+  if (DEFAULT_ABI == ABI_V4
-       || (TARGET_SPE_ABI
-         && info->spe_64bit_regs_used != 0
-         && info->first_gp_reg_save != 32))
-Index: gcc/config/pa/pa.c
-===================================================================
---- gcc/config/pa/pa.c (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ gcc/config/pa/pa.c (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -1863,6 +1863,11 @@
-   /* Handle the most common case: storing into a register.  */
-   else if (register_operand (operand0, mode))
-     {
-+      /* Legitimize TLS symbol references.  This happens for references
-+       that aren't a legitimate constant.  */
-+      if (PA_SYMBOL_REF_TLS_P (operand1))
-+      operand1 = legitimize_tls_address (operand1);
-+
-       if (register_operand (operand1, mode)
-         || (GET_CODE (operand1) == CONST_INT
-             && cint_ok_for_move (INTVAL (operand1)))
-Index: gcc/config/pa/pa.h
+       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/pa/pa.h (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ gcc/config/pa/pa.h (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -848,6 +848,9 @@
-    && (NEW_HP_ASSEMBLER                                               \
-        || TARGET_GAS                                          \
-        || GET_CODE (X) != LABEL_REF)                          \
-+   && (!PA_SYMBOL_REF_TLS_P (X)                                       \
-+       || (SYMBOL_REF_TLS_MODEL (X) != TLS_MODEL_GLOBAL_DYNAMIC               \
-+         && SYMBOL_REF_TLS_MODEL (X) != TLS_MODEL_LOCAL_DYNAMIC))     \
-    && (!TARGET_64BIT                                          \
-        || GET_CODE (X) != CONST_DOUBLE)                               \
-    && (!TARGET_64BIT                                          \
-Index: gcc/reload1.c
+--- 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/reload1.c      (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ gcc/reload1.c      (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -3899,6 +3899,10 @@
-     if (XEXP (x, 0))
-       set_label_offsets (XEXP (x, 0), NULL_RTX, 1);
+--- 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 @@
+ }
  
-+  for (x = nonlocal_goto_handler_labels; x; x = XEXP (x, 1))
-+    if (XEXP (x, 0))
-+      set_label_offsets (XEXP (x, 0), NULL_RTX, 1);
++/* Implement `TARGET_MODE_DEPENDENT_ADDRESS_P'.  */
++
++/* FIXME:  PSImode addresses are not mode-dependent in themselves.
++      This hook just serves to hack around PR rtl-optimization/52543 by
++      claiming that PSImode addresses (which are used for the 24-bit
++      address space __memx) were mode-dependent so that lower-subreg.s
++      will skip these addresses.  See also the similar FIXME comment along
++      with mov<mode> expanders in avr.md.  */
 +
-   for_each_eh_label (set_initial_eh_label_offset);
++static bool
++avr_mode_dependent_address_p (const_rtx addr)
++{
++  return GET_MODE (addr) != Pmode;
++}
++
++
+ /* Helper function for `avr_legitimate_address_p'.  */
+ static inline bool
+@@ -2435,7 +2485,8 @@
+         
+   return (n_bytes > 2
+           && !AVR_HAVE_LPMX
+-          && avr_mem_flash_p (op));
++          && MEM_P (op)
++          && MEM_ADDR_SPACE (op) == ADDR_SPACE_FLASH);
  }
  
-Index: libstdc++-v3/include/std/complex
-===================================================================
---- libstdc++-v3/include/std/complex   (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ libstdc++-v3/include/std/complex   (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -1,7 +1,7 @@
- // The template and inlines for the -*- C++ -*- complex number classes.
+ /* Return true if a value of mode MODE is read by __xload_* function.  */
+@@ -2450,155 +2501,6 @@
+ }
  
- // Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
--// 2006, 2007, 2008, 2009, 2010
-+// 2006, 2007, 2008, 2009, 2010, 2011
- // Free Software Foundation, Inc.
- //
- // This file is part of the GNU ISO C++ Library.  This library is free
-@@ -1695,12 +1695,9 @@
-     std::complex<_Tp>
-     __complex_acosh(const std::complex<_Tp>& __z)
+-/* 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))
+-    {
+-    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 "";
+-
+-        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 */
+-
+-    case POST_INC:
+-
+-      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)
      {
--      std::complex<_Tp> __t((__z.real() - __z.imag())
--                          * (__z.real() + __z.imag()) - _Tp(1.0),
--                          _Tp(2.0) * __z.real() * __z.imag());
--      __t = std::sqrt(__t);
+-      xop[4] = GEN_INT (segment);
+-      
+-      if (xop[3] = avr_find_unused_d_reg (insn, lpm_addr_reg_rtx),
+-          xop[3])
+-        {
+-          avr_asm_len ("ldi %3,%4" CR_TAB
+-                       "out __RAMPZ__,%3", xop, plen, 2);
+-        }
+-      else if (segment == 1)
+-        {
+-          avr_asm_len ("clr %5" CR_TAB
+-                       "inc %5" CR_TAB
+-                       "out __RAMPZ__,%5", xop, plen, 3);
+-        }
+-      else
+-        {
+-          avr_asm_len ("mov %5,%2"         CR_TAB
+-                       "ldi %2,%4"         CR_TAB
+-                       "out __RAMPZ__,%2"  CR_TAB
+-                       "mov %2,%5", xop, plen, 4);
+-        }
+-      
+-      xop[4] = xstring_e;
+-
+-      if (!AVR_HAVE_ELPMX)
+-        return avr_out_lpm_no_lpmx (insn, xop, plen);
+-    }
+-  else if (!AVR_HAVE_LPMX)
+-    {
+-      return avr_out_lpm_no_lpmx (insn, xop, plen);
+-    }
+-
+-  /* We have [E]LPMX: Output reading from Flash the comfortable way.  */
+-
+-  switch (GET_CODE (addr))
+-    {
+     default:
+       gcc_unreachable();
+     case REG:
+       gcc_assert (REG_Z == REGNO (addr));
++      
++      return AVR_HAVE_LPMX
++        ? avr_asm_len ("lpm %0,%a1", xop, plen, 1)
++        : avr_asm_len ("lpm" CR_TAB
++                       "mov %0,%2", xop, plen, 2);
++      
++    case POST_INC:
++      
++      gcc_assert (REG_Z == REGNO (XEXP (addr, 0)));
+-      switch (n_bytes)
+-        {
+-        default:
+-          gcc_unreachable();
++      return AVR_HAVE_LPMX
++        ? avr_asm_len ("lpm %0,%a1+", xop, plen, 1)
++        : avr_asm_len ("lpm"        CR_TAB
++                       "adiw %1, 1" CR_TAB
++                       "mov %0,%2", xop, plen, 3);
++    }
+-        case 1:
+-          return avr_asm_len ("%4lpm %0,%a2", xop, plen, 1);
++  return "";
++}
+-        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);
 -
--      return std::log(__t + __z);
-+      // Kahan's formula.
-+      return _Tp(2.0) * std::log(std::sqrt(_Tp(0.5) * (__z + _Tp(1.0)))
-+                               + std::sqrt(_Tp(0.5) * (__z - _Tp(1.0))));
+-      avr_asm_len                    ("%4lpm %A0,%a2+", xop, plen, 1);
+-      if (n_bytes >= 2)  avr_asm_len ("%4lpm %B0,%a2+", xop, plen, 1);
+-      if (n_bytes >= 3)  avr_asm_len ("%4lpm %C0,%a2+", xop, plen, 1);
+-      if (n_bytes >= 4)  avr_asm_len ("%4lpm %D0,%a2+", xop, plen, 1);
+-
+-      break; /* POST_INC */
+-
+-    } /* switch CODE (addr) */
+-      
+   return "";
+ }
+@@ -2782,8 +2673,9 @@
+   if (plen)
+     *plen = 0;
+-  avr_asm_len ("ld %3,%a2" CR_TAB
+-               "sbrs %1,7", xop, plen, 2);
++  avr_asm_len ("sbrc %1,7" CR_TAB
++               "ld %3,%a2" CR_TAB
++               "sbrs %1,7", xop, plen, 3);
+   avr_asm_len (AVR_HAVE_LPMX ? "lpm %3,%a2" : "lpm", xop, plen, 1);
+@@ -2794,13 +2686,11 @@
+ }
+-const char *
+-output_movqi (rtx insn, rtx operands[], int *l)
++const char*
++output_movqi (rtx insn, rtx operands[], int *real_l)
+ {
+-  int dummy;
+   rtx dest = operands[0];
+   rtx src = operands[1];
+-  int *real_l = l;
+   
+   if (avr_mem_flash_p (src)
+       || avr_mem_flash_p (dest))
+@@ -2808,10 +2698,8 @@
+       return avr_out_lpm (insn, operands, real_l);
      }
  
- #if _GLIBCXX_USE_C99_COMPLEX_TR1
-Index: libstdc++-v3/include/tr1/complex
-===================================================================
---- libstdc++-v3/include/tr1/complex   (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ libstdc++-v3/include/tr1/complex   (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -185,12 +185,9 @@
-     std::complex<_Tp>
-     __complex_acosh(const std::complex<_Tp>& __z)
-     {
--      std::complex<_Tp> __t((__z.real() - __z.imag())
--                          * (__z.real() + __z.imag()) - _Tp(1.0),
--                          _Tp(2.0) * __z.real() * __z.imag());
--      __t = std::sqrt(__t);
+-  if (!l)
+-    l = &dummy;
 -
--      return std::log(__t + __z);
-+      // Kahan's formula.
-+      return _Tp(2.0) * std::log(std::sqrt(_Tp(0.5) * (__z + _Tp(1.0)))
-+                               + std::sqrt(_Tp(0.5) * (__z - _Tp(1.0))));
+-  *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 _GLIBCXX_USE_C99_COMPLEX_TR1
-Index: libstdc++-v3/ChangeLog
-===================================================================
---- libstdc++-v3/ChangeLog     (.../tags/gcc_4_6_2_release)    (wersja 181284)
-+++ libstdc++-v3/ChangeLog     (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -1,3 +1,20 @@
-+2011-11-02  Richard B. Kreckel  <kreckel@ginac.de>
-+          Paolo Carlini  <paolo.carlini@oracle.com>
-+
-+      PR libstdc++/50880
-+      * include/std/complex (__complex_acosh): Fix in a better way,
-+      use Kahan's formula.
-+      * include/tr1/complex (__complex_acosh): Likewise.
-+
-+2011-11-02  Richard B. Kreckel  <kreckel@ginac.de>
-+          Paolo Carlini  <paolo.carlini@oracle.com>
-+
-+      PR libstdc++/50880
-+      * include/std/complex (__complex_acosh): Fix for __z.real() < 0.
-+      * include/tr1/complex (__complex_acosh): Likewise.
-+      * testsuite/26_numerics/complex/50880.cc: New.
-+      * testsuite/tr1/8_c_compatibility/complex/50880.cc: Likewise.
-+
- 2011-10-26  Release Manager
-       * GCC 4.6.2 released.
-Index: libstdc++-v3/testsuite/26_numerics/complex/50880.cc
-===================================================================
---- libstdc++-v3/testsuite/26_numerics/complex/50880.cc        (.../tags/gcc_4_6_2_release)    (wersja 0)
-+++ libstdc++-v3/testsuite/26_numerics/complex/50880.cc        (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -0,0 +1,53 @@
-+// { dg-options "-std=gnu++0x" }
-+//
-+// Copyright (C) 2011 Free Software Foundation, Inc.
-+//
-+// This file is part of the GNU ISO C++ Library.  This library is free
-+// software; you can redistribute it and/or modify it under the
-+// terms of the GNU General Public License as published by the
-+// Free Software Foundation; either version 3, or (at your option)
-+// any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU General Public License along
-+// with this library; see the file COPYING3.  If not see
-+// <http://www.gnu.org/licenses/>.
-+
-+#include <complex>
-+#include <testsuite_hooks.h> 
-+
-+template<typename T>
-+  void test01_do()
-+  {
-+    bool test __attribute__((unused)) = true;
-+
-+    const std::complex<T> ca(T(-2), T(2));
-+    const std::complex<T> cb(T(-2), T(0));
-+    const std::complex<T> cc(T(-2), T(-2));
-+
-+    std::complex<T> cra = std::acosh(ca);
-+    std::complex<T> crb = std::acosh(cb);
-+    std::complex<T> crc = std::acosh(cc);
-+
-+    VERIFY( cra.real() > T(0) );
-+    VERIFY( crb.real() > T(0) );
-+    VERIFY( crc.real() > T(0) );
-+  }
-+
-+// libstdc++/50880
-+void test01()
+   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)
 +{
-+  test01_do<float>();
-+  test01_do<double>();
-+  test01_do<long double>();
++  rtx mem = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode));
++  MEM_VOLATILE_P (mem) = 1;
++  return mem;
 +}
 +
-+int main()
-+{
-+  test01();
-+  return 0;
-+}
-Index: libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/50880.cc
+ 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
 ===================================================================
---- libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/50880.cc      (.../tags/gcc_4_6_2_release)    (wersja 0)
-+++ libstdc++-v3/testsuite/tr1/8_c_compatibility/complex/50880.cc      (.../branches/gcc-4_6-branch)   (wersja 181284)
-@@ -0,0 +1,51 @@
-+// Copyright (C) 2011 Free Software Foundation, Inc.
-+//
-+// This file is part of the GNU ISO C++ Library.  This library is free
-+// software; you can redistribute it and/or modify it under the
-+// terms of the GNU General Public License as published by the
-+// Free Software Foundation; either version 3, or (at your option)
-+// any later version.
-+//
-+// This library is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU General Public License along
-+// with this library; see the file COPYING3.  If not see
-+// <http://www.gnu.org/licenses/>.
-+
-+#include <tr1/complex>
-+#include <testsuite_hooks.h> 
-+
-+template<typename T>
-+  void test01_do()
-+  {
-+    bool test __attribute__((unused)) = true;
+--- gcc/config/epiphany/epiphany.c     (.../tags/gcc_4_7_0_release)    (wersja 185750)
++++ gcc/config/epiphany/epiphany.c     (.../branches/gcc-4_7-branch)   (wersja 185750)
+@@ -1417,7 +1417,7 @@
+   return gen_rtx_REG (mode, 0);
+ }
+-bool
++static bool
+ epiphany_function_value_regno_p (const unsigned int regno ATTRIBUTE_UNUSED)
+ {
+   return regno == 0;
+Index: gcc/config/rs6000/vector.md
+===================================================================
+--- gcc/config/rs6000/vector.md        (.../tags/gcc_4_7_0_release)    (wersja 185750)
++++ gcc/config/rs6000/vector.md        (.../branches/gcc-4_7-branch)   (wersja 185750)
+@@ -516,6 +516,94 @@
+   "VECTOR_UNIT_ALTIVEC_P (<MODE>mode)"
+   "")
++(define_insn_and_split "*vector_uneq<mode>"
++  [(set (match_operand:VEC_F 0 "vfloat_operand" "")
++      (uneq:VEC_F (match_operand:VEC_F 1 "vfloat_operand" "")
++                  (match_operand:VEC_F 2 "vfloat_operand" "")))]
++  "VECTOR_UNIT_ALTIVEC_OR_VSX_P (<MODE>mode)"
++  "#"
++  ""
++  [(set (match_dup 3)
++      (gt:VEC_F (match_dup 1)
++                (match_dup 2)))
++   (set (match_dup 4)
++      (gt:VEC_F (match_dup 2)
++                (match_dup 1)))
++   (set (match_dup 0)
++      (not:VEC_F (ior:VEC_F (match_dup 3)
++                            (match_dup 4))))]
++  "
++{
++  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);
++}")
 +
-+    const std::complex<T> ca(T(-2), T(2));
-+    const std::complex<T> cb(T(-2), T(0));
-+    const std::complex<T> cc(T(-2), T(-2));
+ ;; 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>
 +
-+    std::complex<T> cra = std::tr1::acosh(ca);
-+    std::complex<T> crb = std::tr1::acosh(cb);
-+    std::complex<T> crc = std::tr1::acosh(cc);
++      Backport from mainline:
++      2012-03-09  David Edelsohn  <dje.gcc@gmail.com>
 +
-+    VERIFY( cra.real() > T(0) );
-+    VERIFY( crb.real() > T(0) );
-+    VERIFY( crc.real() > T(0) );
-+  }
++      * 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.
 +
-+// libstdc++/50880
-+void test01()
-+{
-+  test01_do<float>();
-+  test01_do<double>();
-+  test01_do<long double>();
-+}
++      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.
 +
-+int main()
-+{
-+  test01();
-+  return 0;
-+}
+ 2012-03-22  Release Manager
+       * GCC 4.7.0 released.
This page took 0.661728 seconds and 4 git commands to generate.