~ubuntu-branches/debian/sid/gcc-4.8/sid

« back to all changes in this revision

Viewing changes to .svn/pristine/7e/7ecc5d94af5c3f37141b13a91ffa4f04c7749cd4.svn-base

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2014-12-19 19:48:34 UTC
  • Revision ID: package-import@ubuntu.com-20141219194834-4dz1q7rrn5pad823
Tags: 4.8.4-1
* GCC 4.8.4 release.
  - Fix PR target/61407 (darwin), PR middle-end/58624 (ice),
    PR sanitizer/64265 (wrong code).
* Require recent binutils to pass go test failures.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# DP: updates from the 4.8 branch upto 20140320 (r208738).
 
2
 
 
3
last_updated()
 
4
{
 
5
        cat > ${dir}LAST_UPDATED <<EOF
 
6
Thu Mar 20 23:36:56 CET 2014
 
7
Thu Mar 20 22:36:56 UTC 2014 (revision 208738)
 
8
EOF
 
9
}
 
10
 
 
11
LANG=C svn diff svn://gcc.gnu.org/svn/gcc/tags/gcc_4_8_2_release svn://gcc.gnu.org/svn/gcc/branches/gcc-4_8-branch \
 
12
        | sed -r 's,^--- (\S+)\t(\S+)(.*)$,--- a/src/\1\t\2,;s,^\+\+\+ (\S+)\t(\S+)(.*)$,+++ b/src/\1\t\2,' \
 
13
        | awk '/^Index:.*\.(class|texi)/ {skip=1; next} /^Index:/ { skip=0 } skip==0'
 
14
 
 
15
Index: libitm/ChangeLog
 
16
===================================================================
 
17
--- a/src/libitm/ChangeLog      (.../tags/gcc_4_8_2_release)
 
18
+++ b/src/libitm/ChangeLog      (.../branches/gcc-4_8-branch)
 
19
@@ -1,3 +1,18 @@
 
20
+2014-03-03  Peter Bergner  <bergner@vnet.ibm.com>
 
21
+
 
22
+       Backport from mainline
 
23
+       2013-06-20  Torvald Riegel  <triegel@redhat.com>
 
24
+
 
25
+       * query.cc (_ITM_inTransaction): Abort when using the HTM fastpath.
 
26
+       (_ITM_getTransactionId): Same.
 
27
+       * config/x86/target.h (htm_transaction_active): New.
 
28
+
 
29
+       2013-06-20  Torvald Riegel  <triegel@redhat.com>
 
30
+
 
31
+       PR libitm/57643
 
32
+       * beginend.cc (gtm_thread::begin_transaction): Handle reentrancy in
 
33
+       the HTM fastpath.
 
34
+
 
35
 2013-10-16  Release Manager
 
36
 
 
37
        * GCC 4.8.2 released.
 
38
@@ -8,13 +23,12 @@
 
39
        2013-08-02  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
40
 
 
41
        * configure.tgt: Add -msoft-float to XCFLAGS.
 
42
-       
 
43
 
 
44
 2013-08-14  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
45
 
 
46
        * config/s390/sjlj.S: Add file missing from last commit.
 
47
        * config/s390/target.h: Likewise.
 
48
-       
 
49
+
 
50
 2013-08-02  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
51
 
 
52
        Backports from mainline:
 
53
Index: libitm/query.cc
 
54
===================================================================
 
55
--- a/src/libitm/query.cc       (.../tags/gcc_4_8_2_release)
 
56
+++ b/src/libitm/query.cc       (.../branches/gcc-4_8-branch)
 
57
@@ -43,6 +43,15 @@
 
58
 _ITM_howExecuting ITM_REGPARM
 
59
 _ITM_inTransaction (void)
 
60
 {
 
61
+#if defined(USE_HTM_FASTPATH)
 
62
+  // If we use the HTM fastpath, we cannot reliably detect whether we are
 
63
+  // in a transaction because this function can be called outside of
 
64
+  // a transaction and thus we can't deduce this by looking at just the serial
 
65
+  // lock.  This function isn't used in practice currently, so the easiest
 
66
+  // way to handle it is to just abort.
 
67
+  if (htm_fastpath && htm_transaction_active())
 
68
+    htm_abort();
 
69
+#endif
 
70
   struct gtm_thread *tx = gtm_thr();
 
71
   if (tx && (tx->nesting > 0))
 
72
     {
 
73
@@ -58,6 +67,11 @@
 
74
 _ITM_transactionId_t ITM_REGPARM
 
75
 _ITM_getTransactionId (void)
 
76
 {
 
77
+#if defined(USE_HTM_FASTPATH)
 
78
+  // See ITM_inTransaction.
 
79
+  if (htm_fastpath && htm_transaction_active())
 
80
+    htm_abort();
 
81
+#endif
 
82
   struct gtm_thread *tx = gtm_thr();
 
83
   return (tx && (tx->nesting > 0)) ? tx->id : _ITM_noTransactionId;
 
84
 }
 
85
Index: libitm/beginend.cc
 
86
===================================================================
 
87
--- a/src/libitm/beginend.cc    (.../tags/gcc_4_8_2_release)
 
88
+++ b/src/libitm/beginend.cc    (.../branches/gcc-4_8-branch)
 
89
@@ -197,6 +197,8 @@
 
90
              // We are executing a transaction now.
 
91
              // Monitor the writer flag in the serial-mode lock, and abort
 
92
              // if there is an active or waiting serial-mode transaction.
 
93
+             // Note that this can also happen due to an enclosing
 
94
+             // serial-mode transaction; we handle this case below.
 
95
              if (unlikely(serial_lock.is_write_locked()))
 
96
                htm_abort();
 
97
              else
 
98
@@ -219,6 +221,14 @@
 
99
                  tx = new gtm_thread();
 
100
                  set_gtm_thr(tx);
 
101
                }
 
102
+             // Check whether there is an enclosing serial-mode transaction;
 
103
+             // if so, we just continue as a nested transaction and don't
 
104
+             // try to use the HTM fastpath.  This case can happen when an
 
105
+             // outermost relaxed transaction calls unsafe code that starts
 
106
+             // a transaction.
 
107
+             if (tx->nesting > 0)
 
108
+               break;
 
109
+             // Another thread is running a serial-mode transaction.  Wait.
 
110
              serial_lock.read_lock(tx);
 
111
              serial_lock.read_unlock(tx);
 
112
              // TODO We should probably reset the retry count t here, unless
 
113
Index: libitm/config/x86/target.h
 
114
===================================================================
 
115
--- a/src/libitm/config/x86/target.h    (.../tags/gcc_4_8_2_release)
 
116
+++ b/src/libitm/config/x86/target.h    (.../branches/gcc-4_8-branch)
 
117
@@ -125,6 +125,13 @@
 
118
 {
 
119
   return begin_ret & _XABORT_RETRY;
 
120
 }
 
121
+
 
122
+/* Returns true iff a hardware transaction is currently being executed.  */
 
123
+static inline bool
 
124
+htm_transaction_active ()
 
125
+{
 
126
+  return _xtest() != 0;
 
127
+}
 
128
 #endif
 
129
 
 
130
 
 
131
Index: libgomp/ChangeLog
 
132
===================================================================
 
133
--- a/src/libgomp/ChangeLog     (.../tags/gcc_4_8_2_release)
 
134
+++ b/src/libgomp/ChangeLog     (.../branches/gcc-4_8-branch)
 
135
@@ -1,3 +1,9 @@
 
136
+2013-12-12  Jakub Jelinek  <jakub@redhat.com>
 
137
+
 
138
+       PR libgomp/59467
 
139
+       * testsuite/libgomp.fortran/crayptr2.f90: Add private (d) clause to
 
140
+       !$omp parallel.
 
141
+
 
142
 2013-10-16  Release Manager
 
143
 
 
144
        * GCC 4.8.2 released.
 
145
Index: libgomp/testsuite/libgomp.fortran/crayptr2.f90
 
146
===================================================================
 
147
--- a/src/libgomp/testsuite/libgomp.fortran/crayptr2.f90        (.../tags/gcc_4_8_2_release)
 
148
+++ b/src/libgomp/testsuite/libgomp.fortran/crayptr2.f90        (.../branches/gcc-4_8-branch)
 
149
@@ -12,7 +12,7 @@
 
150
   b = 2
 
151
   c = 3
 
152
   l = .false.
 
153
-!$omp parallel num_threads (3) reduction (.or.:l)
 
154
+!$omp parallel num_threads (3) reduction (.or.:l) private (d)
 
155
   if (omp_get_thread_num () .eq. 0) then
 
156
     ip = loc (a)
 
157
   elseif (omp_get_thread_num () .eq. 1) then
 
158
Index: libstdc++-v3/configure
 
159
===================================================================
 
160
--- a/src/libstdc++-v3/configure        (.../tags/gcc_4_8_2_release)
 
161
+++ b/src/libstdc++-v3/configure        (.../branches/gcc-4_8-branch)
 
162
@@ -71573,7 +71573,7 @@
 
163
 fi
 
164
 
 
165
 # For libtool versioning info, format is CURRENT:REVISION:AGE
 
166
-libtool_VERSION=6:18:0
 
167
+libtool_VERSION=6:19:0
 
168
 
 
169
 # Everything parsed; figure out what files and settings to use.
 
170
 case $enable_symvers in
 
171
Index: libstdc++-v3/src/c++11/thread.cc
 
172
===================================================================
 
173
--- a/src/libstdc++-v3/src/c++11/thread.cc      (.../tags/gcc_4_8_2_release)
 
174
+++ b/src/libstdc++-v3/src/c++11/thread.cc      (.../branches/gcc-4_8-branch)
 
175
@@ -183,7 +183,7 @@
 
176
         ::usleep(__us);
 
177
       }
 
178
 # else
 
179
-    ::sleep(__s.count() + (__ns >= 1000000));
 
180
+    ::sleep(__s.count() + (__ns.count() >= 1000000));
 
181
 # endif
 
182
 #elif defined(_GLIBCXX_HAVE_WIN32_SLEEP)
 
183
     unsigned long ms = __ns.count() / 1000000;
 
184
Index: libstdc++-v3/doc/xml/manual/abi.xml
 
185
===================================================================
 
186
--- a/src/libstdc++-v3/doc/xml/manual/abi.xml   (.../tags/gcc_4_8_2_release)
 
187
+++ b/src/libstdc++-v3/doc/xml/manual/abi.xml   (.../branches/gcc-4_8-branch)
 
188
@@ -203,6 +203,7 @@
 
189
     <listitem><para>GCC 4.5.0: GCC_4.5.0</para></listitem>
 
190
     <listitem><para>GCC 4.6.0: GCC_4.6.0</para></listitem>
 
191
     <listitem><para>GCC 4.7.0: GCC_4.7.0</para></listitem>
 
192
+    <listitem><para>GCC 4.8.0: GCC_4.8.0</para></listitem>
 
193
     </itemizedlist>
 
194
     </listitem>
 
195
 
 
196
@@ -261,6 +262,7 @@
 
197
     <listitem><para>GCC 4.6.1: libstdc++.so.6.0.16</para></listitem>
 
198
     <listitem><para>GCC 4.7.0: libstdc++.so.6.0.17</para></listitem>
 
199
     <listitem><para>GCC 4.8.0: libstdc++.so.6.0.18</para></listitem>
 
200
+    <listitem><para>GCC 4.8.3: libstdc++.so.6.0.19</para></listitem>
 
201
     </itemizedlist>
 
202
     <para>
 
203
       Note 1: Error should be libstdc++.so.3.0.3.
 
204
@@ -324,6 +326,7 @@
 
205
     <listitem><para>GCC 4.6.1: GLIBCXX_3.4.16, CXXABI_1.3.5</para></listitem>
 
206
     <listitem><para>GCC 4.7.0: GLIBCXX_3.4.17, CXXABI_1.3.6</para></listitem>
 
207
     <listitem><para>GCC 4.8.0: GLIBCXX_3.4.18, CXXABI_1.3.7</para></listitem>
 
208
+    <listitem><para>GCC 4.8.3: GLIBCXX_3.4.19, CXXABI_1.3.7</para></listitem>
 
209
     </itemizedlist>
 
210
     </listitem>
 
211
 
 
212
Index: libstdc++-v3/doc/xml/manual/status_cxx2011.xml
 
213
===================================================================
 
214
--- a/src/libstdc++-v3/doc/xml/manual/status_cxx2011.xml        (.../tags/gcc_4_8_2_release)
 
215
+++ b/src/libstdc++-v3/doc/xml/manual/status_cxx2011.xml        (.../branches/gcc-4_8-branch)
 
216
@@ -877,10 +877,11 @@
 
217
       <entry/>
 
218
     </row>
 
219
     <row>
 
220
+      <?dbhtml bgcolor="#B0B0B0" ?>
 
221
       <entry>20.9.7.6</entry>
 
222
       <entry>Other transformations</entry>
 
223
-      <entry>Y</entry>
 
224
-      <entry/>
 
225
+      <entry>Partial</entry>
 
226
+      <entry>Missing <code>aligned_union</code>.</entry>
 
227
     </row>
 
228
     <row>
 
229
       <entry>20.10</entry>
 
230
Index: libstdc++-v3/doc/xml/manual/spine.xml
 
231
===================================================================
 
232
--- a/src/libstdc++-v3/doc/xml/manual/spine.xml (.../tags/gcc_4_8_2_release)
 
233
+++ b/src/libstdc++-v3/doc/xml/manual/spine.xml (.../branches/gcc-4_8-branch)
 
234
@@ -20,6 +20,7 @@
 
235
     <year>2010</year>
 
236
     <year>2011</year>
 
237
     <year>2012</year>
 
238
+    <year>2013</year>
 
239
     <holder>
 
240
       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org">FSF</link>
 
241
     </holder>
 
242
Index: libstdc++-v3/doc/html/bk02.html
 
243
===================================================================
 
244
--- a/src/libstdc++-v3/doc/html/bk02.html       (.../tags/gcc_4_8_2_release)
 
245
+++ b/src/libstdc++-v3/doc/html/bk02.html       (.../branches/gcc-4_8-branch)
 
246
@@ -1,2 +1,2 @@
 
247
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
248
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library" /><link rel="prev" href="manual/backwards.html" title="Backwards Compatibility" /><link rel="next" href="api.html" title="The GNU C++ Library API Reference" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="manual/backwards.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="article"><a href="api.html">The GNU C++ Library API Reference</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="manual/backwards.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Backwards Compatibility </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> The GNU C++ Library API Reference</td></tr></table></div></body></html>
 
249
\ No newline at end of file
 
250
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library" /><link rel="prev" href="manual/backwards.html" title="Backwards Compatibility" /><link rel="next" href="api.html" title="The GNU C++ Library API Reference" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="manual/backwards.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="article"><a href="api.html">The GNU C++ Library API Reference</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="manual/backwards.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Backwards Compatibility </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> The GNU C++ Library API Reference</td></tr></table></div></body></html>
 
251
\ No newline at end of file
 
252
Index: libstdc++-v3/doc/html/bk03.html
 
253
===================================================================
 
254
--- a/src/libstdc++-v3/doc/html/bk03.html       (.../tags/gcc_4_8_2_release)
 
255
+++ b/src/libstdc++-v3/doc/html/bk03.html       (.../branches/gcc-4_8-branch)
 
256
@@ -1,2 +1,2 @@
 
257
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
258
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library" /><link rel="prev" href="api.html" title="The GNU C++ Library API Reference" /><link rel="next" href="faq.html" title="Frequently Asked Questions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="faq.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="article"><a href="faq.html">Frequently Asked Questions</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="faq.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library API Reference </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Frequently Asked Questions</td></tr></table></div></body></html>
 
259
\ No newline at end of file
 
260
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library" /><link rel="prev" href="api.html" title="The GNU C++ Library API Reference" /><link rel="next" href="faq.html" title="Frequently Asked Questions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="faq.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="article"><a href="faq.html">Frequently Asked Questions</a></span></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="faq.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library API Reference </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Frequently Asked Questions</td></tr></table></div></body></html>
 
261
\ No newline at end of file
 
262
Index: libstdc++-v3/doc/html/faq.html
 
263
===================================================================
 
264
--- a/src/libstdc++-v3/doc/html/faq.html        (.../tags/gcc_4_8_2_release)
 
265
+++ b/src/libstdc++-v3/doc/html/faq.html        (.../branches/gcc-4_8-branch)
 
266
@@ -1,9 +1,9 @@
 
267
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
268
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Frequently Asked Questions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="bk03.html" title="" /><link rel="prev" href="bk03.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Frequently Asked Questions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk03.html">Prev</a> </td><th width="60%" align="center"></th><td width="20%" align="right"> </td></tr></table><hr /></div><div class="article"><div class="titlepage"><div><div><h1 class="title"><a id="faq"></a>Frequently Asked Questions</h1></div><div><p class="copyright">Copyright © 
 
269
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Frequently Asked Questions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="bk03.html" title="" /><link rel="prev" href="bk03.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Frequently Asked Questions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk03.html">Prev</a> </td><th width="60%" align="center"></th><td width="20%" align="right"> </td></tr></table><hr /></div><div class="article"><div class="titlepage"><div><div><h1 class="title"><a id="faq"></a>Frequently Asked Questions</h1></div><div><p class="copyright">Copyright © 
 
270
       2008, 2010
 
271
      
 
272
       <a class="link" href="http://www.fsf.org" target="_top">FSF</a>
 
273
-    </p></div></div><hr /></div><div class="qandaset"><a id="idp1581728"></a><dl><dt></dt><dd><dl><dt>1.1. <a href="faq.html#faq.what">
 
274
+    </p></div></div><hr /></div><div class="qandaset"><a id="idm270011560848"></a><dl><dt></dt><dd><dl><dt>1.1. <a href="faq.html#faq.what">
 
275
       What is libstdc++?
 
276
     </a></dt><dt>1.2. <a href="faq.html#faq.why">
 
277
       Why should I use libstdc++?
 
278
Index: libstdc++-v3/doc/html/index.html
 
279
===================================================================
 
280
--- a/src/libstdc++-v3/doc/html/index.html      (.../tags/gcc_4_8_2_release)
 
281
+++ b/src/libstdc++-v3/doc/html/index.html      (.../branches/gcc-4_8-branch)
 
282
@@ -1,5 +1,5 @@
 
283
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
284
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="description" content="Short Contents Copyright (C) 2008-2013 FSF Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. This is the top level of the libstdc++ documentation set. The documentation is divided into the following three sections. Manual Frequently Asked Questions API and Source Documentation" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="next" href="manual/index.html" title="The GNU C++ Library Manual" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="manual/index.html">Next</a></td></tr></table><hr /></div><div class="set" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="set-index"></a>The GNU C++ Library</h1></div><div><div class="abstract"><a id="contents"></a><p class="title"><strong>Short Contents</strong></p><p>
 
285
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="description" content="Short Contents Copyright (C) 2008-2013 FSF Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. This is the top level of the libstdc++ documentation set. The documentation is divided into the following three sections. Manual Frequently Asked Questions API and Source Documentation" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="next" href="manual/index.html" title="The GNU C++ Library Manual" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library</th></tr><tr><td width="20%" align="left"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="manual/index.html">Next</a></td></tr></table><hr /></div><div class="set" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="set-index"></a>The GNU C++ Library</h1></div><div><div class="abstract"><a id="contents"></a><p class="title"><strong>Short Contents</strong></p><p>
 
286
       Copyright (C) 2008-2013
 
287
       <a class="link" href="http://www.fsf.org/" target="_top">FSF
 
288
       </a>
 
289
@@ -20,7 +20,7 @@
 
290
          </p></li><li class="listitem"><p>
 
291
            <a class="link" href="api.html" title="The GNU C++ Library API Reference">API and Source Documentation</a>
 
292
          </p></li></ul></div><p>
 
293
-    </p></div></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="book"><a href="manual/index.html">The GNU C++ Library Manual</a></span></dt><dd><dl><dt><span class="part"><a href="manual/intro.html">I. 
 
294
+    </p></div></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="book"><a href="manual/index.html">The GNU C++ Library Manual</a></span></dt><dd><dl><dt><span class="part"><a href="manual/intro.html">I. 
 
295
   Introduction
 
296
   
 
297
 </a></span></dt><dd><dl><dt><span class="chapter"><a href="manual/status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="manual/status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="manual/status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="manual/status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="manual/license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="manual/license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="manual/license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="manual/bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="manual/bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="manual/bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="manual/setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/configure.html">Configure</a></span></dt><dt><span class="section"><a href="manual/make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="manual/using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="manual/using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="manual/using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="manual/using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="manual/using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="manual/using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="manual/debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="manual/debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="manual/std_contents.html">II. 
 
298
@@ -34,13 +34,13 @@
 
299
 </a></span></dt><dd><dl><dt><span class="section"><a href="manual/diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="manual/diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="manual/diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="manual/concept_checking.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/utilities.html">6. 
 
300
   Utilities
 
301
   
 
302
-</a></span></dt><dd><dl><dt><span class="section"><a href="manual/utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="manual/pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="manual/memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idp13920976">Interface Design</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp13924528">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp13937824">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="manual/memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="manual/memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idp15512272">Class Hierarchy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15534784">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15542080">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15556704">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idp15573056">Examples</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15576640">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/strings.html">7. 
 
303
+</a></span></dt><dd><dl><dt><span class="section"><a href="manual/utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="manual/pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="manual/memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idm270001611968">Interface Design</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm270001608416">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm270001595120">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="manual/memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="manual/memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="manual/memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idm270000019344">Class Hierarchy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269999996832">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269999989536">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269999974912">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="manual/memory.html#idm269999958496">Examples</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269999954912">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/strings.html">7. 
 
304
   Strings
 
305
   
 
306
 </a></span></dt><dd><dl><dt><span class="section"><a href="manual/strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="manual/strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="manual/strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/localization.html">8. 
 
307
   Localization
 
308
   
 
309
-</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="manual/localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="manual/localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#idp15778336">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="manual/facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="manual/facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="manual/facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/containers.html">9. 
 
310
+</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="manual/localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="manual/localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#idm269999753024">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="manual/facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="manual/facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="manual/facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="manual/facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="manual/facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="manual/facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/containers.html">9. 
 
311
   Containers
 
312
   
 
313
 </a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="section"><a href="manual/containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="manual/associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="manual/associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="manual/associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="manual/associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><span class="section"><a href="manual/unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><span class="section"><a href="manual/unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="manual/containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="manual/containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="manual/iterators.html">10. 
 
314
Index: libstdc++-v3/doc/html/api.html
 
315
===================================================================
 
316
--- a/src/libstdc++-v3/doc/html/api.html        (.../tags/gcc_4_8_2_release)
 
317
+++ b/src/libstdc++-v3/doc/html/api.html        (.../branches/gcc-4_8-branch)
 
318
@@ -1,5 +1,5 @@
 
319
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
320
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library API Reference</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="bk02.html" title="" /><link rel="prev" href="bk02.html" title="" /><link rel="next" href="bk03.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library API Reference</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk02.html">Prev</a> </td><th width="60%" align="center"></th><td width="20%" align="right"> <a accesskey="n" href="bk03.html">Next</a></td></tr></table><hr /></div><div class="article"><div class="titlepage"><div><div><h1 class="title"><a id="api"></a>The GNU C++ Library API Reference</h1></div><div><p class="copyright">Copyright © 
 
321
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library API Reference</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="bk02.html" title="" /><link rel="prev" href="bk02.html" title="" /><link rel="next" href="bk03.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library API Reference</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk02.html">Prev</a> </td><th width="60%" align="center"></th><td width="20%" align="right"> <a accesskey="n" href="bk03.html">Next</a></td></tr></table><hr /></div><div class="article"><div class="titlepage"><div><div><h1 class="title"><a id="api"></a>The GNU C++ Library API Reference</h1></div><div><p class="copyright">Copyright © 
 
322
       2008
 
323
     , 
 
324
       2010
 
325
@@ -6,7 +6,7 @@
 
326
      
 
327
       <a class="link" href="http://www.fsf.org/" target="_top">FSF
 
328
       </a>
 
329
-    </p></div><div><div class="legalnotice"><a id="idp3706336"></a><p>
 
330
+    </p></div><div><div class="legalnotice"><a id="idm270006235696"></a><p>
 
331
       <a class="link" href="manual/license.html" title="License">License
 
332
       </a>
 
333
     </p></div></div></div><hr /></div><p>
 
334
Index: libstdc++-v3/doc/html/manual/dynamic_memory.html
 
335
===================================================================
 
336
--- a/src/libstdc++-v3/doc/html/manual/dynamic_memory.html      (.../tags/gcc_4_8_2_release)
 
337
+++ b/src/libstdc++-v3/doc/html/manual/dynamic_memory.html      (.../branches/gcc-4_8-branch)
 
338
@@ -1,5 +1,5 @@
 
339
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
340
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Dynamic Memory</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="support.html" title="Chapter 4.  Support" /><link rel="prev" href="support.html" title="Chapter 4.  Support" /><link rel="next" href="termination.html" title="Termination" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Dynamic Memory</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="support.html">Prev</a> </td><th width="60%" align="center">Chapter 4. 
 
341
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Dynamic Memory</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="support.html" title="Chapter 4.  Support" /><link rel="prev" href="support.html" title="Chapter 4.  Support" /><link rel="next" href="termination.html" title="Termination" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Dynamic Memory</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="support.html">Prev</a> </td><th width="60%" align="center">Chapter 4. 
 
342
   Support
 
343
   
 
344
 </th><td width="20%" align="right"> <a accesskey="n" href="termination.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.support.memory"></a>Dynamic Memory</h2></div></div></div><p>
 
345
Index: libstdc++-v3/doc/html/manual/iterators.html
 
346
===================================================================
 
347
--- a/src/libstdc++-v3/doc/html/manual/iterators.html   (.../tags/gcc_4_8_2_release)
 
348
+++ b/src/libstdc++-v3/doc/html/manual/iterators.html   (.../branches/gcc-4_8-branch)
 
349
@@ -1,5 +1,5 @@
 
350
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
351
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 10.  Iterators</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="containers_and_c.html" title="Interacting with C" /><link rel="next" href="algorithms.html" title="Chapter 11.  Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 10. 
 
352
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 10.  Iterators</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="containers_and_c.html" title="Interacting with C" /><link rel="next" href="algorithms.html" title="Chapter 11.  Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 10. 
 
353
   Iterators
 
354
   
 
355
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="containers_and_c.html">Prev</a> </td><th width="60%" align="center">Part II. 
 
356
@@ -6,8 +6,8 @@
 
357
     Standard Contents
 
358
   </th><td width="20%" align="right"> <a accesskey="n" href="algorithms.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.iterators"></a>Chapter 10. 
 
359
   Iterators
 
360
-  <a id="idp16156992" class="indexterm"></a>
 
361
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="iterators.html#std.iterators.predefined">Predefined</a></span></dt><dd><dl><dt><span class="section"><a href="iterators.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="section"><a href="iterators.html#iterators.predefined.end">One Past the End</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.iterators.predefined"></a>Predefined</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="iterators.predefined.vs_pointers"></a>Iterators vs. Pointers</h3></div></div></div><p>
 
362
+  <a id="idm269999374096" class="indexterm"></a>
 
363
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="iterators.html#std.iterators.predefined">Predefined</a></span></dt><dd><dl><dt><span class="section"><a href="iterators.html#iterators.predefined.vs_pointers">Iterators vs. Pointers</a></span></dt><dt><span class="section"><a href="iterators.html#iterators.predefined.end">One Past the End</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.iterators.predefined"></a>Predefined</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="iterators.predefined.vs_pointers"></a>Iterators vs. Pointers</h3></div></div></div><p>
 
364
      The following
 
365
 FAQ <a class="link" href="../faq.html#faq.iterator_as_pod" title="7.1.">entry</a> points out that
 
366
 iterators are not implemented as pointers.  They are a generalization
 
367
Index: libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html
 
368
===================================================================
 
369
--- a/src/libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html      (.../tags/gcc_4_8_2_release)
 
370
+++ b/src/libstdc++-v3/doc/html/manual/mt_allocator_ex_single.html      (.../branches/gcc-4_8-branch)
 
371
@@ -1,5 +1,5 @@
 
372
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
373
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Single Thread Example</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator_impl.html" title="Implementation" /><link rel="next" href="mt_allocator_ex_multi.html" title="Multiple Thread Example" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Single Thread Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_impl.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_ex_multi.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.example_single"></a>Single Thread Example</h2></div></div></div><p>
 
374
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Single Thread Example</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator_impl.html" title="Implementation" /><link rel="next" href="mt_allocator_ex_multi.html" title="Multiple Thread Example" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Single Thread Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_impl.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_ex_multi.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.example_single"></a>Single Thread Example</h2></div></div></div><p>
 
375
 Let's start by describing how the data on a freelist is laid out in memory.
 
376
 This is the first two blocks in freelist for thread id 3 in bin 3 (8 bytes):
 
377
 </p><pre class="programlisting">
 
378
Index: libstdc++-v3/doc/html/manual/generalized_numeric_operations.html
 
379
===================================================================
 
380
--- a/src/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html      (.../tags/gcc_4_8_2_release)
 
381
+++ b/src/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html      (.../branches/gcc-4_8-branch)
 
382
@@ -1,5 +1,5 @@
 
383
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
384
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Generalized Operations</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="numerics.html" title="Chapter 12.  Numerics" /><link rel="prev" href="numerics.html" title="Chapter 12.  Numerics" /><link rel="next" href="numerics_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Generalized Operations</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="numerics.html">Prev</a> </td><th width="60%" align="center">Chapter 12. 
 
385
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Generalized Operations</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="numerics.html" title="Chapter 12.  Numerics" /><link rel="prev" href="numerics.html" title="Chapter 12.  Numerics" /><link rel="next" href="numerics_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Generalized Operations</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="numerics.html">Prev</a> </td><th width="60%" align="center">Chapter 12. 
 
386
   Numerics
 
387
   
 
388
 </th><td width="20%" align="right"> <a accesskey="n" href="numerics_and_c.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.generalized_ops"></a>Generalized Operations</h2></div></div></div><p>
 
389
Index: libstdc++-v3/doc/html/manual/mt_allocator.html
 
390
===================================================================
 
391
--- a/src/libstdc++-v3/doc/html/manual/mt_allocator.html        (.../tags/gcc_4_8_2_release)
 
392
+++ b/src/libstdc++-v3/doc/html/manual/mt_allocator.html        (.../branches/gcc-4_8-branch)
 
393
@@ -1,8 +1,8 @@
 
394
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
395
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 20. The mt_allocator</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="profile_mode_diagnostics.html" title="Diagnostics" /><link rel="next" href="mt_allocator_design.html" title="Design Issues" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 20. The mt_allocator</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_diagnostics.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
396
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 20. The mt_allocator</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="profile_mode_diagnostics.html" title="Diagnostics" /><link rel="next" href="mt_allocator_design.html" title="Design Issues" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 20. The mt_allocator</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_diagnostics.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
397
   Extensions
 
398
   
 
399
-</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_design.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.mt"></a>Chapter 20. The mt_allocator</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="mt_allocator_design.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_design.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_ex_single.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="mt_allocator_ex_multi.html">Multiple Thread Example</a></span></dt></dl></div><p>
 
400
+</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_design.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.mt"></a>Chapter 20. The mt_allocator</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="mt_allocator_design.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_design.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_ex_single.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="mt_allocator_ex_multi.html">Multiple Thread Example</a></span></dt></dl></div><p>
 
401
 </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.intro"></a>Intro</h2></div></div></div><p>
 
402
   The mt allocator [hereinafter referred to simply as "the allocator"]
 
403
   is a fixed size (power of two) allocator that was initially
 
404
Index: libstdc++-v3/doc/html/manual/unordered_associative.html
 
405
===================================================================
 
406
--- a/src/libstdc++-v3/doc/html/manual/unordered_associative.html       (.../tags/gcc_4_8_2_release)
 
407
+++ b/src/libstdc++-v3/doc/html/manual/unordered_associative.html       (.../branches/gcc-4_8-branch)
 
408
@@ -1,5 +1,5 @@
 
409
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
410
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Unordered Associative</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="Chapter 9.  Containers" /><link rel="prev" href="associative.html" title="Associative" /><link rel="next" href="containers_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Unordered Associative</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="associative.html">Prev</a> </td><th width="60%" align="center">Chapter 9. 
 
411
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Unordered Associative</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="Chapter 9.  Containers" /><link rel="prev" href="associative.html" title="Associative" /><link rel="next" href="containers_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Unordered Associative</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="associative.html">Prev</a> </td><th width="60%" align="center">Chapter 9. 
 
412
   Containers
 
413
   
 
414
 </th><td width="20%" align="right"> <a accesskey="n" href="containers_and_c.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.unordered"></a>Unordered Associative</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="containers.unordered.hash"></a>Hash Code</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="containers.unordered.cache"></a>Hash Code Caching Policy</h4></div></div></div><p>
 
415
Index: libstdc++-v3/doc/html/manual/configure.html
 
416
===================================================================
 
417
--- a/src/libstdc++-v3/doc/html/manual/configure.html   (.../tags/gcc_4_8_2_release)
 
418
+++ b/src/libstdc++-v3/doc/html/manual/configure.html   (.../branches/gcc-4_8-branch)
 
419
@@ -1,5 +1,5 @@
 
420
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
421
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Configure</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, configure, options" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="setup.html" title="Chapter 2. Setup" /><link rel="prev" href="setup.html" title="Chapter 2. Setup" /><link rel="next" href="make.html" title="Make" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Configure</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="setup.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Setup</th><td width="20%" align="right"> <a accesskey="n" href="make.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.configure"></a>Configure</h2></div></div></div><p>
 
422
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Configure</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, configure, options" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="setup.html" title="Chapter 2. Setup" /><link rel="prev" href="setup.html" title="Chapter 2. Setup" /><link rel="next" href="make.html" title="Make" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Configure</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="setup.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Setup</th><td width="20%" align="right"> <a accesskey="n" href="make.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.configure"></a>Configure</h2></div></div></div><p>
 
423
   When configuring libstdc++, you'll have to configure the entire
 
424
   <span class="emphasis"><em>gccsrcdir</em></span> directory. Consider using the
 
425
   toplevel gcc configuration option
 
426
Index: libstdc++-v3/doc/html/manual/status.html
 
427
===================================================================
 
428
--- a/src/libstdc++-v3/doc/html/manual/status.html      (.../tags/gcc_4_8_2_release)
 
429
+++ b/src/libstdc++-v3/doc/html/manual/status.html      (.../branches/gcc-4_8-branch)
 
430
@@ -1,13 +1,13 @@
 
431
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
432
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 1. Status</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="Part I.  Introduction" /><link rel="prev" href="intro.html" title="Part I.  Introduction" /><link rel="next" href="license.html" title="License" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 1. Status</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="intro.html">Prev</a> </td><th width="60%" align="center">Part I. 
 
433
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 1. Status</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="Part I.  Introduction" /><link rel="prev" href="intro.html" title="Part I.  Introduction" /><link rel="next" href="license.html" title="License" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 1. Status</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="intro.html">Prev</a> </td><th width="60%" align="center">Part I. 
 
434
   Introduction
 
435
   
 
436
-</th><td width="20%" align="right"> <a accesskey="n" href="license.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.status"></a>Chapter 1. Status</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.iso"></a>Implementation Status</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.1998"></a>C++ 1998/2003</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="iso.1998.status"></a>Implementation Status</h4></div></div></div><p>
 
437
+</th><td width="20%" align="right"> <a accesskey="n" href="license.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.status"></a>Chapter 1. Status</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.iso"></a>Implementation Status</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.1998"></a>C++ 1998/2003</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="iso.1998.status"></a>Implementation Status</h4></div></div></div><p>
 
438
 This status table is based on the table of contents of ISO/IEC 14882:2003.
 
439
 </p><p>
 
440
 This page describes the C++ support in mainline GCC SVN, not in any
 
441
 particular release.
 
442
-</p><div class="table"><a id="idp452240"></a><p class="title"><strong>Table 1.1. C++ 1998/2003 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 1998/2003 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
 
443
+</p><div class="table"><a id="idm270008034928"></a><p class="title"><strong>Table 1.1. C++ 1998/2003 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 1998/2003 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
 
444
        <span class="emphasis"><em>18</em></span>
 
445
       </td><td colspan="3" align="left">
 
446
        <span class="emphasis"><em>Language support</em></span>
 
447
@@ -157,7 +157,7 @@
 
448
 </p><p>
 
449
 This page describes the C++11 support in mainline GCC SVN, not in any
 
450
 particular release.
 
451
-</p><div class="table"><a id="idp8670848"></a><p class="title"><strong>Table 1.2. C++ 2011 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 2011 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
 
452
+</p><div class="table"><a id="idm270007982624"></a><p class="title"><strong>Table 1.2. C++ 2011 Implementation Status</strong></p><div class="table-contents"><table summary="C++ 2011 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
 
453
        <span class="emphasis"><em>18</em></span>
 
454
       </td><td colspan="3" align="left">
 
455
        <span class="emphasis"><em>Language support</em></span>
 
456
@@ -183,7 +183,7 @@
 
457
       is_trivially_copy_constructible, is_trivially_move_constructible,
 
458
       is_trivially_assignable, is_trivially_default_assignable,
 
459
       is_trivially_copy_assignable, is_trivially_move_assignable
 
460
-      </td></tr><tr><td align="left">20.9.5</td><td align="left">Type property queries</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.6</td><td align="left">Relationships between types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7</td><td align="left">Transformations between types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.9.7.1</td><td align="left">Const-volatile modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.2</td><td align="left">Reference modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.3</td><td align="left">Sign modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.4</td><td align="left">Array modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.5</td><td align="left">Pointer modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.6</td><td align="left">Other transformations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10</td><td align="left">Compile-time rational arithmetic</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.1</td><td align="left">In general</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.2</td><td align="left">Header <code class="code">&lt;ratio&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.3</td><td align="left">Class template <code class="code">ratio</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.4</td><td align="left">Arithmetic on <code class="code">ratio</code>s</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.5</td><td align="left">Comparison of <code class="code">ratio</code>s</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.6</td><td align="left">SI types for <code class="code">ratio</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11</td><td align="left">Time utilities</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.3</td><td align="left">Clock requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4</td><td align="left">Time-related traits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.4.1</td><td align="left"><code class="code">treat_as_floating_point</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4.2</td><td align="left"><code class="code">duration_values</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4.3</td><td align="left">Specializations of <code class="code">common_type</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.11.5</td><td align="left">Class template <code class="code">duration</code></td><td align="left">Partial</td><td align="left">Missing constexpr for non-member arithmetic operations</td></tr><tr><td align="left">20.11.6</td><td align="left">Class template <code class="code">time_point</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7</td><td align="left">Clocks</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.7.1</td><td align="left">Class <code class="code">system_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7.2</td><td align="left">Class <code class="code">steady_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7.3</td><td align="left">Class <code class="code">high_resolution_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.8</td><td align="left">Date and time functions</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.12</td><td align="left">Scoped allocator adaptor</td><td align="left">Partial</td><td align="left"> </td></tr><tr><td align="left">20.12.1</td><td align="left">Header <code class="code">&lt;scoped_allocator&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.12.2</td><td align="left">Scoped allocator adaptor member types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.12.3</td><td align="left">Scoped allocator adaptor constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.12.4</td><td align="left">Scoped allocator adaptor members</td><td align="left">Partial</td><td align="left">OUTERMOST is not recursive.</td></tr><tr><td align="left">20.12.5</td><td align="left">Scoped allocator operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.13</td><td align="left">Class <code class="code">type_index</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
 
461
+      </td></tr><tr><td align="left">20.9.5</td><td align="left">Type property queries</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.6</td><td align="left">Relationships between types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7</td><td align="left">Transformations between types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.9.7.1</td><td align="left">Const-volatile modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.2</td><td align="left">Reference modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.3</td><td align="left">Sign modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.4</td><td align="left">Array modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.5</td><td align="left">Pointer modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.9.7.6</td><td align="left">Other transformations</td><td align="left">Partial</td><td align="left">Missing <code class="code">aligned_union</code>.</td></tr><tr><td align="left">20.10</td><td align="left">Compile-time rational arithmetic</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.1</td><td align="left">In general</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.2</td><td align="left">Header <code class="code">&lt;ratio&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.3</td><td align="left">Class template <code class="code">ratio</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.4</td><td align="left">Arithmetic on <code class="code">ratio</code>s</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.5</td><td align="left">Comparison of <code class="code">ratio</code>s</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.6</td><td align="left">SI types for <code class="code">ratio</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11</td><td align="left">Time utilities</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.3</td><td align="left">Clock requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4</td><td align="left">Time-related traits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.4.1</td><td align="left"><code class="code">treat_as_floating_point</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4.2</td><td align="left"><code class="code">duration_values</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4.3</td><td align="left">Specializations of <code class="code">common_type</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.11.5</td><td align="left">Class template <code class="code">duration</code></td><td align="left">Partial</td><td align="left">Missing constexpr for non-member arithmetic operations</td></tr><tr><td align="left">20.11.6</td><td align="left">Class template <code class="code">time_point</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7</td><td align="left">Clocks</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.7.1</td><td align="left">Class <code class="code">system_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7.2</td><td align="left">Class <code class="code">steady_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7.3</td><td align="left">Class <code class="code">high_resolution_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.8</td><td align="left">Date and time functions</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.12</td><td align="left">Scoped allocator adaptor</td><td align="left">Partial</td><td align="left"> </td></tr><tr><td align="left">20.12.1</td><td align="left">Header <code class="code">&lt;scoped_allocator&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.12.2</td><td align="left">Scoped allocator adaptor member types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.12.3</td><td align="left">Scoped allocator adaptor constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.12.4</td><td align="left">Scoped allocator adaptor members</td><td align="left">Partial</td><td align="left">OUTERMOST is not recursive.</td></tr><tr><td align="left">20.12.5</td><td align="left">Scoped allocator operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.13</td><td align="left">Class <code class="code">type_index</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
 
462
        <span class="emphasis"><em>21</em></span>
 
463
       </td><td colspan="3" align="left">
 
464
        <span class="emphasis"><em>Strings</em></span>
 
465
@@ -302,7 +302,7 @@
 
466
 </p><p>
 
467
 This page describes the TR1 support in mainline GCC SVN, not in any particular
 
468
 release.
 
469
-</p><div class="table"><a id="idp7483200"></a><p class="title"><strong>Table 1.3. C++ TR1 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR1 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"><span class="emphasis"><em>2</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>General Utilities</em></span></td></tr><tr><td align="left">2.1</td><td align="left">Reference wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.1</td><td align="left">Additions to header <code class="code">&lt;functional&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2</td><td align="left">Class template <code class="code">reference_wrapper</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.2.1</td><td align="left"><code class="code">reference_wrapper</code> construct/copy/destroy</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.2</td><td align="left"><code class="code">reference_wrapper</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.3</td><td align="left"><code class="code">reference_wrapper</code> access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.4</td><td align="left"><code class="code">reference_wrapper</code> invocation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.5</td><td align="left"><code class="code">reference_wrapper</code> helper functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2</td><td align="left">Smart pointers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.2.1</td><td align="left">Additions to header <code class="code">&lt;memory&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.2</td><td align="left">Class <code class="code">bad_weak_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3</td><td align="left">Class template <code class="code">shared_ptr</code></td><td align="left"> </td><td align="left">
 
470
+</p><div class="table"><a id="idm270006687472"></a><p class="title"><strong>Table 1.3. C++ TR1 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR1 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"><span class="emphasis"><em>2</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>General Utilities</em></span></td></tr><tr><td align="left">2.1</td><td align="left">Reference wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.1</td><td align="left">Additions to header <code class="code">&lt;functional&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2</td><td align="left">Class template <code class="code">reference_wrapper</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.2.1</td><td align="left"><code class="code">reference_wrapper</code> construct/copy/destroy</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.2</td><td align="left"><code class="code">reference_wrapper</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.3</td><td align="left"><code class="code">reference_wrapper</code> access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.4</td><td align="left"><code class="code">reference_wrapper</code> invocation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.5</td><td align="left"><code class="code">reference_wrapper</code> helper functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2</td><td align="left">Smart pointers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.2.1</td><td align="left">Additions to header <code class="code">&lt;memory&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.2</td><td align="left">Class <code class="code">bad_weak_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3</td><td align="left">Class template <code class="code">shared_ptr</code></td><td align="left"> </td><td align="left">
 
471
        <p>
 
472
          Uses code from
 
473
          <a class="link" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">boost::shared_ptr</a>.
 
474
@@ -323,7 +323,7 @@
 
475
 </p><p>
 
476
 This page describes the TR 24733 support in mainline GCC SVN, not in any
 
477
 particular release.
 
478
-</p><div class="table"><a id="idp12559072"></a><p class="title"><strong>Table 1.4. C++ TR 24733 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR 24733 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
 
479
+</p><div class="table"><a id="idm270002960368"></a><p class="title"><strong>Table 1.4. C++ TR 24733 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR 24733 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left">
 
480
        <span class="emphasis"><em>0</em></span>
 
481
       </td><td colspan="3" align="left">
 
482
        <span class="emphasis"><em>Introduction</em></span>
 
483
Index: libstdc++-v3/doc/html/manual/profile_mode_devel.html
 
484
===================================================================
 
485
--- a/src/libstdc++-v3/doc/html/manual/profile_mode_devel.html  (.../tags/gcc_4_8_2_release)
 
486
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode_devel.html  (.../branches/gcc-4_8-branch)
 
487
@@ -1,5 +1,5 @@
 
488
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
489
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Developer Information</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_impl.html" title="Implementation Issues" /><link rel="next" href="profile_mode_diagnostics.html" title="Diagnostics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Developer Information</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_impl.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_diagnostics.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.developer"></a>Developer Information</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.developer.bigpic"></a>Big Picture</h3></div></div></div><p>The profile mode headers are included with
 
490
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Developer Information</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_impl.html" title="Implementation Issues" /><link rel="next" href="profile_mode_diagnostics.html" title="Diagnostics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Developer Information</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_impl.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_diagnostics.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.developer"></a>Developer Information</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.developer.bigpic"></a>Big Picture</h3></div></div></div><p>The profile mode headers are included with
 
491
    <code class="code">-D_GLIBCXX_PROFILE</code> through preprocessor directives in
 
492
    <code class="code">include/std/*</code>.
 
493
   </p><p>Instrumented implementations are provided in
 
494
Index: libstdc++-v3/doc/html/manual/debug_mode_design.html
 
495
===================================================================
 
496
--- a/src/libstdc++-v3/doc/html/manual/debug_mode_design.html   (.../tags/gcc_4_8_2_release)
 
497
+++ b/src/libstdc++-v3/doc/html/manual/debug_mode_design.html   (.../branches/gcc-4_8-branch)
 
498
@@ -1,5 +1,5 @@
 
499
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
500
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="debug_mode_using.html" title="Using" /><link rel="next" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode_using.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.design"></a>Design</h2></div></div></div><p>
 
501
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="debug_mode_using.html" title="Using" /><link rel="next" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode_using.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.design"></a>Design</h2></div></div></div><p>
 
502
   </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.goals"></a>Goals</h3></div></div></div><p>
 
503
     </p><p> The libstdc++ debug mode replaces unsafe (but efficient) standard
 
504
   containers and iterators with semantically equivalent safe standard
 
505
@@ -391,7 +391,7 @@
 
506
     </p><p> There are several existing implementations of debug modes for C++
 
507
   standard library implementations, although none of them directly
 
508
   supports debugging for programs using libstdc++. The existing
 
509
-  implementations include:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><a class="link" href="http://www.mathcs.sjsu.edu/faculty/horstman/safestl.html" target="_top">SafeSTL</a>:
 
510
+  implementations include:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><a class="link" href="http://www.cs.sjsu.edu/faculty/horstman/safestl.html" target="_top">SafeSTL</a>:
 
511
   SafeSTL was the original debugging version of the Standard Template
 
512
   Library (STL), implemented by Cay S. Horstmann on top of the
 
513
   Hewlett-Packard STL. Though it inspired much work in this area, it
 
514
Index: libstdc++-v3/doc/html/manual/policy_data_structures_design.html
 
515
===================================================================
 
516
--- a/src/libstdc++-v3/doc/html/manual/policy_data_structures_design.html       (.../tags/gcc_4_8_2_release)
 
517
+++ b/src/libstdc++-v3/doc/html/manual/policy_data_structures_design.html       (.../branches/gcc-4_8-branch)
 
518
@@ -1,5 +1,5 @@
 
519
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
520
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures_using.html" title="Using" /><link rel="next" href="policy_based_data_structures_test.html" title="Testing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_using.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_based_data_structures_test.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.pbds.design"></a>Design</h2></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.design.concepts"></a>Concepts</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.null_type"></a>Null Policy Classes</h4></div></div></div><p>
 
521
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures_using.html" title="Using" /><link rel="next" href="policy_based_data_structures_test.html" title="Testing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_using.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_based_data_structures_test.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.pbds.design"></a>Design</h2></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.design.concepts"></a>Concepts</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.null_type"></a>Null Policy Classes</h4></div></div></div><p>
 
522
        Associative containers are typically parametrized by various
 
523
        policies. For example, a hash-based associative container is
 
524
        parametrized by a hash-functor, transforming each key into an
 
525
@@ -170,7 +170,7 @@
 
526
          naturally; collision-chaining hash tables (label B) store
 
527
          equivalent-key values in the same bucket, the bucket can be
 
528
          arranged so that equivalent-key values are consecutive.
 
529
-       </p><div class="figure"><a id="idp18000448"></a><p class="title"><strong>Figure 22.8. Non-unique Mapping Standard Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_1.png" align="middle" alt="Non-unique Mapping Standard Containers" /></div></div></div><br class="figure-break" /><p>
 
530
+       </p><div class="figure"><a id="idm269997530416"></a><p class="title"><strong>Figure 22.8. Non-unique Mapping Standard Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_1.png" align="middle" alt="Non-unique Mapping Standard Containers" /></div></div></div><br class="figure-break" /><p>
 
531
          Put differently, the standards' non-unique mapping
 
532
          associative-containers are associative containers that map
 
533
          primary keys to linked lists that are embedded into the
 
534
@@ -252,7 +252,7 @@
 
535
          first graphic above. Labels A and B, respectively. Each shaded
 
536
          box represents some size-type or secondary
 
537
          associative-container.
 
538
-       </p><div class="figure"><a id="idp18023952"></a><p class="title"><strong>Figure 22.10. Non-unique Mapping Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_3.png" align="middle" alt="Non-unique Mapping Containers" /></div></div></div><br class="figure-break" /><p>
 
539
+       </p><div class="figure"><a id="idm269997506912"></a><p class="title"><strong>Figure 22.10. Non-unique Mapping Containers</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_embedded_lists_3.png" align="middle" alt="Non-unique Mapping Containers" /></div></div></div><br class="figure-break" /><p>
 
540
          In the first example above, then, one would use an associative
 
541
          container mapping each user to an associative container which
 
542
          maps each application id to a start time (see
 
543
@@ -305,7 +305,7 @@
 
544
        shows invariants for order-preserving containers: point-type
 
545
        iterators are synonymous with range-type iterators.
 
546
        Orthogonally,  <span class="emphasis"><em>C</em></span>shows invariants for "set"
 
547
-       containers: iterators are synonymous with const iterators.</p><div class="figure"><a id="idp18043824"></a><p class="title"><strong>Figure 22.11. Point Iterator Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterator_hierarchy.png" align="middle" alt="Point Iterator Hierarchy" /></div></div></div><br class="figure-break" /><p>Note that point-type iterators in self-organizing containers
 
548
+       containers: iterators are synonymous with const iterators.</p><div class="figure"><a id="idm269997487104"></a><p class="title"><strong>Figure 22.11. Point Iterator Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterator_hierarchy.png" align="middle" alt="Point Iterator Hierarchy" /></div></div></div><br class="figure-break" /><p>Note that point-type iterators in self-organizing containers
 
549
        (hash-based associative containers) lack movement
 
550
        operators, such as <code class="literal">operator++</code> - in fact, this
 
551
        is the reason why this library differentiates from the standard C++ librarys
 
552
@@ -344,7 +344,7 @@
 
553
          to the question of whether point-type iterators and range-type
 
554
          iterators are valid. The graphic below shows tags corresponding to
 
555
          different types of invalidation guarantees.
 
556
-       </p><div class="figure"><a id="idp18057168"></a><p class="title"><strong>Figure 22.12. Invalidation Guarantee Tags Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_tag_hierarchy.png" align="middle" alt="Invalidation Guarantee Tags Hierarchy" /></div></div></div><br class="figure-break" /><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
 
557
+       </p><div class="figure"><a id="idm269997473760"></a><p class="title"><strong>Figure 22.12. Invalidation Guarantee Tags Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_tag_hierarchy.png" align="middle" alt="Invalidation Guarantee Tags Hierarchy" /></div></div></div><br class="figure-break" /><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
 
558
              <code class="classname">basic_invalidation_guarantee</code>
 
559
              corresponds to a basic guarantee that a point-type iterator,
 
560
              a found pointer, or a found reference, remains valid as long
 
561
@@ -428,7 +428,7 @@
 
562
        </p><p>
 
563
          This library contains a container tag hierarchy corresponding to the
 
564
          diagram below.
 
565
-       </p><div class="figure"><a id="idp18087392"></a><p class="title"><strong>Figure 22.13. Container Tag Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_container_tag_hierarchy.png" align="middle" alt="Container Tag Hierarchy" /></div></div></div><br class="figure-break" /><p>
 
566
+       </p><div class="figure"><a id="idm269997443664"></a><p class="title"><strong>Figure 22.13. Container Tag Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_container_tag_hierarchy.png" align="middle" alt="Container Tag Hierarchy" /></div></div></div><br class="figure-break" /><p>
 
567
          Given any container <span class="type">Cntnr</span>, the tag of
 
568
          the underlying data structure can be found via <code class="literal">typename
 
569
          Cntnr::container_category</code>.
 
570
@@ -487,7 +487,7 @@
 
571
        collision-chaining container, except for the following.</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><code class="classname">Comb_Probe_Fn</code> describes how to transform a probe
 
572
          sequence into a sequence of positions within the table.</p></li><li class="listitem"><p><code class="classname">Probe_Fn</code> describes a probe sequence policy.</p></li></ol></div><p>Some of the default template values depend on the values of
 
573
        other parameters, and are explained below.</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="container.hash.details"></a>Details</h5></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.hash.details.hash_policies"></a>Hash Policies</h6></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="details.hash_policies.general"></a>General</h6></div></div></div><p>Following is an explanation of some functions which hashing
 
574
-           involves. The graphic below illustrates the discussion.</p><div class="figure"><a id="idp18127536"></a><p class="title"><strong>Figure 22.14. Hash functions, ranged-hash functions, and
 
575
+           involves. The graphic below illustrates the discussion.</p><div class="figure"><a id="idm269997403584"></a><p class="title"><strong>Figure 22.14. Hash functions, ranged-hash functions, and
 
576
              range-hashing functions</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_ranged_hash_range_hashing_fns.png" align="middle" alt="Hash functions, ranged-hash functions, and range-hashing functions" /></div></div></div><br class="figure-break" /><p>Let U be a domain (e.g., the integers, or the
 
577
            strings of 3 characters). A hash-table algorithm needs to map
 
578
            elements of U "uniformly" into the range [0,..., m -
 
579
@@ -504,7 +504,7 @@
 
580
            Z<sub>+</sub>,</p><p>which maps a non-negative hash value, and a non-negative
 
581
            range upper-bound into a non-negative integral in the range
 
582
            between 0 (inclusive) and the range upper bound (exclusive),
 
583
-           i.e., for any r in Z<sub>+</sub>,</p><p>0 ≤ g(r, m) ≤ m - 1</p><p>The resulting ranged-hash function, is</p><div class="equation"><a id="idp18141344"></a><p class="title"><strong>Equation 22.1. Ranged Hash Function</strong></p><div class="equation-contents"><span class="mathphrase">
 
584
+           i.e., for any r in Z<sub>+</sub>,</p><p>0 ≤ g(r, m) ≤ m - 1</p><p>The resulting ranged-hash function, is</p><div class="equation"><a id="idm269997389776"></a><p class="title"><strong>Equation 22.1. Ranged Hash Function</strong></p><div class="equation-contents"><span class="mathphrase">
 
585
                f(u , m) = g(h(u), m)
 
586
              </span></div></div><br class="equation-break" /><p>From the above, it is obvious that given g and
 
587
            h, f can always be composed (however the converse
 
588
@@ -524,7 +524,7 @@
 
589
            transforming the sequence of hash values into a sequence of
 
590
            positions.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="details.hash_policies.range"></a>Range Hashing</h6></div></div></div><p>Some common choices for range-hashing functions are the
 
591
            division, multiplication, and middle-square methods (<a class="xref" href="policy_data_structures.html#biblio.knuth98sorting" title="The Art of Computer Programming - Sorting and Searching">[biblio.knuth98sorting]</a>), defined
 
592
-           as</p><div class="equation"><a id="idp18147232"></a><p class="title"><strong>Equation 22.2. Range-Hashing, Division Method</strong></p><div class="equation-contents"><span class="mathphrase">
 
593
+           as</p><div class="equation"><a id="idm269997383888"></a><p class="title"><strong>Equation 22.2. Range-Hashing, Division Method</strong></p><div class="equation-contents"><span class="mathphrase">
 
594
                g(r, m) = r mod m
 
595
              </span></div></div><br class="equation-break" /><p>g(r, m) = ⌈ u/v ( a r mod v ) ⌉</p><p>and</p><p>g(r, m) = ⌈ u/v ( r<sup>2</sup> mod v ) ⌉</p><p>respectively, for some positive integrals u and
 
596
            v (typically powers of 2), and some a. Each of
 
597
@@ -535,9 +535,9 @@
 
598
            implement using the low
 
599
            level % (modulo) operation (for any m), or the
 
600
            low level &amp; (bit-mask) operation (for the case where
 
601
-           m is a power of 2), i.e.,</p><div class="equation"><a id="idp18151744"></a><p class="title"><strong>Equation 22.3. Division via Prime Modulo</strong></p><div class="equation-contents"><span class="mathphrase">
 
602
+           m is a power of 2), i.e.,</p><div class="equation"><a id="idm269997379376"></a><p class="title"><strong>Equation 22.3. Division via Prime Modulo</strong></p><div class="equation-contents"><span class="mathphrase">
 
603
                g(r, m) = r % m
 
604
-             </span></div></div><br class="equation-break" /><p>and</p><div class="equation"><a id="idp18153568"></a><p class="title"><strong>Equation 22.4. Division via Bit Mask</strong></p><div class="equation-contents"><span class="mathphrase">
 
605
+             </span></div></div><br class="equation-break" /><p>and</p><div class="equation"><a id="idm269997377552"></a><p class="title"><strong>Equation 22.4. Division via Bit Mask</strong></p><div class="equation-contents"><span class="mathphrase">
 
606
                g(r, m) = r &amp; m - 1, (with m =
 
607
                2<sup>k</sup> for some k)
 
608
              </span></div></div><br class="equation-break" /><p>respectively.</p><p>The % (modulo) implementation has the advantage that for
 
609
@@ -563,7 +563,7 @@
 
610
              s = [ s<sub>0</sub>,..., s<sub>t - 1</sub>]
 
611
            </p><p>be a string of t characters, each of which is from
 
612
            domain S. Consider the following ranged-hash
 
613
-           function:</p><div class="equation"><a id="idp18163200"></a><p class="title"><strong>Equation 22.5. 
 
614
+           function:</p><div class="equation"><a id="idm269997367984"></a><p class="title"><strong>Equation 22.5. 
 
615
                A Standard String Hash Function
 
616
              </strong></p><div class="equation-contents"><span class="mathphrase">
 
617
                f<sub>1</sub>(s, m) = ∑ <sub>i =
 
618
@@ -575,7 +575,7 @@
 
619
            of a long DNA sequence (and so S = {'A', 'C', 'G',
 
620
            'T'}). In this case, scanning the entire string might be
 
621
            prohibitively expensive. A possible alternative might be to use
 
622
-           only the first k characters of the string, where</p><p>|S|<sup>k</sup> ≥ m ,</p><p>i.e., using the hash function</p><div class="equation"><a id="idp18169344"></a><p class="title"><strong>Equation 22.6. 
 
623
+           only the first k characters of the string, where</p><p>|S|<sup>k</sup> ≥ m ,</p><p>i.e., using the hash function</p><div class="equation"><a id="idm269997361840"></a><p class="title"><strong>Equation 22.6. 
 
624
                Only k String DNA Hash
 
625
              </strong></p><div class="equation-contents"><span class="mathphrase">
 
626
                f<sub>2</sub>(s, m) = ∑ <sub>i
 
627
@@ -606,12 +606,12 @@
 
628
              the container transforms the key into a non-negative integral
 
629
              using the hash functor (points B and C), and transforms the
 
630
              result into a position using the combining functor (points D
 
631
-             and E).</p><div class="figure"><a id="idp18191968"></a><p class="title"><strong>Figure 22.15. Insert hash sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram.png" align="middle" alt="Insert hash sequence diagram" /></div></div></div><br class="figure-break" /><p>If <code class="classname">cc_hash_table</code>'s
 
632
+             and E).</p><div class="figure"><a id="idm269997339216"></a><p class="title"><strong>Figure 22.15. Insert hash sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram.png" align="middle" alt="Insert hash sequence diagram" /></div></div></div><br class="figure-break" /><p>If <code class="classname">cc_hash_table</code>'s
 
633
              hash-functor, <code class="classname">Hash_Fn</code> is instantiated by <code class="classname">null_type</code> , then <code class="classname">Comb_Hash_Fn</code> is taken to be
 
634
              a ranged-hash function. The graphic below shows an <code class="function">insert</code> sequence
 
635
              diagram. The user inserts an element (point A), the container
 
636
              transforms the key into a position using the combining functor
 
637
-             (points B and C).</p><div class="figure"><a id="idp18199024"></a><p class="title"><strong>Figure 22.16. Insert hash sequence diagram with a null policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram2.png" align="middle" alt="Insert hash sequence diagram with a null policy" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash_policies.implementation.probe"></a>
 
638
+             (points B and C).</p><div class="figure"><a id="idm269997332160"></a><p class="title"><strong>Figure 22.16. Insert hash sequence diagram with a null policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_range_hashing_seq_diagram2.png" align="middle" alt="Insert hash sequence diagram with a null policy" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash_policies.implementation.probe"></a>
 
639
                Probing tables
 
640
              </h6></div></div></div><p><code class="classname">gp_hash_table</code> is parametrized by
 
641
              <code class="classname">Hash_Fn</code>, <code class="classname">Probe_Fn</code>,
 
642
@@ -634,7 +634,7 @@
 
643
                a linear probe and a quadratic probe function,
 
644
                respectively.</p></li></ol></div><p>
 
645
                The graphic below shows the relationships.
 
646
-             </p><div class="figure"><a id="idp18215840"></a><p class="title"><strong>Figure 22.17. Hash policy class diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_policy_cd.png" align="middle" alt="Hash policy class diagram" /></div></div></div><br class="figure-break" /></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.hash.details.resize_policies"></a>Resize Policies</h6></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.general"></a>General</h6></div></div></div><p>Hash-tables, as opposed to trees, do not naturally grow or
 
647
+             </p><div class="figure"><a id="idm269997315408"></a><p class="title"><strong>Figure 22.17. Hash policy class diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_hash_policy_cd.png" align="middle" alt="Hash policy class diagram" /></div></div></div><br class="figure-break" /></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.hash.details.resize_policies"></a>Resize Policies</h6></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.general"></a>General</h6></div></div></div><p>Hash-tables, as opposed to trees, do not naturally grow or
 
648
            shrink. It is necessary to specify policies to determine how
 
649
            and when a hash table should change its size. Usually, resize
 
650
            policies can be decomposed into orthogonal policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>A size policy indicating how a hash table
 
651
@@ -667,10 +667,10 @@
 
652
            and some load factor be denoted by Α. We would like to
 
653
            calculate the minimal length of k, such that if there were Α
 
654
            m elements in the hash table, a probe sequence of length k would
 
655
-           be found with probability at most 1/m.</p><div class="figure"><a id="idp18234944"></a><p class="title"><strong>Figure 22.18. Balls and bins</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_balls_and_bins.png" align="middle" alt="Balls and bins" /></div></div></div><br class="figure-break" /><p>Denote the probability that a probe sequence of length
 
656
+           be found with probability at most 1/m.</p><div class="figure"><a id="idm269997296368"></a><p class="title"><strong>Figure 22.18. Balls and bins</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_balls_and_bins.png" align="middle" alt="Balls and bins" /></div></div></div><br class="figure-break" /><p>Denote the probability that a probe sequence of length
 
657
            k appears in bin i by p<sub>i</sub>, the
 
658
            length of the probe sequence of bin i by
 
659
-           l<sub>i</sub>, and assume uniform distribution. Then</p><div class="equation"><a id="idp18240448"></a><p class="title"><strong>Equation 22.7. 
 
660
+           l<sub>i</sub>, and assume uniform distribution. Then</p><div class="equation"><a id="idm269997290864"></a><p class="title"><strong>Equation 22.7. 
 
661
                Probability of Probe Sequence of Length k
 
662
              </strong></p><div class="equation-contents"><span class="mathphrase">
 
663
                p<sub>1</sub> = 
 
664
@@ -684,7 +684,7 @@
 
665
            l<sub>i</sub> are negatively-dependent
 
666
            (<a class="xref" href="policy_data_structures.html#biblio.dubhashi98neg" title="Balls and bins: A study in negative dependence">[biblio.dubhashi98neg]</a>)
 
667
            . Let
 
668
-           I(.) denote the indicator function. Then</p><div class="equation"><a id="idp18247216"></a><p class="title"><strong>Equation 22.8. 
 
669
+           I(.) denote the indicator function. Then</p><div class="equation"><a id="idm269997284096"></a><p class="title"><strong>Equation 22.8. 
 
670
                Probability Probe Sequence in Some Bin
 
671
              </strong></p><div class="equation-contents"><span class="mathphrase">
 
672
                P( exists<sub>i</sub> l<sub>i</sub> ≥ k ) = 
 
673
@@ -723,7 +723,7 @@
 
674
              a resize is needed, and if so, what is the new size (points D
 
675
              to G); following the resize, it notifies the policy that a
 
676
              resize has completed (point H); finally, the element is
 
677
-             inserted, and the policy notified (point I).</p><div class="figure"><a id="idp18265728"></a><p class="title"><strong>Figure 22.19. Insert resize sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram1.png" align="middle" alt="Insert resize sequence diagram" /></div></div></div><br class="figure-break" /><p>In practice, a resize policy can be usually orthogonally
 
678
+             inserted, and the policy notified (point I).</p><div class="figure"><a id="idm269997265648"></a><p class="title"><strong>Figure 22.19. Insert resize sequence diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram1.png" align="middle" alt="Insert resize sequence diagram" /></div></div></div><br class="figure-break" /><p>In practice, a resize policy can be usually orthogonally
 
679
              decomposed to a size policy and a trigger policy. Consequently,
 
680
              the library contains a single class for instantiating a resize
 
681
              policy: <code class="classname">hash_standard_resize_policy</code>
 
682
@@ -732,8 +732,8 @@
 
683
              both, and acts as a standard delegate (<a class="xref" href="policy_data_structures.html#biblio.gof" title="Design Patterns - Elements of Reusable Object-Oriented Software">[biblio.gof]</a>)
 
684
              to these policies.</p><p>The two graphics immediately below show sequence diagrams
 
685
              illustrating the interaction between the standard resize policy
 
686
-             and its trigger and size policies, respectively.</p><div class="figure"><a id="idp18273504"></a><p class="title"><strong>Figure 22.20. Standard resize policy trigger sequence
 
687
-               diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram2.png" align="middle" alt="Standard resize policy trigger sequence diagram" /></div></div></div><br class="figure-break" /><div class="figure"><a id="idp18277664"></a><p class="title"><strong>Figure 22.21. Standard resize policy size sequence
 
688
+             and its trigger and size policies, respectively.</p><div class="figure"><a id="idm269997257872"></a><p class="title"><strong>Figure 22.20. Standard resize policy trigger sequence
 
689
+               diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram2.png" align="middle" alt="Standard resize policy trigger sequence diagram" /></div></div></div><br class="figure-break" /><div class="figure"><a id="idm269997253712"></a><p class="title"><strong>Figure 22.21. Standard resize policy size sequence
 
690
                diagram</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_insert_resize_sequence_diagram3.png" align="middle" alt="Standard resize policy size sequence diagram" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.impl.predefined"></a>Predefined Policies</h6></div></div></div><p>The library includes the following
 
691
              instantiations of size and trigger policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><code class="classname">hash_load_check_resize_trigger</code>
 
692
                implements a load check trigger policy.</p></li><li class="listitem"><p><code class="classname">cc_hash_max_collision_check_resize_trigger</code>
 
693
@@ -876,7 +876,7 @@
 
694
          each node, and maintains node invariants (see <a class="xref" href="policy_data_structures.html#biblio.clrs2001" title="Introduction to Algorithms, 2nd edition">[biblio.clrs2001]</a>.) The first stores in
 
695
          each node the size of the sub-tree rooted at the node; the
 
696
          second stores at each node the maximal endpoint of the
 
697
-         intervals at the sub-tree rooted at the node.</p><div class="figure"><a id="idp18355696"></a><p class="title"><strong>Figure 22.22. Tree node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invariants.png" align="middle" alt="Tree node invariants" /></div></div></div><br class="figure-break" /><p>Supporting such trees is difficult for a number of
 
698
+         intervals at the sub-tree rooted at the node.</p><div class="figure"><a id="idm269997175616"></a><p class="title"><strong>Figure 22.22. Tree node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invariants.png" align="middle" alt="Tree node invariants" /></div></div></div><br class="figure-break" /><p>Supporting such trees is difficult for a number of
 
699
          reasons:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>There must be a way to specify what a node's metadata
 
700
            should be (if any).</p></li><li class="listitem"><p>Various operations can invalidate node
 
701
            invariants.  The graphic below shows how a right rotation,
 
702
@@ -890,7 +890,7 @@
 
703
            metadata.</p></li><li class="listitem"><p>It is not feasible to know in advance which methods trees
 
704
            can support. Besides the usual <code class="classname">find</code> method, the
 
705
            first tree can support a <code class="classname">find_by_order</code> method, while
 
706
-           the second can support an <code class="classname">overlaps</code> method.</p></li></ol></div><div class="figure"><a id="idp18365136"></a><p class="title"><strong>Figure 22.23. Tree node invalidation</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invalidations.png" align="middle" alt="Tree node invalidation" /></div></div></div><br class="figure-break" /><p>These problems are solved by a combination of two means:
 
707
+           the second can support an <code class="classname">overlaps</code> method.</p></li></ol></div><div class="figure"><a id="idm269997166176"></a><p class="title"><strong>Figure 22.23. Tree node invalidation</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_invalidations.png" align="middle" alt="Tree node invalidation" /></div></div></div><br class="figure-break" /><p>These problems are solved by a combination of two means:
 
708
          node iterators, and template-template node updater
 
709
          parameters.</p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.tree.node.iterators"></a>Node Iterators</h6></div></div></div><p>Each tree-based container defines two additional iterator
 
710
            types, <code class="classname">const_node_iterator</code>
 
711
@@ -919,7 +919,7 @@
 
712
            <code class="classname">node_update</code> class, and publicly subclasses
 
713
            <code class="classname">node_update</code>. The graphic below shows this
 
714
            scheme, as well as some predefined policies (which are explained
 
715
-           below).</p><div class="figure"><a id="idp18378304"></a><p class="title"><strong>Figure 22.24. A tree and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_updator_policy_cd.png" align="middle" alt="A tree and its update policy" /></div></div></div><br class="figure-break" /><p><code class="classname">node_update</code> (an instantiation of
 
716
+           below).</p><div class="figure"><a id="idm269997153072"></a><p class="title"><strong>Figure 22.24. A tree and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_tree_node_updator_policy_cd.png" align="middle" alt="A tree and its update policy" /></div></div></div><br class="figure-break" /><p><code class="classname">node_update</code> (an instantiation of
 
717
            <code class="classname">Node_Update</code>) must define <code class="classname">metadata_type</code> as
 
718
            the type of metadata it requires. For order statistics,
 
719
            e.g., <code class="classname">metadata_type</code> might be <code class="classname">size_t</code>.
 
720
@@ -938,7 +938,7 @@
 
721
            <code class="classname">nd_it</code>. For example, say node x in the
 
722
            graphic below label A has an invalid invariant, but its' children,
 
723
            y and z have valid invariants. After the invocation, all three
 
724
-           nodes should have valid invariants, as in label B.</p><div class="figure"><a id="idp18389968"></a><p class="title"><strong>Figure 22.25. Restoring node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_restoring_node_invariants.png" align="middle" alt="Restoring node invariants" /></div></div></div><br class="figure-break" /><p>When a tree operation might invalidate some node invariant,
 
725
+           nodes should have valid invariants, as in label B.</p><div class="figure"><a id="idm269997141408"></a><p class="title"><strong>Figure 22.25. Restoring node invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_restoring_node_invariants.png" align="middle" alt="Restoring node invariants" /></div></div></div><br class="figure-break" /><p>When a tree operation might invalidate some node invariant,
 
726
            it invokes this method in its <code class="classname">node_update</code> base to
 
727
            restore the invariant. For example, the graphic below shows
 
728
            an <code class="function">insert</code> operation (point A); the tree performs some
 
729
@@ -946,7 +946,7 @@
 
730
            C, and D). (It is well known that any <code class="function">insert</code>,
 
731
            <code class="function">erase</code>, <code class="function">split</code> or <code class="function">join</code>, can restore
 
732
            all node invariants by a small number of node invariant updates (<a class="xref" href="policy_data_structures.html#biblio.clrs2001" title="Introduction to Algorithms, 2nd edition">[biblio.clrs2001]</a>)
 
733
-           .</p><div class="figure"><a id="idp18398144"></a><p class="title"><strong>Figure 22.26. Insert update sequence</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_update_seq_diagram.png" align="middle" alt="Insert update sequence" /></div></div></div><br class="figure-break" /><p>To complete the description of the scheme, three questions
 
734
+           .</p><div class="figure"><a id="idm269997133232"></a><p class="title"><strong>Figure 22.26. Insert update sequence</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_update_seq_diagram.png" align="middle" alt="Insert update sequence" /></div></div></div><br class="figure-break" /><p>To complete the description of the scheme, three questions
 
735
            need to be answered:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>How can a tree which supports order statistics define a
 
736
              method such as <code class="classname">find_by_order</code>?</p></li><li class="listitem"><p>How can the node updater base access methods of the
 
737
              tree?</p></li><li class="listitem"><p>How can the following cyclic dependency be resolved?
 
738
@@ -988,7 +988,7 @@
 
739
              node's metadata (this is halting reducible). In the graphic
 
740
              below, assume the shaded node is inserted. The tree would have
 
741
              to traverse the useless path shown to the root, applying
 
742
-             redundant updates all the way.</p></li></ol></div><div class="figure"><a id="idp18420400"></a><p class="title"><strong>Figure 22.27. Useless update path</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_rationale_null_node_updator.png" align="middle" alt="Useless update path" /></div></div></div><br class="figure-break" /><p>A null policy class, <code class="classname">null_node_update</code>
 
743
+             redundant updates all the way.</p></li></ol></div><div class="figure"><a id="idm269997110976"></a><p class="title"><strong>Figure 22.27. Useless update path</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_rationale_null_node_updator.png" align="middle" alt="Useless update path" /></div></div></div><br class="figure-break" /><p>A null policy class, <code class="classname">null_node_update</code>
 
744
            solves both these problems. The tree detects that node
 
745
            invariants are irrelevant, and defines all accordingly.</p></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.tree.details.split"></a>Split and Join</h6></div></div></div><p>Tree-based containers support split and join methods.
 
746
          It is possible to split a tree so that it passes
 
747
@@ -1071,7 +1071,7 @@
 
748
          sub-tree with leafs "a" and "as". The maximal common prefix is
 
749
          "a". The internal node contains, consequently, to const
 
750
          iterators, one pointing to <code class="varname">'a'</code>, and the other to
 
751
-         <code class="varname">'s'</code>.</p><div class="figure"><a id="idp18465088"></a><p class="title"><strong>Figure 22.28. A PATRICIA trie</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_pat_trie.png" align="middle" alt="A PATRICIA trie" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.trie.details.node"></a>Node Invariants</h6></div></div></div><p>Trie-based containers support node invariants, as do
 
752
+         <code class="varname">'s'</code>.</p><div class="figure"><a id="idm269997066288"></a><p class="title"><strong>Figure 22.28. A PATRICIA trie</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_pat_trie.png" align="middle" alt="A PATRICIA trie" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.trie.details.node"></a>Node Invariants</h6></div></div></div><p>Trie-based containers support node invariants, as do
 
753
          tree-based containers. There are two minor
 
754
          differences, though, which, unfortunately, thwart sharing them
 
755
          sharing the same node-updating policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>A trie's <code class="classname">Node_Update</code> template-template
 
756
@@ -1080,7 +1080,7 @@
 
757
            parametrized by <code class="classname">Cmp_Fn</code>.</p></li><li class="listitem"><p>Tree-based containers store values in all nodes, while
 
758
            trie-based containers (at least in this implementation) store
 
759
            values in leafs.</p></li></ol></div><p>The graphic below shows the scheme, as well as some predefined
 
760
-         policies (which are explained below).</p><div class="figure"><a id="idp18475584"></a><p class="title"><strong>Figure 22.29. A trie and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_trie_node_updator_policy_cd.png" align="middle" alt="A trie and its update policy" /></div></div></div><br class="figure-break" /><p>This library offers the following pre-defined trie node
 
761
+         policies (which are explained below).</p><div class="figure"><a id="idm269997055856"></a><p class="title"><strong>Figure 22.29. A trie and its update policy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_trie_node_updator_policy_cd.png" align="middle" alt="A trie and its update policy" /></div></div></div><br class="figure-break" /><p>This library offers the following pre-defined trie node
 
762
          updating policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
 
763
                <code class="classname">trie_order_statistics_node_update</code>
 
764
                supports order statistics.
 
765
@@ -1128,7 +1128,7 @@
 
766
          simple list of integer keys. If we search for the integer 6, we
 
767
          are paying an overhead: the link with key 6 is only the fifth
 
768
          link; if it were the first link, it could be accessed
 
769
-         faster.</p><div class="figure"><a id="idp18506160"></a><p class="title"><strong>Figure 22.30. A simple list</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_simple_list.png" align="middle" alt="A simple list" /></div></div></div><br class="figure-break" /><p>List-update algorithms reorder lists as elements are
 
770
+         faster.</p><div class="figure"><a id="idm269997025344"></a><p class="title"><strong>Figure 22.30. A simple list</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_simple_list.png" align="middle" alt="A simple list" /></div></div></div><br class="figure-break" /><p>List-update algorithms reorder lists as elements are
 
771
          accessed. They try to determine, by the access history, which
 
772
          keys to move to the front of the list. Some of these algorithms
 
773
          require adding some metadata alongside each entry.</p><p>For example, in the graphic below label A shows the counter
 
774
@@ -1138,7 +1138,7 @@
 
775
          predetermined value, say 10, as shown in label C, the count is set
 
776
          to 0 and the node is moved to the front of the list, as in label
 
777
          D.
 
778
-         </p><div class="figure"><a id="idp18511744"></a><p class="title"><strong>Figure 22.31. The counter algorithm</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_list_update.png" align="middle" alt="The counter algorithm" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.list.details.policies"></a>Policies</h6></div></div></div><p>this library allows instantiating lists with policies
 
779
+         </p><div class="figure"><a id="idm269997019760"></a><p class="title"><strong>Figure 22.31. The counter algorithm</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_list_update.png" align="middle" alt="The counter algorithm" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.list.details.policies"></a>Policies</h6></div></div></div><p>this library allows instantiating lists with policies
 
780
          implementing any algorithm moving nodes to the front of the
 
781
          list (policies implementing algorithms interchanging nodes are
 
782
          unsupported).</p><p>Associative containers based on lists are parametrized by a
 
783
@@ -1310,7 +1310,7 @@
 
784
          sequence; the second uses a tree (or forest of trees), which is
 
785
          typically less structured than an associative container's tree;
 
786
          the third simply uses an associative container. These are
 
787
-         shown in the graphic below, in labels A1 and A2, label B, and label C.</p><div class="figure"><a id="idp18575568"></a><p class="title"><strong>Figure 22.32. Underlying Priority-Queue Data-Structures.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_different_underlying_dss.png" align="middle" alt="Underlying Priority-Queue Data-Structures." /></div></div></div><br class="figure-break" /><p>Roughly speaking, any value that is both pushed and popped
 
788
+         shown in the graphic below, in labels A1 and A2, label B, and label C.</p><div class="figure"><a id="idm269996955920"></a><p class="title"><strong>Figure 22.32. Underlying Priority-Queue Data-Structures.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_different_underlying_dss.png" align="middle" alt="Underlying Priority-Queue Data-Structures." /></div></div></div><br class="figure-break" /><p>Roughly speaking, any value that is both pushed and popped
 
789
          from a priority queue must incur a logarithmic expense (in the
 
790
          amortized sense). Any priority queue implementation that would
 
791
          avoid this, would violate known bounds on comparison-based
 
792
@@ -1390,7 +1390,7 @@
 
793
          container <code class="classname">Cntnr</code>, the tag of the underlying
 
794
          data structure can be found via <code class="classname">typename 
 
795
          Cntnr::container_category</code>; this is one of the possible tags shown in the graphic below.
 
796
-         </p><div class="figure"><a id="idp18610544"></a><p class="title"><strong>Figure 22.33. Priority-Queue Data-Structure Tags.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_tag_hierarchy.png" align="middle" alt="Priority-Queue Data-Structure Tags." /></div></div></div><br class="figure-break" /><p>Additionally, a traits mechanism can be used to query a
 
797
+         </p><div class="figure"><a id="idm269996920880"></a><p class="title"><strong>Figure 22.33. Priority-Queue Data-Structure Tags.</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_priority_queue_tag_hierarchy.png" align="middle" alt="Priority-Queue Data-Structure Tags." /></div></div></div><br class="figure-break" /><p>Additionally, a traits mechanism can be used to query a
 
798
          container type for its attributes. Given any container
 
799
          <code class="classname">Cntnr</code>, then </p><pre class="programlisting">__gnu_pbds::container_traits&lt;Cntnr&gt;</pre><p>
 
800
          is a traits class identifying the properties of the
 
801
Index: libstdc++-v3/doc/html/manual/using.html
 
802
===================================================================
 
803
--- a/src/libstdc++-v3/doc/html/manual/using.html       (.../tags/gcc_4_8_2_release)
 
804
+++ b/src/libstdc++-v3/doc/html/manual/using.html       (.../branches/gcc-4_8-branch)
 
805
@@ -1,8 +1,8 @@
 
806
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
807
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 3. Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="Part I.  Introduction" /><link rel="prev" href="make.html" title="Make" /><link rel="next" href="using_headers.html" title="Headers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 3. Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="make.html">Prev</a> </td><th width="60%" align="center">Part I. 
 
808
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 3. Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="Part I.  Introduction" /><link rel="prev" href="make.html" title="Make" /><link rel="next" href="using_headers.html" title="Headers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 3. Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="make.html">Prev</a> </td><th width="60%" align="center">Part I. 
 
809
   Introduction
 
810
   
 
811
-</th><td width="20%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using"></a>Chapter 3. Using</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.flags"></a>Command Options</h2></div></div></div><p>
 
812
+</th><td width="20%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.using"></a>Chapter 3. Using</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.flags"></a>Command Options</h2></div></div></div><p>
 
813
       The set of features available in the GNU C++ library is shaped
 
814
       by
 
815
       several <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Invoking-GCC.html" target="_top">GCC
 
816
@@ -10,5 +10,5 @@
 
817
       enumerated and detailed in the table below.
 
818
     </p><p>
 
819
       By default, <span class="command"><strong>g++</strong></span> is equivalent to  <span class="command"><strong>g++ -std=gnu++98</strong></span>. The standard library also defaults to this dialect.
 
820
-    </p><div class="table"><a id="idp13051936"></a><p class="title"><strong>Table 3.1. C++ Command Options</strong></p><div class="table-contents"><table summary="C++ Command Options" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Option Flags</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><code class="literal">-std=c++98</code></td><td align="left">Use the 1998 ISO C++ standard plus amendments.</td></tr><tr><td align="left"><code class="literal">-std=gnu++98</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-std=c++11</code></td><td align="left">Use the 2011 ISO C++ standard.</td></tr><tr><td align="left"><code class="literal">-std=gnu++11</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-fexceptions</code></td><td align="left">See <a class="link" href="using_exceptions.html#intro.using.exception.no" title="Doing without">exception-free dialect</a></td></tr><tr><td align="left"><code class="literal">-frtti</code></td><td align="left">As above, but RTTI-free dialect.</td></tr><tr><td align="left"><code class="literal">-pthread</code> or <code class="literal">-pthreads</code></td><td align="left">For ISO C++11 &lt;thread&gt;, &lt;future&gt;,
 
821
+    </p><div class="table"><a id="idm270002481088"></a><p class="title"><strong>Table 3.1. C++ Command Options</strong></p><div class="table-contents"><table summary="C++ Command Options" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Option Flags</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><code class="literal">-std=c++98</code></td><td align="left">Use the 1998 ISO C++ standard plus amendments.</td></tr><tr><td align="left"><code class="literal">-std=gnu++98</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-std=c++11</code></td><td align="left">Use the 2011 ISO C++ standard.</td></tr><tr><td align="left"><code class="literal">-std=gnu++11</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-fexceptions</code></td><td align="left">See <a class="link" href="using_exceptions.html#intro.using.exception.no" title="Doing without">exception-free dialect</a></td></tr><tr><td align="left"><code class="literal">-frtti</code></td><td align="left">As above, but RTTI-free dialect.</td></tr><tr><td align="left"><code class="literal">-pthread</code> or <code class="literal">-pthreads</code></td><td align="left">For ISO C++11 &lt;thread&gt;, &lt;future&gt;,
 
822
       &lt;mutex&gt;, or &lt;condition_variable&gt;.</td></tr><tr><td align="left"><code class="literal">-fopenmp</code></td><td align="left">For <a class="link" href="parallel_mode.html" title="Chapter 18. Parallel Mode">parallel</a> mode.</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="make.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="intro.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Make </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Headers</td></tr></table></div></body></html>
 
823
\ No newline at end of file
 
824
Index: libstdc++-v3/doc/html/manual/profile_mode_impl.html
 
825
===================================================================
 
826
--- a/src/libstdc++-v3/doc/html/manual/profile_mode_impl.html   (.../tags/gcc_4_8_2_release)
 
827
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode_impl.html   (.../branches/gcc-4_8-branch)
 
828
@@ -1,5 +1,5 @@
 
829
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
830
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation Issues</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_cost_model.html" title="Empirical Cost Model" /><link rel="next" href="profile_mode_devel.html" title="Developer Information" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation Issues</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_cost_model.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_devel.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.implementation"></a>Implementation Issues</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.stack"></a>Stack Traces</h3></div></div></div><p>
 
831
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation Issues</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_cost_model.html" title="Empirical Cost Model" /><link rel="next" href="profile_mode_devel.html" title="Developer Information" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation Issues</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_cost_model.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_devel.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.implementation"></a>Implementation Issues</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.stack"></a>Stack Traces</h3></div></div></div><p>
 
832
   Accurate stack traces are needed during profiling since we group events by
 
833
   call context and dynamic instance.  Without accurate traces, diagnostics
 
834
   may be hard to interpret.  For instance, when giving advice to the user
 
835
Index: libstdc++-v3/doc/html/manual/ext_containers.html
 
836
===================================================================
 
837
--- a/src/libstdc++-v3/doc/html/manual/ext_containers.html      (.../tags/gcc_4_8_2_release)
 
838
+++ b/src/libstdc++-v3/doc/html/manual/ext_containers.html      (.../branches/gcc-4_8-branch)
 
839
@@ -1,8 +1,8 @@
 
840
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
841
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 23. HP/SGI Extensions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="policy_data_structures_ack.html" title="Acknowledgments" /><link rel="next" href="ext_sgi.html" title="Deprecated" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 23. HP/SGI Extensions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_ack.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
842
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 23. HP/SGI Extensions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="policy_data_structures_ack.html" title="Acknowledgments" /><link rel="next" href="ext_sgi.html" title="Deprecated" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 23. HP/SGI Extensions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_ack.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
843
   Extensions
 
844
   
 
845
-</th><td width="20%" align="right"> <a accesskey="n" href="ext_sgi.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers"></a>Chapter 23. HP/SGI Extensions</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="ext_containers.html#manual.ext.containers.sgi">Backwards Compatibility</a></span></dt><dt><span class="section"><a href="ext_sgi.html">Deprecated</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.sgi"></a>Backwards Compatibility</h2></div></div></div><p>A few extensions and nods to backwards-compatibility have
 
846
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_sgi.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers"></a>Chapter 23. HP/SGI Extensions</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="ext_containers.html#manual.ext.containers.sgi">Backwards Compatibility</a></span></dt><dt><span class="section"><a href="ext_sgi.html">Deprecated</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.sgi"></a>Backwards Compatibility</h2></div></div></div><p>A few extensions and nods to backwards-compatibility have
 
847
     been made with containers.  Those dealing with older SGI-style
 
848
     allocators are dealt with elsewhere.  The remaining ones all deal
 
849
     with bits:
 
850
Index: libstdc++-v3/doc/html/manual/ext_concurrency_use.html
 
851
===================================================================
 
852
--- a/src/libstdc++-v3/doc/html/manual/ext_concurrency_use.html (.../tags/gcc_4_8_2_release)
 
853
+++ b/src/libstdc++-v3/doc/html/manual/ext_concurrency_use.html (.../branches/gcc-4_8-branch)
 
854
@@ -1,5 +1,5 @@
 
855
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
856
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Use</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_concurrency.html" title="Chapter 30. Concurrency" /><link rel="prev" href="ext_concurrency_impl.html" title="Implementation" /><link rel="next" href="appendix.html" title="Part IV.  Appendices" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Use</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency_impl.html">Prev</a> </td><th width="60%" align="center">Chapter 30. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="appendix.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.use"></a>Use</h2></div></div></div><p>Typical usage of the last two constructs is demonstrated as follows:
 
857
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Use</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_concurrency.html" title="Chapter 30. Concurrency" /><link rel="prev" href="ext_concurrency_impl.html" title="Implementation" /><link rel="next" href="appendix.html" title="Part IV.  Appendices" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Use</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency_impl.html">Prev</a> </td><th width="60%" align="center">Chapter 30. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="appendix.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.use"></a>Use</h2></div></div></div><p>Typical usage of the last two constructs is demonstrated as follows:
 
858
 </p><pre class="programlisting">
 
859
 #include &lt;ext/concurrence.h&gt;
 
860
 
 
861
Index: libstdc++-v3/doc/html/manual/ext_io.html
 
862
===================================================================
 
863
--- a/src/libstdc++-v3/doc/html/manual/ext_io.html      (.../tags/gcc_4_8_2_release)
 
864
+++ b/src/libstdc++-v3/doc/html/manual/ext_io.html      (.../branches/gcc-4_8-branch)
 
865
@@ -1,8 +1,8 @@
 
866
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
867
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 28. Input and Output</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_iterators.html" title="Chapter 27. Iterators" /><link rel="next" href="ext_demangling.html" title="Chapter 29. Demangling" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 28. Input and Output</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
868
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 28. Input and Output</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_iterators.html" title="Chapter 27. Iterators" /><link rel="next" href="ext_demangling.html" title="Chapter 29. Demangling" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 28. Input and Output</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
869
   Extensions
 
870
   
 
871
-</th><td width="20%" align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.io"></a>Chapter 28. Input and Output</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></div><p>
 
872
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.io"></a>Chapter 28. Input and Output</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></div><p>
 
873
     Extensions allowing <code class="code">filebuf</code>s to be constructed from
 
874
     "C" types like  FILE*s and file descriptors.
 
875
   </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.io.filebuf_derived"></a>Derived filebufs</h2></div></div></div><p>The v2 library included non-standard extensions to construct
 
876
Index: libstdc++-v3/doc/html/manual/termination.html
 
877
===================================================================
 
878
--- a/src/libstdc++-v3/doc/html/manual/termination.html (.../tags/gcc_4_8_2_release)
 
879
+++ b/src/libstdc++-v3/doc/html/manual/termination.html (.../branches/gcc-4_8-branch)
 
880
@@ -1,5 +1,5 @@
 
881
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
882
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Termination</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="support.html" title="Chapter 4.  Support" /><link rel="prev" href="dynamic_memory.html" title="Dynamic Memory" /><link rel="next" href="diagnostics.html" title="Chapter 5.  Diagnostics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Termination</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="dynamic_memory.html">Prev</a> </td><th width="60%" align="center">Chapter 4. 
 
883
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Termination</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="support.html" title="Chapter 4.  Support" /><link rel="prev" href="dynamic_memory.html" title="Dynamic Memory" /><link rel="next" href="diagnostics.html" title="Chapter 5.  Diagnostics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Termination</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="dynamic_memory.html">Prev</a> </td><th width="60%" align="center">Chapter 4. 
 
884
   Support
 
885
   
 
886
 </th><td width="20%" align="right"> <a accesskey="n" href="diagnostics.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.support.termination"></a>Termination</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="support.termination.handlers"></a>Termination Handlers</h3></div></div></div><p>
 
887
Index: libstdc++-v3/doc/html/manual/using_macros.html
 
888
===================================================================
 
889
--- a/src/libstdc++-v3/doc/html/manual/using_macros.html        (.../tags/gcc_4_8_2_release)
 
890
+++ b/src/libstdc++-v3/doc/html/manual/using_macros.html        (.../branches/gcc-4_8-branch)
 
891
@@ -1,5 +1,5 @@
 
892
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
893
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Macros</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_headers.html" title="Headers" /><link rel="next" href="using_namespaces.html" title="Namespaces" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Macros</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_namespaces.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.macros"></a>Macros</h2></div></div></div><p>
 
894
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Macros</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_headers.html" title="Headers" /><link rel="next" href="using_namespaces.html" title="Namespaces" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Macros</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_namespaces.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.macros"></a>Macros</h2></div></div></div><p>
 
895
      All library macros begin with <code class="code">_GLIBCXX_</code>.
 
896
    </p><p>
 
897
      Furthermore, all pre-processor macros, switches, and
 
898
Index: libstdc++-v3/doc/html/manual/concurrency.html
 
899
===================================================================
 
900
--- a/src/libstdc++-v3/doc/html/manual/concurrency.html (.../tags/gcc_4_8_2_release)
 
901
+++ b/src/libstdc++-v3/doc/html/manual/concurrency.html (.../branches/gcc-4_8-branch)
 
902
@@ -1,5 +1,5 @@
 
903
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
904
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 15.  Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library, mutex, thread, future, condition_variable" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="atomics.html" title="Chapter 14.  Atomics" /><link rel="next" href="extensions.html" title="Part III.  Extensions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 15. 
 
905
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 15.  Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library, mutex, thread, future, condition_variable" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="atomics.html" title="Chapter 14.  Atomics" /><link rel="next" href="extensions.html" title="Part III.  Extensions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 15. 
 
906
   Concurrency
 
907
   
 
908
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="atomics.html">Prev</a> </td><th width="60%" align="center">Part II. 
 
909
@@ -6,8 +6,8 @@
 
910
     Standard Contents
 
911
   </th><td width="20%" align="right"> <a accesskey="n" href="extensions.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.concurrency"></a>Chapter 15. 
 
912
   Concurrency
 
913
-  <a id="idp16404464" class="indexterm"></a>
 
914
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="concurrency.html#std.concurrency.api">API Reference</a></span></dt></dl></div><p>
 
915
+  <a id="idm269999126816" class="indexterm"></a>
 
916
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="concurrency.html#std.concurrency.api">API Reference</a></span></dt></dl></div><p>
 
917
   Facilities for concurrent operation, and control thereof.
 
918
 </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.concurrency.api"></a>API Reference</h2></div></div></div><p>
 
919
     All items are declared in one of four standard header files.
 
920
Index: libstdc++-v3/doc/html/manual/ext_utilities.html
 
921
===================================================================
 
922
--- a/src/libstdc++-v3/doc/html/manual/ext_utilities.html       (.../tags/gcc_4_8_2_release)
 
923
+++ b/src/libstdc++-v3/doc/html/manual/ext_utilities.html       (.../branches/gcc-4_8-branch)
 
924
@@ -1,5 +1,5 @@
 
925
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
926
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 24. Utilities</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_sgi.html" title="Deprecated" /><link rel="next" href="ext_algorithms.html" title="Chapter 25. Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 24. Utilities</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_sgi.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
927
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 24. Utilities</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_sgi.html" title="Deprecated" /><link rel="next" href="ext_algorithms.html" title="Chapter 25. Algorithms" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 24. Utilities</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_sgi.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
928
   Extensions
 
929
   
 
930
 </th><td width="20%" align="right"> <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.util"></a>Chapter 24. Utilities</h2></div></div></div><p>
 
931
Index: libstdc++-v3/doc/html/manual/policy_data_structures.html
 
932
===================================================================
 
933
--- a/src/libstdc++-v3/doc/html/manual/policy_data_structures.html      (.../tags/gcc_4_8_2_release)
 
934
+++ b/src/libstdc++-v3/doc/html/manual/policy_data_structures.html      (.../branches/gcc-4_8-branch)
 
935
@@ -1,8 +1,8 @@
 
936
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
937
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 22. Policy-Based Data Structures</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="bitmap_allocator_impl.html" title="Implementation" /><link rel="next" href="policy_data_structures_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 22. Policy-Based Data Structures</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitmap_allocator_impl.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
938
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 22. Policy-Based Data Structures</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="bitmap_allocator_impl.html" title="Implementation" /><link rel="next" href="policy_data_structures_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 22. Policy-Based Data Structures</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitmap_allocator_impl.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
939
   Extensions
 
940
   
 
941
-</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_using.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers.pbds"></a>Chapter 22. Policy-Based Data Structures</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.configuring">
 
942
+</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_using.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.containers.pbds"></a>Chapter 22. Policy-Based Data Structures</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.configuring">
 
943
            Configuring via Template Parameters
 
944
          </a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.traits">
 
945
            Querying Container Attributes
 
946
@@ -248,7 +248,7 @@
 
947
                these invariants, one must supply some policy that is aware
 
948
                of these changes.  Without this, it would be better to use a
 
949
                linked list (in itself very efficient for these purposes).
 
950
-             </p></li></ol></div><div class="figure"><a id="idp17613296"></a><p class="title"><strong>Figure 22.1. Node Invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_node_invariants.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.underlying"></a>Underlying Data Structures</h5></div></div></div><p>
 
951
+             </p></li></ol></div><div class="figure"><a id="idm269997917584"></a><p class="title"><strong>Figure 22.1. Node Invariants</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_node_invariants.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.underlying"></a>Underlying Data Structures</h5></div></div></div><p>
 
952
            The standard C++ library contains associative containers based on
 
953
            red-black trees and collision-chaining hash tables. These are
 
954
            very useful, but they are not ideal for all types of
 
955
@@ -256,7 +256,7 @@
 
956
          </p><p>
 
957
            The figure below shows the different underlying data structures
 
958
            currently supported in this library.
 
959
-         </p><div class="figure"><a id="idp17619952"></a><p class="title"><strong>Figure 22.2. Underlying Associative Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_1.png" align="middle" alt="Underlying Associative Data Structures" /></div></div></div><br class="figure-break" /><p>
 
960
+         </p><div class="figure"><a id="idm269997910864"></a><p class="title"><strong>Figure 22.2. Underlying Associative Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_1.png" align="middle" alt="Underlying Associative Data Structures" /></div></div></div><br class="figure-break" /><p>
 
961
            A shows a collision-chaining hash-table, B shows a probing
 
962
            hash-table, C shows a red-black tree, D shows a splay tree, E shows
 
963
            a tree based on an ordered vector(implicit in the order of the
 
964
@@ -375,7 +375,7 @@
 
965
              no guarantee that the elements traversed will coincide with the
 
966
              <span class="emphasis"><em>logical</em></span> elements between 1 and 5, as in
 
967
              label B.
 
968
-           </p><div class="figure"><a id="idp17651648"></a><p class="title"><strong>Figure 22.3. Range Iteration in Different Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_1.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /><p>
 
969
+           </p><div class="figure"><a id="idm269997879168"></a><p class="title"><strong>Figure 22.3. Range Iteration in Different Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_1.png" align="middle" alt="Node Invariants" /></div></div></div><br class="figure-break" /><p>
 
970
              In our opinion, this problem is not caused just because
 
971
              red-black trees are order preserving while
 
972
              collision-chaining hash tables are (generally) not - it
 
973
@@ -426,7 +426,7 @@
 
974
              list, as in the graphic below, label B.  Here the iterators are as
 
975
              light as can be, but the hash-table's operations are more
 
976
              complicated.
 
977
-           </p><div class="figure"><a id="idp17666528"></a><p class="title"><strong>Figure 22.4. Point Iteration in Hash Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_2.png" align="middle" alt="Point Iteration in Hash Data Structures" /></div></div></div><br class="figure-break" /><p>
 
978
+           </p><div class="figure"><a id="idm269997864256"></a><p class="title"><strong>Figure 22.4. Point Iteration in Hash Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_point_iterators_range_ops_2.png" align="middle" alt="Point Iteration in Hash Data Structures" /></div></div></div><br class="figure-break" /><p>
 
979
              It should be noted that containers based on collision-chaining
 
980
              hash-tables are not the only ones with this type of behavior;
 
981
              many other self-organizing data structures display it as well.
 
982
@@ -442,7 +442,7 @@
 
983
              container. The graphic below shows three cases: A1 and A2 show
 
984
              a red-black tree; B1 and B2 show a probing hash-table; C1 and C2
 
985
              show a collision-chaining hash table.
 
986
-           </p><div class="figure"><a id="idp17675840"></a><p class="title"><strong>Figure 22.5. Effect of erase in different underlying data structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_guarantee_erase.png" align="middle" alt="Effect of erase in different underlying data structures" /></div></div></div><br class="figure-break" /><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
 
987
+           </p><div class="figure"><a id="idm269997855056"></a><p class="title"><strong>Figure 22.5. Effect of erase in different underlying data structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_invalidation_guarantee_erase.png" align="middle" alt="Effect of erase in different underlying data structures" /></div></div></div><br class="figure-break" /><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
 
988
                  Erasing 5 from A1 yields A2. Clearly, an iterator to 3 can
 
989
                  be de-referenced and incremented. The sequence of iterators
 
990
                  changed, but in a way that is well-defined by the interface.
 
991
@@ -678,7 +678,7 @@
 
992
            typically less structured than an associative container's tree;
 
993
            the third simply uses an associative container. These are
 
994
            shown in the figure below with labels A1 and A2, B, and C.
 
995
-         </p><div class="figure"><a id="idp17743424"></a><p class="title"><strong>Figure 22.6. Underlying Priority Queue Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_2.png" align="middle" alt="Underlying Priority Queue Data Structures" /></div></div></div><br class="figure-break" /><p>
 
996
+         </p><div class="figure"><a id="idm269997787392"></a><p class="title"><strong>Figure 22.6. Underlying Priority Queue Data Structures</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_different_underlying_dss_2.png" align="middle" alt="Underlying Priority Queue Data Structures" /></div></div></div><br class="figure-break" /><p>
 
997
            No single implementation can completely replace any of the
 
998
            others. Some have better <code class="function">push</code>
 
999
            and <code class="function">pop</code> amortized performance, some have
 
1000
@@ -1098,7 +1098,7 @@
 
1001
          </span>. </span><span class="publisher"><span class="publishername">
 
1002
          Proceedings of International Conference on Very Large Data Bases
 
1003
        . </span></span></p></div><div class="biblioentry"><a id="biblio.maverik_lowerbounds"></a><p>[biblio.maverik_lowerbounds] <span class="title"><em>
 
1004
-       <a class="link" href="http://magic.aladdin.cs.cmu.edu/2005/08/01/deamortization-part-2-binomial-heaps" target="_top">
 
1005
+       <a class="link" href="http://magic.aladdin.cs.cmu.edu/2005/08/01/deamortization-part-2-binomial-heaps/" target="_top">
 
1006
          Deamortization - Part 2: Binomial Heaps
 
1007
        </a>
 
1008
       </em>. </span><span class="date">
 
1009
@@ -1190,7 +1190,7 @@
 
1010
            </span>. </span><span class="publisher"><span class="publishername">
 
1011
          Addison-Wesley Publishing Company
 
1012
        . </span></span></p></div><div class="biblioentry"><a id="biblio.nelson96stlpq"></a><p>[biblio.nelson96stlpq] <span class="title"><em>
 
1013
-       <a class="link" href="http://www.dogma.net/markn/articles/pq_stl/priority.htm" target="_top">Priority Queues and the STL
 
1014
+       <a class="link" href="http://marknelson.us/1996/01/01/priority-queues/" target="_top">Priority Queues and the STL
 
1015
        </a>
 
1016
       </em>. </span><span class="date">
 
1017
        January 1996
 
1018
Index: libstdc++-v3/doc/html/manual/ext_iterators.html
 
1019
===================================================================
 
1020
--- a/src/libstdc++-v3/doc/html/manual/ext_iterators.html       (.../tags/gcc_4_8_2_release)
 
1021
+++ b/src/libstdc++-v3/doc/html/manual/ext_iterators.html       (.../branches/gcc-4_8-branch)
 
1022
@@ -1,5 +1,5 @@
 
1023
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1024
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 27. Iterators</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_numerics.html" title="Chapter 26. Numerics" /><link rel="next" href="ext_io.html" title="Chapter 28. Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 27. Iterators</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
1025
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 27. Iterators</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_numerics.html" title="Chapter 26. Numerics" /><link rel="next" href="ext_io.html" title="Chapter 28. Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 27. Iterators</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
1026
   Extensions
 
1027
   
 
1028
 </th><td width="20%" align="right"> <a accesskey="n" href="ext_io.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.iterators"></a>Chapter 27. Iterators</h2></div></div></div><p>24.3.2 describes <code class="code">struct iterator</code>, which didn't exist in the
 
1029
Index: libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html
 
1030
===================================================================
 
1031
--- a/src/libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html       (.../tags/gcc_4_8_2_release)
 
1032
+++ b/src/libstdc++-v3/doc/html/manual/bitmap_allocator_impl.html       (.../branches/gcc-4_8-branch)
 
1033
@@ -1,5 +1,5 @@
 
1034
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1035
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator" /><link rel="prev" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator" /><link rel="next" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><th width="60%" align="center">Chapter 21. The bitmap_allocator</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.bitmap.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.free_list_store"></a>Free List Store</h3></div></div></div><p>
 
1036
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator" /><link rel="prev" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator" /><link rel="next" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><th width="60%" align="center">Chapter 21. The bitmap_allocator</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.bitmap.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.free_list_store"></a>Free List Store</h3></div></div></div><p>
 
1037
     The Free List Store (referred to as FLS for the remaining part of this
 
1038
     document) is the Global memory pool that is shared by all instances of
 
1039
     the bitmapped allocator instantiated for any type. This maintains a
 
1040
@@ -75,7 +75,7 @@
 
1041
   </p><p>
 
1042
     Consider a block of size 64 ints. In memory, it would look like this:
 
1043
     (assume a 32-bit system where, size_t is a 32-bit entity).
 
1044
-  </p><div class="table"><a id="idp17500848"></a><p class="title"><strong>Table 21.1. Bitmap Allocator Memory Map</strong></p><div class="table-contents"><table summary="Bitmap Allocator Memory Map" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left">268</td><td align="left">0</td><td align="left">4294967295</td><td align="left">4294967295</td><td align="left">Data -&gt; Space for 64 ints</td></tr></tbody></table></div></div><br class="table-break" /><p>
 
1045
+  </p><div class="table"><a id="idm269998030352"></a><p class="title"><strong>Table 21.1. Bitmap Allocator Memory Map</strong></p><div class="table-contents"><table summary="Bitmap Allocator Memory Map" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left">268</td><td align="left">0</td><td align="left">4294967295</td><td align="left">4294967295</td><td align="left">Data -&gt; Space for 64 ints</td></tr></tbody></table></div></div><br class="table-break" /><p>
 
1046
     The first Column(268) represents the size of the Block in bytes as
 
1047
     seen by the Bitmap Allocator. Internally, a global free list is
 
1048
     used to keep track of the free blocks used and given back by the
 
1049
Index: libstdc++-v3/doc/html/manual/appendix_contributing.html
 
1050
===================================================================
 
1051
--- a/src/libstdc++-v3/doc/html/manual/appendix_contributing.html       (.../tags/gcc_4_8_2_release)
 
1052
+++ b/src/libstdc++-v3/doc/html/manual/appendix_contributing.html       (.../branches/gcc-4_8-branch)
 
1053
@@ -1,5 +1,5 @@
 
1054
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1055
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix A.  Contributing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV.  Appendices" /><link rel="prev" href="appendix.html" title="Part IV.  Appendices" /><link rel="next" href="source_organization.html" title="Directory Layout and Source Conventions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix A. 
 
1056
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix A.  Contributing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV.  Appendices" /><link rel="prev" href="appendix.html" title="Part IV.  Appendices" /><link rel="next" href="source_organization.html" title="Directory Layout and Source Conventions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix A. 
 
1057
   Contributing
 
1058
   
 
1059
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix.html">Prev</a> </td><th width="60%" align="center">Part IV. 
 
1060
@@ -6,8 +6,8 @@
 
1061
   Appendices
 
1062
 </th><td width="20%" align="right"> <a accesskey="n" href="source_organization.html">Next</a></td></tr></table><hr /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.contrib"></a>
 
1063
   Contributing
 
1064
-  <a id="idp21875168" class="indexterm"></a>
 
1065
-</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="section"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="section"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="section"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="section"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="section"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></div><p>
 
1066
+  <a id="idm269993657472" class="indexterm"></a>
 
1067
+</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="section"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="section"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="section"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="section"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="section"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></div><p>
 
1068
   The GNU C++ Library follows an open development model. Active
 
1069
   contributors are assigned maintainer-ship responsibility, and given
 
1070
   write access to the source repository. First time contributors
 
1071
@@ -36,7 +36,7 @@
 
1072
           for this group is quite useful.
 
1073
       </p></li><li class="listitem"><p>
 
1074
          Peruse
 
1075
-         the <a class="link" href="http://www.gnu.org/prep/standards" target="_top">GNU
 
1076
+         the <a class="link" href="http://www.gnu.org/prep/standards/" target="_top">GNU
 
1077
          Coding Standards</a>, and chuckle when you hit the part
 
1078
          about <span class="quote">“<span class="quote">Using Languages Other Than C</span>”</span>.
 
1079
        </p></li><li class="listitem"><p>
 
1080
Index: libstdc++-v3/doc/html/manual/parallel_mode_test.html
 
1081
===================================================================
 
1082
--- a/src/libstdc++-v3/doc/html/manual/parallel_mode_test.html  (.../tags/gcc_4_8_2_release)
 
1083
+++ b/src/libstdc++-v3/doc/html/manual/parallel_mode_test.html  (.../branches/gcc-4_8-branch)
 
1084
@@ -1,5 +1,5 @@
 
1085
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1086
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Testing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode_design.html" title="Design" /><link rel="next" href="profile_mode.html" title="Chapter 19. Profile Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_design.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.test"></a>Testing</h2></div></div></div><p>
 
1087
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Testing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode_design.html" title="Design" /><link rel="next" href="profile_mode.html" title="Chapter 19. Profile Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_design.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.test"></a>Testing</h2></div></div></div><p>
 
1088
     Both the normal conformance and regression tests and the
 
1089
     supplemental performance tests work.
 
1090
   </p><p>
 
1091
Index: libstdc++-v3/doc/html/manual/profile_mode.html
 
1092
===================================================================
 
1093
--- a/src/libstdc++-v3/doc/html/manual/profile_mode.html        (.../tags/gcc_4_8_2_release)
 
1094
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode.html        (.../branches/gcc-4_8-branch)
 
1095
@@ -1,8 +1,8 @@
 
1096
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1097
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 19. Profile Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="parallel_mode_test.html" title="Testing" /><link rel="next" href="profile_mode_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 19. Profile Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_test.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
1098
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 19. Profile Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="parallel_mode_test.html" title="Testing" /><link rel="next" href="profile_mode_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 19. Profile Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_test.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
1099
   Extensions
 
1100
   
 
1101
-</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_design.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode"></a>Chapter 19. Profile Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_api.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="profile_mode_cost_model.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_devel.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.assoc_ord_to_unord">Ordered to Unordered Associative Container</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.intro"></a>Intro</h2></div></div></div><p>
 
1102
+</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_design.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.profile_mode"></a>Chapter 19. Profile Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_api.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="profile_mode_cost_model.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_devel.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.assoc_ord_to_unord">Ordered to Unordered Associative Container</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.intro"></a>Intro</h2></div></div></div><p>
 
1103
   <span class="emphasis"><em>Goal: </em></span>Give performance improvement advice based on
 
1104
   recognition of suboptimal usage patterns of the standard library.
 
1105
   </p><p>
 
1106
@@ -137,7 +137,7 @@
 
1107
    call context.
 
1108
    (Environment variable not supported.)
 
1109
    </p></li></ul></div><p>
 
1110
-  </p></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="profile_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="idp17395456"></a><p><span class="citetitle"><em class="citetitle">
 
1111
+  </p></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="profile_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="idm269998135936"></a><p><span class="citetitle"><em class="citetitle">
 
1112
       Perflint: A Context Sensitive Performance Advisor for C++ Programs
 
1113
     </em>. </span><span class="author"><span class="firstname">Lixia</span> <span class="surname">Liu</span>. </span><span class="author"><span class="firstname">Silvius</span> <span class="surname">Rus</span>. </span><span class="copyright">Copyright © 2009 . </span><span class="publisher"><span class="publishername">
 
1114
        Proceedings of the 2009 International Symposium on Code Generation
 
1115
Index: libstdc++-v3/doc/html/manual/stringstreams.html
 
1116
===================================================================
 
1117
--- a/src/libstdc++-v3/doc/html/manual/stringstreams.html       (.../tags/gcc_4_8_2_release)
 
1118
+++ b/src/libstdc++-v3/doc/html/manual/stringstreams.html       (.../branches/gcc-4_8-branch)
 
1119
@@ -1,5 +1,5 @@
 
1120
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1121
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Memory Based Streams</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13.  Input and Output" /><link rel="prev" href="streambufs.html" title="Stream Buffers" /><link rel="next" href="fstreams.html" title="File Based Streams" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory Based Streams</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="streambufs.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
 
1122
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Memory Based Streams</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13.  Input and Output" /><link rel="prev" href="streambufs.html" title="Stream Buffers" /><link rel="next" href="fstreams.html" title="File Based Streams" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory Based Streams</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="streambufs.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
 
1123
   Input and Output
 
1124
   
 
1125
 </th><td width="20%" align="right"> <a accesskey="n" href="fstreams.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.memstreams"></a>Memory Based Streams</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.memstreams.compat"></a>Compatibility With strstream</h3></div></div></div><p>
 
1126
Index: libstdc++-v3/doc/html/manual/traits.html
 
1127
===================================================================
 
1128
--- a/src/libstdc++-v3/doc/html/manual/traits.html      (.../tags/gcc_4_8_2_release)
 
1129
+++ b/src/libstdc++-v3/doc/html/manual/traits.html      (.../branches/gcc-4_8-branch)
 
1130
@@ -1,5 +1,5 @@
 
1131
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1132
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Traits</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="Chapter 6.  Utilities" /><link rel="prev" href="memory.html" title="Memory" /><link rel="next" href="strings.html" title="Chapter 7.  Strings" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Traits</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="memory.html">Prev</a> </td><th width="60%" align="center">Chapter 6. 
 
1133
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Traits</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="Chapter 6.  Utilities" /><link rel="prev" href="memory.html" title="Memory" /><link rel="next" href="strings.html" title="Chapter 7.  Strings" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Traits</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="memory.html">Prev</a> </td><th width="60%" align="center">Chapter 6. 
 
1134
   Utilities
 
1135
   
 
1136
 </th><td width="20%" align="right"> <a accesskey="n" href="strings.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.traits"></a>Traits</h2></div></div></div><p>
 
1137
Index: libstdc++-v3/doc/html/manual/policy_data_structures_ack.html
 
1138
===================================================================
 
1139
--- a/src/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html  (.../tags/gcc_4_8_2_release)
 
1140
+++ b/src/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html  (.../branches/gcc-4_8-branch)
 
1141
@@ -1,10 +1,9 @@
 
1142
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1143
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Acknowledgments</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_based_data_structures_test.html" title="Testing" /><link rel="next" href="ext_containers.html" title="Chapter 23. HP/SGI Extensions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Acknowledgments</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_based_data_structures_test.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.ack"></a>Acknowledgments</h2></div></div></div><p>
 
1144
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Acknowledgments</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_based_data_structures_test.html" title="Testing" /><link rel="next" href="ext_containers.html" title="Chapter 23. HP/SGI Extensions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Acknowledgments</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_based_data_structures_test.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.ack"></a>Acknowledgments</h2></div></div></div><p>
 
1145
       Written by Ami Tavory and Vladimir Dreizin (IBM Haifa Research
 
1146
       Laboratories), and Benjamin Kosnik (Red Hat).
 
1147
     </p><p>
 
1148
-      This library was partially written at
 
1149
-      <a class="link" href="http://www.haifa.il.ibm.com/" target="_top">IBM's Haifa Research Labs</a>.
 
1150
+      This library was partially written at IBM's Haifa Research Labs.
 
1151
       It is based heavily on policy-based design and uses many useful
 
1152
       techniques from Modern C++ Design: Generic Programming and Design
 
1153
       Patterns Applied by Andrei Alexandrescu.
 
1154
Index: libstdc++-v3/doc/html/manual/associative.html
 
1155
===================================================================
 
1156
--- a/src/libstdc++-v3/doc/html/manual/associative.html (.../tags/gcc_4_8_2_release)
 
1157
+++ b/src/libstdc++-v3/doc/html/manual/associative.html (.../branches/gcc-4_8-branch)
 
1158
@@ -1,5 +1,5 @@
 
1159
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1160
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Associative</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="Chapter 9.  Containers" /><link rel="prev" href="containers.html" title="Chapter 9.  Containers" /><link rel="next" href="unordered_associative.html" title="Unordered Associative" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Associative</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="containers.html">Prev</a> </td><th width="60%" align="center">Chapter 9. 
 
1161
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Associative</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="Chapter 9.  Containers" /><link rel="prev" href="containers.html" title="Chapter 9.  Containers" /><link rel="next" href="unordered_associative.html" title="Unordered Associative" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Associative</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="containers.html">Prev</a> </td><th width="60%" align="center">Chapter 9. 
 
1162
   Containers
 
1163
   
 
1164
 </th><td width="20%" align="right"> <a accesskey="n" href="unordered_associative.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.associative"></a>Associative</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="containers.associative.insert_hints"></a>Insertion Hints</h3></div></div></div><p>
 
1165
Index: libstdc++-v3/doc/html/manual/ext_concurrency.html
 
1166
===================================================================
 
1167
--- a/src/libstdc++-v3/doc/html/manual/ext_concurrency.html     (.../tags/gcc_4_8_2_release)
 
1168
+++ b/src/libstdc++-v3/doc/html/manual/ext_concurrency.html     (.../branches/gcc-4_8-branch)
 
1169
@@ -1,8 +1,8 @@
 
1170
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1171
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 30. Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_demangling.html" title="Chapter 29. Demangling" /><link rel="next" href="ext_concurrency_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 30. Concurrency</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
1172
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 30. Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_demangling.html" title="Chapter 29. Demangling" /><link rel="next" href="ext_concurrency_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 30. Concurrency</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
1173
   Extensions
 
1174
   
 
1175
-</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency_impl.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.concurrency"></a>Chapter 30. Concurrency</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_use.html">Use</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.design"></a>Design</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.threads"></a>Interface to Locks and Mutexes</h3></div></div></div><p>The file <code class="filename">&lt;ext/concurrence.h&gt;</code>
 
1176
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency_impl.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.concurrency"></a>Chapter 30. Concurrency</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.threads">Interface to Locks and Mutexes</a></span></dt><dt><span class="section"><a href="ext_concurrency.html#manual.ext.concurrency.design.atomics">Interface to Atomic Functions</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="section"><a href="ext_concurrency_impl.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="ext_concurrency_use.html">Use</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.design"></a>Design</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.threads"></a>Interface to Locks and Mutexes</h3></div></div></div><p>The file <code class="filename">&lt;ext/concurrence.h&gt;</code>
 
1177
 contains all the higher-level
 
1178
 constructs for playing with threads. In contrast to the atomics layer,
 
1179
 the concurrence layer consists largely of types. All types are defined within <code class="code">namespace __gnu_cxx</code>.
 
1180
Index: libstdc++-v3/doc/html/manual/support.html
 
1181
===================================================================
 
1182
--- a/src/libstdc++-v3/doc/html/manual/support.html     (.../tags/gcc_4_8_2_release)
 
1183
+++ b/src/libstdc++-v3/doc/html/manual/support.html     (.../branches/gcc-4_8-branch)
 
1184
@@ -1,5 +1,5 @@
 
1185
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1186
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 4.  Support</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="next" href="dynamic_memory.html" title="Dynamic Memory" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 4. 
 
1187
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 4.  Support</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="next" href="dynamic_memory.html" title="Dynamic Memory" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 4. 
 
1188
   Support
 
1189
   
 
1190
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="std_contents.html">Prev</a> </td><th width="60%" align="center">Part II. 
 
1191
@@ -6,8 +6,8 @@
 
1192
     Standard Contents
 
1193
   </th><td width="20%" align="right"> <a accesskey="n" href="dynamic_memory.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.support"></a>Chapter 4. 
 
1194
   Support
 
1195
-  <a id="idp13745936" class="indexterm"></a>
 
1196
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="section"><a href="support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="section"><a href="dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="section"><a href="termination.html">Termination</a></span></dt><dd><dl><dt><span class="section"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="section"><a href="termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></div><p>
 
1197
+  <a id="idm270001786944" class="indexterm"></a>
 
1198
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="section"><a href="support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="section"><a href="dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="section"><a href="termination.html">Termination</a></span></dt><dd><dl><dt><span class="section"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="section"><a href="termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></div><p>
 
1199
     This part deals with the functions called and objects created
 
1200
     automatically during the course of a program's existence.
 
1201
   </p><p>
 
1202
Index: libstdc++-v3/doc/html/manual/bitmap_allocator.html
 
1203
===================================================================
 
1204
--- a/src/libstdc++-v3/doc/html/manual/bitmap_allocator.html    (.../tags/gcc_4_8_2_release)
 
1205
+++ b/src/libstdc++-v3/doc/html/manual/bitmap_allocator.html    (.../branches/gcc-4_8-branch)
 
1206
@@ -1,8 +1,8 @@
 
1207
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1208
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 21. The bitmap_allocator</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="mt_allocator_ex_multi.html" title="Multiple Thread Example" /><link rel="next" href="bitmap_allocator_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 21. The bitmap_allocator</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_ex_multi.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
1209
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 21. The bitmap_allocator</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="mt_allocator_ex_multi.html" title="Multiple Thread Example" /><link rel="next" href="bitmap_allocator_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 21. The bitmap_allocator</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_ex_multi.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
1210
   Extensions
 
1211
   
 
1212
-</th><td width="20%" align="right"> <a accesskey="n" href="bitmap_allocator_impl.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.bitmap"></a>Chapter 21. The bitmap_allocator</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></div><p>
 
1213
+</th><td width="20%" align="right"> <a accesskey="n" href="bitmap_allocator_impl.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.allocator.bitmap"></a>Chapter 21. The bitmap_allocator</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></div><p>
 
1214
 </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.bitmap.design"></a>Design</h2></div></div></div><p>
 
1215
     As this name suggests, this allocator uses a bit-map to keep track
 
1216
     of the used and unused memory locations for its book-keeping
 
1217
Index: libstdc++-v3/doc/html/manual/license.html
 
1218
===================================================================
 
1219
--- a/src/libstdc++-v3/doc/html/manual/license.html     (.../tags/gcc_4_8_2_release)
 
1220
+++ b/src/libstdc++-v3/doc/html/manual/license.html     (.../branches/gcc-4_8-branch)
 
1221
@@ -1,5 +1,5 @@
 
1222
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1223
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>License</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="status.html" title="Chapter 1. Status" /><link rel="prev" href="status.html" title="Chapter 1. Status" /><link rel="next" href="bugs.html" title="Bugs" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">License</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="status.html">Prev</a> </td><th width="60%" align="center">Chapter 1. Status</th><td width="20%" align="right"> <a accesskey="n" href="bugs.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.license"></a>License</h2></div></div></div><p>
 
1224
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>License</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="status.html" title="Chapter 1. Status" /><link rel="prev" href="status.html" title="Chapter 1. Status" /><link rel="next" href="bugs.html" title="Bugs" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">License</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="status.html">Prev</a> </td><th width="60%" align="center">Chapter 1. Status</th><td width="20%" align="right"> <a accesskey="n" href="bugs.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.license"></a>License</h2></div></div></div><p>
 
1225
     There are two licenses affecting GNU libstdc++: one for the code,
 
1226
     and one for the documentation.
 
1227
     </p><p>
 
1228
Index: libstdc++-v3/doc/html/manual/numerics.html
 
1229
===================================================================
 
1230
--- a/src/libstdc++-v3/doc/html/manual/numerics.html    (.../tags/gcc_4_8_2_release)
 
1231
+++ b/src/libstdc++-v3/doc/html/manual/numerics.html    (.../branches/gcc-4_8-branch)
 
1232
@@ -1,5 +1,5 @@
 
1233
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1234
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 12.  Numerics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="algorithms.html" title="Chapter 11.  Algorithms" /><link rel="next" href="generalized_numeric_operations.html" title="Generalized Operations" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 12. 
 
1235
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 12.  Numerics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="algorithms.html" title="Chapter 11.  Algorithms" /><link rel="next" href="generalized_numeric_operations.html" title="Generalized Operations" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 12. 
 
1236
   Numerics
 
1237
   
 
1238
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="algorithms.html">Prev</a> </td><th width="60%" align="center">Part II. 
 
1239
@@ -6,8 +6,8 @@
 
1240
     Standard Contents
 
1241
   </th><td width="20%" align="right"> <a accesskey="n" href="generalized_numeric_operations.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.numerics"></a>Chapter 12. 
 
1242
   Numerics
 
1243
-  <a id="idp16214640" class="indexterm"></a>
 
1244
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="numerics.html#std.numerics.complex">Complex</a></span></dt><dd><dl><dt><span class="section"><a href="numerics.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="section"><a href="generalized_numeric_operations.html">Generalized Operations</a></span></dt><dt><span class="section"><a href="numerics_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="section"><a href="numerics_and_c.html#numerics.c.c99">C99</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.complex"></a>Complex</h2></div></div></div><p>
 
1245
+  <a id="idm269999316576" class="indexterm"></a>
 
1246
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="numerics.html#std.numerics.complex">Complex</a></span></dt><dd><dl><dt><span class="section"><a href="numerics.html#numerics.complex.processing">complex Processing</a></span></dt></dl></dd><dt><span class="section"><a href="generalized_numeric_operations.html">Generalized Operations</a></span></dt><dt><span class="section"><a href="numerics_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="numerics_and_c.html#numerics.c.array">Numerics vs. Arrays</a></span></dt><dt><span class="section"><a href="numerics_and_c.html#numerics.c.c99">C99</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.complex"></a>Complex</h2></div></div></div><p>
 
1247
   </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.complex.processing"></a>complex Processing</h3></div></div></div><p>
 
1248
     </p><p>Using <code class="code">complex&lt;&gt;</code> becomes even more comple- er, sorry,
 
1249
       <span class="emphasis"><em>complicated</em></span>, with the not-quite-gratuitously-incompatible
 
1250
Index: libstdc++-v3/doc/html/manual/using_exceptions.html
 
1251
===================================================================
 
1252
--- a/src/libstdc++-v3/doc/html/manual/using_exceptions.html    (.../tags/gcc_4_8_2_release)
 
1253
+++ b/src/libstdc++-v3/doc/html/manual/using_exceptions.html    (.../branches/gcc-4_8-branch)
 
1254
@@ -1,5 +1,5 @@
 
1255
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1256
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Exceptions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, exception, error, exception neutrality, exception safety, exception propagation, -fno-exceptions" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_concurrency.html" title="Concurrency" /><link rel="next" href="debug.html" title="Debugging Support" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Exceptions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.exceptions"></a>Exceptions</h2></div></div></div><p>
 
1257
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Exceptions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, exception, error, exception neutrality, exception safety, exception propagation, -fno-exceptions" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_concurrency.html" title="Concurrency" /><link rel="next" href="debug.html" title="Debugging Support" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Exceptions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.exceptions"></a>Exceptions</h2></div></div></div><p>
 
1258
 The C++ language provides language support for stack unwinding
 
1259
 with <code class="literal">try</code> and <code class="literal">catch</code> blocks and
 
1260
 the <code class="literal">throw</code> keyword.
 
1261
@@ -265,7 +265,7 @@
 
1262
   }
 
1263
   catch(...)
 
1264
   { this-&gt;_M_setstate(ios_base::badbit); }
 
1265
-</pre></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="using.exceptions.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="idp13644000"></a><p><span class="title"><em>
 
1266
+</pre></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="using.exceptions.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="idm270001889024"></a><p><span class="title"><em>
 
1267
        <a class="link" href="http://www.opengroup.org/austin/" target="_top">
 
1268
        System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
 
1269
        </a>
 
1270
@@ -274,39 +274,39 @@
 
1271
     . </span><span class="copyright">Copyright © 2008 
 
1272
        The Open Group/The Institute of Electrical and Electronics
 
1273
        Engineers, Inc.
 
1274
-      . </span></p></div><div class="biblioentry"><a id="idp13647696"></a><p><span class="title"><em>
 
1275
+      . </span></p></div><div class="biblioentry"><a id="idm270001885328"></a><p><span class="title"><em>
 
1276
        <a class="link" href="http://www.boost.org/community/error_handling.html" target="_top">
 
1277
        Error and Exception Handling
 
1278
        </a>
 
1279
       </em>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams </span>. </span><span class="publisher"><span class="publishername">
 
1280
        Boost
 
1281
-      . </span></span></p></div><div class="biblioentry"><a id="idp13651392"></a><p><span class="title"><em>
 
1282
+      . </span></span></p></div><div class="biblioentry"><a id="idm270001881632"></a><p><span class="title"><em>
 
1283
        <a class="link" href="http://www.boost.org/community/exception_safety.html" target="_top">
 
1284
        Exception-Safety in Generic Components
 
1285
        </a>
 
1286
       </em>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams</span>. </span><span class="publisher"><span class="publishername">
 
1287
        Boost
 
1288
-      . </span></span></p></div><div class="biblioentry"><a id="idp13655104"></a><p><span class="title"><em>
 
1289
+      . </span></span></p></div><div class="biblioentry"><a id="idm270001877920"></a><p><span class="title"><em>
 
1290
        <a class="link" href="www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1077.pdf" target="_top">
 
1291
        Standard Library Exception Policy
 
1292
        </a>
 
1293
       </em>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
 
1294
        WG21 N1077
 
1295
-      . </span></span></p></div><div class="biblioentry"><a id="idp13658816"></a><p><span class="title"><em>
 
1296
+      . </span></span></p></div><div class="biblioentry"><a id="idm270001874208"></a><p><span class="title"><em>
 
1297
        <a class="link" href="http://gcc.gnu.org/ml/gcc-patches/2001-03/msg00661.html" target="_top">
 
1298
        ia64 c++ abi exception handling
 
1299
        </a>
 
1300
       </em>. </span><span class="author"><span class="firstname">Richard</span> <span class="surname">Henderson</span>. </span><span class="publisher"><span class="publishername">
 
1301
        GNU
 
1302
-      . </span></span></p></div><div class="biblioentry"><a id="idp13662512"></a><p><span class="title"><em>
 
1303
+      . </span></span></p></div><div class="biblioentry"><a id="idm270001870512"></a><p><span class="title"><em>
 
1304
        <a class="link" href="http://www.research.att.com/~bs/3rd_safe.pdf" target="_top">
 
1305
        Appendix E: Standard-Library Exception Safety
 
1306
        </a>
 
1307
-      </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span></p></div><div class="biblioentry"><a id="idp13665328"></a><p><span class="citetitle"><em class="citetitle">
 
1308
+      </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span></p></div><div class="biblioentry"><a id="idm270001867696"></a><p><span class="citetitle"><em class="citetitle">
 
1309
       Exceptional C++
 
1310
     </em>. </span><span class="pagenums">
 
1311
       Exception-Safety Issues and Techniques
 
1312
-    . </span><span class="author"><span class="firstname">Herb</span> <span class="surname">Sutter</span>. </span></p></div><div class="biblioentry"><a id="idp13667712"></a><p><span class="title"><em>
 
1313
+    . </span><span class="author"><span class="firstname">Herb</span> <span class="surname">Sutter</span>. </span></p></div><div class="biblioentry"><a id="idm270001865312"></a><p><span class="title"><em>
 
1314
        <a class="link" href="http://gcc.gnu.org/PR25191" target="_top">
 
1315
       GCC Bug 25191: exception_defines.h #defines try/catch
 
1316
        </a>
 
1317
Index: libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html
 
1318
===================================================================
 
1319
--- a/src/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html   (.../tags/gcc_4_8_2_release)
 
1320
+++ b/src/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html   (.../branches/gcc-4_8-branch)
 
1321
@@ -1,5 +1,5 @@
 
1322
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1323
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Testing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures_design.html" title="Design" /><link rel="next" href="policy_data_structures_ack.html" title="Acknowledgments" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_design.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_ack.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.test"></a>Testing</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.test.regression"></a>Regression</h3></div></div></div><p>The library contains a single comprehensive regression test.
 
1324
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Testing</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures_design.html" title="Design" /><link rel="next" href="policy_data_structures_ack.html" title="Acknowledgments" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Testing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures_design.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_ack.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.test"></a>Testing</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.test.regression"></a>Regression</h3></div></div></div><p>The library contains a single comprehensive regression test.
 
1325
     For a given container type in this library, the test creates
 
1326
     an object of the container type and an object of the
 
1327
     corresponding standard type (e.g., <code class="classname">std::set</code>). It
 
1328
Index: libstdc++-v3/doc/html/manual/parallel_mode_design.html
 
1329
===================================================================
 
1330
--- a/src/libstdc++-v3/doc/html/manual/parallel_mode_design.html        (.../tags/gcc_4_8_2_release)
 
1331
+++ b/src/libstdc++-v3/doc/html/manual/parallel_mode_design.html        (.../branches/gcc-4_8-branch)
 
1332
@@ -1,5 +1,5 @@
 
1333
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1334
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode_using.html" title="Using" /><link rel="next" href="parallel_mode_test.html" title="Testing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_using.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode_test.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.design"></a>Design</h2></div></div></div><p>
 
1335
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode_using.html" title="Using" /><link rel="next" href="parallel_mode_test.html" title="Testing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_using.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode_test.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.design"></a>Design</h2></div></div></div><p>
 
1336
   </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.intro"></a>Interface Basics</h3></div></div></div><p>
 
1337
 All parallel algorithms are intended to have signatures that are
 
1338
 equivalent to the ISO C++ algorithms replaced. For instance, the
 
1339
Index: libstdc++-v3/doc/html/manual/abi.html
 
1340
===================================================================
 
1341
--- a/src/libstdc++-v3/doc/html/manual/abi.html (.../tags/gcc_4_8_2_release)
 
1342
+++ b/src/libstdc++-v3/doc/html/manual/abi.html (.../branches/gcc-4_8-branch)
 
1343
@@ -1,5 +1,5 @@
 
1344
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1345
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ABI Policy and Guidelines</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, ABI, version, dynamic, shared, compatibility" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="test.html" title="Test" /><link rel="next" href="api.html" title="API Evolution and Deprecation History" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ABI Policy and Guidelines</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="test.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
 
1346
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ABI Policy and Guidelines</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, ABI, version, dynamic, shared, compatibility" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="test.html" title="Test" /><link rel="next" href="api.html" title="API Evolution and Deprecation History" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">ABI Policy and Guidelines</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="test.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
 
1347
   Porting and Maintenance
 
1348
   
 
1349
 </th><td width="20%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.abi"></a>ABI Policy and Guidelines</h2></div></div></div><p>
 
1350
@@ -493,39 +493,39 @@
 
1351
        <a class="link" href="http://www.codesourcery.com/cxx-abi/" target="_top">
 
1352
          C++ ABI Summary
 
1353
        </a>
 
1354
-      </em>. </span></p></div><div class="biblioentry"><a id="idp22945936"></a><p><span class="title"><em>
 
1355
+      </em>. </span></p></div><div class="biblioentry"><a id="idm269992586624"></a><p><span class="title"><em>
 
1356
        <a class="link" href="http://www.intel.com/cd/software/products/asmo-na/eng/284736.htm" target="_top">
 
1357
        Intel Compilers for Linux Compatibility with the GNU Compilers
 
1358
        </a>
 
1359
-      </em>. </span></p></div><div class="biblioentry"><a id="idp22947792"></a><p><span class="title"><em>
 
1360
+      </em>. </span></p></div><div class="biblioentry"><a id="idm269992584768"></a><p><span class="title"><em>
 
1361
        <a class="link" href="http://download.oracle.com/docs/cd/E19963-01/html/819-0690/index.html" target="_top">
 
1362
        Linker and Libraries Guide (document 819-0690)
 
1363
        </a>
 
1364
-      </em>. </span></p></div><div class="biblioentry"><a id="idp22949632"></a><p><span class="title"><em>
 
1365
+      </em>. </span></p></div><div class="biblioentry"><a id="idm269992582928"></a><p><span class="title"><em>
 
1366
        <a class="link" href="http://download.oracle.com/docs/cd/E19422-01/819-3689/index.html" target="_top">
 
1367
       Sun Studio 11: C++ Migration Guide (document 819-3689)
 
1368
        </a>
 
1369
-      </em>. </span></p></div><div class="biblioentry"><a id="idp22951488"></a><p><span class="title"><em>
 
1370
+      </em>. </span></p></div><div class="biblioentry"><a id="idm269992581072"></a><p><span class="title"><em>
 
1371
        <a class="link" href="http://www.akkadia.org/drepper/dsohowto.pdf" target="_top">
 
1372
       How to Write Shared Libraries
 
1373
        </a>
 
1374
-      </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span></p></div><div class="biblioentry"><a id="idp22954928"></a><p><span class="title"><em>
 
1375
+      </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span></p></div><div class="biblioentry"><a id="idm269992577632"></a><p><span class="title"><em>
 
1376
        <a class="link" href="http://www.arm.com/miscPDFs/8033.pdf" target="_top">
 
1377
       C++ ABI for the ARM Architecture
 
1378
        </a>
 
1379
-      </em>. </span></p></div><div class="biblioentry"><a id="idp22956736"></a><p><span class="title"><em>
 
1380
+      </em>. </span></p></div><div class="biblioentry"><a id="idm269992575824"></a><p><span class="title"><em>
 
1381
        <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1976.html" target="_top">
 
1382
       Dynamic Shared Objects: Survey and Issues
 
1383
        </a>
 
1384
       </em>. </span><span class="subtitle">
 
1385
       ISO C++ J16/06-0046
 
1386
-    . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="idp22960032"></a><p><span class="title"><em>
 
1387
+    . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="idm269992572528"></a><p><span class="title"><em>
 
1388
        <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2013.html" target="_top">
 
1389
        Versioning With Namespaces
 
1390
        </a>
 
1391
       </em>. </span><span class="subtitle">
 
1392
       ISO C++ J16/06-0083
 
1393
-    . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="idp22963312"></a><p><span class="title"><em>
 
1394
+    . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="idm269992569248"></a><p><span class="title"><em>
 
1395
        <a class="link" href="http://syrcose.ispras.ru/2009/files/SYRCoSE2009-CfP.pdf" target="_top">
 
1396
       Binary Compatibility of Shared Libraries Implemented in C++
 
1397
       on GNU/Linux Systems
 
1398
Index: libstdc++-v3/doc/html/manual/intro.html
 
1399
===================================================================
 
1400
--- a/src/libstdc++-v3/doc/html/manual/intro.html       (.../tags/gcc_4_8_2_release)
 
1401
+++ b/src/libstdc++-v3/doc/html/manual/intro.html       (.../branches/gcc-4_8-branch)
 
1402
@@ -1,8 +1,8 @@
 
1403
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1404
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part I.  Introduction</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="index.html" title="The GNU C++ Library Manual" /><link rel="next" href="status.html" title="Chapter 1. Status" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part I. 
 
1405
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part I.  Introduction</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="index.html" title="The GNU C++ Library Manual" /><link rel="next" href="status.html" title="Chapter 1. Status" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part I. 
 
1406
   Introduction
 
1407
   
 
1408
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library Manual</th><td width="20%" align="right"> <a accesskey="n" href="status.html">Next</a></td></tr></table><hr /></div><div class="part"><div class="titlepage"><div><div><h1 class="title"><a id="manual.intro"></a>Part I. 
 
1409
   Introduction
 
1410
-  <a id="idp9040416" class="indexterm"></a>
 
1411
-</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="status.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library Manual </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 1. Status</td></tr></table></div></body></html>
 
1412
\ No newline at end of file
 
1413
+  <a id="idm270013458800" class="indexterm"></a>
 
1414
+</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="index.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="status.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library Manual </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 1. Status</td></tr></table></div></body></html>
 
1415
\ No newline at end of file
 
1416
Index: libstdc++-v3/doc/html/manual/profile_mode_api.html
 
1417
===================================================================
 
1418
--- a/src/libstdc++-v3/doc/html/manual/profile_mode_api.html    (.../tags/gcc_4_8_2_release)
 
1419
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode_api.html    (.../branches/gcc-4_8-branch)
 
1420
@@ -1,5 +1,5 @@
 
1421
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1422
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Extensions for Custom Containers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_design.html" title="Design" /><link rel="next" href="profile_mode_cost_model.html" title="Empirical Cost Model" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Extensions for Custom Containers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_design.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_cost_model.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.api"></a>Extensions for Custom Containers</h2></div></div></div><p>
 
1423
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Extensions for Custom Containers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_design.html" title="Design" /><link rel="next" href="profile_mode_cost_model.html" title="Empirical Cost Model" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Extensions for Custom Containers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_design.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_cost_model.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.api"></a>Extensions for Custom Containers</h2></div></div></div><p>
 
1424
   Many large projects use their own data structures instead of the ones in the
 
1425
   standard library.  If these data structures are similar in functionality
 
1426
   to the standard library, they can be instrumented with the same hooks
 
1427
Index: libstdc++-v3/doc/html/manual/atomics.html
 
1428
===================================================================
 
1429
--- a/src/libstdc++-v3/doc/html/manual/atomics.html     (.../tags/gcc_4_8_2_release)
 
1430
+++ b/src/libstdc++-v3/doc/html/manual/atomics.html     (.../branches/gcc-4_8-branch)
 
1431
@@ -1,5 +1,5 @@
 
1432
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1433
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 14.  Atomics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library, atomic" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="io_and_c.html" title="Interacting with C" /><link rel="next" href="concurrency.html" title="Chapter 15.  Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 14. 
 
1434
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 14.  Atomics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library, atomic" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="io_and_c.html" title="Interacting with C" /><link rel="next" href="concurrency.html" title="Chapter 15.  Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 14. 
 
1435
   Atomics
 
1436
   
 
1437
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><th width="60%" align="center">Part II. 
 
1438
@@ -6,8 +6,8 @@
 
1439
     Standard Contents
 
1440
   </th><td width="20%" align="right"> <a accesskey="n" href="concurrency.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.atomics"></a>Chapter 14. 
 
1441
   Atomics
 
1442
-  <a id="idp16390640" class="indexterm"></a>
 
1443
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="atomics.html#std.atomics.api">API Reference</a></span></dt></dl></div><p>
 
1444
+  <a id="idm269999140704" class="indexterm"></a>
 
1445
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="atomics.html#std.atomics.api">API Reference</a></span></dt></dl></div><p>
 
1446
   Facilities for atomic operations.
 
1447
 </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.atomics.api"></a>API Reference</h2></div></div></div><p>
 
1448
     All items are declared in the standard header
 
1449
Index: libstdc++-v3/doc/html/manual/internals.html
 
1450
===================================================================
 
1451
--- a/src/libstdc++-v3/doc/html/manual/internals.html   (.../tags/gcc_4_8_2_release)
 
1452
+++ b/src/libstdc++-v3/doc/html/manual/internals.html   (.../branches/gcc-4_8-branch)
 
1453
@@ -1,5 +1,5 @@
 
1454
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1455
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Porting to New Hardware or Operating Systems</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, internals" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="documentation_hacking.html" title="Writing and Generating Documentation" /><link rel="next" href="test.html" title="Test" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Porting to New Hardware or Operating Systems</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="documentation_hacking.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
 
1456
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Porting to New Hardware or Operating Systems</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, internals" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="documentation_hacking.html" title="Writing and Generating Documentation" /><link rel="next" href="test.html" title="Test" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Porting to New Hardware or Operating Systems</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="documentation_hacking.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
 
1457
   Porting and Maintenance
 
1458
   
 
1459
 </th><td width="20%" align="right"> <a accesskey="n" href="test.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.internals"></a>Porting to New Hardware or Operating Systems</h2></div></div></div><p>
 
1460
Index: libstdc++-v3/doc/html/manual/policy_data_structures_using.html
 
1461
===================================================================
 
1462
--- a/src/libstdc++-v3/doc/html/manual/policy_data_structures_using.html        (.../tags/gcc_4_8_2_release)
 
1463
+++ b/src/libstdc++-v3/doc/html/manual/policy_data_structures_using.html        (.../branches/gcc-4_8-branch)
 
1464
@@ -1,5 +1,5 @@
 
1465
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1466
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="next" href="policy_data_structures_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.pbds.using"></a>Using</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.prereq"></a>Prerequisites</h3></div></div></div><p>The library contains only header files, and does not require any
 
1467
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, policy, container, data, structure, associated, tree, trie, hash, metaprogramming" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="prev" href="policy_data_structures.html" title="Chapter 22. Policy-Based Data Structures" /><link rel="next" href="policy_data_structures_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="policy_data_structures.html">Prev</a> </td><th width="60%" align="center">Chapter 22. Policy-Based Data Structures</th><td width="20%" align="right"> <a accesskey="n" href="policy_data_structures_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="containers.pbds.using"></a>Using</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.prereq"></a>Prerequisites</h3></div></div></div><p>The library contains only header files, and does not require any
 
1468
       other libraries except the standard C++ library . All classes are
 
1469
       defined in namespace <code class="code">__gnu_pbds</code>. The library internally
 
1470
       uses macros beginning with <code class="code">PB_DS</code>, but
 
1471
@@ -61,7 +61,7 @@
 
1472
        In addition, there are the following diagnostics classes,
 
1473
        used to report errors specific to this library's data
 
1474
        structures.
 
1475
-      </p><div class="figure"><a id="idp17806128"></a><p class="title"><strong>Figure 22.7. Exception Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_exception_hierarchy.png" align="middle" alt="Exception Hierarchy" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.tutorial"></a>Tutorial</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.basic"></a>Basic Use</h4></div></div></div><p>
 
1476
+      </p><div class="figure"><a id="idm269997724688"></a><p class="title"><strong>Figure 22.7. Exception Hierarchy</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/pbds_exception_hierarchy.png" align="middle" alt="Exception Hierarchy" /></div></div></div><br class="figure-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.tutorial"></a>Tutorial</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.basic"></a>Basic Use</h4></div></div></div><p>
 
1477
          For the most part, the policy-based containers containers in
 
1478
          namespace <code class="literal">__gnu_pbds</code> have the same interface as
 
1479
          the equivalent containers in the standard C++ library, except for
 
1480
Index: libstdc++-v3/doc/html/manual/bugs.html
 
1481
===================================================================
 
1482
--- a/src/libstdc++-v3/doc/html/manual/bugs.html        (.../tags/gcc_4_8_2_release)
 
1483
+++ b/src/libstdc++-v3/doc/html/manual/bugs.html        (.../branches/gcc-4_8-branch)
 
1484
@@ -1,5 +1,5 @@
 
1485
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1486
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Bugs</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="status.html" title="Chapter 1. Status" /><link rel="prev" href="license.html" title="License" /><link rel="next" href="setup.html" title="Chapter 2. Setup" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Bugs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="license.html">Prev</a> </td><th width="60%" align="center">Chapter 1. Status</th><td width="20%" align="right"> <a accesskey="n" href="setup.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.bugs"></a>Bugs</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.bugs.impl"></a>Implementation Bugs</h3></div></div></div><p>
 
1487
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Bugs</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="status.html" title="Chapter 1. Status" /><link rel="prev" href="license.html" title="License" /><link rel="next" href="setup.html" title="Chapter 2. Setup" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Bugs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="license.html">Prev</a> </td><th width="60%" align="center">Chapter 1. Status</th><td width="20%" align="right"> <a accesskey="n" href="setup.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.bugs"></a>Bugs</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.bugs.impl"></a>Implementation Bugs</h3></div></div></div><p>
 
1488
       Information on known bugs, details on efforts to fix them, and
 
1489
       fixed bugs are all available as part of the <a class="link" href="http://gcc.gnu.org/bugs/" target="_top">GCC bug tracking system</a>,
 
1490
       with the category set to <code class="literal">libstdc++</code>.
 
1491
Index: libstdc++-v3/doc/html/manual/parallel_mode_using.html
 
1492
===================================================================
 
1493
--- a/src/libstdc++-v3/doc/html/manual/parallel_mode_using.html (.../tags/gcc_4_8_2_release)
 
1494
+++ b/src/libstdc++-v3/doc/html/manual/parallel_mode_using.html (.../branches/gcc-4_8-branch)
 
1495
@@ -1,5 +1,5 @@
 
1496
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1497
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode_semantics.html" title="Semantics" /><link rel="next" href="parallel_mode_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_semantics.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.using"></a>Using</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.prereq_flags"></a>Prerequisite Compiler Flags</h3></div></div></div><p>
 
1498
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode_semantics.html" title="Semantics" /><link rel="next" href="parallel_mode_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode_semantics.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.using"></a>Using</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.prereq_flags"></a>Prerequisite Compiler Flags</h3></div></div></div><p>
 
1499
   Any use of parallel functionality requires additional compiler
 
1500
   and runtime support, in particular support for OpenMP. Adding this support is
 
1501
   not difficult: just compile your application with the compiler
 
1502
@@ -62,4 +62,4 @@
 
1503
 flags for atomic operations.)
 
1504
 </p><p> The following table provides the names and headers of all the
 
1505
   parallel algorithms that can be used in a similar manner:
 
1506
-</p><div class="table"><a id="idp16725920"></a><p class="title"><strong>Table 18.1. Parallel Algorithms</strong></p><div class="table-contents"><table summary="Parallel Algorithms" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Algorithm</th><th align="left">Header</th><th align="left">Parallel algorithm</th><th align="left">Parallel header</th></tr></thead><tbody><tr><td align="left"><code class="function">std::accumulate</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::accumulate</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_difference</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_difference</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::inner_product</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::inner_product</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::partial_sum</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::partial_sum</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::equal</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::equal</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_first_of</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_first_of</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::for_each</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::for_each</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::lexicographical_compare</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::lexicographical_compare</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::mismatch</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::mismatch</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::transform</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::transform</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::max_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::max_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::merge</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::merge</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::min_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::min_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::nth_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::nth_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partial_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partial_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partition</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partition</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::random_shuffle</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::random_shuffle</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_union</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_union</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_intersection</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_intersection</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_symmetric_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_symmetric_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::stable_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::stable_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::unique_copy</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::unique_copy</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parallel_mode_semantics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="parallel_mode_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Semantics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html>
 
1507
\ No newline at end of file
 
1508
+</p><div class="table"><a id="idm269998805216"></a><p class="title"><strong>Table 18.1. Parallel Algorithms</strong></p><div class="table-contents"><table summary="Parallel Algorithms" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Algorithm</th><th align="left">Header</th><th align="left">Parallel algorithm</th><th align="left">Parallel header</th></tr></thead><tbody><tr><td align="left"><code class="function">std::accumulate</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::accumulate</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_difference</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_difference</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::inner_product</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::inner_product</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::partial_sum</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="function">__gnu_parallel::partial_sum</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr><tr><td align="left"><code class="function">std::adjacent_find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::adjacent_find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::count_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::count_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::equal</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::equal</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::find_first_of</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::find_first_of</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::for_each</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::for_each</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::generate_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::generate_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::lexicographical_compare</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::lexicographical_compare</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::mismatch</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::mismatch</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::search_n</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::search_n</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::transform</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::transform</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::replace_if</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::replace_if</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::max_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::max_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::merge</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::merge</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::min_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::min_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::nth_element</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::nth_element</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partial_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partial_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::partition</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::partition</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::random_shuffle</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::random_shuffle</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_union</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_union</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_intersection</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_intersection</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_symmetric_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_symmetric_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::set_difference</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::set_difference</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::stable_sort</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::stable_sort</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr><tr><td align="left"><code class="function">std::unique_copy</code></td><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="function">__gnu_parallel::unique_copy</code></td><td align="left"><code class="filename">parallel/algorithm</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parallel_mode_semantics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="parallel_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="parallel_mode_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Semantics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html>
 
1509
\ No newline at end of file
 
1510
Index: libstdc++-v3/doc/html/manual/ext_numerics.html
 
1511
===================================================================
 
1512
--- a/src/libstdc++-v3/doc/html/manual/ext_numerics.html        (.../tags/gcc_4_8_2_release)
 
1513
+++ b/src/libstdc++-v3/doc/html/manual/ext_numerics.html        (.../branches/gcc-4_8-branch)
 
1514
@@ -1,5 +1,5 @@
 
1515
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1516
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 26. Numerics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_algorithms.html" title="Chapter 25. Algorithms" /><link rel="next" href="ext_iterators.html" title="Chapter 27. Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 26. Numerics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
1517
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 26. Numerics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_algorithms.html" title="Chapter 25. Algorithms" /><link rel="next" href="ext_iterators.html" title="Chapter 27. Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 26. Numerics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
1518
   Extensions
 
1519
   
 
1520
 </th><td width="20%" align="right"> <a accesskey="n" href="ext_iterators.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.numerics"></a>Chapter 26. Numerics</h2></div></div></div><p>26.4, the generalized numeric operations such as <code class="code">accumulate</code>,
 
1521
Index: libstdc++-v3/doc/html/manual/parallel_mode_semantics.html
 
1522
===================================================================
 
1523
--- a/src/libstdc++-v3/doc/html/manual/parallel_mode_semantics.html     (.../tags/gcc_4_8_2_release)
 
1524
+++ b/src/libstdc++-v3/doc/html/manual/parallel_mode_semantics.html     (.../branches/gcc-4_8-branch)
 
1525
@@ -1,5 +1,5 @@
 
1526
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1527
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Semantics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="next" href="parallel_mode_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode_using.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.semantics"></a>Semantics</h2></div></div></div><p> The parallel mode STL algorithms are currently not exception-safe,
 
1528
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Semantics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="prev" href="parallel_mode.html" title="Chapter 18. Parallel Mode" /><link rel="next" href="parallel_mode_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="parallel_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode_using.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.semantics"></a>Semantics</h2></div></div></div><p> The parallel mode STL algorithms are currently not exception-safe,
 
1529
 i.e. user-defined functors must not throw exceptions.
 
1530
 Also, the order of execution is not guaranteed for some functions, of course.
 
1531
 Therefore, user-defined functors should not have any concurrent side effects.
 
1532
Index: libstdc++-v3/doc/html/manual/std_contents.html
 
1533
===================================================================
 
1534
--- a/src/libstdc++-v3/doc/html/manual/std_contents.html        (.../tags/gcc_4_8_2_release)
 
1535
+++ b/src/libstdc++-v3/doc/html/manual/std_contents.html        (.../branches/gcc-4_8-branch)
 
1536
@@ -1,9 +1,9 @@
 
1537
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1538
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part II.  Standard Contents</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="debug.html" title="Debugging Support" /><link rel="next" href="support.html" title="Chapter 4.  Support" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part II. 
 
1539
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part II.  Standard Contents</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="debug.html" title="Debugging Support" /><link rel="next" href="support.html" title="Chapter 4.  Support" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part II. 
 
1540
     Standard Contents
 
1541
   </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library Manual</th><td width="20%" align="right"> <a accesskey="n" href="support.html">Next</a></td></tr></table><hr /></div><div class="part"><div class="titlepage"><div><div><h1 class="title"><a id="manual.std"></a>Part II. 
 
1542
     Standard Contents
 
1543
-  </h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="chapter"><a href="support.html">4. 
 
1544
+  </h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="chapter"><a href="support.html">4. 
 
1545
   Support
 
1546
   
 
1547
 </a></span></dt><dd><dl><dt><span class="section"><a href="support.html#std.support.types">Types</a></span></dt><dd><dl><dt><span class="section"><a href="support.html#std.support.types.fundamental">Fundamental Types</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.numeric_limits">Numeric Properties</a></span></dt><dt><span class="section"><a href="support.html#std.support.types.null">NULL</a></span></dt></dl></dd><dt><span class="section"><a href="dynamic_memory.html">Dynamic Memory</a></span></dt><dt><span class="section"><a href="termination.html">Termination</a></span></dt><dd><dl><dt><span class="section"><a href="termination.html#support.termination.handlers">Termination Handlers</a></span></dt><dt><span class="section"><a href="termination.html#support.termination.verbose">Verbose Terminate Handler</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="diagnostics.html">5. 
 
1548
@@ -12,13 +12,13 @@
 
1549
 </a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="concept_checking.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="utilities.html">6. 
 
1550
   Utilities
 
1551
   
 
1552
-</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp13920976">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idp13924528">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp13937824">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15512272">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idp15534784">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idp15542080">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp15556704">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15573056">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idp15576640">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7. 
 
1553
+</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270001611968">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idm270001608416">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm270001595120">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270000019344">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idm269999996832">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idm269999989536">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269999974912">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm269999958496">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idm269999954912">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7. 
 
1554
   Strings
 
1555
   
 
1556
 </a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="localization.html">8. 
 
1557
   Localization
 
1558
   
 
1559
-</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idp15778336">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9. 
 
1560
+</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idm269999753024">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9. 
 
1561
   Containers
 
1562
   
 
1563
 </a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="section"><a href="containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="iterators.html">10. 
 
1564
Index: libstdc++-v3/doc/html/manual/appendix.html
 
1565
===================================================================
 
1566
--- a/src/libstdc++-v3/doc/html/manual/appendix.html    (.../tags/gcc_4_8_2_release)
 
1567
+++ b/src/libstdc++-v3/doc/html/manual/appendix.html    (.../branches/gcc-4_8-branch)
 
1568
@@ -1,9 +1,9 @@
 
1569
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1570
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part IV.  Appendices</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="ext_concurrency_use.html" title="Use" /><link rel="next" href="appendix_contributing.html" title="Appendix A.  Contributing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part IV. 
 
1571
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part IV.  Appendices</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="ext_concurrency_use.html" title="Use" /><link rel="next" href="appendix_contributing.html" title="Appendix A.  Contributing" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part IV. 
 
1572
   Appendices
 
1573
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency_use.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library Manual</th><td width="20%" align="right"> <a accesskey="n" href="appendix_contributing.html">Next</a></td></tr></table><hr /></div><div class="part"><div class="titlepage"><div><div><h1 class="title"><a id="appendix"></a>Part IV. 
 
1574
   Appendices
 
1575
-</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="appendix"><a href="appendix_contributing.html">A. 
 
1576
+</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="appendix"><a href="appendix_contributing.html">A. 
 
1577
   Contributing
 
1578
   
 
1579
 </a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#contrib.list">Contributor Checklist</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_contributing.html#list.reading">Reading</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.copyright">Assignment</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.getting">Getting Sources</a></span></dt><dt><span class="section"><a href="appendix_contributing.html#list.patches">Submitting Patches</a></span></dt></dl></dd><dt><span class="section"><a href="source_organization.html">Directory Layout and Source Conventions</a></span></dt><dt><span class="section"><a href="source_code_style.html">Coding Style</a></span></dt><dd><dl><dt><span class="section"><a href="source_code_style.html#coding_style.bad_identifiers">Bad Identifiers</a></span></dt><dt><span class="section"><a href="source_code_style.html#coding_style.example">By Example</a></span></dt></dl></dd><dt><span class="section"><a href="source_design_notes.html">Design Notes</a></span></dt></dl></dd><dt><span class="appendix"><a href="appendix_porting.html">B. 
 
1580
Index: libstdc++-v3/doc/html/manual/memory.html
 
1581
===================================================================
 
1582
--- a/src/libstdc++-v3/doc/html/manual/memory.html      (.../tags/gcc_4_8_2_release)
 
1583
+++ b/src/libstdc++-v3/doc/html/manual/memory.html      (.../branches/gcc-4_8-branch)
 
1584
@@ -1,5 +1,5 @@
 
1585
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1586
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Memory</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="Chapter 6.  Utilities" /><link rel="prev" href="pairs.html" title="Pairs" /><link rel="next" href="traits.html" title="Traits" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pairs.html">Prev</a> </td><th width="60%" align="center">Chapter 6. 
 
1587
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Memory</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="Chapter 6.  Utilities" /><link rel="prev" href="pairs.html" title="Pairs" /><link rel="next" href="traits.html" title="Traits" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Memory</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="pairs.html">Prev</a> </td><th width="60%" align="center">Chapter 6. 
 
1588
   Utilities
 
1589
   
 
1590
 </th><td width="20%" align="right"> <a accesskey="n" href="traits.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.memory"></a>Memory</h2></div></div></div><p>
 
1591
@@ -92,7 +92,7 @@
 
1592
     or loading and unloading shared objects in memory. As such, using
 
1593
     caching allocators on systems that do not support
 
1594
     <code class="function">abi::__cxa_atexit</code> is not recommended.
 
1595
-  </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp13920976"></a>Interface Design</h5></div></div></div><p>
 
1596
+  </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270001611968"></a>Interface Design</h5></div></div></div><p>
 
1597
      The only allocator interface that
 
1598
      is supported is the standard C++ interface. As such, all STL
 
1599
      containers have been adjusted, and all external allocators have
 
1600
@@ -105,7 +105,7 @@
 
1601
    </p><p>
 
1602
      The base class that <code class="classname">allocator</code> is derived from
 
1603
      may not be user-configurable.
 
1604
-</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp13924528"></a>Selecting Default Allocation Policy</h5></div></div></div><p>
 
1605
+</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270001608416"></a>Selecting Default Allocation Policy</h5></div></div></div><p>
 
1606
      It's difficult to pick an allocation strategy that will provide
 
1607
    maximum utility, without excessively penalizing some behavior. In
 
1608
    fact, it's difficult just deciding which typical actions to measure
 
1609
@@ -142,7 +142,7 @@
 
1610
      The current default choice for
 
1611
      <code class="classname">allocator</code> is
 
1612
      <code class="classname">__gnu_cxx::new_allocator</code>.
 
1613
-   </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp13937824"></a>Disabling Memory Caching</h5></div></div></div><p>
 
1614
+   </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270001595120"></a>Disabling Memory Caching</h5></div></div></div><p>
 
1615
       In use, <code class="classname">allocator</code> may allocate and
 
1616
       deallocate using implementation-specific strategies and
 
1617
       heuristics. Because of this, a given call to an allocator object's
 
1618
@@ -309,33 +309,33 @@
 
1619
         of the used and unused memory locations. It has its own
 
1620
         <a class="link" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator">chapter</a>
 
1621
          in the documentation.
 
1622
-       </p></li></ol></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp13992848"></a><p><span class="citetitle"><em class="citetitle">
 
1623
+       </p></li></ol></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm270000084224"></a><p><span class="citetitle"><em class="citetitle">
 
1624
     ISO/IEC 14882:1998 Programming languages - C++
 
1625
     </em>. </span>
 
1626
       isoc++_1998
 
1627
-    <span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry"><a id="idp13994688"></a><p><span class="title"><em>
 
1628
-       <a class="link" href="http://www.drdobbs.com/cpp/184403759" target="_top">
 
1629
+    <span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry"><a id="idm270000082384"></a><p><span class="title"><em>
 
1630
+       <a class="link" href="http://www.drdobbs.com/the-standard-librarian-what-are-allocato/184403759" target="_top">
 
1631
       The Standard Librarian: What Are Allocators Good For?
 
1632
        </a>
 
1633
       </em>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
 
1634
        C/C++ Users Journal
 
1635
-      . </span></span></p></div><div class="biblioentry"><a id="idp13998416"></a><p><span class="title"><em>
 
1636
+      . </span></span></p></div><div class="biblioentry"><a id="idm270000078608"></a><p><span class="title"><em>
 
1637
        <a class="link" href="http://www.hoard.org/" target="_top">
 
1638
       The Hoard Memory Allocator
 
1639
        </a>
 
1640
-      </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span></p></div><div class="biblioentry"><a id="idp14001184"></a><p><span class="title"><em>
 
1641
+      </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span></p></div><div class="biblioentry"><a id="idm270000075840"></a><p><span class="title"><em>
 
1642
        <a class="link" href="http://people.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf" target="_top">
 
1643
       Reconsidering Custom Memory Allocation
 
1644
        </a>
 
1645
-      </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span><span class="author"><span class="firstname">Ben</span> <span class="surname">Zorn</span>. </span><span class="author"><span class="firstname">Kathryn</span> <span class="surname">McKinley</span>. </span><span class="copyright">Copyright © 2002 OOPSLA. </span></p></div><div class="biblioentry"><a id="idp14007344"></a><p><span class="title"><em>
 
1646
+      </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span><span class="author"><span class="firstname">Ben</span> <span class="surname">Zorn</span>. </span><span class="author"><span class="firstname">Kathryn</span> <span class="surname">McKinley</span>. </span><span class="copyright">Copyright © 2002 OOPSLA. </span></p></div><div class="biblioentry"><a id="idm270000069680"></a><p><span class="title"><em>
 
1647
        <a class="link" href="http://www.angelikalanger.com/Articles/C++Report/Allocators/Allocators.html" target="_top">
 
1648
       Allocator Types
 
1649
        </a>
 
1650
       </em>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="publisher"><span class="publishername">
 
1651
        C/C++ Users Journal
 
1652
-      . </span></span></p></div><div class="biblioentry"><a id="idp14012080"></a><p><span class="citetitle"><em class="citetitle">The C++ Programming Language</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 . </span><span class="pagenums">19.4 Allocators. </span><span class="publisher"><span class="publishername">
 
1653
+      . </span></span></p></div><div class="biblioentry"><a id="idm270000064944"></a><p><span class="citetitle"><em class="citetitle">The C++ Programming Language</em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 . </span><span class="pagenums">19.4 Allocators. </span><span class="publisher"><span class="publishername">
 
1654
        Addison Wesley
 
1655
-      . </span></span></p></div><div class="biblioentry"><a id="idp14016512"></a><p><span class="citetitle"><em class="citetitle">Yalloc: A Recycling C++ Allocator</em>. </span><span class="author"><span class="firstname">Felix</span> <span class="surname">Yen</span>. </span></p></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.auto_ptr"></a>auto_ptr</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="auto_ptr.limitations"></a>Limitations</h4></div></div></div><p>Explaining all of the fun and delicious things that can
 
1656
+      . </span></span></p></div><div class="biblioentry"><a id="idm270000060512"></a><p><span class="citetitle"><em class="citetitle">Yalloc: A Recycling C++ Allocator</em>. </span><span class="author"><span class="firstname">Felix</span> <span class="surname">Yen</span>. </span></p></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.auto_ptr"></a>auto_ptr</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="auto_ptr.limitations"></a>Limitations</h4></div></div></div><p>Explaining all of the fun and delicious things that can
 
1657
    happen with misuse of the <code class="classname">auto_ptr</code> class
 
1658
    template (called <acronym class="acronym">AP</acronym> here) would take some
 
1659
    time. Suffice it to say that the use of <acronym class="acronym">AP</acronym>
 
1660
@@ -445,7 +445,7 @@
 
1661
 Derived classes override those functions to destroy resources in a context
 
1662
 where the correct dynamic type is known. This is an application of the
 
1663
 technique known as type erasure.
 
1664
-  </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15512272"></a>Class Hierarchy</h5></div></div></div><p>
 
1665
+  </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm270000019344"></a>Class Hierarchy</h5></div></div></div><p>
 
1666
 A <code class="classname">shared_ptr&lt;T&gt;</code> contains a pointer of
 
1667
 type <span class="type">T*</span> and an object of type
 
1668
 <code class="classname">__shared_count</code>. The shared_count contains a
 
1669
@@ -492,9 +492,9 @@
 
1670
 aliasing constructor, make_shared &amp; allocate_shared. Additionally,
 
1671
 the constructors taking <code class="classname">auto_ptr</code> parameters are
 
1672
 deprecated in C++11 mode.
 
1673
-    </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15534784"></a>Thread Safety</h5></div></div></div><p>
 
1674
+    </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999996832"></a>Thread Safety</h5></div></div></div><p>
 
1675
 The
 
1676
-<a class="link" href="http://boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety" target="_top">Thread
 
1677
+<a class="link" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety" target="_top">Thread
 
1678
 Safety</a> section of the Boost shared_ptr documentation says "shared_ptr
 
1679
 objects offer the same level of thread safety as built-in types."
 
1680
 The implementation must ensure that concurrent updates to separate shared_ptr
 
1681
@@ -537,7 +537,7 @@
 
1682
 shared_ptr in libstdc++ the compiler and library are fixed, which
 
1683
 makes things much simpler: we have an atomic CAS or we don't, see Lock
 
1684
 Policy below for details.
 
1685
-</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15542080"></a>Selecting Lock Policy</h5></div></div></div><p>
 
1686
+</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999989536"></a>Selecting Lock Policy</h5></div></div></div><p>
 
1687
     </p><p>
 
1688
 There is a single <code class="classname">_Sp_counted_base</code> class,
 
1689
 which is a template parameterized on the enum
 
1690
@@ -578,7 +578,7 @@
 
1691
        <code class="filename">ext/atomicity.h</code>, which detect if the program
 
1692
        is multi-threaded.  If only one thread of execution exists in
 
1693
        the program then less expensive non-atomic operations are used.
 
1694
-     </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15556704"></a>Related functions and classes</h5></div></div></div><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="code">dynamic_pointer_cast</code>, <code class="code">static_pointer_cast</code>,
 
1695
+     </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999974912"></a>Related functions and classes</h5></div></div></div><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="code">dynamic_pointer_cast</code>, <code class="code">static_pointer_cast</code>,
 
1696
 <code class="code">const_pointer_cast</code></span></dt><dd><p>
 
1697
 As noted in N2351, these functions can be implemented non-intrusively using
 
1698
 the alias constructor.  However the aliasing constructor is only available
 
1699
@@ -611,13 +611,13 @@
 
1700
 As well as the extra constructors, this implementation also needs some
 
1701
 members of _Sp_counted_deleter to be protected where they could otherwise
 
1702
 be private.
 
1703
-    </p></dd></dl></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.using"></a>Use</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15573056"></a>Examples</h5></div></div></div><p>
 
1704
+    </p></dd></dl></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.using"></a>Use</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999958496"></a>Examples</h5></div></div></div><p>
 
1705
       Examples of use can be found in the testsuite, under
 
1706
       <code class="filename">testsuite/tr1/2_general_utilities/shared_ptr</code>,
 
1707
       <code class="filename">testsuite/20_util/shared_ptr</code>
 
1708
       and
 
1709
       <code class="filename">testsuite/20_util/weak_ptr</code>.
 
1710
-    </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15576640"></a>Unresolved Issues</h5></div></div></div><p>
 
1711
+    </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999954912"></a>Unresolved Issues</h5></div></div></div><p>
 
1712
       The <span class="emphasis"><em><code class="classname">shared_ptr</code> atomic access</em></span>
 
1713
       clause in the C++11 standard is not implemented in GCC.
 
1714
     </p><p>
 
1715
@@ -658,25 +658,25 @@
 
1716
     code to work with, Peter Dimov in particular for his help and
 
1717
     invaluable advice on thread safety.  Phillip Jordan and Paolo
 
1718
     Carlini for the lock policy implementation.
 
1719
-  </p></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp15587936"></a><p><span class="title"><em>
 
1720
+  </p></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269999943680"></a><p><span class="title"><em>
 
1721
        <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2351.htm" target="_top">
 
1722
       Improving shared_ptr for C++0x, Revision 2
 
1723
        </a>
 
1724
       </em>. </span><span class="subtitle">
 
1725
       N2351
 
1726
-    . </span></p></div><div class="biblioentry"><a id="idp15590224"></a><p><span class="title"><em>
 
1727
+    . </span></p></div><div class="biblioentry"><a id="idm269999941392"></a><p><span class="title"><em>
 
1728
        <a class="link" href="http://open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2456.html" target="_top">
 
1729
       C++ Standard Library Active Issues List
 
1730
        </a>
 
1731
       </em>. </span><span class="subtitle">
 
1732
       N2456
 
1733
-    . </span></p></div><div class="biblioentry"><a id="idp15592512"></a><p><span class="title"><em>
 
1734
+    . </span></p></div><div class="biblioentry"><a id="idm269999939104"></a><p><span class="title"><em>
 
1735
        <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf" target="_top">
 
1736
       Working Draft, Standard for Programming Language C++
 
1737
        </a>
 
1738
       </em>. </span><span class="subtitle">
 
1739
       N2461
 
1740
-    . </span></p></div><div class="biblioentry"><a id="idp15594816"></a><p><span class="title"><em>
 
1741
+    . </span></p></div><div class="biblioentry"><a id="idm269999936800"></a><p><span class="title"><em>
 
1742
        <a class="link" href="http://boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">
 
1743
       Boost C++ Libraries documentation, shared_ptr
 
1744
        </a>
 
1745
Index: libstdc++-v3/doc/html/manual/api.html
 
1746
===================================================================
 
1747
--- a/src/libstdc++-v3/doc/html/manual/api.html (.../tags/gcc_4_8_2_release)
 
1748
+++ b/src/libstdc++-v3/doc/html/manual/api.html (.../branches/gcc-4_8-branch)
 
1749
@@ -1,5 +1,5 @@
 
1750
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1751
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>API Evolution and Deprecation History</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, api, evolution, deprecation, history" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="abi.html" title="ABI Policy and Guidelines" /><link rel="next" href="backwards.html" title="Backwards Compatibility" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">API Evolution and Deprecation History</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="abi.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
 
1752
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>API Evolution and Deprecation History</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, api, evolution, deprecation, history" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="abi.html" title="ABI Policy and Guidelines" /><link rel="next" href="backwards.html" title="Backwards Compatibility" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">API Evolution and Deprecation History</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="abi.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
 
1753
   Porting and Maintenance
 
1754
   
 
1755
 </th><td width="20%" align="right"> <a accesskey="n" href="backwards.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.api"></a>API Evolution and Deprecation History</h2></div></div></div><p>
 
1756
@@ -77,11 +77,11 @@
 
1757
    <span class="type">__alloc</span> to select an underlying allocator that
 
1758
    satisfied memory allocation requests. The selection of this
 
1759
    underlying allocator was not user-configurable.
 
1760
-   </p><div class="table"><a id="idp23030528"></a><p class="title"><strong>Table B.6. Extension Allocators</strong></p><div class="table-contents"><table summary="Extension Allocators" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Allocator (3.4)</th><th align="left">Header (3.4)</th><th align="left">Allocator (3.[0-3])</th><th align="left">Header (3.[0-3])</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::new_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="classname">std::__new_alloc</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::malloc_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="classname">std::__malloc_alloc_template&lt;int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::debug_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="classname">std::debug_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__pool_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="classname">std::__default_alloc_template&lt;bool,int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__mt_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left"><code class="classname">__gnu_cxx::bitmap_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><p> Releases after gcc-3.4 have continued to add to the collection
 
1761
+   </p><div class="table"><a id="idm269992502096"></a><p class="title"><strong>Table B.6. Extension Allocators</strong></p><div class="table-contents"><table summary="Extension Allocators" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Allocator (3.4)</th><th align="left">Header (3.4)</th><th align="left">Allocator (3.[0-3])</th><th align="left">Header (3.[0-3])</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::new_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="classname">std::__new_alloc</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::malloc_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="classname">std::__malloc_alloc_template&lt;int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::debug_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="classname">std::debug_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__pool_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="classname">std::__default_alloc_template&lt;bool,int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__mt_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left"><code class="classname">__gnu_cxx::bitmap_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><p> Releases after gcc-3.4 have continued to add to the collection
 
1762
    of available allocators. All of these new allocators are
 
1763
    standard-style. The following table includes details, along with
 
1764
    the first released version of GCC that included the extension allocator.
 
1765
-   </p><div class="table"><a id="idp23058160"></a><p class="title"><strong>Table B.7. Extension Allocators Continued</strong></p><div class="table-contents"><table summary="Extension Allocators Continued" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left">Allocator</th><th align="left">Include</th><th align="left">Version</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::array_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left">4.0.0</td></tr><tr><td align="left"><code class="classname">__gnu_cxx::throw_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left">4.2.0</td></tr></tbody></table></div></div><br class="table-break" /><p>
 
1766
+   </p><div class="table"><a id="idm269992474464"></a><p class="title"><strong>Table B.7. Extension Allocators Continued</strong></p><div class="table-contents"><table summary="Extension Allocators Continued" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left">Allocator</th><th align="left">Include</th><th align="left">Version</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::array_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left">4.0.0</td></tr><tr><td align="left"><code class="classname">__gnu_cxx::throw_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left">4.2.0</td></tr></tbody></table></div></div><br class="table-break" /><p>
 
1767
 Debug mode first appears.
 
1768
 </p><p>
 
1769
 Precompiled header support <acronym class="acronym">PCH</acronym> support.
 
1770
Index: libstdc++-v3/doc/html/manual/source_organization.html
 
1771
===================================================================
 
1772
--- a/src/libstdc++-v3/doc/html/manual/source_organization.html (.../tags/gcc_4_8_2_release)
 
1773
+++ b/src/libstdc++-v3/doc/html/manual/source_organization.html (.../branches/gcc-4_8-branch)
 
1774
@@ -1,5 +1,5 @@
 
1775
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1776
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Directory Layout and Source Conventions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="Appendix A.  Contributing" /><link rel="prev" href="appendix_contributing.html" title="Appendix A.  Contributing" /><link rel="next" href="source_code_style.html" title="Coding Style" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Directory Layout and Source Conventions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_contributing.html">Prev</a> </td><th width="60%" align="center">Appendix A. 
 
1777
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Directory Layout and Source Conventions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="Appendix A.  Contributing" /><link rel="prev" href="appendix_contributing.html" title="Appendix A.  Contributing" /><link rel="next" href="source_code_style.html" title="Coding Style" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Directory Layout and Source Conventions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_contributing.html">Prev</a> </td><th width="60%" align="center">Appendix A. 
 
1778
   Contributing
 
1779
   
 
1780
 </th><td width="20%" align="right"> <a accesskey="n" href="source_code_style.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.organization"></a>Directory Layout and Source Conventions</h2></div></div></div><p>
 
1781
Index: libstdc++-v3/doc/html/manual/fstreams.html
 
1782
===================================================================
 
1783
--- a/src/libstdc++-v3/doc/html/manual/fstreams.html    (.../tags/gcc_4_8_2_release)
 
1784
+++ b/src/libstdc++-v3/doc/html/manual/fstreams.html    (.../branches/gcc-4_8-branch)
 
1785
@@ -1,5 +1,5 @@
 
1786
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1787
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>File Based Streams</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13.  Input and Output" /><link rel="prev" href="stringstreams.html" title="Memory Based Streams" /><link rel="next" href="io_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">File Based Streams</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="stringstreams.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
 
1788
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>File Based Streams</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13.  Input and Output" /><link rel="prev" href="stringstreams.html" title="Memory Based Streams" /><link rel="next" href="io_and_c.html" title="Interacting with C" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">File Based Streams</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="stringstreams.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
 
1789
   Input and Output
 
1790
   
 
1791
 </th><td width="20%" align="right"> <a accesskey="n" href="io_and_c.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.filestreams"></a>File Based Streams</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.filestreams.copying_a_file"></a>Copying a File</h3></div></div></div><p>
 
1792
Index: libstdc++-v3/doc/html/manual/ext_demangling.html
 
1793
===================================================================
 
1794
--- a/src/libstdc++-v3/doc/html/manual/ext_demangling.html      (.../tags/gcc_4_8_2_release)
 
1795
+++ b/src/libstdc++-v3/doc/html/manual/ext_demangling.html      (.../branches/gcc-4_8-branch)
 
1796
@@ -1,5 +1,5 @@
 
1797
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1798
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 29. Demangling</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_io.html" title="Chapter 28. Input and Output" /><link rel="next" href="ext_concurrency.html" title="Chapter 30. Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 29. Demangling</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
1799
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 29. Demangling</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_io.html" title="Chapter 28. Input and Output" /><link rel="next" href="ext_concurrency.html" title="Chapter 30. Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 29. Demangling</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
1800
   Extensions
 
1801
   
 
1802
 </th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.demangle"></a>Chapter 29. Demangling</h2></div></div></div><p>
 
1803
Index: libstdc++-v3/doc/html/manual/ext_preface.html
 
1804
===================================================================
 
1805
--- a/src/libstdc++-v3/doc/html/manual/ext_preface.html (.../tags/gcc_4_8_2_release)
 
1806
+++ b/src/libstdc++-v3/doc/html/manual/ext_preface.html (.../branches/gcc-4_8-branch)
 
1807
@@ -1,8 +1,8 @@
 
1808
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1809
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="extensions.html" title="Part III.  Extensions" /><link rel="next" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="extensions.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
1810
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title></title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="extensions.html" title="Part III.  Extensions" /><link rel="next" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="extensions.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
1811
   Extensions
 
1812
   
 
1813
-</th><td width="20%" align="right"> <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr></table><hr /></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a id="idp16425920"></a></h1></div></div></div><p>
 
1814
+</th><td width="20%" align="right"> <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr></table><hr /></div><div class="preface"><div class="titlepage"><div><div><h1 class="title"><a id="idm269999105296"></a></h1></div></div></div><p>
 
1815
   Here we will make an attempt at describing the non-Standard
 
1816
   extensions to the library.  Some of these are from older versions of
 
1817
   standard library components, namely SGI's STL, and some of these are
 
1818
Index: libstdc++-v3/doc/html/manual/concept_checking.html
 
1819
===================================================================
 
1820
--- a/src/libstdc++-v3/doc/html/manual/concept_checking.html    (.../tags/gcc_4_8_2_release)
 
1821
+++ b/src/libstdc++-v3/doc/html/manual/concept_checking.html    (.../branches/gcc-4_8-branch)
 
1822
@@ -1,5 +1,5 @@
 
1823
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1824
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Concept Checking</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="diagnostics.html" title="Chapter 5.  Diagnostics" /><link rel="prev" href="diagnostics.html" title="Chapter 5.  Diagnostics" /><link rel="next" href="utilities.html" title="Chapter 6.  Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Concept Checking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="diagnostics.html">Prev</a> </td><th width="60%" align="center">Chapter 5. 
 
1825
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Concept Checking</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="diagnostics.html" title="Chapter 5.  Diagnostics" /><link rel="prev" href="diagnostics.html" title="Chapter 5.  Diagnostics" /><link rel="next" href="utilities.html" title="Chapter 6.  Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Concept Checking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="diagnostics.html">Prev</a> </td><th width="60%" align="center">Chapter 5. 
 
1826
   Diagnostics
 
1827
   
 
1828
 </th><td width="20%" align="right"> <a accesskey="n" href="utilities.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.diagnostics.concept_checking"></a>Concept Checking</h2></div></div></div><p>
 
1829
Index: libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html
 
1830
===================================================================
 
1831
--- a/src/libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html       (.../tags/gcc_4_8_2_release)
 
1832
+++ b/src/libstdc++-v3/doc/html/manual/mt_allocator_ex_multi.html       (.../branches/gcc-4_8-branch)
 
1833
@@ -1,5 +1,5 @@
 
1834
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1835
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Multiple Thread Example</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator_ex_single.html" title="Single Thread Example" /><link rel="next" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Multiple Thread Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_ex_single.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.example_multi"></a>Multiple Thread Example</h2></div></div></div><p>
 
1836
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Multiple Thread Example</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator_ex_single.html" title="Single Thread Example" /><link rel="next" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Multiple Thread Example</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_ex_single.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.example_multi"></a>Multiple Thread Example</h2></div></div></div><p>
 
1837
 In the ST example we never used the thread_id variable present in each block.
 
1838
 Let's start by explaining the purpose of this in a MT application.
 
1839
 </p><p>
 
1840
Index: libstdc++-v3/doc/html/manual/ext_compile_checks.html
 
1841
===================================================================
 
1842
--- a/src/libstdc++-v3/doc/html/manual/ext_compile_checks.html  (.../tags/gcc_4_8_2_release)
 
1843
+++ b/src/libstdc++-v3/doc/html/manual/ext_compile_checks.html  (.../branches/gcc-4_8-branch)
 
1844
@@ -1,5 +1,5 @@
 
1845
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1846
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 16. Compile Time Checks</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_preface.html" title="" /><link rel="next" href="debug_mode.html" title="Chapter 17. Debug Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 16. Compile Time Checks</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_preface.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
1847
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 16. Compile Time Checks</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_preface.html" title="" /><link rel="next" href="debug_mode.html" title="Chapter 17. Debug Mode" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 16. Compile Time Checks</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_preface.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
1848
   Extensions
 
1849
   
 
1850
 </th><td width="20%" align="right"> <a accesskey="n" href="debug_mode.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.compile_checks"></a>Chapter 16. Compile Time Checks</h2></div></div></div><p>
 
1851
Index: libstdc++-v3/doc/html/manual/strings.html
 
1852
===================================================================
 
1853
--- a/src/libstdc++-v3/doc/html/manual/strings.html     (.../tags/gcc_4_8_2_release)
 
1854
+++ b/src/libstdc++-v3/doc/html/manual/strings.html     (.../branches/gcc-4_8-branch)
 
1855
@@ -1,5 +1,5 @@
 
1856
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1857
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 7.  Strings</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="traits.html" title="Traits" /><link rel="next" href="localization.html" title="Chapter 8.  Localization" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 7. 
 
1858
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 7.  Strings</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="traits.html" title="Traits" /><link rel="next" href="localization.html" title="Chapter 8.  Localization" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 7. 
 
1859
   Strings
 
1860
   
 
1861
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="traits.html">Prev</a> </td><th width="60%" align="center">Part II. 
 
1862
@@ -6,8 +6,8 @@
 
1863
     Standard Contents
 
1864
   </th><td width="20%" align="right"> <a accesskey="n" href="localization.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.strings"></a>Chapter 7. 
 
1865
   Strings
 
1866
-  <a id="idp15603440" class="indexterm"></a>
 
1867
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.strings.string"></a>String Classes</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.simple"></a>Simple Transformations</h3></div></div></div><p>
 
1868
+  <a id="idm269999928112" class="indexterm"></a>
 
1869
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.strings.string"></a>String Classes</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.simple"></a>Simple Transformations</h3></div></div></div><p>
 
1870
       Here are Standard, simple, and portable ways to perform common
 
1871
       transformations on a <code class="code">string</code> instance, such as
 
1872
       "convert to all upper case." The word transformations
 
1873
Index: libstdc++-v3/doc/html/manual/containers_and_c.html
 
1874
===================================================================
 
1875
--- a/src/libstdc++-v3/doc/html/manual/containers_and_c.html    (.../tags/gcc_4_8_2_release)
 
1876
+++ b/src/libstdc++-v3/doc/html/manual/containers_and_c.html    (.../branches/gcc-4_8-branch)
 
1877
@@ -1,5 +1,5 @@
 
1878
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1879
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="Chapter 9.  Containers" /><link rel="prev" href="unordered_associative.html" title="Unordered Associative" /><link rel="next" href="iterators.html" title="Chapter 10.  Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="unordered_associative.html">Prev</a> </td><th width="60%" align="center">Chapter 9. 
 
1880
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="containers.html" title="Chapter 9.  Containers" /><link rel="prev" href="unordered_associative.html" title="Unordered Associative" /><link rel="next" href="iterators.html" title="Chapter 10.  Iterators" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="unordered_associative.html">Prev</a> </td><th width="60%" align="center">Chapter 9. 
 
1881
   Containers
 
1882
   
 
1883
 </th><td width="20%" align="right"> <a accesskey="n" href="iterators.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.c"></a>Interacting with C</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="containers.c.vs_array"></a>Containers vs. Arrays</h3></div></div></div><p>
 
1884
Index: libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html
 
1885
===================================================================
 
1886
--- a/src/libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html    (.../tags/gcc_4_8_2_release)
 
1887
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode_diagnostics.html    (.../branches/gcc-4_8-branch)
 
1888
@@ -1,5 +1,5 @@
 
1889
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1890
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Diagnostics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_devel.html" title="Developer Information" /><link rel="next" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Diagnostics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_devel.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.diagnostics"></a>Diagnostics</h2></div></div></div><p>
 
1891
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Diagnostics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_devel.html" title="Developer Information" /><link rel="next" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Diagnostics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_devel.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.diagnostics"></a>Diagnostics</h2></div></div></div><p>
 
1892
   The table below presents all the diagnostics we intend to implement.
 
1893
   Each diagnostic has a corresponding compile time switch
 
1894
   <code class="code">-D_GLIBCXX_PROFILE_&lt;diagnostic&gt;</code>.
 
1895
@@ -17,7 +17,7 @@
 
1896
   A high accuracy means that the diagnostic is unlikely to be wrong.
 
1897
   These grades are not perfect.  They are just meant to guide users with
 
1898
   specific needs or time budgets.
 
1899
-  </p><div class="table"><a id="idp17088912"></a><p class="title"><strong>Table 19.2. Profile Diagnostics</strong></p><div class="table-contents"><table summary="Profile Diagnostics" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /><col align="left" class="c6" /><col align="left" class="c7" /></colgroup><thead><tr><th align="left">Group</th><th align="left">Flag</th><th align="left">Benefit</th><th align="left">Cost</th><th align="left">Freq.</th><th align="left">Implemented</th><td class="auto-generated"> </td></tr></thead><tbody><tr><td align="left"><a class="link" href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers" title="Containers">
 
1900
+  </p><div class="table"><a id="idm269998442544"></a><p class="title"><strong>Table 19.2. Profile Diagnostics</strong></p><div class="table-contents"><table summary="Profile Diagnostics" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /><col align="left" class="c6" /><col align="left" class="c7" /></colgroup><thead><tr><th align="left">Group</th><th align="left">Flag</th><th align="left">Benefit</th><th align="left">Cost</th><th align="left">Freq.</th><th align="left">Implemented</th><td class="auto-generated"> </td></tr></thead><tbody><tr><td align="left"><a class="link" href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers" title="Containers">
 
1901
     CONTAINERS</a></td><td align="left"><a class="link" href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_small" title="Hashtable Too Small">
 
1902
     HASHTABLE_TOO_SMALL</a></td><td align="left">10</td><td align="left">1</td><td align="left"> </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left"> </td><td align="left"><a class="link" href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_large" title="Hashtable Too Large">
 
1903
     HASHTABLE_TOO_LARGE</a></td><td align="left">5</td><td align="left">1</td><td align="left"> </td><td align="left">10</td><td align="left">yes</td></tr><tr><td align="left"> </td><td align="left"><a class="link" href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.inefficient_hash" title="Inefficient Hash">
 
1904
@@ -374,7 +374,7 @@
 
1905
   Quick Sort for a particular call context.
 
1906
   </p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>
 
1907
   See papers:
 
1908
-  <a class="link" href="http://portal.acm.org/citation.cfm?doid=1065944.1065981" target="_top">
 
1909
+  <a class="link" href="https://dl.acm.org/citation.cfm?doid=1065944.1065981" target="_top">
 
1910
   A framework for adaptive algorithm selection in STAPL</a> and
 
1911
   <a class="link" href="http://ieeexplore.ieee.org/search/wrapper.jsp?arnumber=4228227" target="_top">
 
1912
   Optimizing Sorting with Machine Learning Algorithms</a>.
 
1913
@@ -500,7 +500,7 @@
 
1914
   Keep a shadow for each container.  Record iterator dereferences and
 
1915
   container member accesses.  Issue advice for elements referenced by
 
1916
   multiple threads.
 
1917
-  See paper: <a class="link" href="http://portal.acm.org/citation.cfm?id=207110.207148" target="_top">
 
1918
+  See paper: <a class="link" href="https://dl.acm.org/citation.cfm?id=207110.207148" target="_top">
 
1919
   The LRPD test: speculative run-time parallelization of loops with
 
1920
   privatization and reduction parallelization</a>.
 
1921
   </p></li><li class="listitem"><p><span class="emphasis"><em>Cost model:</em></span>
 
1922
Index: libstdc++-v3/doc/html/manual/ext_concurrency_impl.html
 
1923
===================================================================
 
1924
--- a/src/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html        (.../tags/gcc_4_8_2_release)
 
1925
+++ b/src/libstdc++-v3/doc/html/manual/ext_concurrency_impl.html        (.../branches/gcc-4_8-branch)
 
1926
@@ -1,5 +1,5 @@
 
1927
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1928
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_concurrency.html" title="Chapter 30. Concurrency" /><link rel="prev" href="ext_concurrency.html" title="Chapter 30. Concurrency" /><link rel="next" href="ext_concurrency_use.html" title="Use" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 30. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency_use.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.atomic_fallbacks"></a>Using Builtin Atomic Functions</h3></div></div></div><p>The functions for atomic operations described above are either
 
1929
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_concurrency.html" title="Chapter 30. Concurrency" /><link rel="prev" href="ext_concurrency.html" title="Chapter 30. Concurrency" /><link rel="next" href="ext_concurrency_use.html" title="Use" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><th width="60%" align="center">Chapter 30. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency_use.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.atomic_fallbacks"></a>Using Builtin Atomic Functions</h3></div></div></div><p>The functions for atomic operations described above are either
 
1930
 implemented via compiler intrinsics (if the underlying host is
 
1931
 capable) or by library fallbacks.</p><p>Compiler intrinsics (builtins) are always preferred.  However, as
 
1932
 the compiler builtins for atomics are not universally implemented,
 
1933
Index: libstdc++-v3/doc/html/manual/io_and_c.html
 
1934
===================================================================
 
1935
--- a/src/libstdc++-v3/doc/html/manual/io_and_c.html    (.../tags/gcc_4_8_2_release)
 
1936
+++ b/src/libstdc++-v3/doc/html/manual/io_and_c.html    (.../branches/gcc-4_8-branch)
 
1937
@@ -1,5 +1,5 @@
 
1938
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1939
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13.  Input and Output" /><link rel="prev" href="fstreams.html" title="File Based Streams" /><link rel="next" href="atomics.html" title="Chapter 14.  Atomics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="fstreams.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
 
1940
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13.  Input and Output" /><link rel="prev" href="fstreams.html" title="File Based Streams" /><link rel="next" href="atomics.html" title="Chapter 14.  Atomics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="fstreams.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
 
1941
   Input and Output
 
1942
   
 
1943
 </th><td width="20%" align="right"> <a accesskey="n" href="atomics.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.c"></a>Interacting with C</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.c.FILE"></a>Using FILE* and file descriptors</h3></div></div></div><p>
 
1944
Index: libstdc++-v3/doc/html/manual/documentation_hacking.html
 
1945
===================================================================
 
1946
--- a/src/libstdc++-v3/doc/html/manual/documentation_hacking.html       (.../tags/gcc_4_8_2_release)
 
1947
+++ b/src/libstdc++-v3/doc/html/manual/documentation_hacking.html       (.../branches/gcc-4_8-branch)
 
1948
@@ -1,5 +1,5 @@
 
1949
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
1950
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Writing and Generating Documentation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, documentation, style, docbook, doxygen" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="next" href="internals.html" title="Porting to New Hardware or Operating Systems" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Writing and Generating Documentation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_porting.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
 
1951
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Writing and Generating Documentation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, documentation, style, docbook, doxygen" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="next" href="internals.html" title="Porting to New Hardware or Operating Systems" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Writing and Generating Documentation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_porting.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
 
1952
   Porting and Maintenance
 
1953
   
 
1954
 </th><td width="20%" align="right"> <a accesskey="n" href="internals.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.doc"></a>Writing and Generating Documentation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.intro"></a>Introduction</h3></div></div></div><p>
 
1955
@@ -112,7 +112,7 @@
 
1956
       supported, and are always aliased to dummy rules. These
 
1957
       unsupported formats are: <span class="emphasis"><em>info</em></span>,
 
1958
       <span class="emphasis"><em>ps</em></span>, and <span class="emphasis"><em>dvi</em></span>.
 
1959
-    </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.doxygen"></a>Doxygen</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idp22162432"></a><p class="title"><strong>Table B.1. Doxygen Prerequisites</strong></p><div class="table-contents"><table summary="Doxygen Prerequisites" border="1"><colgroup><col align="center" class="c1" /><col align="center" class="c2" /><col align="center" class="c3" /></colgroup><thead><tr><th align="center">Tool</th><th align="center">Version</th><th align="center">Required By</th></tr></thead><tbody><tr><td align="center">coreutils</td><td align="center">8.5</td><td align="center">all</td></tr><tr><td align="center">bash</td><td align="center">4.1</td><td align="center">all</td></tr><tr><td align="center">doxygen</td><td align="center">1.7.6.1</td><td align="center">all</td></tr><tr><td align="center">graphviz</td><td align="center">2.26</td><td align="center">graphical hierarchies</td></tr><tr><td align="center">pdflatex</td><td align="center">2007-59</td><td align="center">pdf output</td></tr></tbody></table></div></div><br class="table-break" /><p>
 
1960
+    </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.doxygen"></a>Doxygen</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idm269993370272"></a><p class="title"><strong>Table B.1. Doxygen Prerequisites</strong></p><div class="table-contents"><table summary="Doxygen Prerequisites" border="1"><colgroup><col align="center" class="c1" /><col align="center" class="c2" /><col align="center" class="c3" /></colgroup><thead><tr><th align="center">Tool</th><th align="center">Version</th><th align="center">Required By</th></tr></thead><tbody><tr><td align="center">coreutils</td><td align="center">8.5</td><td align="center">all</td></tr><tr><td align="center">bash</td><td align="center">4.1</td><td align="center">all</td></tr><tr><td align="center">doxygen</td><td align="center">1.7.6.1</td><td align="center">all</td></tr><tr><td align="center">graphviz</td><td align="center">2.26</td><td align="center">graphical hierarchies</td></tr><tr><td align="center">pdflatex</td><td align="center">2007-59</td><td align="center">pdf output</td></tr></tbody></table></div></div><br class="table-break" /><p>
 
1961
        Prerequisite tools are Bash 2.0 or later,
 
1962
        <a class="link" href="http://www.doxygen.org/" target="_top">Doxygen</a>, and
 
1963
        the <a class="link" href="http://www.gnu.org/software/coreutils/" target="_top">GNU
 
1964
@@ -232,9 +232,8 @@
 
1965
        member functions.
 
1966
       </p><p>
 
1967
        Some commentary to accompany
 
1968
-       the first list in the <a class="link" href="http://www.stack.nl/~dimitri/doxygen/docblocks.html" target="_top">Special
 
1969
-       Documentation Blocks</a> section of
 
1970
-       the Doxygen manual:
 
1971
+       the first list in the <a class="link" href="http://www.stack.nl/~dimitri/doxygen/manual/docblocks.html" target="_top">Special
 
1972
+       Documentation Blocks</a> section of the Doxygen manual:
 
1973
       </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>For longer comments, use the Javadoc style...</p></li><li class="listitem"><p>
 
1974
            ...not the Qt style. The intermediate *'s are preferred.
 
1975
          </p></li><li class="listitem"><p>
 
1976
@@ -310,7 +309,7 @@
 
1977
        writing Doxygen comments. Single and double quotes, and
 
1978
        separators in filenames are two common trouble spots. When in
 
1979
        doubt, consult the following table.
 
1980
-      </p><div class="table"><a id="idp22238096"></a><p class="title"><strong>Table B.2. HTML to Doxygen Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Doxygen Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Doxygen</th></tr></thead><tbody><tr><td align="left">\</td><td align="left">\\</td></tr><tr><td align="left">"</td><td align="left">\"</td></tr><tr><td align="left">'</td><td align="left">\'</td></tr><tr><td align="left">&lt;i&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;b&gt;</td><td align="left">@b word</td></tr><tr><td align="left">&lt;code&gt;</td><td align="left">@c word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">&lt;em&gt;two words or more&lt;/em&gt;</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.docbook"></a>Docbook</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idp22257536"></a><p class="title"><strong>Table B.3. Docbook Prerequisites</strong></p><div class="table-contents"><table summary="Docbook Prerequisites" border="1"><colgroup><col align="center" class="c1" /><col align="center" class="c2" /><col align="center" class="c3" /></colgroup><thead><tr><th align="center">Tool</th><th align="center">Version</th><th align="center">Required By</th></tr></thead><tbody><tr><td align="center">docbook5-style-xsl</td><td align="center">1.76.1</td><td align="center">all</td></tr><tr><td align="center">xsltproc</td><td align="center">1.1.26</td><td align="center">all</td></tr><tr><td align="center">xmllint</td><td align="center">2.7.7</td><td align="center">validation</td></tr><tr><td align="center">dblatex</td><td align="center">0.3</td><td align="center">pdf output</td></tr><tr><td align="center">pdflatex</td><td align="center">2007-59</td><td align="center">pdf output</td></tr><tr><td align="center">docbook2X</td><td align="center">0.8.8</td><td align="center">info output</td></tr><tr><td align="center">epub3 stylesheets</td><td align="center">b3</td><td align="center">epub output</td></tr></tbody></table></div></div><br class="table-break" /><p>
 
1981
+      </p><div class="table"><a id="idm269993294592"></a><p class="title"><strong>Table B.2. HTML to Doxygen Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Doxygen Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Doxygen</th></tr></thead><tbody><tr><td align="left">\</td><td align="left">\\</td></tr><tr><td align="left">"</td><td align="left">\"</td></tr><tr><td align="left">'</td><td align="left">\'</td></tr><tr><td align="left">&lt;i&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;b&gt;</td><td align="left">@b word</td></tr><tr><td align="left">&lt;code&gt;</td><td align="left">@c word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">&lt;em&gt;two words or more&lt;/em&gt;</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.docbook"></a>Docbook</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idm269993275152"></a><p class="title"><strong>Table B.3. Docbook Prerequisites</strong></p><div class="table-contents"><table summary="Docbook Prerequisites" border="1"><colgroup><col align="center" class="c1" /><col align="center" class="c2" /><col align="center" class="c3" /></colgroup><thead><tr><th align="center">Tool</th><th align="center">Version</th><th align="center">Required By</th></tr></thead><tbody><tr><td align="center">docbook5-style-xsl</td><td align="center">1.76.1</td><td align="center">all</td></tr><tr><td align="center">xsltproc</td><td align="center">1.1.26</td><td align="center">all</td></tr><tr><td align="center">xmllint</td><td align="center">2.7.7</td><td align="center">validation</td></tr><tr><td align="center">dblatex</td><td align="center">0.3</td><td align="center">pdf output</td></tr><tr><td align="center">pdflatex</td><td align="center">2007-59</td><td align="center">pdf output</td></tr><tr><td align="center">docbook2X</td><td align="center">0.8.8</td><td align="center">info output</td></tr><tr><td align="center">epub3 stylesheets</td><td align="center">b3</td><td align="center">epub output</td></tr></tbody></table></div></div><br class="table-break" /><p>
 
1982
        Editing the DocBook sources requires an XML editor. Many
 
1983
        exist: some notable options
 
1984
        include <span class="command"><strong>emacs</strong></span>, <span class="application">Kate</span>,
 
1985
@@ -520,11 +519,11 @@
 
1986
        <a class="link" href="http://www.docbook.org/tdg/en/html/part2.html" target="_top">online</a>.
 
1987
        An incomplete reference for HTML to Docbook conversion is
 
1988
        detailed in the table below.
 
1989
-      </p><div class="table"><a id="idp22335040"></a><p class="title"><strong>Table B.4. HTML to Docbook XML Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Docbook XML Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Docbook</th></tr></thead><tbody><tr><td align="left">&lt;p&gt;</td><td align="left">&lt;para&gt;</td></tr><tr><td align="left">&lt;pre&gt;</td><td align="left">&lt;computeroutput&gt;, &lt;programlisting&gt;,
 
1990
+      </p><div class="table"><a id="idm269993197520"></a><p class="title"><strong>Table B.4. HTML to Docbook XML Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Docbook XML Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Docbook</th></tr></thead><tbody><tr><td align="left">&lt;p&gt;</td><td align="left">&lt;para&gt;</td></tr><tr><td align="left">&lt;pre&gt;</td><td align="left">&lt;computeroutput&gt;, &lt;programlisting&gt;,
 
1991
        &lt;literallayout&gt;</td></tr><tr><td align="left">&lt;ul&gt;</td><td align="left">&lt;itemizedlist&gt;</td></tr><tr><td align="left">&lt;ol&gt;</td><td align="left">&lt;orderedlist&gt;</td></tr><tr><td align="left">&lt;il&gt;</td><td align="left">&lt;listitem&gt;</td></tr><tr><td align="left">&lt;dl&gt;</td><td align="left">&lt;variablelist&gt;</td></tr><tr><td align="left">&lt;dt&gt;</td><td align="left">&lt;term&gt;</td></tr><tr><td align="left">&lt;dd&gt;</td><td align="left">&lt;listitem&gt;</td></tr><tr><td align="left">&lt;a href=""&gt;</td><td align="left">&lt;ulink url=""&gt;</td></tr><tr><td align="left">&lt;code&gt;</td><td align="left">&lt;literal&gt;, &lt;programlisting&gt;</td></tr><tr><td align="left">&lt;strong&gt;</td><td align="left">&lt;emphasis&gt;</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">&lt;emphasis&gt;</td></tr><tr><td align="left">"</td><td align="left">&lt;quote&gt;</td></tr></tbody></table></div></div><br class="table-break" /><p>
 
1992
   And examples of detailed markup for which there are no real HTML
 
1993
   equivalents are listed in the table below.
 
1994
-</p><div class="table"><a id="idp22359184"></a><p class="title"><strong>Table B.5. Docbook XML Element Use</strong></p><div class="table-contents"><table summary="Docbook XML Element Use" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Element</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left">&lt;structname&gt;</td><td align="left">&lt;structname&gt;char_traits&lt;/structname&gt;</td></tr><tr><td align="left">&lt;classname&gt;</td><td align="left">&lt;classname&gt;string&lt;/classname&gt;</td></tr><tr><td align="left">&lt;function&gt;</td><td align="left">
 
1995
+</p><div class="table"><a id="idm269993173376"></a><p class="title"><strong>Table B.5. Docbook XML Element Use</strong></p><div class="table-contents"><table summary="Docbook XML Element Use" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Element</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left">&lt;structname&gt;</td><td align="left">&lt;structname&gt;char_traits&lt;/structname&gt;</td></tr><tr><td align="left">&lt;classname&gt;</td><td align="left">&lt;classname&gt;string&lt;/classname&gt;</td></tr><tr><td align="left">&lt;function&gt;</td><td align="left">
 
1996
        <p>&lt;function&gt;clear()&lt;/function&gt;</p>
 
1997
        <p>&lt;function&gt;fs.clear()&lt;/function&gt;</p>
 
1998
       </td></tr><tr><td align="left">&lt;type&gt;</td><td align="left">&lt;type&gt;long long&lt;/type&gt;</td></tr><tr><td align="left">&lt;varname&gt;</td><td align="left">&lt;varname&gt;fs&lt;/varname&gt;</td></tr><tr><td align="left">&lt;literal&gt;</td><td align="left">
 
1999
Index: libstdc++-v3/doc/html/manual/extensions.html
 
2000
===================================================================
 
2001
--- a/src/libstdc++-v3/doc/html/manual/extensions.html  (.../tags/gcc_4_8_2_release)
 
2002
+++ b/src/libstdc++-v3/doc/html/manual/extensions.html  (.../branches/gcc-4_8-branch)
 
2003
@@ -1,11 +1,11 @@
 
2004
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2005
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part III.  Extensions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="io_and_c.html" title="Interacting with C" /><link rel="next" href="ext_preface.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part III. 
 
2006
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Part III.  Extensions</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="index.html" title="The GNU C++ Library Manual" /><link rel="prev" href="io_and_c.html" title="Interacting with C" /><link rel="next" href="ext_preface.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part III. 
 
2007
   Extensions
 
2008
   
 
2009
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><th width="60%" align="center">The GNU C++ Library Manual</th><td width="20%" align="right"> <a accesskey="n" href="ext_preface.html">Next</a></td></tr></table><hr /></div><div class="part"><div class="titlepage"><div><div><h1 class="title"><a id="manual.ext"></a>Part III. 
 
2010
   Extensions
 
2011
-  <a id="idp16423680" class="indexterm"></a>
 
2012
-</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="preface"><a href="ext_preface.html"></a></span></dt><dt><span class="chapter"><a href="ext_compile_checks.html">16. Compile Time Checks</a></span></dt><dt><span class="chapter"><a href="debug_mode.html">17. Debug Mode</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="debug_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="debug_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.link">Link- and run-time coexistence of release- and
 
2013
+  <a id="idm269999107536" class="indexterm"></a>
 
2014
+</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="preface"><a href="ext_preface.html"></a></span></dt><dt><span class="chapter"><a href="ext_compile_checks.html">16. Compile Time Checks</a></span></dt><dt><span class="chapter"><a href="debug_mode.html">17. Debug Mode</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="debug_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="debug_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.link">Link- and run-time coexistence of release- and
 
2015
     debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="parallel_mode.html">18. Parallel Mode</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="parallel_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_test.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="profile_mode.html">19. Profile Mode</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.using">Using the Profile Mode</a></span></dt><dt><span class="section"><a href="profile_mode.html#manual.ext.profile_mode.tuning">Tuning the Profile Mode</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="profile_mode_design.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_api.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="profile_mode_cost_model.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.stdlib-in-proflib">Using the Standard Library in the Instrumentation Implementation</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="profile_mode_impl.html#manual.ext.profile_mode.implementation.construction-destruction">Construction and Destruction of Global Objects</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_devel.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="profile_mode_devel.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.assoc_ord_to_unord">Ordered to Unordered Associative Container</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="profile_mode_diagnostics.html#manual.ext.profile_mode.analysis.statistics">Statistics</a></span></dt></dl></dd><dt><span class="bibliography"><a href="profile_mode.html#profile_mode.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="mt_allocator.html">20. The mt_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator.html#allocator.mt.intro">Intro</a></span></dt><dt><span class="section"><a href="mt_allocator_design.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_design.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="mt_allocator_impl.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="mt_allocator_ex_single.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="mt_allocator_ex_multi.html">Multiple Thread Example</a></span></dt></dl></dd><dt><span class="chapter"><a href="bitmap_allocator.html">21. The bitmap_allocator</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator.html#allocator.bitmap.design">Design</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bitmap_allocator_impl.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="policy_data_structures.html">22. Policy-Based Data Structures</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro">Intro</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues">Performance Issues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.issues.priority_queue">Priority Que</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation">Goals</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.associative">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.iterators">Iterators</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.associative.functions">Functional</a></span></dt></dl></dd><dt><span class="section"><a href="policy_data_structures.html#pbds.intro.motivation.priority_queue">Priority Queues</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.policy">Policy Choices</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.underlying">Underlying Data Structures</a></span></dt><dt><span class="section"><a href="policy_data_structures.html#motivation.priority_queue.binary_heap">Binary Heaps</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.organization">Organization</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial">Tutorial</a></span></dt><dd><dl><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.basic">Basic Use</a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.configuring">
 
2016
            Configuring via Template Parameters
 
2017
          </a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.traits">
 
2018
Index: libstdc++-v3/doc/html/manual/debug_mode_using.html
 
2019
===================================================================
 
2020
--- a/src/libstdc++-v3/doc/html/manual/debug_mode_using.html    (.../tags/gcc_4_8_2_release)
 
2021
+++ b/src/libstdc++-v3/doc/html/manual/debug_mode_using.html    (.../branches/gcc-4_8-branch)
 
2022
@@ -1,5 +1,5 @@
 
2023
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2024
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="debug_mode_semantics.html" title="Semantics" /><link rel="next" href="debug_mode_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode_semantics.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.using"></a>Using</h2></div></div></div><p>
 
2025
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Using</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="debug_mode_semantics.html" title="Semantics" /><link rel="next" href="debug_mode_design.html" title="Design" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Using</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode_semantics.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode_design.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.using"></a>Using</h2></div></div></div><p>
 
2026
   </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.using.mode"></a>Using the Debug Mode</h3></div></div></div><p>To use the libstdc++ debug mode, compile your application with the
 
2027
   compiler flag <code class="code">-D_GLIBCXX_DEBUG</code>. Note that this flag
 
2028
   changes the sizes and behavior of standard class templates such
 
2029
@@ -18,6 +18,6 @@
 
2030
   mode or with debug mode. The
 
2031
   following table provides the names and headers of the debugging
 
2032
   containers:
 
2033
-</p><div class="table"><a id="idp16490400"></a><p class="title"><strong>Table 17.1. Debugging Containers</strong></p><div class="table-contents"><table summary="Debugging Containers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::bitset</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="classname">__gnu_debug::bitset</code></td><td align="left"><code class="filename">&lt;debug/bitset&gt;</code></td></tr><tr><td align="left"><code class="classname">std::deque</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="classname">__gnu_debug::deque</code></td><td align="left"><code class="filename">&lt;debug/deque&gt;</code></td></tr><tr><td align="left"><code class="classname">std::list</code></td><td align="left"><code class="filename">list</code></td><td align="left"><code class="classname">__gnu_debug::list</code></td><td align="left"><code class="filename">&lt;debug/list&gt;</code></td></tr><tr><td align="left"><code class="classname">std::map</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::map</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multimap</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::multimap</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multiset</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::multiset</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::set</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::set</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::wstring</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::wstring</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::basic_string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::basic_string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::vector</code></td><td align="left"><code class="filename">vector</code></td><td align="left"><code class="classname">__gnu_debug::vector</code></td><td align="left"><code class="filename">&lt;debug/vector&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /><p>In addition, when compiling in C++11 mode, these additional
 
2034
+</p><div class="table"><a id="idm269999040896"></a><p class="title"><strong>Table 17.1. Debugging Containers</strong></p><div class="table-contents"><table summary="Debugging Containers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::bitset</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="classname">__gnu_debug::bitset</code></td><td align="left"><code class="filename">&lt;debug/bitset&gt;</code></td></tr><tr><td align="left"><code class="classname">std::deque</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="classname">__gnu_debug::deque</code></td><td align="left"><code class="filename">&lt;debug/deque&gt;</code></td></tr><tr><td align="left"><code class="classname">std::list</code></td><td align="left"><code class="filename">list</code></td><td align="left"><code class="classname">__gnu_debug::list</code></td><td align="left"><code class="filename">&lt;debug/list&gt;</code></td></tr><tr><td align="left"><code class="classname">std::map</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::map</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multimap</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::multimap</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multiset</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::multiset</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::set</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::set</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::wstring</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::wstring</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::basic_string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::basic_string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::vector</code></td><td align="left"><code class="filename">vector</code></td><td align="left"><code class="classname">__gnu_debug::vector</code></td><td align="left"><code class="filename">&lt;debug/vector&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /><p>In addition, when compiling in C++11 mode, these additional
 
2035
 containers have additional debug capability.
 
2036
-</p><div class="table"><a id="idp16535296"></a><p class="title"><strong>Table 17.2. Debugging Containers C++11</strong></p><div class="table-contents"><table summary="Debugging Containers C++11" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::unordered_map</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_map</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multimap</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multimap</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_set</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_set</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multiset</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multiset</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="debug_mode_semantics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug_mode_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Semantics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html>
 
2037
\ No newline at end of file
 
2038
+</p><div class="table"><a id="idm269998996000"></a><p class="title"><strong>Table 17.2. Debugging Containers C++11</strong></p><div class="table-contents"><table summary="Debugging Containers C++11" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::unordered_map</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_map</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multimap</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multimap</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_set</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_set</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multiset</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multiset</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="debug_mode_semantics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug_mode_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Semantics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design</td></tr></table></div></body></html>
 
2039
\ No newline at end of file
 
2040
Index: libstdc++-v3/doc/html/manual/parallel_mode.html
 
2041
===================================================================
 
2042
--- a/src/libstdc++-v3/doc/html/manual/parallel_mode.html       (.../tags/gcc_4_8_2_release)
 
2043
+++ b/src/libstdc++-v3/doc/html/manual/parallel_mode.html       (.../branches/gcc-4_8-branch)
 
2044
@@ -1,8 +1,8 @@
 
2045
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2046
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 18. Parallel Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="debug_mode_design.html" title="Design" /><link rel="next" href="parallel_mode_semantics.html" title="Semantics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 18. Parallel Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode_design.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
2047
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 18. Parallel Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, parallel" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="debug_mode_design.html" title="Design" /><link rel="next" href="parallel_mode_semantics.html" title="Semantics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 18. Parallel Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode_design.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
2048
   Extensions
 
2049
   
 
2050
-</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode_semantics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.parallel_mode"></a>Chapter 18. Parallel Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="parallel_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_test.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></div><p> The libstdc++ parallel mode is an experimental parallel
 
2051
+</th><td width="20%" align="right"> <a accesskey="n" href="parallel_mode_semantics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.parallel_mode"></a>Chapter 18. Parallel Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="parallel_mode.html#manual.ext.parallel_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="parallel_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="parallel_mode_using.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_design.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="parallel_mode_test.html">Testing</a></span></dt><dt><span class="bibliography"><a href="parallel_mode.html#parallel_mode.biblio">Bibliography</a></span></dt></dl></div><p> The libstdc++ parallel mode is an experimental parallel
 
2052
 implementation of many algorithms the C++ Standard Library.
 
2053
 </p><p>
 
2054
 Several of the standard algorithms, for instance
 
2055
@@ -12,11 +12,11 @@
 
2056
 specific compiler flag.
 
2057
 </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.parallel_mode.intro"></a>Intro</h2></div></div></div><p>The following library components in the include
 
2058
 <code class="filename">numeric</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="function">std::accumulate</code></p></li><li class="listitem"><p><code class="function">std::adjacent_difference</code></p></li><li class="listitem"><p><code class="function">std::inner_product</code></p></li><li class="listitem"><p><code class="function">std::partial_sum</code></p></li></ul></div><p>The following library components in the include
 
2059
-<code class="filename">algorithm</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="function">std::adjacent_find</code></p></li><li class="listitem"><p><code class="function">std::count</code></p></li><li class="listitem"><p><code class="function">std::count_if</code></p></li><li class="listitem"><p><code class="function">std::equal</code></p></li><li class="listitem"><p><code class="function">std::find</code></p></li><li class="listitem"><p><code class="function">std::find_if</code></p></li><li class="listitem"><p><code class="function">std::find_first_of</code></p></li><li class="listitem"><p><code class="function">std::for_each</code></p></li><li class="listitem"><p><code class="function">std::generate</code></p></li><li class="listitem"><p><code class="function">std::generate_n</code></p></li><li class="listitem"><p><code class="function">std::lexicographical_compare</code></p></li><li class="listitem"><p><code class="function">std::mismatch</code></p></li><li class="listitem"><p><code class="function">std::search</code></p></li><li class="listitem"><p><code class="function">std::search_n</code></p></li><li class="listitem"><p><code class="function">std::transform</code></p></li><li class="listitem"><p><code class="function">std::replace</code></p></li><li class="listitem"><p><code class="function">std::replace_if</code></p></li><li class="listitem"><p><code class="function">std::max_element</code></p></li><li class="listitem"><p><code class="function">std::merge</code></p></li><li class="listitem"><p><code class="function">std::min_element</code></p></li><li class="listitem"><p><code class="function">std::nth_element</code></p></li><li class="listitem"><p><code class="function">std::partial_sort</code></p></li><li class="listitem"><p><code class="function">std::partition</code></p></li><li class="listitem"><p><code class="function">std::random_shuffle</code></p></li><li class="listitem"><p><code class="function">std::set_union</code></p></li><li class="listitem"><p><code class="function">std::set_intersection</code></p></li><li class="listitem"><p><code class="function">std::set_symmetric_difference</code></p></li><li class="listitem"><p><code class="function">std::set_difference</code></p></li><li class="listitem"><p><code class="function">std::sort</code></p></li><li class="listitem"><p><code class="function">std::stable_sort</code></p></li><li class="listitem"><p><code class="function">std::unique_copy</code></p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="parallel_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="idp16926864"></a><p><span class="citetitle"><em class="citetitle">
 
2060
+<code class="filename">algorithm</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="function">std::adjacent_find</code></p></li><li class="listitem"><p><code class="function">std::count</code></p></li><li class="listitem"><p><code class="function">std::count_if</code></p></li><li class="listitem"><p><code class="function">std::equal</code></p></li><li class="listitem"><p><code class="function">std::find</code></p></li><li class="listitem"><p><code class="function">std::find_if</code></p></li><li class="listitem"><p><code class="function">std::find_first_of</code></p></li><li class="listitem"><p><code class="function">std::for_each</code></p></li><li class="listitem"><p><code class="function">std::generate</code></p></li><li class="listitem"><p><code class="function">std::generate_n</code></p></li><li class="listitem"><p><code class="function">std::lexicographical_compare</code></p></li><li class="listitem"><p><code class="function">std::mismatch</code></p></li><li class="listitem"><p><code class="function">std::search</code></p></li><li class="listitem"><p><code class="function">std::search_n</code></p></li><li class="listitem"><p><code class="function">std::transform</code></p></li><li class="listitem"><p><code class="function">std::replace</code></p></li><li class="listitem"><p><code class="function">std::replace_if</code></p></li><li class="listitem"><p><code class="function">std::max_element</code></p></li><li class="listitem"><p><code class="function">std::merge</code></p></li><li class="listitem"><p><code class="function">std::min_element</code></p></li><li class="listitem"><p><code class="function">std::nth_element</code></p></li><li class="listitem"><p><code class="function">std::partial_sort</code></p></li><li class="listitem"><p><code class="function">std::partition</code></p></li><li class="listitem"><p><code class="function">std::random_shuffle</code></p></li><li class="listitem"><p><code class="function">std::set_union</code></p></li><li class="listitem"><p><code class="function">std::set_intersection</code></p></li><li class="listitem"><p><code class="function">std::set_symmetric_difference</code></p></li><li class="listitem"><p><code class="function">std::set_difference</code></p></li><li class="listitem"><p><code class="function">std::sort</code></p></li><li class="listitem"><p><code class="function">std::stable_sort</code></p></li><li class="listitem"><p><code class="function">std::unique_copy</code></p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="parallel_mode.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="idm269998604464"></a><p><span class="citetitle"><em class="citetitle">
 
2061
       Parallelization of Bulk Operations for STL Dictionaries
 
2062
     </em>. </span><span class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span>. </span><span class="author"><span class="firstname">Leonor</span> <span class="surname">Frias</span>. </span><span class="copyright">Copyright © 2007 . </span><span class="publisher"><span class="publishername">
 
2063
        Workshop on Highly Parallel Processing on a Chip (HPPC) 2007. (LNCS)
 
2064
-      . </span></span></p></div><div class="biblioentry"><a id="idp16931936"></a><p><span class="citetitle"><em class="citetitle">
 
2065
+      . </span></span></p></div><div class="biblioentry"><a id="idm269998599392"></a><p><span class="citetitle"><em class="citetitle">
 
2066
       The Multi-Core Standard Template Library
 
2067
     </em>. </span><span class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span>. </span><span class="author"><span class="firstname">Peter</span> <span class="surname">Sanders</span>. </span><span class="author"><span class="firstname">Felix</span> <span class="surname">Putze</span>. </span><span class="copyright">Copyright © 2007 . </span><span class="publisher"><span class="publishername">
 
2068
         Euro-Par 2007: Parallel Processing. (LNCS 4641)
 
2069
Index: libstdc++-v3/doc/html/manual/debug_mode_semantics.html
 
2070
===================================================================
 
2071
--- a/src/libstdc++-v3/doc/html/manual/debug_mode_semantics.html        (.../tags/gcc_4_8_2_release)
 
2072
+++ b/src/libstdc++-v3/doc/html/manual/debug_mode_semantics.html        (.../branches/gcc-4_8-branch)
 
2073
@@ -1,5 +1,5 @@
 
2074
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2075
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Semantics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="next" href="debug_mode_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode_using.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.semantics"></a>Semantics</h2></div></div></div><p>
 
2076
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Semantics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="prev" href="debug_mode.html" title="Chapter 17. Debug Mode" /><link rel="next" href="debug_mode_using.html" title="Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Semantics</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="debug_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode_using.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.semantics"></a>Semantics</h2></div></div></div><p>
 
2077
   </p><p>A program that uses the C++ standard library correctly
 
2078
   will maintain the same semantics under debug mode as it had with
 
2079
   the normal (release) library. All functional and exception-handling
 
2080
Index: libstdc++-v3/doc/html/manual/setup.html
 
2081
===================================================================
 
2082
--- a/src/libstdc++-v3/doc/html/manual/setup.html       (.../tags/gcc_4_8_2_release)
 
2083
+++ b/src/libstdc++-v3/doc/html/manual/setup.html       (.../branches/gcc-4_8-branch)
 
2084
@@ -1,8 +1,8 @@
 
2085
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2086
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 2. Setup</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="Part I.  Introduction" /><link rel="prev" href="bugs.html" title="Bugs" /><link rel="next" href="configure.html" title="Configure" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 2. Setup</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bugs.html">Prev</a> </td><th width="60%" align="center">Part I. 
 
2087
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 2. Setup</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="intro.html" title="Part I.  Introduction" /><link rel="prev" href="bugs.html" title="Bugs" /><link rel="next" href="configure.html" title="Configure" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 2. Setup</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bugs.html">Prev</a> </td><th width="60%" align="center">Part I. 
 
2088
   Introduction
 
2089
   
 
2090
-</th><td width="20%" align="right"> <a accesskey="n" href="configure.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.setup"></a>Chapter 2. Setup</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></div><p>To transform libstdc++ sources into installed include files
 
2091
+</th><td width="20%" align="right"> <a accesskey="n" href="configure.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.intro.setup"></a>Chapter 2. Setup</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></div><p>To transform libstdc++ sources into installed include files
 
2092
    and properly built binaries useful for linking to other software is
 
2093
    a multi-step process. Steps include getting the sources,
 
2094
    configuring and building the sources, testing, and installation.
 
2095
Index: libstdc++-v3/doc/html/manual/backwards.html
 
2096
===================================================================
 
2097
--- a/src/libstdc++-v3/doc/html/manual/backwards.html   (.../tags/gcc_4_8_2_release)
 
2098
+++ b/src/libstdc++-v3/doc/html/manual/backwards.html   (.../branches/gcc-4_8-branch)
 
2099
@@ -1,5 +1,5 @@
 
2100
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2101
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Backwards Compatibility</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, backwards" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="api.html" title="API Evolution and Deprecation History" /><link rel="next" href="appendix_free.html" title="Appendix C.  Free Software Needs Free Documentation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Backwards Compatibility</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
 
2102
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Backwards Compatibility</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, backwards" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="api.html" title="API Evolution and Deprecation History" /><link rel="next" href="appendix_free.html" title="Appendix C.  Free Software Needs Free Documentation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Backwards Compatibility</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="api.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
 
2103
   Porting and Maintenance
 
2104
   
 
2105
 </th><td width="20%" align="right"> <a accesskey="n" href="appendix_free.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.appendix.porting.backwards"></a>Backwards Compatibility</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.first"></a>First</h3></div></div></div><p>The first generation GNU C++ library was called libg++.  It was a
 
2106
@@ -940,15 +940,15 @@
 
2107
   This is a change in behavior from older versions. Now, most
 
2108
   <span class="type">iterator_type</span> typedefs in container classes are POD
 
2109
   objects, not <span class="type">value_type</span> pointers.
 
2110
-</p></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="idp23415104"></a><p><span class="title"><em>
 
2111
+</p></div></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="idm269992117648"></a><p><span class="title"><em>
 
2112
        <a class="link" href="http://www.kegel.com/gcc/gcc4.html" target="_top">
 
2113
       Migrating to GCC 4.1
 
2114
        </a>
 
2115
-      </em>. </span><span class="author"><span class="firstname">Dan</span> <span class="surname">Kegel</span>. </span></p></div><div class="biblioentry"><a id="idp23417888"></a><p><span class="title"><em>
 
2116
+      </em>. </span><span class="author"><span class="firstname">Dan</span> <span class="surname">Kegel</span>. </span></p></div><div class="biblioentry"><a id="idm269992114864"></a><p><span class="title"><em>
 
2117
        <a class="link" href="http://lists.debian.org/debian-gcc/2006/03/msg00405.html" target="_top">
 
2118
       Building the Whole Debian Archive with GCC 4.1: A Summary
 
2119
        </a>
 
2120
-      </em>. </span><span class="author"><span class="firstname">Martin</span> <span class="surname">Michlmayr</span>. </span></p></div><div class="biblioentry"><a id="idp23420736"></a><p><span class="title"><em>
 
2121
+      </em>. </span><span class="author"><span class="firstname">Martin</span> <span class="surname">Michlmayr</span>. </span></p></div><div class="biblioentry"><a id="idm269992112016"></a><p><span class="title"><em>
 
2122
        <a class="link" href="http://annwm.lbl.gov/~leggett/Atlas/gcc-3.2.html" target="_top">
 
2123
       Migration guide for GCC-3.2
 
2124
        </a>
 
2125
Index: libstdc++-v3/doc/html/manual/source_design_notes.html
 
2126
===================================================================
 
2127
--- a/src/libstdc++-v3/doc/html/manual/source_design_notes.html (.../tags/gcc_4_8_2_release)
 
2128
+++ b/src/libstdc++-v3/doc/html/manual/source_design_notes.html (.../branches/gcc-4_8-branch)
 
2129
@@ -1,5 +1,5 @@
 
2130
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2131
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design Notes</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="Appendix A.  Contributing" /><link rel="prev" href="source_code_style.html" title="Coding Style" /><link rel="next" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design Notes</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_code_style.html">Prev</a> </td><th width="60%" align="center">Appendix A. 
 
2132
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design Notes</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="Appendix A.  Contributing" /><link rel="prev" href="source_code_style.html" title="Coding Style" /><link rel="next" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design Notes</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_code_style.html">Prev</a> </td><th width="60%" align="center">Appendix A. 
 
2133
   Contributing
 
2134
   
 
2135
 </th><td width="20%" align="right"> <a accesskey="n" href="appendix_porting.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.design_notes"></a>Design Notes</h2></div></div></div><p>
 
2136
Index: libstdc++-v3/doc/html/manual/ext_sgi.html
 
2137
===================================================================
 
2138
--- a/src/libstdc++-v3/doc/html/manual/ext_sgi.html     (.../tags/gcc_4_8_2_release)
 
2139
+++ b/src/libstdc++-v3/doc/html/manual/ext_sgi.html     (.../branches/gcc-4_8-branch)
 
2140
@@ -1,5 +1,5 @@
 
2141
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2142
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Deprecated</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_containers.html" title="Chapter 23. HP/SGI Extensions" /><link rel="prev" href="ext_containers.html" title="Chapter 23. HP/SGI Extensions" /><link rel="next" href="ext_utilities.html" title="Chapter 24. Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Deprecated</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><th width="60%" align="center">Chapter 23. HP/SGI Extensions</th><td width="20%" align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.deprecated_sgi"></a>Deprecated</h2></div></div></div><p>
 
2143
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Deprecated</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="ext_containers.html" title="Chapter 23. HP/SGI Extensions" /><link rel="prev" href="ext_containers.html" title="Chapter 23. HP/SGI Extensions" /><link rel="next" href="ext_utilities.html" title="Chapter 24. Utilities" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Deprecated</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><th width="60%" align="center">Chapter 23. HP/SGI Extensions</th><td width="20%" align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.containers.deprecated_sgi"></a>Deprecated</h2></div></div></div><p>
 
2144
      The SGI hashing classes <code class="classname">hash_set</code> and
 
2145
      <code class="classname">hash_set</code> have been deprecated by the
 
2146
      unordered_set, unordered_multiset, unordered_map,
 
2147
Index: libstdc++-v3/doc/html/manual/facets.html
 
2148
===================================================================
 
2149
--- a/src/libstdc++-v3/doc/html/manual/facets.html      (.../tags/gcc_4_8_2_release)
 
2150
+++ b/src/libstdc++-v3/doc/html/manual/facets.html      (.../branches/gcc-4_8-branch)
 
2151
@@ -1,8 +1,8 @@
 
2152
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2153
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Facets</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="localization.html" title="Chapter 8.  Localization" /><link rel="prev" href="localization.html" title="Chapter 8.  Localization" /><link rel="next" href="containers.html" title="Chapter 9.  Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Facets</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="localization.html">Prev</a> </td><th width="60%" align="center">Chapter 8. 
 
2154
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Facets</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="localization.html" title="Chapter 8.  Localization" /><link rel="prev" href="localization.html" title="Chapter 8.  Localization" /><link rel="next" href="containers.html" title="Chapter 9.  Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Facets</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="localization.html">Prev</a> </td><th width="60%" align="center">Chapter 8. 
 
2155
   Localization
 
2156
   
 
2157
-</th><td width="20%" align="right"> <a accesskey="n" href="containers.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.facet"></a>Facets</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.ctype"></a>ctype</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idp15778336"></a>Specializations</h5></div></div></div><p>
 
2158
+</th><td width="20%" align="right"> <a accesskey="n" href="containers.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.facet"></a>Facets</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.ctype"></a>ctype</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269999753024"></a>Specializations</h5></div></div></div><p>
 
2159
 For the required specialization codecvt&lt;wchar_t, char, mbstate_t&gt; ,
 
2160
 conversions are made between the internal character set (always UCS4
 
2161
 on GNU/Linux) and whatever the currently selected locale for the
 
2162
@@ -49,24 +49,24 @@
 
2163
    </p></li><li class="listitem"><p>
 
2164
        Rename abstract base class. See if just smash-overriding is a
 
2165
        better approach. Clarify, add sanity to naming.
 
2166
-     </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp15793392"></a><p><span class="citetitle"><em class="citetitle">
 
2167
+     </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269999738032"></a><p><span class="citetitle"><em class="citetitle">
 
2168
       The GNU C Library
 
2169
-    </em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6  Character Set Handling and 7 Locales and Internationalization. </span></p></div><div class="biblioentry"><a id="idp15798144"></a><p><span class="citetitle"><em class="citetitle">
 
2170
+    </em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6  Character Set Handling and 7 Locales and Internationalization. </span></p></div><div class="biblioentry"><a id="idm269999733280"></a><p><span class="citetitle"><em class="citetitle">
 
2171
       Correspondence
 
2172
-    </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idp15801232"></a><p><span class="citetitle"><em class="citetitle">
 
2173
+    </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idm269999730192"></a><p><span class="citetitle"><em class="citetitle">
 
2174
       ISO/IEC 14882:1998 Programming languages - C++
 
2175
-    </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp15803520"></a><p><span class="citetitle"><em class="citetitle">
 
2176
+    </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269999727904"></a><p><span class="citetitle"><em class="citetitle">
 
2177
       ISO/IEC 9899:1999 Programming languages - C
 
2178
-    </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idp15805792"></a><p><span class="title"><em>
 
2179
+    </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269999725632"></a><p><span class="title"><em>
 
2180
        <a class="link" href="http://www.unix.org/version3/ieee_std.html" target="_top">
 
2181
        The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)
 
2182
        </a>
 
2183
       </em>. </span><span class="copyright">Copyright © 1999 
 
2184
-      The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span></p></div><div class="biblioentry"><a id="idp15809040"></a><p><span class="citetitle"><em class="citetitle">
 
2185
+      The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span></p></div><div class="biblioentry"><a id="idm269999722384"></a><p><span class="citetitle"><em class="citetitle">
 
2186
       The C++ Programming Language, Special Edition
 
2187
     </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
 
2188
        Addison Wesley
 
2189
-      . </span></span></p></div><div class="biblioentry"><a id="idp15813664"></a><p><span class="citetitle"><em class="citetitle">
 
2190
+      . </span></span></p></div><div class="biblioentry"><a id="idm269999717760"></a><p><span class="citetitle"><em class="citetitle">
 
2191
       Standard C++ IOStreams and Locales
 
2192
     </em>. </span><span class="subtitle">
 
2193
       Advanced Programmer's Guide and Reference
 
2194
@@ -409,17 +409,17 @@
 
2195
       </p></li><li class="listitem"><p>
 
2196
       wchar_t/char internal buffers and conversions between
 
2197
       internal/external buffers?
 
2198
-      </p></li></ul></div></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp15891136"></a><p><span class="citetitle"><em class="citetitle">
 
2199
+      </p></li></ul></div></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269999640080"></a><p><span class="citetitle"><em class="citetitle">
 
2200
       The GNU C Library
 
2201
     </em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">
 
2202
       Chapters 6 Character Set Handling and 7 Locales and Internationalization
 
2203
-    . </span></p></div><div class="biblioentry"><a id="idp15895888"></a><p><span class="citetitle"><em class="citetitle">
 
2204
+    . </span></p></div><div class="biblioentry"><a id="idm269999635328"></a><p><span class="citetitle"><em class="citetitle">
 
2205
       Correspondence
 
2206
-    </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idp15898976"></a><p><span class="citetitle"><em class="citetitle">
 
2207
+    </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idm269999632240"></a><p><span class="citetitle"><em class="citetitle">
 
2208
       ISO/IEC 14882:1998 Programming languages - C++
 
2209
-    </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp15901264"></a><p><span class="citetitle"><em class="citetitle">
 
2210
+    </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269999629952"></a><p><span class="citetitle"><em class="citetitle">
 
2211
       ISO/IEC 9899:1999 Programming languages - C
 
2212
-    </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idp15903536"></a><p><span class="title"><em>
 
2213
+    </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269999627680"></a><p><span class="title"><em>
 
2214
        <a class="link" href="http://www.opengroup.org/austin/" target="_top">
 
2215
       System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
 
2216
        </a>
 
2217
@@ -426,25 +426,25 @@
 
2218
       </em>. </span><span class="copyright">Copyright © 2008 
 
2219
        The Open Group/The Institute of Electrical and Electronics
 
2220
        Engineers, Inc.
 
2221
-      . </span></p></div><div class="biblioentry"><a id="idp15906768"></a><p><span class="citetitle"><em class="citetitle">
 
2222
+      . </span></p></div><div class="biblioentry"><a id="idm269999624448"></a><p><span class="citetitle"><em class="citetitle">
 
2223
       The C++ Programming Language, Special Edition
 
2224
     </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
 
2225
        Addison Wesley
 
2226
-      . </span></span></p></div><div class="biblioentry"><a id="idp15911392"></a><p><span class="citetitle"><em class="citetitle">
 
2227
+      . </span></span></p></div><div class="biblioentry"><a id="idm269999619824"></a><p><span class="citetitle"><em class="citetitle">
 
2228
       Standard C++ IOStreams and Locales
 
2229
     </em>. </span><span class="subtitle">
 
2230
       Advanced Programmer's Guide and Reference
 
2231
     . </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
 
2232
        Addison Wesley Longman
 
2233
-      . </span></span></p></div><div class="biblioentry"><a id="idp15917056"></a><p><span class="title"><em>
 
2234
+      . </span></span></p></div><div class="biblioentry"><a id="idm269999614160"></a><p><span class="title"><em>
 
2235
        <a class="link" href="http://www.lysator.liu.se/c/na1.html" target="_top">
 
2236
       A brief description of Normative Addendum 1
 
2237
        </a>
 
2238
-      </em>. </span><span class="author"><span class="firstname">Clive</span> <span class="surname">Feather</span>. </span><span class="pagenums">Extended Character Sets. </span></p></div><div class="biblioentry"><a id="idp15920304"></a><p><span class="title"><em>
 
2239
+      </em>. </span><span class="author"><span class="firstname">Clive</span> <span class="surname">Feather</span>. </span><span class="pagenums">Extended Character Sets. </span></p></div><div class="biblioentry"><a id="idm269999610912"></a><p><span class="title"><em>
 
2240
        <a class="link" href="http://tldp.org/HOWTO/Unicode-HOWTO.html" target="_top">
 
2241
          The Unicode HOWTO
 
2242
        </a>
 
2243
-      </em>. </span><span class="author"><span class="firstname">Bruno</span> <span class="surname">Haible</span>. </span></p></div><div class="biblioentry"><a id="idp15923088"></a><p><span class="title"><em>
 
2244
+      </em>. </span><span class="author"><span class="firstname">Bruno</span> <span class="surname">Haible</span>. </span></p></div><div class="biblioentry"><a id="idm269999608128"></a><p><span class="title"><em>
 
2245
        <a class="link" href="http://www.cl.cam.ac.uk/~mgk25/unicode.html" target="_top">
 
2246
       UTF-8 and Unicode FAQ for Unix/Linux
 
2247
        </a>
 
2248
@@ -690,16 +690,16 @@
 
2249
    model. As of this writing, it is unknown how to query to see
 
2250
    if a specified message catalog exists using the gettext
 
2251
    package.
 
2252
-   </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp16003632"></a><p><span class="citetitle"><em class="citetitle">
 
2253
+   </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269999527584"></a><p><span class="citetitle"><em class="citetitle">
 
2254
       The GNU C Library
 
2255
     </em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">Chapters 6 Character Set Handling, and 7 Locales and Internationalization
 
2256
-    . </span></p></div><div class="biblioentry"><a id="idp16008384"></a><p><span class="citetitle"><em class="citetitle">
 
2257
+    . </span></p></div><div class="biblioentry"><a id="idm269999522832"></a><p><span class="citetitle"><em class="citetitle">
 
2258
       Correspondence
 
2259
-    </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idp16011472"></a><p><span class="citetitle"><em class="citetitle">
 
2260
+    </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idm269999519744"></a><p><span class="citetitle"><em class="citetitle">
 
2261
       ISO/IEC 14882:1998 Programming languages - C++
 
2262
-    </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp16013760"></a><p><span class="citetitle"><em class="citetitle">
 
2263
+    </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269999517456"></a><p><span class="citetitle"><em class="citetitle">
 
2264
       ISO/IEC 9899:1999 Programming languages - C
 
2265
-    </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idp16016032"></a><p><span class="title"><em>
 
2266
+    </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269999515184"></a><p><span class="title"><em>
 
2267
        <a class="link" href="http://www.opengroup.org/austin/" target="_top">
 
2268
       System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
 
2269
        </a>
 
2270
@@ -706,23 +706,23 @@
 
2271
       </em>. </span><span class="copyright">Copyright © 2008 
 
2272
        The Open Group/The Institute of Electrical and Electronics
 
2273
        Engineers, Inc.
 
2274
-      . </span></p></div><div class="biblioentry"><a id="idp16019264"></a><p><span class="citetitle"><em class="citetitle">
 
2275
+      . </span></p></div><div class="biblioentry"><a id="idm269999511952"></a><p><span class="citetitle"><em class="citetitle">
 
2276
       The C++ Programming Language, Special Edition
 
2277
     </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
 
2278
        Addison Wesley
 
2279
-      . </span></span></p></div><div class="biblioentry"><a id="idp16023888"></a><p><span class="citetitle"><em class="citetitle">
 
2280
+      . </span></span></p></div><div class="biblioentry"><a id="idm269999507328"></a><p><span class="citetitle"><em class="citetitle">
 
2281
       Standard C++ IOStreams and Locales
 
2282
     </em>. </span><span class="subtitle">
 
2283
       Advanced Programmer's Guide and Reference
 
2284
     . </span><span class="author"><span class="firstname">Angelika</span> <span class="surname">Langer</span>. </span><span class="author"><span class="firstname">Klaus</span> <span class="surname">Kreft</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley Longman, Inc.. </span><span class="publisher"><span class="publishername">
 
2285
        Addison Wesley Longman
 
2286
-      . </span></span></p></div><div class="biblioentry"><a id="idp16029552"></a><p><span class="title"><em>
 
2287
-       <a class="link" href="http://java.sun.com/reference/api/index.html" target="_top">
 
2288
+      . </span></span></p></div><div class="biblioentry"><a id="idm269999501664"></a><p><span class="title"><em>
 
2289
+       <a class="link" href="http://www.oracle.com/technetwork/java/api/index.html" target="_top">
 
2290
        API Specifications, Java Platform
 
2291
        </a>
 
2292
       </em>. </span><span class="pagenums">java.util.Properties, java.text.MessageFormat,
 
2293
 java.util.Locale, java.util.ResourceBundle
 
2294
-    . </span></p></div><div class="biblioentry"><a id="idp16031888"></a><p><span class="title"><em>
 
2295
+    . </span></p></div><div class="biblioentry"><a id="idm269999499328"></a><p><span class="title"><em>
 
2296
        <a class="link" href="https://www.gnu.org/software/gettext/" target="_top">
 
2297
       GNU gettext tools, version 0.10.38, Native Language Support
 
2298
       Library and Tools.
 
2299
Index: libstdc++-v3/doc/html/manual/diagnostics.html
 
2300
===================================================================
 
2301
--- a/src/libstdc++-v3/doc/html/manual/diagnostics.html (.../tags/gcc_4_8_2_release)
 
2302
+++ b/src/libstdc++-v3/doc/html/manual/diagnostics.html (.../branches/gcc-4_8-branch)
 
2303
@@ -1,5 +1,5 @@
 
2304
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2305
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 5.  Diagnostics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="termination.html" title="Termination" /><link rel="next" href="concept_checking.html" title="Concept Checking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 5. 
 
2306
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 5.  Diagnostics</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="termination.html" title="Termination" /><link rel="next" href="concept_checking.html" title="Concept Checking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 5. 
 
2307
   Diagnostics
 
2308
   
 
2309
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="termination.html">Prev</a> </td><th width="60%" align="center">Part II. 
 
2310
@@ -6,8 +6,8 @@
 
2311
     Standard Contents
 
2312
   </th><td width="20%" align="right"> <a accesskey="n" href="concept_checking.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.diagnostics"></a>Chapter 5. 
 
2313
   Diagnostics
 
2314
-  <a id="idp13835248" class="indexterm"></a>
 
2315
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="concept_checking.html">Concept Checking</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.diagnostics.exceptions"></a>Exceptions</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.diagnostics.exceptions.api"></a>API Reference</h3></div></div></div><p>
 
2316
+  <a id="idm270001697504" class="indexterm"></a>
 
2317
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="concept_checking.html">Concept Checking</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.diagnostics.exceptions"></a>Exceptions</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.diagnostics.exceptions.api"></a>API Reference</h3></div></div></div><p>
 
2318
       All exception objects are defined in one of the standard header
 
2319
       files: <code class="filename">exception</code>,
 
2320
       <code class="filename">stdexcept</code>, <code class="filename">new</code>, and
 
2321
Index: libstdc++-v3/doc/html/manual/mt_allocator_design.html
 
2322
===================================================================
 
2323
--- a/src/libstdc++-v3/doc/html/manual/mt_allocator_design.html (.../tags/gcc_4_8_2_release)
 
2324
+++ b/src/libstdc++-v3/doc/html/manual/mt_allocator_design.html (.../branches/gcc-4_8-branch)
 
2325
@@ -1,5 +1,5 @@
 
2326
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2327
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design Issues</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="next" href="mt_allocator_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design Issues</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_impl.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.design_issues"></a>Design Issues</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.overview"></a>Overview</h3></div></div></div><p> There are three general components to the allocator: a datum
 
2328
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design Issues</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="next" href="mt_allocator_impl.html" title="Implementation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design Issues</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_impl.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.design_issues"></a>Design Issues</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.overview"></a>Overview</h3></div></div></div><p> There are three general components to the allocator: a datum
 
2329
 describing the characteristics of the memory pool, a policy class
 
2330
 containing this pool that links instantiation types to common or
 
2331
 individual pools, and a class inheriting from the policy class that is
 
2332
Index: libstdc++-v3/doc/html/manual/appendix_free.html
 
2333
===================================================================
 
2334
--- a/src/libstdc++-v3/doc/html/manual/appendix_free.html       (.../tags/gcc_4_8_2_release)
 
2335
+++ b/src/libstdc++-v3/doc/html/manual/appendix_free.html       (.../branches/gcc-4_8-branch)
 
2336
@@ -1,5 +1,5 @@
 
2337
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2338
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix C.  Free Software Needs Free Documentation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV.  Appendices" /><link rel="prev" href="backwards.html" title="Backwards Compatibility" /><link rel="next" href="appendix_gpl.html" title="Appendix D.  GNU General Public License version 3" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix C. 
 
2339
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix C.  Free Software Needs Free Documentation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV.  Appendices" /><link rel="prev" href="backwards.html" title="Backwards Compatibility" /><link rel="next" href="appendix_gpl.html" title="Appendix D.  GNU General Public License version 3" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix C. 
 
2340
   Free Software Needs Free Documentation
 
2341
   
 
2342
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="backwards.html">Prev</a> </td><th width="60%" align="center">Part IV. 
 
2343
@@ -6,7 +6,7 @@
 
2344
   Appendices
 
2345
 </th><td width="20%" align="right"> <a accesskey="n" href="appendix_gpl.html">Next</a></td></tr></table><hr /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.free"></a>
 
2346
   Free Software Needs Free Documentation
 
2347
-  <a id="idp23426192" class="indexterm"></a>
 
2348
+  <a id="idm269992106560" class="indexterm"></a>
 
2349
 </h1></div></div></div><p>
 
2350
 The biggest deficiency in free operating systems is not in the
 
2351
 software--it is the lack of good free manuals that we can include in
 
2352
Index: libstdc++-v3/doc/html/manual/algorithms.html
 
2353
===================================================================
 
2354
--- a/src/libstdc++-v3/doc/html/manual/algorithms.html  (.../tags/gcc_4_8_2_release)
 
2355
+++ b/src/libstdc++-v3/doc/html/manual/algorithms.html  (.../branches/gcc-4_8-branch)
 
2356
@@ -1,5 +1,5 @@
 
2357
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2358
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 11.  Algorithms</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library, algorithm" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="iterators.html" title="Chapter 10.  Iterators" /><link rel="next" href="numerics.html" title="Chapter 12.  Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 11. 
 
2359
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 11.  Algorithms</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library, algorithm" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="iterators.html" title="Chapter 10.  Iterators" /><link rel="next" href="numerics.html" title="Chapter 12.  Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 11. 
 
2360
   Algorithms
 
2361
   
 
2362
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="iterators.html">Prev</a> </td><th width="60%" align="center">Part II. 
 
2363
@@ -6,8 +6,8 @@
 
2364
     Standard Contents
 
2365
   </th><td width="20%" align="right"> <a accesskey="n" href="numerics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.algorithms"></a>Chapter 11. 
 
2366
   Algorithms
 
2367
-  <a id="idp16191968" class="indexterm"></a>
 
2368
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.swap.specializations">Specializations</a></span></dt></dl></dd></dl></dd></dl></div><p>
 
2369
+  <a id="idm269999339120" class="indexterm"></a>
 
2370
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="algorithms.html#std.algorithms.mutating">Mutating</a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.mutating.swap"><code class="function">swap</code></a></span></dt><dd><dl><dt><span class="section"><a href="algorithms.html#algorithms.swap.specializations">Specializations</a></span></dt></dl></dd></dl></dd></dl></div><p>
 
2371
   The neatest accomplishment of the algorithms section is that all the
 
2372
   work is done via iterators, not containers directly.  This means two
 
2373
   important things:
 
2374
Index: libstdc++-v3/doc/html/manual/appendix_porting.html
 
2375
===================================================================
 
2376
--- a/src/libstdc++-v3/doc/html/manual/appendix_porting.html    (.../tags/gcc_4_8_2_release)
 
2377
+++ b/src/libstdc++-v3/doc/html/manual/appendix_porting.html    (.../branches/gcc-4_8-branch)
 
2378
@@ -1,5 +1,5 @@
 
2379
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2380
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix B.  Porting and Maintenance</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV.  Appendices" /><link rel="prev" href="source_design_notes.html" title="Design Notes" /><link rel="next" href="documentation_hacking.html" title="Writing and Generating Documentation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix B. 
 
2381
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix B.  Porting and Maintenance</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV.  Appendices" /><link rel="prev" href="source_design_notes.html" title="Design Notes" /><link rel="next" href="documentation_hacking.html" title="Writing and Generating Documentation" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix B. 
 
2382
   Porting and Maintenance
 
2383
   
 
2384
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_design_notes.html">Prev</a> </td><th width="60%" align="center">Part IV. 
 
2385
@@ -6,8 +6,8 @@
 
2386
   Appendices
 
2387
 </th><td width="20%" align="right"> <a accesskey="n" href="documentation_hacking.html">Next</a></td></tr></table><hr /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.porting"></a>
 
2388
   Porting and Maintenance
 
2389
-  <a id="idp22008864" class="indexterm"></a>
 
2390
-</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview">Overview</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.basic">General Process</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.map">What Comes from Where</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure">Configure</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.make">Make</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doxygen.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.rules">Generating the Doxygen Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.markup">Markup</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html#doc.docbook">Docbook</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#docbook.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.rules">Generating the DocBook Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.validation">Editing and Validation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.examples">File Organization and Basics</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.markup">Markup By Example</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="section"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="section"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="section"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="section"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="section"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="section"><a href="test.html">Test</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization">Organization</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization.layout">Directory Layout</a></span></dt><dt><span class="section"><a href="test.html#test.organization.naming">Naming Conventions</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.run.basic">Basic</a></span></dt><dt><span class="section"><a href="test.html#test.run.variations">Variations</a></span></dt><dt><span class="section"><a href="test.html#test.run.permutations">Permutations</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="section"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.harness.dejagnu">Dejagnu Harness Details</a></span></dt><dt><span class="section"><a href="test.html#test.harness.utils">Utilities</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.special">Special Topics</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety">
 
2391
+  <a id="idm269993523968" class="indexterm"></a>
 
2392
+</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="appendix_porting.html#appendix.porting.build_hacking">Configure and Build Hacking</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview">Overview</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.basic">General Process</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.overview.map">What Comes from Where</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure">Configure</a></span></dt><dd><dl><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.scripts">Storing Information in non-AC files (like configure.host)</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.conventions">Coding and Commenting Conventions</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.acinclude">The acinclude.m4 layout</a></span></dt><dt><span class="section"><a href="appendix_porting.html#build_hacking.configure.enable"><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</a></span></dt></dl></dd><dt><span class="section"><a href="appendix_porting.html#build_hacking.make">Make</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html">Writing and Generating Documentation</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doc.intro">Introduction</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.generation">Generating Documentation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doc.doxygen">Doxygen</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#doxygen.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.rules">Generating the Doxygen Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#doxygen.markup">Markup</a></span></dt></dl></dd><dt><span class="section"><a href="documentation_hacking.html#doc.docbook">Docbook</a></span></dt><dd><dl><dt><span class="section"><a href="documentation_hacking.html#docbook.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.rules">Generating the DocBook Files</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.debug">Debugging Generation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.validation">Editing and Validation</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.examples">File Organization and Basics</a></span></dt><dt><span class="section"><a href="documentation_hacking.html#docbook.markup">Markup By Example</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="internals.html">Porting to New Hardware or Operating Systems</a></span></dt><dd><dl><dt><span class="section"><a href="internals.html#internals.os">Operating System</a></span></dt><dt><span class="section"><a href="internals.html#internals.cpu">CPU</a></span></dt><dt><span class="section"><a href="internals.html#internals.char_types">Character Types</a></span></dt><dt><span class="section"><a href="internals.html#internals.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="internals.html#internals.numeric_limits">Numeric Limits</a></span></dt><dt><span class="section"><a href="internals.html#internals.libtool">Libtool</a></span></dt></dl></dd><dt><span class="section"><a href="test.html">Test</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization">Organization</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.organization.layout">Directory Layout</a></span></dt><dt><span class="section"><a href="test.html#test.organization.naming">Naming Conventions</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.run">Running the Testsuite</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.run.basic">Basic</a></span></dt><dt><span class="section"><a href="test.html#test.run.variations">Variations</a></span></dt><dt><span class="section"><a href="test.html#test.run.permutations">Permutations</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.new_tests">Writing a new test case</a></span></dt><dt><span class="section"><a href="test.html#test.harness">Test Harness and Utilities</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.harness.dejagnu">Dejagnu Harness Details</a></span></dt><dt><span class="section"><a href="test.html#test.harness.utils">Utilities</a></span></dt></dl></dd><dt><span class="section"><a href="test.html#test.special">Special Topics</a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety">
 
2393
   Qualifying Exception Safety Guarantees
 
2394
   
 
2395
 </a></span></dt><dd><dl><dt><span class="section"><a href="test.html#test.exception.safety.overview">Overview</a></span></dt><dt><span class="section"><a href="test.html#test.exception.safety.status">
 
2396
@@ -61,7 +61,7 @@
 
2397
 in the build directory starts the build process. The <code class="literal">all</code> target comes from the <code class="filename">Makefile</code> file, which is  generated via <span class="command"><strong>configure</strong></span> from the <code class="filename">Makefile.in</code> file, which is in turn generated (via
 
2398
 <span class="command"><strong>automake</strong></span>) from the file
 
2399
 <code class="filename">Makefile.am</code>.
 
2400
-</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.overview.map"></a>What Comes from Where</h4></div></div></div><div class="figure"><a id="idp22035648"></a><p class="title"><strong>Figure B.1. Configure and Build File Dependencies</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/confdeps.png" align="middle" alt="Dependency Graph for Configure and Build Files" /></div></div></div><br class="figure-break" /><p>
 
2401
+</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.overview.map"></a>What Comes from Where</h4></div></div></div><div class="figure"><a id="idm269993497120"></a><p class="title"><strong>Figure B.1. Configure and Build File Dependencies</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="../images/confdeps.png" align="middle" alt="Dependency Graph for Configure and Build Files" /></div></div></div><br class="figure-break" /><p>
 
2402
     Regenerate all generated files by using the command 
 
2403
     <code class="code">autoreconf</code> at the top level of the libstdc++ source
 
2404
     directory.
 
2405
Index: libstdc++-v3/doc/html/manual/profile_mode_cost_model.html
 
2406
===================================================================
 
2407
--- a/src/libstdc++-v3/doc/html/manual/profile_mode_cost_model.html     (.../tags/gcc_4_8_2_release)
 
2408
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode_cost_model.html     (.../branches/gcc-4_8-branch)
 
2409
@@ -1,5 +1,5 @@
 
2410
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2411
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Empirical Cost Model</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_api.html" title="Extensions for Custom Containers" /><link rel="next" href="profile_mode_impl.html" title="Implementation Issues" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Empirical Cost Model</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_api.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_impl.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.cost_model"></a>Empirical Cost Model</h2></div></div></div><p>
 
2412
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Empirical Cost Model</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode_api.html" title="Extensions for Custom Containers" /><link rel="next" href="profile_mode_impl.html" title="Implementation Issues" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Empirical Cost Model</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode_api.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_impl.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.cost_model"></a>Empirical Cost Model</h2></div></div></div><p>
 
2413
   Currently, the cost model uses formulas with predefined relative weights
 
2414
   for alternative containers or container implementations.  For instance,
 
2415
   iterating through a vector is X times faster than iterating through a list.
 
2416
Index: libstdc++-v3/doc/html/manual/make.html
 
2417
===================================================================
 
2418
--- a/src/libstdc++-v3/doc/html/manual/make.html        (.../tags/gcc_4_8_2_release)
 
2419
+++ b/src/libstdc++-v3/doc/html/manual/make.html        (.../branches/gcc-4_8-branch)
 
2420
@@ -1,5 +1,5 @@
 
2421
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2422
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Make</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="setup.html" title="Chapter 2. Setup" /><link rel="prev" href="configure.html" title="Configure" /><link rel="next" href="using.html" title="Chapter 3. Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Make</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="configure.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Setup</th><td width="20%" align="right"> <a accesskey="n" href="using.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.make"></a>Make</h2></div></div></div><p>If you have never done this before, you should read the basic
 
2423
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Make</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="setup.html" title="Chapter 2. Setup" /><link rel="prev" href="configure.html" title="Configure" /><link rel="next" href="using.html" title="Chapter 3. Using" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Make</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="configure.html">Prev</a> </td><th width="60%" align="center">Chapter 2. Setup</th><td width="20%" align="right"> <a accesskey="n" href="using.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.make"></a>Make</h2></div></div></div><p>If you have never done this before, you should read the basic
 
2424
       <a class="link" href="http://gcc.gnu.org/install/" target="_top">GCC Installation
 
2425
       Instructions</a> first.  Read <span class="emphasis"><em>all of them</em></span>.
 
2426
       <span class="emphasis"><em>Twice.</em></span>
 
2427
Index: libstdc++-v3/doc/html/manual/pairs.html
 
2428
===================================================================
 
2429
--- a/src/libstdc++-v3/doc/html/manual/pairs.html       (.../tags/gcc_4_8_2_release)
 
2430
+++ b/src/libstdc++-v3/doc/html/manual/pairs.html       (.../branches/gcc-4_8-branch)
 
2431
@@ -1,5 +1,5 @@
 
2432
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2433
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Pairs</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="Chapter 6.  Utilities" /><link rel="prev" href="utilities.html" title="Chapter 6.  Utilities" /><link rel="next" href="memory.html" title="Memory" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Pairs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="utilities.html">Prev</a> </td><th width="60%" align="center">Chapter 6. 
 
2434
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Pairs</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="utilities.html" title="Chapter 6.  Utilities" /><link rel="prev" href="utilities.html" title="Chapter 6.  Utilities" /><link rel="next" href="memory.html" title="Memory" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Pairs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="utilities.html">Prev</a> </td><th width="60%" align="center">Chapter 6. 
 
2435
   Utilities
 
2436
   
 
2437
 </th><td width="20%" align="right"> <a accesskey="n" href="memory.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.pairs"></a>Pairs</h2></div></div></div><p>The <code class="code">pair&lt;T1,T2&gt;</code> is a simple and handy way to
 
2438
Index: libstdc++-v3/doc/html/manual/test.html
 
2439
===================================================================
 
2440
--- a/src/libstdc++-v3/doc/html/manual/test.html        (.../tags/gcc_4_8_2_release)
 
2441
+++ b/src/libstdc++-v3/doc/html/manual/test.html        (.../branches/gcc-4_8-branch)
 
2442
@@ -1,5 +1,5 @@
 
2443
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2444
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Test</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, test, testsuite, performance, conformance, ABI, exception safety" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="internals.html" title="Porting to New Hardware or Operating Systems" /><link rel="next" href="abi.html" title="ABI Policy and Guidelines" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Test</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="internals.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
 
2445
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Test</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, test, testsuite, performance, conformance, ABI, exception safety" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance" /><link rel="prev" href="internals.html" title="Porting to New Hardware or Operating Systems" /><link rel="next" href="abi.html" title="ABI Policy and Guidelines" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Test</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="internals.html">Prev</a> </td><th width="60%" align="center">Appendix B. 
 
2446
   Porting and Maintenance
 
2447
   
 
2448
 </th><td width="20%" align="right"> <a accesskey="n" href="abi.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.test"></a>Test</h2></div></div></div><p>
 
2449
@@ -492,7 +492,7 @@
 
2450
        reporting functions including:
 
2451
        </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>time_counter</p></li><li class="listitem"><p>resource_counter</p></li><li class="listitem"><p>report_performance</p></li></ul></div></li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="test.special"></a>Special Topics</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="test.exception.safety"></a>
 
2452
   Qualifying Exception Safety Guarantees
 
2453
-  <a id="idp22628992" class="indexterm"></a>
 
2454
+  <a id="idm269992903504" class="indexterm"></a>
 
2455
 </h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.overview"></a>Overview</h5></div></div></div><p>
 
2456
         Testing is composed of running a particular test sequence,
 
2457
         and looking at what happens to the surrounding code when
 
2458
Index: libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
 
2459
===================================================================
 
2460
--- a/src/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html     (.../tags/gcc_4_8_2_release)
 
2461
+++ b/src/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html     (.../branches/gcc-4_8-branch)
 
2462
@@ -1,5 +1,5 @@
 
2463
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2464
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Linking</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_namespaces.html" title="Namespaces" /><link rel="next" href="using_concurrency.html" title="Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Linking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_namespaces.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_concurrency.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.linkage"></a>Linking</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.linkage.freestanding"></a>Almost Nothing</h3></div></div></div><p>
 
2465
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Linking</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_namespaces.html" title="Namespaces" /><link rel="next" href="using_concurrency.html" title="Concurrency" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Linking</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_namespaces.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_concurrency.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.linkage"></a>Linking</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.linkage.freestanding"></a>Almost Nothing</h3></div></div></div><p>
 
2466
        Or as close as it gets: freestanding. This is a minimal
 
2467
        configuration, with only partial support for the standard
 
2468
        library. Assume only the following header files can be used:
 
2469
Index: libstdc++-v3/doc/html/manual/using_headers.html
 
2470
===================================================================
 
2471
--- a/src/libstdc++-v3/doc/html/manual/using_headers.html       (.../tags/gcc_4_8_2_release)
 
2472
+++ b/src/libstdc++-v3/doc/html/manual/using_headers.html       (.../branches/gcc-4_8-branch)
 
2473
@@ -1,5 +1,5 @@
 
2474
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2475
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Headers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using.html" title="Chapter 3. Using" /><link rel="next" href="using_macros.html" title="Macros" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Headers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_macros.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.headers"></a>Headers</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.all"></a>Header Files</h3></div></div></div><p>
 
2476
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Headers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using.html" title="Chapter 3. Using" /><link rel="next" href="using_macros.html" title="Macros" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Headers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_macros.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.headers"></a>Headers</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.all"></a>Header Files</h3></div></div></div><p>
 
2477
      The C++ standard specifies the entire set of header files that
 
2478
      must be available to all hosted implementations.  Actually, the
 
2479
      word "files" is a misnomer, since the contents of the
 
2480
@@ -18,19 +18,19 @@
 
2481
      the 1998 standard as updated for 2003, and the current 2011 standard.
 
2482
    </p><p>
 
2483
      C++98/03 include files. These are available in the default compilation mode, i.e. <code class="code">-std=c++98</code> or <code class="code">-std=gnu++98</code>.
 
2484
-   </p><div class="table"><a id="idp13079360"></a><p class="title"><strong>Table 3.2. C++ 1998 Library Headers</strong></p><div class="table-contents"><table summary="C++ 1998 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">complex</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td></tr><tr><td align="left"><code class="filename">fstream</code></td><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td><td align="left"><code class="filename">iosfwd</code></td></tr><tr><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td><td align="left"><code class="filename">list</code></td></tr><tr><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td></tr><tr><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">typeinfo</code></td></tr><tr><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13115840"></a><p class="title"><strong>Table 3.3. C++ 1998 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ 1998 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">ciso646</code></td></tr><tr><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td></tr><tr><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p>
 
2485
+   </p><div class="table"><a id="idm270002453792"></a><p class="title"><strong>Table 3.2. C++ 1998 Library Headers</strong></p><div class="table-contents"><table summary="C++ 1998 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">complex</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td></tr><tr><td align="left"><code class="filename">fstream</code></td><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td><td align="left"><code class="filename">iosfwd</code></td></tr><tr><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td><td align="left"><code class="filename">list</code></td></tr><tr><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td></tr><tr><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">typeinfo</code></td></tr><tr><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270002417312"></a><p class="title"><strong>Table 3.3. C++ 1998 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ 1998 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">ciso646</code></td></tr><tr><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td></tr><tr><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p>
 
2486
 C++11 include files. These are only available in C++11 compilation
 
2487
 mode, i.e. <code class="literal">-std=c++11</code> or <code class="literal">-std=gnu++11</code>.
 
2488
-</p><p></p><div class="table"><a id="idp13140576"></a><p class="title"><strong>Table 3.4. C++ 2011 Library Headers</strong></p><div class="table-contents"><table summary="C++ 2011 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">array</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">chrono</code></td><td align="left"><code class="filename">complex</code></td></tr><tr><td align="left"><code class="filename">condition_variable</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td><td align="left"><code class="filename">forward_list</code></td><td align="left"><code class="filename">fstream</code></td></tr><tr><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">future</code></td><td align="left"><code class="filename">initalizer_list</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td></tr><tr><td align="left"><code class="filename">iosfwd</code></td><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td></tr><tr><td align="left"><code class="filename">list</code></td><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">mutex</code></td></tr><tr><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">random</code></td></tr><tr><td align="left"><code class="filename">ratio</code></td><td align="left"><code class="filename">regex</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">system_error</code></td><td align="left"><code class="filename">thread</code></td></tr><tr><td align="left"><code class="filename">tuple</code></td><td align="left"><code class="filename">type_traits</code></td><td align="left"><code class="filename">typeinfo</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="filename">unordered_set</code></td></tr><tr><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13192016"></a><p class="title"><strong>Table 3.5. C++ 2011 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ 2011 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">ccomplex</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cfenv</code></td></tr><tr><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">cinttypes</code></td><td align="left"><code class="filename">ciso646</code></td><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td></tr><tr><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstdbool</code></td></tr><tr><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdint</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctgmath</code></td><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cuchar</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
 
2489
+</p><p></p><div class="table"><a id="idm270002392576"></a><p class="title"><strong>Table 3.4. C++ 2011 Library Headers</strong></p><div class="table-contents"><table summary="C++ 2011 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">algorithm</code></td><td align="left"><code class="filename">array</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="filename">chrono</code></td><td align="left"><code class="filename">complex</code></td></tr><tr><td align="left"><code class="filename">condition_variable</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="filename">exception</code></td><td align="left"><code class="filename">forward_list</code></td><td align="left"><code class="filename">fstream</code></td></tr><tr><td align="left"><code class="filename">functional</code></td><td align="left"><code class="filename">future</code></td><td align="left"><code class="filename">initalizer_list</code></td><td align="left"><code class="filename">iomanip</code></td><td align="left"><code class="filename">ios</code></td></tr><tr><td align="left"><code class="filename">iosfwd</code></td><td align="left"><code class="filename">iostream</code></td><td align="left"><code class="filename">istream</code></td><td align="left"><code class="filename">iterator</code></td><td align="left"><code class="filename">limits</code></td></tr><tr><td align="left"><code class="filename">list</code></td><td align="left"><code class="filename">locale</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="filename">memory</code></td><td align="left"><code class="filename">mutex</code></td></tr><tr><td align="left"><code class="filename">new</code></td><td align="left"><code class="filename">numeric</code></td><td align="left"><code class="filename">ostream</code></td><td align="left"><code class="filename">queue</code></td><td align="left"><code class="filename">random</code></td></tr><tr><td align="left"><code class="filename">ratio</code></td><td align="left"><code class="filename">regex</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="filename">sstream</code></td><td align="left"><code class="filename">stack</code></td></tr><tr><td align="left"><code class="filename">stdexcept</code></td><td align="left"><code class="filename">streambuf</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="filename">system_error</code></td><td align="left"><code class="filename">thread</code></td></tr><tr><td align="left"><code class="filename">tuple</code></td><td align="left"><code class="filename">type_traits</code></td><td align="left"><code class="filename">typeinfo</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="filename">unordered_set</code></td></tr><tr><td align="left"><code class="filename">utility</code></td><td align="left"><code class="filename">valarray</code></td><td align="left"><code class="filename">vector</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270002341136"></a><p class="title"><strong>Table 3.5. C++ 2011 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ 2011 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">cassert</code></td><td align="left"><code class="filename">ccomplex</code></td><td align="left"><code class="filename">cctype</code></td><td align="left"><code class="filename">cerrno</code></td><td align="left"><code class="filename">cfenv</code></td></tr><tr><td align="left"><code class="filename">cfloat</code></td><td align="left"><code class="filename">cinttypes</code></td><td align="left"><code class="filename">ciso646</code></td><td align="left"><code class="filename">climits</code></td><td align="left"><code class="filename">clocale</code></td></tr><tr><td align="left"><code class="filename">cmath</code></td><td align="left"><code class="filename">csetjmp</code></td><td align="left"><code class="filename">csignal</code></td><td align="left"><code class="filename">cstdarg</code></td><td align="left"><code class="filename">cstdbool</code></td></tr><tr><td align="left"><code class="filename">cstddef</code></td><td align="left"><code class="filename">cstdint</code></td><td align="left"><code class="filename">cstdlib</code></td><td align="left"><code class="filename">cstdio</code></td><td align="left"><code class="filename">cstring</code></td></tr><tr><td align="left"><code class="filename">ctgmath</code></td><td align="left"><code class="filename">ctime</code></td><td align="left"><code class="filename">cuchar</code></td><td align="left"><code class="filename">cwchar</code></td><td align="left"><code class="filename">cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
 
2490
   In addition, TR1 includes as:
 
2491
-</p><div class="table"><a id="idp13221904"></a><p class="title"><strong>Table 3.6. C++ TR 1 Library Headers</strong></p><div class="table-contents"><table summary="C++ TR 1 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/array</code></td><td align="left"><code class="filename">tr1/complex</code></td><td align="left"><code class="filename">tr1/memory</code></td><td align="left"><code class="filename">tr1/functional</code></td><td align="left"><code class="filename">tr1/random</code></td></tr><tr><td align="left"><code class="filename">tr1/regex</code></td><td align="left"><code class="filename">tr1/tuple</code></td><td align="left"><code class="filename">tr1/type_traits</code></td><td align="left"><code class="filename">tr1/unordered_map</code></td><td align="left"><code class="filename">tr1/unordered_set</code></td></tr><tr><td align="left"><code class="filename">tr1/utility</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13238832"></a><p class="title"><strong>Table 3.7. C++ TR 1 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ TR 1 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/ccomplex</code></td><td align="left"><code class="filename">tr1/cfenv</code></td><td align="left"><code class="filename">tr1/cfloat</code></td><td align="left"><code class="filename">tr1/cmath</code></td><td align="left"><code class="filename">tr1/cinttypes</code></td></tr><tr><td align="left"><code class="filename">tr1/climits</code></td><td align="left"><code class="filename">tr1/cstdarg</code></td><td align="left"><code class="filename">tr1/cstdbool</code></td><td align="left"><code class="filename">tr1/cstdint</code></td><td align="left"><code class="filename">tr1/cstdio</code></td></tr><tr><td align="left"><code class="filename">tr1/cstdlib</code></td><td align="left"><code class="filename">tr1/ctgmath</code></td><td align="left"><code class="filename">tr1/ctime</code></td><td align="left"><code class="filename">tr1/cwchar</code></td><td align="left"><code class="filename">tr1/cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>Decimal floating-point arithmetic is available if the C++
 
2492
+</p><div class="table"><a id="idm270002311248"></a><p class="title"><strong>Table 3.6. C++ TR 1 Library Headers</strong></p><div class="table-contents"><table summary="C++ TR 1 Library Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/array</code></td><td align="left"><code class="filename">tr1/complex</code></td><td align="left"><code class="filename">tr1/memory</code></td><td align="left"><code class="filename">tr1/functional</code></td><td align="left"><code class="filename">tr1/random</code></td></tr><tr><td align="left"><code class="filename">tr1/regex</code></td><td align="left"><code class="filename">tr1/tuple</code></td><td align="left"><code class="filename">tr1/type_traits</code></td><td align="left"><code class="filename">tr1/unordered_map</code></td><td align="left"><code class="filename">tr1/unordered_set</code></td></tr><tr><td align="left"><code class="filename">tr1/utility</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270002294320"></a><p class="title"><strong>Table 3.7. C++ TR 1 Library Headers for C Library Facilities</strong></p><div class="table-contents"><table summary="C++ TR 1 Library Headers for C Library Facilities" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">tr1/ccomplex</code></td><td align="left"><code class="filename">tr1/cfenv</code></td><td align="left"><code class="filename">tr1/cfloat</code></td><td align="left"><code class="filename">tr1/cmath</code></td><td align="left"><code class="filename">tr1/cinttypes</code></td></tr><tr><td align="left"><code class="filename">tr1/climits</code></td><td align="left"><code class="filename">tr1/cstdarg</code></td><td align="left"><code class="filename">tr1/cstdbool</code></td><td align="left"><code class="filename">tr1/cstdint</code></td><td align="left"><code class="filename">tr1/cstdio</code></td></tr><tr><td align="left"><code class="filename">tr1/cstdlib</code></td><td align="left"><code class="filename">tr1/ctgmath</code></td><td align="left"><code class="filename">tr1/ctime</code></td><td align="left"><code class="filename">tr1/cwchar</code></td><td align="left"><code class="filename">tr1/cwctype</code></td></tr></tbody></table></div></div><br class="table-break" /><p>Decimal floating-point arithmetic is available if the C++
 
2493
 compiler supports scalar decimal floating-point types defined via
 
2494
 <code class="code">__attribute__((mode(SD|DD|LD)))</code>.
 
2495
-</p><div class="table"><a id="idp13259904"></a><p class="title"><strong>Table 3.8. C++ TR 24733 Decimal Floating-Point Header</strong></p><div class="table-contents"><table summary="C++ TR 24733 Decimal Floating-Point Header" border="1"><colgroup><col align="left" class="c1" /></colgroup><tbody><tr><td align="left"><code class="filename">decimal/decimal</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
 
2496
+</p><div class="table"><a id="idm270002273248"></a><p class="title"><strong>Table 3.8. C++ TR 24733 Decimal Floating-Point Header</strong></p><div class="table-contents"><table summary="C++ TR 24733 Decimal Floating-Point Header" border="1"><colgroup><col align="left" class="c1" /></colgroup><tbody><tr><td align="left"><code class="filename">decimal/decimal</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
 
2497
   Also included are files for the C++ ABI interface:
 
2498
-</p><div class="table"><a id="idp13265424"></a><p class="title"><strong>Table 3.9. C++ ABI Headers</strong></p><div class="table-contents"><table summary="C++ ABI Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left"><code class="filename">cxxabi.h</code></td><td align="left"><code class="filename">cxxabi_forced.h</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
 
2499
+</p><div class="table"><a id="idm270002267728"></a><p class="title"><strong>Table 3.9. C++ ABI Headers</strong></p><div class="table-contents"><table summary="C++ ABI Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left"><code class="filename">cxxabi.h</code></td><td align="left"><code class="filename">cxxabi_forced.h</code></td></tr></tbody></table></div></div><br class="table-break" /><p>
 
2500
   And a large variety of extensions.
 
2501
-</p><div class="table"><a id="idp13271824"></a><p class="title"><strong>Table 3.10. Extension Headers</strong></p><div class="table-contents"><table summary="Extension Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">ext/algorithm</code></td><td align="left"><code class="filename">ext/atomicity.h</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"><code class="filename">ext/cast.h</code></td></tr><tr><td align="left"><code class="filename">ext/codecvt_specializations.h</code></td><td align="left"><code class="filename">ext/concurrence.h</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="filename">ext/enc_filebuf.h</code></td><td align="left"><code class="filename">ext/extptr_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/functional</code></td><td align="left"><code class="filename">ext/iterator</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="filename">ext/memory</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="filename">ext/numeric</code></td><td align="left"><code class="filename">ext/numeric_traits.h</code></td><td align="left"><code class="filename">ext/pb_ds/assoc_container.h</code></td><td align="left"><code class="filename">ext/pb_ds/priority_queue.h</code></td></tr><tr><td align="left"><code class="filename">ext/pod_char_traits.h</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="filename">ext/rb_tree</code></td><td align="left"><code class="filename">ext/rope</code></td><td align="left"><code class="filename">ext/slist</code></td></tr><tr><td align="left"><code class="filename">ext/stdio_filebuf.h</code></td><td align="left"><code class="filename">ext/stdio_sync_filebuf.h</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left"><code class="filename">ext/typelist.h</code></td><td align="left"><code class="filename">ext/type_traits.h</code></td></tr><tr><td align="left"><code class="filename">ext/vstring.h</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13307552"></a><p class="title"><strong>Table 3.11. Extension Debug Headers</strong></p><div class="table-contents"><table summary="Extension Debug Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">debug/bitset</code></td><td align="left"><code class="filename">debug/deque</code></td><td align="left"><code class="filename">debug/list</code></td><td align="left"><code class="filename">debug/map</code></td><td align="left"><code class="filename">debug/set</code></td></tr><tr><td align="left"><code class="filename">debug/string</code></td><td align="left"><code class="filename">debug/unordered_map</code></td><td align="left"><code class="filename">debug/unordered_set</code></td><td align="left"><code class="filename">debug/vector</code></td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13322320"></a><p class="title"><strong>Table 3.12. Extension Profile Headers</strong></p><div class="table-contents"><table summary="Extension Profile Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><tbody><tr><td align="left"><code class="filename">profile/bitset</code></td><td align="left"><code class="filename">profile/deque</code></td><td align="left"><code class="filename">profile/list</code></td><td align="left"><code class="filename">profile/map</code></td></tr><tr><td align="left"><code class="filename">profile/set</code></td><td align="left"><code class="filename">profile/unordered_map</code></td><td align="left"><code class="filename">profile/unordered_set</code></td><td align="left"><code class="filename">profile/vector</code></td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idp13335696"></a><p class="title"><strong>Table 3.13. Extension Parallel Headers</strong></p><div class="table-contents"><table summary="Extension Parallel Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left"><code class="filename">parallel/algorithm</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.mixing"></a>Mixing Headers</h3></div></div></div><p> A few simple rules.
 
2502
+</p><div class="table"><a id="idm270002261328"></a><p class="title"><strong>Table 3.10. Extension Headers</strong></p><div class="table-contents"><table summary="Extension Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">ext/algorithm</code></td><td align="left"><code class="filename">ext/atomicity.h</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"><code class="filename">ext/cast.h</code></td></tr><tr><td align="left"><code class="filename">ext/codecvt_specializations.h</code></td><td align="left"><code class="filename">ext/concurrence.h</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="filename">ext/enc_filebuf.h</code></td><td align="left"><code class="filename">ext/extptr_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/functional</code></td><td align="left"><code class="filename">ext/iterator</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="filename">ext/memory</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td></tr><tr><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="filename">ext/numeric</code></td><td align="left"><code class="filename">ext/numeric_traits.h</code></td><td align="left"><code class="filename">ext/pb_ds/assoc_container.h</code></td><td align="left"><code class="filename">ext/pb_ds/priority_queue.h</code></td></tr><tr><td align="left"><code class="filename">ext/pod_char_traits.h</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="filename">ext/rb_tree</code></td><td align="left"><code class="filename">ext/rope</code></td><td align="left"><code class="filename">ext/slist</code></td></tr><tr><td align="left"><code class="filename">ext/stdio_filebuf.h</code></td><td align="left"><code class="filename">ext/stdio_sync_filebuf.h</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left"><code class="filename">ext/typelist.h</code></td><td align="left"><code class="filename">ext/type_traits.h</code></td></tr><tr><td align="left"><code class="filename">ext/vstring.h</code></td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270002225600"></a><p class="title"><strong>Table 3.11. Extension Debug Headers</strong></p><div class="table-contents"><table summary="Extension Debug Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left"><code class="filename">debug/bitset</code></td><td align="left"><code class="filename">debug/deque</code></td><td align="left"><code class="filename">debug/list</code></td><td align="left"><code class="filename">debug/map</code></td><td align="left"><code class="filename">debug/set</code></td></tr><tr><td align="left"><code class="filename">debug/string</code></td><td align="left"><code class="filename">debug/unordered_map</code></td><td align="left"><code class="filename">debug/unordered_set</code></td><td align="left"><code class="filename">debug/vector</code></td><td class="auto-generated"> </td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270002210832"></a><p class="title"><strong>Table 3.12. Extension Profile Headers</strong></p><div class="table-contents"><table summary="Extension Profile Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><tbody><tr><td align="left"><code class="filename">profile/bitset</code></td><td align="left"><code class="filename">profile/deque</code></td><td align="left"><code class="filename">profile/list</code></td><td align="left"><code class="filename">profile/map</code></td></tr><tr><td align="left"><code class="filename">profile/set</code></td><td align="left"><code class="filename">profile/unordered_map</code></td><td align="left"><code class="filename">profile/unordered_set</code></td><td align="left"><code class="filename">profile/vector</code></td></tr></tbody></table></div></div><br class="table-break" /><p></p><div class="table"><a id="idm270002197456"></a><p class="title"><strong>Table 3.13. Extension Parallel Headers</strong></p><div class="table-contents"><table summary="Extension Parallel Headers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><tbody><tr><td align="left"><code class="filename">parallel/algorithm</code></td><td align="left"><code class="filename">parallel/numeric</code></td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.mixing"></a>Mixing Headers</h3></div></div></div><p> A few simple rules.
 
2503
 </p><p>First, mixing different dialects of the standard headers is not
 
2504
 possible. It's an all-or-nothing affair. Thus, code like
 
2505
 </p><pre class="programlisting">
 
2506
Index: libstdc++-v3/doc/html/manual/using_namespaces.html
 
2507
===================================================================
 
2508
--- a/src/libstdc++-v3/doc/html/manual/using_namespaces.html    (.../tags/gcc_4_8_2_release)
 
2509
+++ b/src/libstdc++-v3/doc/html/manual/using_namespaces.html    (.../branches/gcc-4_8-branch)
 
2510
@@ -1,5 +1,5 @@
 
2511
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2512
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Namespaces</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_macros.html" title="Macros" /><link rel="next" href="using_dynamic_or_shared.html" title="Linking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Namespaces</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_macros.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_dynamic_or_shared.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.namespaces"></a>Namespaces</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.all"></a>Available Namespaces</h3></div></div></div><p> There are three main namespaces.
 
2513
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Namespaces</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_macros.html" title="Macros" /><link rel="next" href="using_dynamic_or_shared.html" title="Linking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Namespaces</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_macros.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_dynamic_or_shared.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.namespaces"></a>Namespaces</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.all"></a>Available Namespaces</h3></div></div></div><p> There are three main namespaces.
 
2514
 </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>std</p><p>The ISO C++ standards specify that "all library entities are defined
 
2515
 within namespace std." This includes namespaces nested
 
2516
 within <code class="code">namespace std</code>, such as <code class="code">namespace
 
2517
Index: libstdc++-v3/doc/html/manual/debug.html
 
2518
===================================================================
 
2519
--- a/src/libstdc++-v3/doc/html/manual/debug.html       (.../tags/gcc_4_8_2_release)
 
2520
+++ b/src/libstdc++-v3/doc/html/manual/debug.html       (.../branches/gcc-4_8-branch)
 
2521
@@ -1,5 +1,5 @@
 
2522
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2523
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Debugging Support</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_exceptions.html" title="Exceptions" /><link rel="next" href="std_contents.html" title="Part II.  Standard Contents" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Debugging Support</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_exceptions.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="std_contents.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.debug"></a>Debugging Support</h2></div></div></div><p>
 
2524
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Debugging Support</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_exceptions.html" title="Exceptions" /><link rel="next" href="std_contents.html" title="Part II.  Standard Contents" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Debugging Support</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_exceptions.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="std_contents.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.debug"></a>Debugging Support</h2></div></div></div><p>
 
2525
   There are numerous things that can be done to improve the ease with
 
2526
   which C++ binaries are debugged when using the GNU tool chain. Here
 
2527
   are some of them.
 
2528
@@ -161,7 +161,7 @@
 
2529
   DRD</a>,
 
2530
   <a class="link" href="http://valgrind.org/docs/manual/hg-manual.html" target="_top"> 
 
2531
   Helgrind</a>, and
 
2532
-  <a class="link" href="http://code.google.com/p/data-race-test" target="_top"> 
 
2533
+  <a class="link" href="http://code.google.com/p/data-race-test/" target="_top"> 
 
2534
   ThreadSanitizer</a>.
 
2535
 </p><p>
 
2536
   With DRD, Helgrind and ThreadSanitizer you will need to define
 
2537
Index: libstdc++-v3/doc/html/manual/localization.html
 
2538
===================================================================
 
2539
--- a/src/libstdc++-v3/doc/html/manual/localization.html        (.../tags/gcc_4_8_2_release)
 
2540
+++ b/src/libstdc++-v3/doc/html/manual/localization.html        (.../branches/gcc-4_8-branch)
 
2541
@@ -1,5 +1,5 @@
 
2542
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2543
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 8.  Localization</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="strings.html" title="Chapter 7.  Strings" /><link rel="next" href="facets.html" title="Facets" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 8. 
 
2544
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 8.  Localization</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="strings.html" title="Chapter 7.  Strings" /><link rel="next" href="facets.html" title="Facets" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 8. 
 
2545
   Localization
 
2546
   
 
2547
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="strings.html">Prev</a> </td><th width="60%" align="center">Part II. 
 
2548
@@ -6,8 +6,8 @@
 
2549
     Standard Contents
 
2550
   </th><td width="20%" align="right"> <a accesskey="n" href="facets.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.localization"></a>Chapter 8. 
 
2551
   Localization
 
2552
-  <a id="idp15701088" class="indexterm"></a>
 
2553
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idp15778336">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.locales"></a>Locales</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.locales.locale"></a>locale</h3></div></div></div><p>
 
2554
+  <a id="idm269999830208" class="indexterm"></a>
 
2555
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idm269999753024">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.localization.locales"></a>Locales</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.locales.locale"></a>locale</h3></div></div></div><p>
 
2556
 Describes the basic locale object, including nested
 
2557
 classes id, facet, and the reference-counted implementation object,
 
2558
 class _Impl.
 
2559
@@ -402,18 +402,18 @@
 
2560
        What should non-required facet instantiations do?  If the
 
2561
        generic implementation is provided, then how to end-users
 
2562
        provide specializations?
 
2563
-   </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp15744064"></a><p><span class="citetitle"><em class="citetitle">
 
2564
+   </p></li></ul></div></div><div class="bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idm269999787232"></a><p><span class="citetitle"><em class="citetitle">
 
2565
       The GNU C Library
 
2566
     </em>. </span><span class="author"><span class="firstname">Roland</span> <span class="surname">McGrath</span>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2007 FSF. </span><span class="pagenums">
 
2567
       Chapters 6 Character Set Handling and 7 Locales and
 
2568
       Internationalization
 
2569
-    . </span></p></div><div class="biblioentry"><a id="idp15748832"></a><p><span class="citetitle"><em class="citetitle">
 
2570
+    . </span></p></div><div class="biblioentry"><a id="idm269999782464"></a><p><span class="citetitle"><em class="citetitle">
 
2571
       Correspondence
 
2572
-    </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idp15751920"></a><p><span class="citetitle"><em class="citetitle">
 
2573
+    </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span><span class="copyright">Copyright © 2002 . </span></p></div><div class="biblioentry"><a id="idm269999779376"></a><p><span class="citetitle"><em class="citetitle">
 
2574
       ISO/IEC 14882:1998 Programming languages - C++
 
2575
-    </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp15754208"></a><p><span class="citetitle"><em class="citetitle">
 
2576
+    </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269999777088"></a><p><span class="citetitle"><em class="citetitle">
 
2577
       ISO/IEC 9899:1999 Programming languages - C
 
2578
-    </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idp15756480"></a><p><span class="title"><em>
 
2579
+    </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269999774816"></a><p><span class="title"><em>
 
2580
        <a class="link" href="http://www.opengroup.org/austin/" target="_top">
 
2581
       System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
 
2582
        </a>
 
2583
@@ -420,11 +420,11 @@
 
2584
       </em>. </span><span class="copyright">Copyright © 2008 
 
2585
        The Open Group/The Institute of Electrical and Electronics
 
2586
        Engineers, Inc.
 
2587
-      . </span></p></div><div class="biblioentry"><a id="idp15759712"></a><p><span class="citetitle"><em class="citetitle">
 
2588
+      . </span></p></div><div class="biblioentry"><a id="idm269999771584"></a><p><span class="citetitle"><em class="citetitle">
 
2589
       The C++ Programming Language, Special Edition
 
2590
     </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span><span class="copyright">Copyright © 2000 Addison Wesley, Inc.. </span><span class="pagenums">Appendix D. </span><span class="publisher"><span class="publishername">
 
2591
        Addison Wesley
 
2592
-      . </span></span></p></div><div class="biblioentry"><a id="idp15764336"></a><p><span class="citetitle"><em class="citetitle">
 
2593
+      . </span></span></p></div><div class="biblioentry"><a id="idm269999766960"></a><p><span class="citetitle"><em class="citetitle">
 
2594
       Standard C++ IOStreams and Locales
 
2595
     </em>. </span><span class="subtitle">
 
2596
       Advanced Programmer's Guide and Reference
 
2597
Index: libstdc++-v3/doc/html/manual/ext_algorithms.html
 
2598
===================================================================
 
2599
--- a/src/libstdc++-v3/doc/html/manual/ext_algorithms.html      (.../tags/gcc_4_8_2_release)
 
2600
+++ b/src/libstdc++-v3/doc/html/manual/ext_algorithms.html      (.../branches/gcc-4_8-branch)
 
2601
@@ -1,5 +1,5 @@
 
2602
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2603
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 25. Algorithms</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_utilities.html" title="Chapter 24. Utilities" /><link rel="next" href="ext_numerics.html" title="Chapter 26. Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 25. Algorithms</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
2604
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 25. Algorithms</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_utilities.html" title="Chapter 24. Utilities" /><link rel="next" href="ext_numerics.html" title="Chapter 26. Numerics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 25. Algorithms</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
2605
   Extensions
 
2606
   
 
2607
 </th><td width="20%" align="right"> <a accesskey="n" href="ext_numerics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.algorithms"></a>Chapter 25. Algorithms</h2></div></div></div><p>25.1.6 (count, count_if) is extended with two more versions of count
 
2608
Index: libstdc++-v3/doc/html/manual/debug_mode.html
 
2609
===================================================================
 
2610
--- a/src/libstdc++-v3/doc/html/manual/debug_mode.html  (.../tags/gcc_4_8_2_release)
 
2611
+++ b/src/libstdc++-v3/doc/html/manual/debug_mode.html  (.../branches/gcc-4_8-branch)
 
2612
@@ -1,8 +1,8 @@
 
2613
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2614
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 17. Debug Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks" /><link rel="next" href="debug_mode_semantics.html" title="Semantics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 17. Debug Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_compile_checks.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
2615
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 17. Debug Mode</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, debug" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="extensions.html" title="Part III.  Extensions" /><link rel="prev" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks" /><link rel="next" href="debug_mode_semantics.html" title="Semantics" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 17. Debug Mode</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ext_compile_checks.html">Prev</a> </td><th width="60%" align="center">Part III. 
 
2616
   Extensions
 
2617
   
 
2618
-</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode_semantics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.debug_mode"></a>Chapter 17. Debug Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="debug_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="debug_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.link">Link- and run-time coexistence of release- and
 
2619
+</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode_semantics.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.debug_mode"></a>Chapter 17. Debug Mode</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="debug_mode.html#manual.ext.debug_mode.intro">Intro</a></span></dt><dt><span class="section"><a href="debug_mode_semantics.html">Semantics</a></span></dt><dt><span class="section"><a href="debug_mode_using.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="debug_mode_using.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.link">Link- and run-time coexistence of release- and
 
2620
     debug-mode components</a></span></dt><dt><span class="section"><a href="debug_mode_design.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug_mode_design.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.debug_mode.intro"></a>Intro</h2></div></div></div><p>
 
2621
     By default, libstdc++ is built with efficiency in mind, and
 
2622
     therefore performs little or no error checking that is not
 
2623
Index: libstdc++-v3/doc/html/manual/profile_mode_design.html
 
2624
===================================================================
 
2625
--- a/src/libstdc++-v3/doc/html/manual/profile_mode_design.html (.../tags/gcc_4_8_2_release)
 
2626
+++ b/src/libstdc++-v3/doc/html/manual/profile_mode_design.html (.../branches/gcc-4_8-branch)
 
2627
@@ -1,6 +1,6 @@
 
2628
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2629
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="next" href="profile_mode_api.html" title="Extensions for Custom Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_api.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.design"></a>Design</h2></div></div></div><p>
 
2630
-</p><div class="table"><a id="idp16981200"></a><p class="title"><strong>Table 19.1. Profile Code Location</strong></p><div class="table-contents"><table summary="Profile Code Location" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Code Location</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left"><code class="code">libstdc++-v3/include/std/*</code></td><td align="left">Preprocessor code to redirect to profile extension headers.</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/*</code></td><td align="left">Profile extension public headers (map, vector, ...).</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/impl/*</code></td><td align="left">Profile extension internals.  Implementation files are
 
2631
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Design</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="C++, library, profile" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="prev" href="profile_mode.html" title="Chapter 19. Profile Mode" /><link rel="next" href="profile_mode_api.html" title="Extensions for Custom Containers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Design</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="profile_mode.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="profile_mode_api.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.profile_mode.design"></a>Design</h2></div></div></div><p>
 
2632
+</p><div class="table"><a id="idm269998550064"></a><p class="title"><strong>Table 19.1. Profile Code Location</strong></p><div class="table-contents"><table summary="Profile Code Location" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Code Location</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left"><code class="code">libstdc++-v3/include/std/*</code></td><td align="left">Preprocessor code to redirect to profile extension headers.</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/*</code></td><td align="left">Profile extension public headers (map, vector, ...).</td></tr><tr><td align="left"><code class="code">libstdc++-v3/include/profile/impl/*</code></td><td align="left">Profile extension internals.  Implementation files are
 
2633
      only included from <code class="code">impl/profiler.h</code>, which is the only
 
2634
      file included from the public headers.</td></tr></tbody></table></div></div><br class="table-break" /><p>
 
2635
 </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.wrapper"></a>Wrapper Model</h3></div></div></div><p>
 
2636
Index: libstdc++-v3/doc/html/manual/using_concurrency.html
 
2637
===================================================================
 
2638
--- a/src/libstdc++-v3/doc/html/manual/using_concurrency.html   (.../tags/gcc_4_8_2_release)
 
2639
+++ b/src/libstdc++-v3/doc/html/manual/using_concurrency.html   (.../branches/gcc-4_8-branch)
 
2640
@@ -1,5 +1,5 @@
 
2641
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2642
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_dynamic_or_shared.html" title="Linking" /><link rel="next" href="using_exceptions.html" title="Exceptions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Concurrency</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_dynamic_or_shared.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_exceptions.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.concurrency"></a>Concurrency</h2></div></div></div><p>This section discusses issues surrounding the proper compilation
 
2643
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Concurrency</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="using.html" title="Chapter 3. Using" /><link rel="prev" href="using_dynamic_or_shared.html" title="Linking" /><link rel="next" href="using_exceptions.html" title="Exceptions" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Concurrency</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="using_dynamic_or_shared.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Using</th><td width="20%" align="right"> <a accesskey="n" href="using_exceptions.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.concurrency"></a>Concurrency</h2></div></div></div><p>This section discusses issues surrounding the proper compilation
 
2644
       of multithreaded applications which use the Standard C++
 
2645
       library.  This information is GCC-specific since the C++
 
2646
       standard does not address matters of multithreaded applications.
 
2647
Index: libstdc++-v3/doc/html/manual/mt_allocator_impl.html
 
2648
===================================================================
 
2649
--- a/src/libstdc++-v3/doc/html/manual/mt_allocator_impl.html   (.../tags/gcc_4_8_2_release)
 
2650
+++ b/src/libstdc++-v3/doc/html/manual/mt_allocator_impl.html   (.../branches/gcc-4_8-branch)
 
2651
@@ -1,5 +1,5 @@
 
2652
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2653
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator_design.html" title="Design Issues" /><link rel="next" href="mt_allocator_ex_single.html" title="Single Thread Example" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_design.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_ex_single.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.tune"></a>Tunable Parameters</h3></div></div></div><p>Certain allocation parameters can be modified, or tuned. There
 
2654
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Implementation</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, allocator" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="mt_allocator.html" title="Chapter 20. The mt_allocator" /><link rel="prev" href="mt_allocator_design.html" title="Design Issues" /><link rel="next" href="mt_allocator_ex_single.html" title="Single Thread Example" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Implementation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="mt_allocator_design.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="mt_allocator_ex_single.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.impl"></a>Implementation</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.tune"></a>Tunable Parameters</h3></div></div></div><p>Certain allocation parameters can be modified, or tuned. There
 
2655
 exists a nested <code class="code">struct __pool_base::_Tune</code> that contains all
 
2656
 these parameters, which include settings for
 
2657
 </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>Alignment</p></li><li class="listitem"><p>Maximum bytes before calling <code class="code">::operator new</code> directly</p></li><li class="listitem"><p>Minimum bytes</p></li><li class="listitem"><p>Size of underlying global allocations</p></li><li class="listitem"><p>Maximum number of supported threads</p></li><li class="listitem"><p>Migration of deallocations to the global free list</p></li><li class="listitem"><p>Shunt for global <code class="code">new</code> and <code class="code">delete</code></p></li></ul></div><p>Adjusting parameters for a given instance of an allocator can only
 
2658
Index: libstdc++-v3/doc/html/manual/appendix_gfdl.html
 
2659
===================================================================
 
2660
--- a/src/libstdc++-v3/doc/html/manual/appendix_gfdl.html       (.../tags/gcc_4_8_2_release)
 
2661
+++ b/src/libstdc++-v3/doc/html/manual/appendix_gfdl.html       (.../branches/gcc-4_8-branch)
 
2662
@@ -1,5 +1,5 @@
 
2663
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2664
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix E. GNU Free Documentation License</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV.  Appendices" /><link rel="prev" href="appendix_gpl.html" title="Appendix D.  GNU General Public License version 3" /><link rel="next" href="../bk02.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix E. GNU Free Documentation License</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_gpl.html">Prev</a> </td><th width="60%" align="center">Part IV. 
 
2665
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix E. GNU Free Documentation License</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV.  Appendices" /><link rel="prev" href="appendix_gpl.html" title="Appendix D.  GNU General Public License version 3" /><link rel="next" href="../bk02.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix E. GNU Free Documentation License</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_gpl.html">Prev</a> </td><th width="60%" align="center">Part IV. 
 
2666
   Appendices
 
2667
 </th><td width="20%" align="right"> <a accesskey="n" href="../bk02.html">Next</a></td></tr></table><hr /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.gfdl-1.3"></a>GNU Free Documentation License</h1></div></div></div><p>Version 1.3, 3 November 2008</p><p>
 
2668
     Copyright © 2000, 2001, 2002, 2007, 2008
 
2669
Index: libstdc++-v3/doc/html/manual/containers.html
 
2670
===================================================================
 
2671
--- a/src/libstdc++-v3/doc/html/manual/containers.html  (.../tags/gcc_4_8_2_release)
 
2672
+++ b/src/libstdc++-v3/doc/html/manual/containers.html  (.../branches/gcc-4_8-branch)
 
2673
@@ -1,5 +1,5 @@
 
2674
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2675
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 9.  Containers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="facets.html" title="Facets" /><link rel="next" href="associative.html" title="Associative" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 9. 
 
2676
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 9.  Containers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="facets.html" title="Facets" /><link rel="next" href="associative.html" title="Associative" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 9. 
 
2677
   Containers
 
2678
   
 
2679
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="facets.html">Prev</a> </td><th width="60%" align="center">Part II. 
 
2680
@@ -6,8 +6,8 @@
 
2681
     Standard Contents
 
2682
   </th><td width="20%" align="right"> <a accesskey="n" href="associative.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.containers"></a>Chapter 9. 
 
2683
   Containers
 
2684
-  <a id="idp16037808" class="indexterm"></a>
 
2685
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="section"><a href="containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.sequences"></a>Sequences</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="containers.sequences.list"></a>list</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="sequences.list.size"></a>list::size() is O(n)</h4></div></div></div><p>
 
2686
+  <a id="idm269999493408" class="indexterm"></a>
 
2687
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="section"><a href="containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.containers.sequences"></a>Sequences</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="containers.sequences.list"></a>list</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="sequences.list.size"></a>list::size() is O(n)</h4></div></div></div><p>
 
2688
      Yes it is, and that's okay.  This is a decision that we preserved
 
2689
      when we imported SGI's STL implementation.  The following is
 
2690
      quoted from <a class="link" href="http://www.sgi.com/tech/stl/FAQ.html" target="_top">their FAQ</a>:
 
2691
Index: libstdc++-v3/doc/html/manual/io.html
 
2692
===================================================================
 
2693
--- a/src/libstdc++-v3/doc/html/manual/io.html  (.../tags/gcc_4_8_2_release)
 
2694
+++ b/src/libstdc++-v3/doc/html/manual/io.html  (.../branches/gcc-4_8-branch)
 
2695
@@ -1,5 +1,5 @@
 
2696
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2697
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 13.  Input and Output</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="numerics_and_c.html" title="Interacting with C" /><link rel="next" href="streambufs.html" title="Stream Buffers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 13. 
 
2698
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 13.  Input and Output</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="numerics_and_c.html" title="Interacting with C" /><link rel="next" href="streambufs.html" title="Stream Buffers" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 13. 
 
2699
   Input and Output
 
2700
   
 
2701
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="numerics_and_c.html">Prev</a> </td><th width="60%" align="center">Part II. 
 
2702
@@ -6,8 +6,8 @@
 
2703
     Standard Contents
 
2704
   </th><td width="20%" align="right"> <a accesskey="n" href="streambufs.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.io"></a>Chapter 13. 
 
2705
   Input and Output
 
2706
-  <a id="idp16257600" class="indexterm"></a>
 
2707
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="io.html#std.io.objects">Iostream Objects</a></span></dt><dt><span class="section"><a href="streambufs.html">Stream Buffers</a></span></dt><dd><dl><dt><span class="section"><a href="streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="section"><a href="streambufs.html#io.streambuf.buffering">Buffering</a></span></dt></dl></dd><dt><span class="section"><a href="stringstreams.html">Memory Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="stringstreams.html#std.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="section"><a href="fstreams.html">File Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="fstreams.html#std.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="section"><a href="fstreams.html#std.io.filestreams.binary">Binary Input and Output</a></span></dt></dl></dd><dt><span class="section"><a href="io_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="io_and_c.html#std.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="section"><a href="io_and_c.html#std.io.c.sync">Performance</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.objects"></a>Iostream Objects</h2></div></div></div><p>To minimize the time you have to wait on the compiler, it's good to
 
2708
+  <a id="idm269999273616" class="indexterm"></a>
 
2709
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="io.html#std.io.objects">Iostream Objects</a></span></dt><dt><span class="section"><a href="streambufs.html">Stream Buffers</a></span></dt><dd><dl><dt><span class="section"><a href="streambufs.html#io.streambuf.derived">Derived streambuf Classes</a></span></dt><dt><span class="section"><a href="streambufs.html#io.streambuf.buffering">Buffering</a></span></dt></dl></dd><dt><span class="section"><a href="stringstreams.html">Memory Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="stringstreams.html#std.io.memstreams.compat">Compatibility With strstream</a></span></dt></dl></dd><dt><span class="section"><a href="fstreams.html">File Based Streams</a></span></dt><dd><dl><dt><span class="section"><a href="fstreams.html#std.io.filestreams.copying_a_file">Copying a File</a></span></dt><dt><span class="section"><a href="fstreams.html#std.io.filestreams.binary">Binary Input and Output</a></span></dt></dl></dd><dt><span class="section"><a href="io_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="io_and_c.html#std.io.c.FILE">Using FILE* and file descriptors</a></span></dt><dt><span class="section"><a href="io_and_c.html#std.io.c.sync">Performance</a></span></dt></dl></dd></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.objects"></a>Iostream Objects</h2></div></div></div><p>To minimize the time you have to wait on the compiler, it's good to
 
2710
       only include the headers you really need.  Many people simply include
 
2711
       &lt;iostream&gt; when they don't need to -- and that can <span class="emphasis"><em>penalize
 
2712
       your runtime as well.</em></span>  Here are some tips on which header to use
 
2713
Index: libstdc++-v3/doc/html/manual/index.html
 
2714
===================================================================
 
2715
--- a/src/libstdc++-v3/doc/html/manual/index.html       (.../tags/gcc_4_8_2_release)
 
2716
+++ b/src/libstdc++-v3/doc/html/manual/index.html       (.../branches/gcc-4_8-branch)
 
2717
@@ -1,7 +1,7 @@
 
2718
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2719
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library Manual</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="../index.html" title="The GNU C++ Library" /><link rel="prev" href="../index.html" title="The GNU C++ Library" /><link rel="next" href="intro.html" title="Part I.  Introduction" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library Manual</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="../index.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><div><div><h1 class="title"><a id="manual"></a>The GNU C++ Library Manual</h1></div><div><div class="authorgroup"><div class="author"><h3 class="author"><span class="firstname"></span> <span class="surname"></span></h3></div><div class="author"><h3 class="author"><span class="firstname">Paolo</span> <span class="surname">Carlini</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Phil</span> <span class="surname">Edwards</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Doug</span> <span class="surname">Gregor</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Dhruv</span> <span class="surname">Matani</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jason</span> <span class="surname">Merrill</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Mark</span> <span class="surname">Mitchell</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Nathan</span> <span class="surname">Myers</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Felix</span> <span class="surname">Natter</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Stefan</span> <span class="surname">Olsson</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Silvius</span> <span class="surname">Rus</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Ami</span> <span class="surname">Tavory</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jonathan</span> <span class="surname">Wakely</span></h3></div></div></div><div><p class="copyright">Copyright © 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 
 
2720
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The GNU C++ Library Manual</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="../index.html" title="The GNU C++ Library" /><link rel="prev" href="../index.html" title="The GNU C++ Library" /><link rel="next" href="intro.html" title="Part I.  Introduction" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">The GNU C++ Library Manual</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="../index.html">Prev</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr></table><hr /></div><div class="book"><div class="titlepage"><div><div><h1 class="title"><a id="manual"></a>The GNU C++ Library Manual</h1></div><div><div class="authorgroup"><div class="author"><h3 class="author"><span class="firstname"></span> <span class="surname"></span></h3></div><div class="author"><h3 class="author"><span class="firstname">Paolo</span> <span class="surname">Carlini</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Phil</span> <span class="surname">Edwards</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Doug</span> <span class="surname">Gregor</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Dhruv</span> <span class="surname">Matani</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jason</span> <span class="surname">Merrill</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Mark</span> <span class="surname">Mitchell</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Nathan</span> <span class="surname">Myers</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Felix</span> <span class="surname">Natter</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Stefan</span> <span class="surname">Olsson</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Silvius</span> <span class="surname">Rus</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Johannes</span> <span class="surname">Singler</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Ami</span> <span class="surname">Tavory</span></h3></div><div class="author"><h3 class="author"><span class="firstname">Jonathan</span> <span class="surname">Wakely</span></h3></div></div></div><div><p class="copyright">Copyright © 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 
 
2721
       <a class="link" href="http://www.fsf.org" target="_top">FSF</a>
 
2722
-    </p></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="part"><a href="intro.html">I. 
 
2723
+    </p></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="part"><a href="intro.html">I. 
 
2724
   Introduction
 
2725
   
 
2726
 </a></span></dt><dd><dl><dt><span class="chapter"><a href="status.html">1. Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#manual.intro.status.iso">Implementation Status</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#status.iso.1998">C++ 1998/2003</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.1998.status">Implementation Status</a></span></dt><dt><span class="section"><a href="status.html#iso.1998.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.2011">C++ 2011</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.2011.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr1">C++ TR1</a></span></dt><dd><dl><dt><span class="section"><a href="status.html#iso.tr1.specific">Implementation Specific Behavior</a></span></dt></dl></dd><dt><span class="section"><a href="status.html#status.iso.tr24733">C++ TR 24733</a></span></dt></dl></dd><dt><span class="section"><a href="license.html">License</a></span></dt><dd><dl><dt><span class="section"><a href="license.html#manual.intro.status.license.gpl">The Code: GPL</a></span></dt><dt><span class="section"><a href="license.html#manual.intro.status.license.fdl">The Documentation: GPL, FDL</a></span></dt></dl></dd><dt><span class="section"><a href="bugs.html">Bugs</a></span></dt><dd><dl><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.impl">Implementation Bugs</a></span></dt><dt><span class="section"><a href="bugs.html#manual.intro.status.bugs.iso">Standard Bugs</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="setup.html">2. Setup</a></span></dt><dd><dl><dt><span class="section"><a href="setup.html#manual.intro.setup.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="configure.html">Configure</a></span></dt><dt><span class="section"><a href="make.html">Make</a></span></dt></dl></dd><dt><span class="chapter"><a href="using.html">3. Using</a></span></dt><dd><dl><dt><span class="section"><a href="using.html#manual.intro.using.flags">Command Options</a></span></dt><dt><span class="section"><a href="using_headers.html">Headers</a></span></dt><dd><dl><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.all">Header Files</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.mixing">Mixing Headers</a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.cheaders">The C Headers and <code class="code">namespace std</code></a></span></dt><dt><span class="section"><a href="using_headers.html#manual.intro.using.headers.pre">Precompiled Headers</a></span></dt></dl></dd><dt><span class="section"><a href="using_macros.html">Macros</a></span></dt><dt><span class="section"><a href="using_namespaces.html">Namespaces</a></span></dt><dd><dl><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.all">Available Namespaces</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.std">namespace std</a></span></dt><dt><span class="section"><a href="using_namespaces.html#manual.intro.using.namespaces.comp">Using Namespace Composition</a></span></dt></dl></dd><dt><span class="section"><a href="using_dynamic_or_shared.html">Linking</a></span></dt><dd><dl><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.freestanding">Almost Nothing</a></span></dt><dt><span class="section"><a href="using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic">Finding Dynamic or Shared Libraries</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html">Concurrency</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.prereq">Prerequisites</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.thread_safety">Thread Safety</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.atomics">Atomics</a></span></dt><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.io">IO</a></span></dt><dd><dl><dt><span class="section"><a href="using_concurrency.html#concurrency.io.structure">Structure</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.defaults">Defaults</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.future">Future</a></span></dt><dt><span class="section"><a href="using_concurrency.html#concurrency.io.alt">Alternatives</a></span></dt></dl></dd><dt><span class="section"><a href="using_concurrency.html#manual.intro.using.concurrency.containers">Containers</a></span></dt></dl></dd><dt><span class="section"><a href="using_exceptions.html">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.safety">Exception Safety</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.propagating">Exception Neutrality</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.no">Doing without</a></span></dt><dt><span class="section"><a href="using_exceptions.html#intro.using.exception.compat">Compatibility</a></span></dt><dd><dl><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.c">With <code class="literal">C</code></a></span></dt><dt><span class="section"><a href="using_exceptions.html#using.exception.compat.posix">With <code class="literal">POSIX</code> thread cancellation</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="debug.html">Debugging Support</a></span></dt><dd><dl><dt><span class="section"><a href="debug.html#debug.compiler">Using <span class="command"><strong>g++</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.req">Debug Versions of Library Binary Files</a></span></dt><dt><span class="section"><a href="debug.html#debug.memory">Memory Leak Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.races">Data Race Hunting</a></span></dt><dt><span class="section"><a href="debug.html#debug.gdb">Using <span class="command"><strong>gdb</strong></span></a></span></dt><dt><span class="section"><a href="debug.html#debug.exceptions">Tracking uncaught exceptions</a></span></dt><dt><span class="section"><a href="debug.html#debug.debug_mode">Debug Mode</a></span></dt><dt><span class="section"><a href="debug.html#debug.compile_time_checks">Compile Time Checking</a></span></dt><dt><span class="section"><a href="debug.html#debug.profile_mode">Profile-based Performance Analysis</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="part"><a href="std_contents.html">II. 
 
2727
@@ -15,13 +15,13 @@
 
2728
 </a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions">Exceptions</a></span></dt><dd><dl><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.api">API Reference</a></span></dt><dt><span class="section"><a href="diagnostics.html#std.diagnostics.exceptions.data">Adding Data to <code class="classname">exception</code></a></span></dt></dl></dd><dt><span class="section"><a href="concept_checking.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="utilities.html">6. 
 
2729
   Utilities
 
2730
   
 
2731
-</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp13920976">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idp13924528">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp13937824">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15512272">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idp15534784">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idp15542080">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp15556704">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15573056">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idp15576640">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7. 
 
2732
+</a></span></dt><dd><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270001611968">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idm270001608416">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm270001595120">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270000019344">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idm269999996832">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idm269999989536">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269999974912">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm269999958496">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idm269999954912">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></dd><dt><span class="chapter"><a href="strings.html">7. 
 
2733
   Strings
 
2734
   
 
2735
 </a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#std.strings.string">String Classes</a></span></dt><dd><dl><dt><span class="section"><a href="strings.html#strings.string.simple">Simple Transformations</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.case">Case Sensitivity</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.character_types">Arbitrary Character Types</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.token">Tokenizing</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.shrink">Shrink to Fit</a></span></dt><dt><span class="section"><a href="strings.html#strings.string.Cstring">CString (MFC)</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="localization.html">8. 
 
2736
   Localization
 
2737
   
 
2738
-</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idp15778336">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9. 
 
2739
+</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales">Locales</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#std.localization.locales.locale">locale</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locales.locale.req">Requirements</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.design">Design</a></span></dt><dt><span class="section"><a href="localization.html#locales.locale.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="localization.html#locale.impl.c">Interacting with "C" locales</a></span></dt></dl></dd><dt><span class="section"><a href="localization.html#locales.locale.future">Future</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="facets.html">Facets</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#std.localization.facet.ctype">ctype</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.ctype.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#idm269999753024">Specializations</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.ctype.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#std.localization.facet.codecvt">codecvt</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.codecvt.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.design">Design</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#codecvt.design.wchar_t_size"><span class="type">wchar_t</span> Size</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.unicode">Support for Unicode</a></span></dt><dt><span class="section"><a href="facets.html#codecvt.design.issues">Other Issues</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.codecvt.impl">Implementation</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.codecvt.future">Future</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#manual.localization.facet.messages">messages</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#facet.messages.req">Requirements</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.design">Design</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="facets.html#messages.impl.models">Models</a></span></dt><dt><span class="section"><a href="facets.html#messages.impl.gnu">The GNU Model</a></span></dt></dl></dd><dt><span class="section"><a href="facets.html#facet.messages.use">Use</a></span></dt><dt><span class="section"><a href="facets.html#facet.messages.future">Future</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="chapter"><a href="containers.html">9. 
 
2740
   Containers
 
2741
   
 
2742
 </a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#std.containers.sequences">Sequences</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#containers.sequences.list">list</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.list.size">list::size() is O(n)</a></span></dt></dl></dd><dt><span class="section"><a href="containers.html#containers.sequences.vector">vector</a></span></dt><dd><dl><dt><span class="section"><a href="containers.html#sequences.vector.management">Space Overhead Management</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="associative.html">Associative</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#containers.associative.insert_hints">Insertion Hints</a></span></dt><dt><span class="section"><a href="associative.html#containers.associative.bitset">bitset</a></span></dt><dd><dl><dt><span class="section"><a href="associative.html#associative.bitset.size_variable">Size Variable</a></span></dt><dt><span class="section"><a href="associative.html#associative.bitset.type_string">Type String</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="unordered_associative.html">Unordered Associative</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.hash">Hash Code</a></span></dt><dd><dl><dt><span class="section"><a href="unordered_associative.html#containers.unordered.cache">Hash Code Caching Policy</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="containers_and_c.html">Interacting with C</a></span></dt><dd><dl><dt><span class="section"><a href="containers_and_c.html#containers.c.vs_array">Containers vs. Arrays</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="iterators.html">10. 
 
2743
@@ -143,19 +143,19 @@
 
2744
   
 
2745
 </a></span></dt><dt><span class="appendix"><a href="appendix_gpl.html">D. 
 
2746
     <acronym class="acronym">GNU</acronym> General Public License version 3
 
2747
-  </a></span></dt><dt><span class="appendix"><a href="appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></dd></dl></div><div class="list-of-figures"><p><strong>List of Figures</strong></p><dl><dt>22.1. <a href="policy_data_structures.html#idp17613296">Node Invariants</a></dt><dt>22.2. <a href="policy_data_structures.html#idp17619952">Underlying Associative Data Structures</a></dt><dt>22.3. <a href="policy_data_structures.html#idp17651648">Range Iteration in Different Data Structures</a></dt><dt>22.4. <a href="policy_data_structures.html#idp17666528">Point Iteration in Hash Data Structures</a></dt><dt>22.5. <a href="policy_data_structures.html#idp17675840">Effect of erase in different underlying data structures</a></dt><dt>22.6. <a href="policy_data_structures.html#idp17743424">Underlying Priority Queue Data Structures</a></dt><dt>22.7. <a href="policy_data_structures_using.html#idp17806128">Exception Hierarchy</a></dt><dt>22.8. <a href="policy_data_structures_design.html#idp18000448">Non-unique Mapping Standard Containers</a></dt><dt>22.9. <a href="policy_data_structures_design.html#fig.pbds_embedded_lists_2">
 
2748
+  </a></span></dt><dt><span class="appendix"><a href="appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></dd></dl></div><div class="list-of-figures"><p><strong>List of Figures</strong></p><dl><dt>22.1. <a href="policy_data_structures.html#idm269997917584">Node Invariants</a></dt><dt>22.2. <a href="policy_data_structures.html#idm269997910864">Underlying Associative Data Structures</a></dt><dt>22.3. <a href="policy_data_structures.html#idm269997879168">Range Iteration in Different Data Structures</a></dt><dt>22.4. <a href="policy_data_structures.html#idm269997864256">Point Iteration in Hash Data Structures</a></dt><dt>22.5. <a href="policy_data_structures.html#idm269997855056">Effect of erase in different underlying data structures</a></dt><dt>22.6. <a href="policy_data_structures.html#idm269997787392">Underlying Priority Queue Data Structures</a></dt><dt>22.7. <a href="policy_data_structures_using.html#idm269997724688">Exception Hierarchy</a></dt><dt>22.8. <a href="policy_data_structures_design.html#idm269997530416">Non-unique Mapping Standard Containers</a></dt><dt>22.9. <a href="policy_data_structures_design.html#fig.pbds_embedded_lists_2">
 
2749
            Effect of embedded lists in
 
2750
            <code class="classname">std::multimap</code>
 
2751
-         </a></dt><dt>22.10. <a href="policy_data_structures_design.html#idp18023952">Non-unique Mapping Containers</a></dt><dt>22.11. <a href="policy_data_structures_design.html#idp18043824">Point Iterator Hierarchy</a></dt><dt>22.12. <a href="policy_data_structures_design.html#idp18057168">Invalidation Guarantee Tags Hierarchy</a></dt><dt>22.13. <a href="policy_data_structures_design.html#idp18087392">Container Tag Hierarchy</a></dt><dt>22.14. <a href="policy_data_structures_design.html#idp18127536">Hash functions, ranged-hash functions, and
 
2752
-             range-hashing functions</a></dt><dt>22.15. <a href="policy_data_structures_design.html#idp18191968">Insert hash sequence diagram</a></dt><dt>22.16. <a href="policy_data_structures_design.html#idp18199024">Insert hash sequence diagram with a null policy</a></dt><dt>22.17. <a href="policy_data_structures_design.html#idp18215840">Hash policy class diagram</a></dt><dt>22.18. <a href="policy_data_structures_design.html#idp18234944">Balls and bins</a></dt><dt>22.19. <a href="policy_data_structures_design.html#idp18265728">Insert resize sequence diagram</a></dt><dt>22.20. <a href="policy_data_structures_design.html#idp18273504">Standard resize policy trigger sequence
 
2753
-               diagram</a></dt><dt>22.21. <a href="policy_data_structures_design.html#idp18277664">Standard resize policy size sequence
 
2754
-               diagram</a></dt><dt>22.22. <a href="policy_data_structures_design.html#idp18355696">Tree node invariants</a></dt><dt>22.23. <a href="policy_data_structures_design.html#idp18365136">Tree node invalidation</a></dt><dt>22.24. <a href="policy_data_structures_design.html#idp18378304">A tree and its update policy</a></dt><dt>22.25. <a href="policy_data_structures_design.html#idp18389968">Restoring node invariants</a></dt><dt>22.26. <a href="policy_data_structures_design.html#idp18398144">Insert update sequence</a></dt><dt>22.27. <a href="policy_data_structures_design.html#idp18420400">Useless update path</a></dt><dt>22.28. <a href="policy_data_structures_design.html#idp18465088">A PATRICIA trie</a></dt><dt>22.29. <a href="policy_data_structures_design.html#idp18475584">A trie and its update policy</a></dt><dt>22.30. <a href="policy_data_structures_design.html#idp18506160">A simple list</a></dt><dt>22.31. <a href="policy_data_structures_design.html#idp18511744">The counter algorithm</a></dt><dt>22.32. <a href="policy_data_structures_design.html#idp18575568">Underlying Priority-Queue Data-Structures.</a></dt><dt>22.33. <a href="policy_data_structures_design.html#idp18610544">Priority-Queue Data-Structure Tags.</a></dt><dt>B.1. <a href="appendix_porting.html#idp22035648">Configure and Build File Dependencies</a></dt></dl></div><div class="list-of-tables"><p><strong>List of Tables</strong></p><dl><dt>1.1. <a href="status.html#idp452240">C++ 1998/2003 Implementation Status</a></dt><dt>1.2. <a href="status.html#idp8670848">C++ 2011 Implementation Status</a></dt><dt>1.3. <a href="status.html#idp7483200">C++ TR1 Implementation Status</a></dt><dt>1.4. <a href="status.html#idp12559072">C++ TR 24733 Implementation Status</a></dt><dt>3.1. <a href="using.html#idp13051936">C++ Command Options</a></dt><dt>3.2. <a href="using_headers.html#idp13079360">C++ 1998 Library Headers</a></dt><dt>3.3. <a href="using_headers.html#idp13115840">C++ 1998 Library Headers for C Library Facilities</a></dt><dt>3.4. <a href="using_headers.html#idp13140576">C++ 2011 Library Headers</a></dt><dt>3.5. <a href="using_headers.html#idp13192016">C++ 2011 Library Headers for C Library Facilities</a></dt><dt>3.6. <a href="using_headers.html#idp13221904">C++ TR 1 Library Headers</a></dt><dt>3.7. <a href="using_headers.html#idp13238832">C++ TR 1 Library Headers for C Library Facilities</a></dt><dt>3.8. <a href="using_headers.html#idp13259904">C++ TR 24733 Decimal Floating-Point Header</a></dt><dt>3.9. <a href="using_headers.html#idp13265424">C++ ABI Headers</a></dt><dt>3.10. <a href="using_headers.html#idp13271824">Extension Headers</a></dt><dt>3.11. <a href="using_headers.html#idp13307552">Extension Debug Headers</a></dt><dt>3.12. <a href="using_headers.html#idp13322320">Extension Profile Headers</a></dt><dt>3.13. <a href="using_headers.html#idp13335696">Extension Parallel Headers</a></dt><dt>17.1. <a href="debug_mode_using.html#idp16490400">Debugging Containers</a></dt><dt>17.2. <a href="debug_mode_using.html#idp16535296">Debugging Containers C++11</a></dt><dt>18.1. <a href="parallel_mode_using.html#idp16725920">Parallel Algorithms</a></dt><dt>19.1. <a href="profile_mode_design.html#idp16981200">Profile Code Location</a></dt><dt>19.2. <a href="profile_mode_diagnostics.html#idp17088912">Profile Diagnostics</a></dt><dt>21.1. <a href="bitmap_allocator_impl.html#idp17500848">Bitmap Allocator Memory Map</a></dt><dt>B.1. <a href="documentation_hacking.html#idp22162432">Doxygen Prerequisites</a></dt><dt>B.2. <a href="documentation_hacking.html#idp22238096">HTML to Doxygen Markup Comparison</a></dt><dt>B.3. <a href="documentation_hacking.html#idp22257536">Docbook Prerequisites</a></dt><dt>B.4. <a href="documentation_hacking.html#idp22335040">HTML to Docbook XML Markup Comparison</a></dt><dt>B.5. <a href="documentation_hacking.html#idp22359184">Docbook XML Element Use</a></dt><dt>B.6. <a href="api.html#idp23030528">Extension Allocators</a></dt><dt>B.7. <a href="api.html#idp23058160">Extension Allocators Continued</a></dt></dl></div><div class="list-of-equations"><p><strong>List of Equations</strong></p><dl><dt>22.1. <a href="policy_data_structures_design.html#idp18141344">Ranged Hash Function</a></dt><dt>22.2. <a href="policy_data_structures_design.html#idp18147232">Range-Hashing, Division Method</a></dt><dt>22.3. <a href="policy_data_structures_design.html#idp18151744">Division via Prime Modulo</a></dt><dt>22.4. <a href="policy_data_structures_design.html#idp18153568">Division via Bit Mask</a></dt><dt>22.5. <a href="policy_data_structures_design.html#idp18163200">
 
2755
+         </a></dt><dt>22.10. <a href="policy_data_structures_design.html#idm269997506912">Non-unique Mapping Containers</a></dt><dt>22.11. <a href="policy_data_structures_design.html#idm269997487104">Point Iterator Hierarchy</a></dt><dt>22.12. <a href="policy_data_structures_design.html#idm269997473760">Invalidation Guarantee Tags Hierarchy</a></dt><dt>22.13. <a href="policy_data_structures_design.html#idm269997443664">Container Tag Hierarchy</a></dt><dt>22.14. <a href="policy_data_structures_design.html#idm269997403584">Hash functions, ranged-hash functions, and
 
2756
+             range-hashing functions</a></dt><dt>22.15. <a href="policy_data_structures_design.html#idm269997339216">Insert hash sequence diagram</a></dt><dt>22.16. <a href="policy_data_structures_design.html#idm269997332160">Insert hash sequence diagram with a null policy</a></dt><dt>22.17. <a href="policy_data_structures_design.html#idm269997315408">Hash policy class diagram</a></dt><dt>22.18. <a href="policy_data_structures_design.html#idm269997296368">Balls and bins</a></dt><dt>22.19. <a href="policy_data_structures_design.html#idm269997265648">Insert resize sequence diagram</a></dt><dt>22.20. <a href="policy_data_structures_design.html#idm269997257872">Standard resize policy trigger sequence
 
2757
+               diagram</a></dt><dt>22.21. <a href="policy_data_structures_design.html#idm269997253712">Standard resize policy size sequence
 
2758
+               diagram</a></dt><dt>22.22. <a href="policy_data_structures_design.html#idm269997175616">Tree node invariants</a></dt><dt>22.23. <a href="policy_data_structures_design.html#idm269997166176">Tree node invalidation</a></dt><dt>22.24. <a href="policy_data_structures_design.html#idm269997153072">A tree and its update policy</a></dt><dt>22.25. <a href="policy_data_structures_design.html#idm269997141408">Restoring node invariants</a></dt><dt>22.26. <a href="policy_data_structures_design.html#idm269997133232">Insert update sequence</a></dt><dt>22.27. <a href="policy_data_structures_design.html#idm269997110976">Useless update path</a></dt><dt>22.28. <a href="policy_data_structures_design.html#idm269997066288">A PATRICIA trie</a></dt><dt>22.29. <a href="policy_data_structures_design.html#idm269997055856">A trie and its update policy</a></dt><dt>22.30. <a href="policy_data_structures_design.html#idm269997025344">A simple list</a></dt><dt>22.31. <a href="policy_data_structures_design.html#idm269997019760">The counter algorithm</a></dt><dt>22.32. <a href="policy_data_structures_design.html#idm269996955920">Underlying Priority-Queue Data-Structures.</a></dt><dt>22.33. <a href="policy_data_structures_design.html#idm269996920880">Priority-Queue Data-Structure Tags.</a></dt><dt>B.1. <a href="appendix_porting.html#idm269993497120">Configure and Build File Dependencies</a></dt></dl></div><div class="list-of-tables"><p><strong>List of Tables</strong></p><dl><dt>1.1. <a href="status.html#idm270008034928">C++ 1998/2003 Implementation Status</a></dt><dt>1.2. <a href="status.html#idm270007982624">C++ 2011 Implementation Status</a></dt><dt>1.3. <a href="status.html#idm270006687472">C++ TR1 Implementation Status</a></dt><dt>1.4. <a href="status.html#idm270002960368">C++ TR 24733 Implementation Status</a></dt><dt>3.1. <a href="using.html#idm270002481088">C++ Command Options</a></dt><dt>3.2. <a href="using_headers.html#idm270002453792">C++ 1998 Library Headers</a></dt><dt>3.3. <a href="using_headers.html#idm270002417312">C++ 1998 Library Headers for C Library Facilities</a></dt><dt>3.4. <a href="using_headers.html#idm270002392576">C++ 2011 Library Headers</a></dt><dt>3.5. <a href="using_headers.html#idm270002341136">C++ 2011 Library Headers for C Library Facilities</a></dt><dt>3.6. <a href="using_headers.html#idm270002311248">C++ TR 1 Library Headers</a></dt><dt>3.7. <a href="using_headers.html#idm270002294320">C++ TR 1 Library Headers for C Library Facilities</a></dt><dt>3.8. <a href="using_headers.html#idm270002273248">C++ TR 24733 Decimal Floating-Point Header</a></dt><dt>3.9. <a href="using_headers.html#idm270002267728">C++ ABI Headers</a></dt><dt>3.10. <a href="using_headers.html#idm270002261328">Extension Headers</a></dt><dt>3.11. <a href="using_headers.html#idm270002225600">Extension Debug Headers</a></dt><dt>3.12. <a href="using_headers.html#idm270002210832">Extension Profile Headers</a></dt><dt>3.13. <a href="using_headers.html#idm270002197456">Extension Parallel Headers</a></dt><dt>17.1. <a href="debug_mode_using.html#idm269999040896">Debugging Containers</a></dt><dt>17.2. <a href="debug_mode_using.html#idm269998996000">Debugging Containers C++11</a></dt><dt>18.1. <a href="parallel_mode_using.html#idm269998805216">Parallel Algorithms</a></dt><dt>19.1. <a href="profile_mode_design.html#idm269998550064">Profile Code Location</a></dt><dt>19.2. <a href="profile_mode_diagnostics.html#idm269998442544">Profile Diagnostics</a></dt><dt>21.1. <a href="bitmap_allocator_impl.html#idm269998030352">Bitmap Allocator Memory Map</a></dt><dt>B.1. <a href="documentation_hacking.html#idm269993370272">Doxygen Prerequisites</a></dt><dt>B.2. <a href="documentation_hacking.html#idm269993294592">HTML to Doxygen Markup Comparison</a></dt><dt>B.3. <a href="documentation_hacking.html#idm269993275152">Docbook Prerequisites</a></dt><dt>B.4. <a href="documentation_hacking.html#idm269993197520">HTML to Docbook XML Markup Comparison</a></dt><dt>B.5. <a href="documentation_hacking.html#idm269993173376">Docbook XML Element Use</a></dt><dt>B.6. <a href="api.html#idm269992502096">Extension Allocators</a></dt><dt>B.7. <a href="api.html#idm269992474464">Extension Allocators Continued</a></dt></dl></div><div class="list-of-equations"><p><strong>List of Equations</strong></p><dl><dt>22.1. <a href="policy_data_structures_design.html#idm269997389776">Ranged Hash Function</a></dt><dt>22.2. <a href="policy_data_structures_design.html#idm269997383888">Range-Hashing, Division Method</a></dt><dt>22.3. <a href="policy_data_structures_design.html#idm269997379376">Division via Prime Modulo</a></dt><dt>22.4. <a href="policy_data_structures_design.html#idm269997377552">Division via Bit Mask</a></dt><dt>22.5. <a href="policy_data_structures_design.html#idm269997367984">
 
2759
                A Standard String Hash Function
 
2760
-             </a></dt><dt>22.6. <a href="policy_data_structures_design.html#idp18169344">
 
2761
+             </a></dt><dt>22.6. <a href="policy_data_structures_design.html#idm269997361840">
 
2762
                Only k String DNA Hash
 
2763
-             </a></dt><dt>22.7. <a href="policy_data_structures_design.html#idp18240448">
 
2764
+             </a></dt><dt>22.7. <a href="policy_data_structures_design.html#idm269997290864">
 
2765
                Probability of Probe Sequence of Length k
 
2766
-             </a></dt><dt>22.8. <a href="policy_data_structures_design.html#idp18247216">
 
2767
+             </a></dt><dt>22.8. <a href="policy_data_structures_design.html#idm269997284096">
 
2768
                Probability Probe Sequence in Some Bin
 
2769
              </a></dt></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="../index.html">Prev</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="intro.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">The GNU C++ Library </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Part I. 
 
2770
   Introduction
 
2771
Index: libstdc++-v3/doc/html/manual/numerics_and_c.html
 
2772
===================================================================
 
2773
--- a/src/libstdc++-v3/doc/html/manual/numerics_and_c.html      (.../tags/gcc_4_8_2_release)
 
2774
+++ b/src/libstdc++-v3/doc/html/manual/numerics_and_c.html      (.../branches/gcc-4_8-branch)
 
2775
@@ -1,5 +1,5 @@
 
2776
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2777
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="numerics.html" title="Chapter 12.  Numerics" /><link rel="prev" href="generalized_numeric_operations.html" title="Generalized Operations" /><link rel="next" href="io.html" title="Chapter 13.  Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="generalized_numeric_operations.html">Prev</a> </td><th width="60%" align="center">Chapter 12. 
 
2778
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Interacting with C</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="numerics.html" title="Chapter 12.  Numerics" /><link rel="prev" href="generalized_numeric_operations.html" title="Generalized Operations" /><link rel="next" href="io.html" title="Chapter 13.  Input and Output" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Interacting with C</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="generalized_numeric_operations.html">Prev</a> </td><th width="60%" align="center">Chapter 12. 
 
2779
   Numerics
 
2780
   
 
2781
 </th><td width="20%" align="right"> <a accesskey="n" href="io.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.c"></a>Interacting with C</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.c.array"></a>Numerics vs. Arrays</h3></div></div></div><p>One of the major reasons why FORTRAN can chew through numbers so well
 
2782
Index: libstdc++-v3/doc/html/manual/appendix_gpl.html
 
2783
===================================================================
 
2784
--- a/src/libstdc++-v3/doc/html/manual/appendix_gpl.html        (.../tags/gcc_4_8_2_release)
 
2785
+++ b/src/libstdc++-v3/doc/html/manual/appendix_gpl.html        (.../branches/gcc-4_8-branch)
 
2786
@@ -1,5 +1,5 @@
 
2787
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2788
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix D.  GNU General Public License version 3</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV.  Appendices" /><link rel="prev" href="appendix_free.html" title="Appendix C.  Free Software Needs Free Documentation" /><link rel="next" href="appendix_gfdl.html" title="Appendix E. GNU Free Documentation License" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix D. 
 
2789
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Appendix D.  GNU General Public License version 3</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix.html" title="Part IV.  Appendices" /><link rel="prev" href="appendix_free.html" title="Appendix C.  Free Software Needs Free Documentation" /><link rel="next" href="appendix_gfdl.html" title="Appendix E. GNU Free Documentation License" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Appendix D. 
 
2790
     <acronym class="acronym">GNU</acronym> General Public License version 3
 
2791
   </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="appendix_free.html">Prev</a> </td><th width="60%" align="center">Part IV. 
 
2792
   Appendices
 
2793
@@ -77,7 +77,7 @@
 
2794
   </p><p>
 
2795
     The precise terms and conditions for copying, distribution and modification
 
2796
     follow.
 
2797
-  </p><h2><a id="idp23466384"></a>
 
2798
+  </p><h2><a id="idm269992066368"></a>
 
2799
     TERMS AND CONDITIONS
 
2800
   </h2><h2><a id="gpl-3-definitions"></a>
 
2801
     0. Definitions.
 
2802
@@ -618,7 +618,7 @@
 
2803
     waiver of all civil liability in connection with the Program, unless a
 
2804
     warranty or assumption of liability accompanies a copy of the Program in
 
2805
     return for a fee.
 
2806
-  </p><h2><a id="idp23565184"></a>
 
2807
+  </p><h2><a id="idm269991967568"></a>
 
2808
     END OF TERMS AND CONDITIONS
 
2809
   </h2><h2><a id="HowToApply"></a>
 
2810
     How to Apply These Terms to Your New Programs
 
2811
Index: libstdc++-v3/doc/html/manual/source_code_style.html
 
2812
===================================================================
 
2813
--- a/src/libstdc++-v3/doc/html/manual/source_code_style.html   (.../tags/gcc_4_8_2_release)
 
2814
+++ b/src/libstdc++-v3/doc/html/manual/source_code_style.html   (.../branches/gcc-4_8-branch)
 
2815
@@ -1,5 +1,5 @@
 
2816
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2817
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Coding Style</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="Appendix A.  Contributing" /><link rel="prev" href="source_organization.html" title="Directory Layout and Source Conventions" /><link rel="next" href="source_design_notes.html" title="Design Notes" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Coding Style</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_organization.html">Prev</a> </td><th width="60%" align="center">Appendix A. 
 
2818
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Coding Style</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="appendix_contributing.html" title="Appendix A.  Contributing" /><link rel="prev" href="source_organization.html" title="Directory Layout and Source Conventions" /><link rel="next" href="source_design_notes.html" title="Design Notes" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Coding Style</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="source_organization.html">Prev</a> </td><th width="60%" align="center">Appendix A. 
 
2819
   Contributing
 
2820
   
 
2821
 </th><td width="20%" align="right"> <a accesskey="n" href="source_design_notes.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.coding_style"></a>Coding Style</h2></div></div></div><p>
 
2822
Index: libstdc++-v3/doc/html/manual/streambufs.html
 
2823
===================================================================
 
2824
--- a/src/libstdc++-v3/doc/html/manual/streambufs.html  (.../tags/gcc_4_8_2_release)
 
2825
+++ b/src/libstdc++-v3/doc/html/manual/streambufs.html  (.../branches/gcc-4_8-branch)
 
2826
@@ -1,5 +1,5 @@
 
2827
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2828
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Stream Buffers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13.  Input and Output" /><link rel="prev" href="io.html" title="Chapter 13.  Input and Output" /><link rel="next" href="stringstreams.html" title="Memory Based Streams" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Stream Buffers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
 
2829
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Stream Buffers</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="io.html" title="Chapter 13.  Input and Output" /><link rel="prev" href="io.html" title="Chapter 13.  Input and Output" /><link rel="next" href="stringstreams.html" title="Memory Based Streams" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Stream Buffers</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="io.html">Prev</a> </td><th width="60%" align="center">Chapter 13. 
 
2830
   Input and Output
 
2831
   
 
2832
 </th><td width="20%" align="right"> <a accesskey="n" href="stringstreams.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.io.streambufs"></a>Stream Buffers</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="io.streambuf.derived"></a>Derived streambuf Classes</h3></div></div></div><p>
 
2833
Index: libstdc++-v3/doc/html/manual/utilities.html
 
2834
===================================================================
 
2835
--- a/src/libstdc++-v3/doc/html/manual/utilities.html   (.../tags/gcc_4_8_2_release)
 
2836
+++ b/src/libstdc++-v3/doc/html/manual/utilities.html   (.../branches/gcc-4_8-branch)
 
2837
@@ -1,5 +1,5 @@
 
2838
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 
2839
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 6.  Utilities</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.77.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="concept_checking.html" title="Concept Checking" /><link rel="next" href="pairs.html" title="Pairs" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 6. 
 
2840
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Chapter 6.  Utilities</title><meta name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><meta name="keywords" content="ISO C++, library" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="std_contents.html" title="Part II.  Standard Contents" /><link rel="prev" href="concept_checking.html" title="Concept Checking" /><link rel="next" href="pairs.html" title="Pairs" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 6. 
 
2841
   Utilities
 
2842
   
 
2843
 </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="concept_checking.html">Prev</a> </td><th width="60%" align="center">Part II. 
 
2844
@@ -6,8 +6,8 @@
 
2845
     Standard Contents
 
2846
   </th><td width="20%" align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr></table><hr /></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a id="std.util"></a>Chapter 6. 
 
2847
   Utilities
 
2848
-  <a id="idp13862416" class="indexterm"></a>
 
2849
-</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp13920976">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idp13924528">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp13937824">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15512272">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idp15534784">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idp15542080">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp15556704">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idp15573056">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idp15576640">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.functors"></a>Functors</h2></div></div></div><p>If you don't know what functors are, you're not alone.  Many people
 
2850
+  <a id="idm270001670464" class="indexterm"></a>
 
2851
+</h2></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="section"><a href="utilities.html#std.util.functors">Functors</a></span></dt><dt><span class="section"><a href="pairs.html">Pairs</a></span></dt><dt><span class="section"><a href="memory.html">Memory</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#std.util.memory.allocator">Allocators</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#allocator.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#allocator.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#allocator.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270001611968">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idm270001608416">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm270001595120">Disabling Memory Caching</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#allocator.using">Using a Specific Allocator</a></span></dt><dt><span class="section"><a href="memory.html#allocator.custom">Custom Allocators</a></span></dt><dt><span class="section"><a href="memory.html#allocator.ext">Extension Allocators</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.auto_ptr">auto_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#auto_ptr.limitations">Limitations</a></span></dt><dt><span class="section"><a href="memory.html#auto_ptr.using">Use in Containers</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#std.util.memory.shared_ptr">shared_ptr</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#shared_ptr.req">Requirements</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.design_issues">Design Issues</a></span></dt><dt><span class="section"><a href="memory.html#shared_ptr.impl">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm270000019344">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idm269999996832">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idm269999989536">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269999974912">Related functions and classes</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.using">Use</a></span></dt><dd><dl><dt><span class="section"><a href="memory.html#idm269999958496">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idm269999954912">Unresolved Issues</a></span></dt></dl></dd><dt><span class="section"><a href="memory.html#shared_ptr.ack">Acknowledgments</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="traits.html">Traits</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.functors"></a>Functors</h2></div></div></div><p>If you don't know what functors are, you're not alone.  Many people
 
2852
       get slightly the wrong idea.  In the interest of not reinventing
 
2853
       the wheel, we will refer you to the introduction to the functor
 
2854
       concept written by SGI as part of their STL, in
 
2855
Index: libstdc++-v3/include/debug/functions.h
 
2856
===================================================================
 
2857
--- a/src/libstdc++-v3/include/debug/functions.h        (.../tags/gcc_4_8_2_release)
 
2858
+++ b/src/libstdc++-v3/include/debug/functions.h        (.../branches/gcc-4_8-branch)
 
2859
@@ -345,11 +345,13 @@
 
2860
       return __check_sorted_set_aux(__first, __last, __pred, _SameType());
 
2861
    }
 
2862
 
 
2863
+  // _GLIBCXX_RESOLVE_LIB_DEFECTS
 
2864
+  // 270. Binary search requirements overly strict
 
2865
+  // Determine if a sequence is partitioned w.r.t. this element.
 
2866
   template<typename _ForwardIterator, typename _Tp>
 
2867
     inline bool
 
2868
-  __check_partitioned_lower_aux(_ForwardIterator __first,
 
2869
-                               _ForwardIterator __last, const _Tp& __value,
 
2870
-                               std::forward_iterator_tag)
 
2871
+    __check_partitioned_lower(_ForwardIterator __first,
 
2872
+                             _ForwardIterator __last, const _Tp& __value)
 
2873
     {
 
2874
       while (__first != __last && *__first < __value)
 
2875
        ++__first;
 
2876
@@ -362,38 +364,11 @@
 
2877
       return __first == __last;
 
2878
     }
 
2879
 
 
2880
-  // For performance reason, as the iterator range has been validated, check on
 
2881
-  // random access safe iterators is done using the base iterator.
 
2882
-  template<typename _Iterator, typename _Sequence, typename _Tp>
 
2883
-    inline bool
 
2884
-    __check_partitioned_lower_aux(
 
2885
-                       const _Safe_iterator<_Iterator, _Sequence>& __first,
 
2886
-                       const _Safe_iterator<_Iterator, _Sequence>& __last,
 
2887
-                       const _Tp& __value,
 
2888
-                       std::random_access_iterator_tag __tag)
 
2889
-    {
 
2890
-      return __check_partitioned_lower_aux(__first.base(), __last.base(),
 
2891
-                                          __value, __tag);
 
2892
-    }
 
2893
-
 
2894
-  // _GLIBCXX_RESOLVE_LIB_DEFECTS
 
2895
-  // 270. Binary search requirements overly strict
 
2896
-  // Determine if a sequence is partitioned w.r.t. this element.
 
2897
   template<typename _ForwardIterator, typename _Tp>
 
2898
     inline bool
 
2899
-    __check_partitioned_lower(_ForwardIterator __first,
 
2900
+    __check_partitioned_upper(_ForwardIterator __first,
 
2901
                              _ForwardIterator __last, const _Tp& __value)
 
2902
     {
 
2903
-      return __check_partitioned_lower_aux(__first, __last, __value,
 
2904
-                                          std::__iterator_category(__first));
 
2905
-    }
 
2906
-
 
2907
-  template<typename _ForwardIterator, typename _Tp>
 
2908
-    inline bool
 
2909
-    __check_partitioned_upper_aux(_ForwardIterator __first,
 
2910
-                                 _ForwardIterator __last, const _Tp& __value,
 
2911
-                                 std::forward_iterator_tag)
 
2912
-    {
 
2913
       while (__first != __last && !(__value < *__first))
 
2914
        ++__first;
 
2915
       if (__first != __last)
 
2916
@@ -405,35 +380,12 @@
 
2917
       return __first == __last;
 
2918
     }
 
2919
 
 
2920
-  // For performance reason, as the iterator range has been validated, check on
 
2921
-  // random access safe iterators is done using the base iterator.
 
2922
-  template<typename _Iterator, typename _Sequence, typename _Tp>
 
2923
-    inline bool
 
2924
-    __check_partitioned_upper_aux(
 
2925
-                       const _Safe_iterator<_Iterator, _Sequence>& __first,
 
2926
-                       const _Safe_iterator<_Iterator, _Sequence>& __last,
 
2927
-                       const _Tp& __value,
 
2928
-                       std::random_access_iterator_tag __tag)
 
2929
-    {
 
2930
-      return __check_partitioned_upper_aux(__first.base(), __last.base(),
 
2931
-                                          __value, __tag);
 
2932
-    }
 
2933
-
 
2934
-  template<typename _ForwardIterator, typename _Tp>
 
2935
-    inline bool
 
2936
-    __check_partitioned_upper(_ForwardIterator __first,
 
2937
-                             _ForwardIterator __last, const _Tp& __value)
 
2938
-    {
 
2939
-      return __check_partitioned_upper_aux(__first, __last, __value,
 
2940
-                                          std::__iterator_category(__first));
 
2941
-    }
 
2942
-
 
2943
+  // Determine if a sequence is partitioned w.r.t. this element.
 
2944
   template<typename _ForwardIterator, typename _Tp, typename _Pred>
 
2945
     inline bool
 
2946
-    __check_partitioned_lower_aux(_ForwardIterator __first,
 
2947
-                                 _ForwardIterator __last, const _Tp& __value,
 
2948
-                                 _Pred __pred,
 
2949
-                                 std::forward_iterator_tag)
 
2950
+    __check_partitioned_lower(_ForwardIterator __first,
 
2951
+                             _ForwardIterator __last, const _Tp& __value,
 
2952
+                             _Pred __pred)
 
2953
     {
 
2954
       while (__first != __last && bool(__pred(*__first, __value)))
 
2955
        ++__first;
 
2956
@@ -446,39 +398,12 @@
 
2957
       return __first == __last;
 
2958
     }
 
2959
 
 
2960
-  // For performance reason, as the iterator range has been validated, check on
 
2961
-  // random access safe iterators is done using the base iterator.
 
2962
-  template<typename _Iterator, typename _Sequence,
 
2963
-          typename _Tp, typename _Pred>
 
2964
-    inline bool
 
2965
-    __check_partitioned_lower_aux(
 
2966
-                       const _Safe_iterator<_Iterator, _Sequence>& __first,
 
2967
-                       const _Safe_iterator<_Iterator, _Sequence>& __last,
 
2968
-                       const _Tp& __value, _Pred __pred,
 
2969
-                       std::random_access_iterator_tag __tag)
 
2970
-    {
 
2971
-      return __check_partitioned_lower_aux(__first.base(), __last.base(),
 
2972
-                                          __value, __pred, __tag);
 
2973
-    }
 
2974
-
 
2975
-  // Determine if a sequence is partitioned w.r.t. this element.
 
2976
   template<typename _ForwardIterator, typename _Tp, typename _Pred>
 
2977
     inline bool
 
2978
-    __check_partitioned_lower(_ForwardIterator __first,
 
2979
+    __check_partitioned_upper(_ForwardIterator __first,
 
2980
                              _ForwardIterator __last, const _Tp& __value,
 
2981
                              _Pred __pred)
 
2982
     {
 
2983
-      return __check_partitioned_lower_aux(__first, __last, __value, __pred,
 
2984
-                                          std::__iterator_category(__first));
 
2985
-    }
 
2986
-
 
2987
-  template<typename _ForwardIterator, typename _Tp, typename _Pred>
 
2988
-    inline bool
 
2989
-    __check_partitioned_upper_aux(_ForwardIterator __first,
 
2990
-                                 _ForwardIterator __last, const _Tp& __value,
 
2991
-                                 _Pred __pred,
 
2992
-                                 std::forward_iterator_tag)
 
2993
-    {
 
2994
       while (__first != __last && !bool(__pred(__value, *__first)))
 
2995
        ++__first;
 
2996
       if (__first != __last)
 
2997
@@ -490,31 +415,6 @@
 
2998
       return __first == __last;
 
2999
     }
 
3000
 
 
3001
-  // For performance reason, as the iterator range has been validated, check on
 
3002
-  // random access safe iterators is done using the base iterator.
 
3003
-  template<typename _Iterator, typename _Sequence,
 
3004
-          typename _Tp, typename _Pred>
 
3005
-    inline bool
 
3006
-    __check_partitioned_upper_aux(
 
3007
-                       const _Safe_iterator<_Iterator, _Sequence>& __first,
 
3008
-                       const _Safe_iterator<_Iterator, _Sequence>& __last,
 
3009
-                       const _Tp& __value, _Pred __pred,
 
3010
-                       std::random_access_iterator_tag __tag)
 
3011
-    {
 
3012
-      return __check_partitioned_upper_aux(__first.base(), __last.base(),
 
3013
-                                          __value, __pred, __tag);
 
3014
-    }
 
3015
-
 
3016
-  template<typename _ForwardIterator, typename _Tp, typename _Pred>
 
3017
-    inline bool
 
3018
-    __check_partitioned_upper(_ForwardIterator __first,
 
3019
-                             _ForwardIterator __last, const _Tp& __value,
 
3020
-                             _Pred __pred)
 
3021
-    {
 
3022
-      return __check_partitioned_upper_aux(__first, __last, __value, __pred,
 
3023
-                                          std::__iterator_category(__first));
 
3024
-    }
 
3025
-
 
3026
   // Helper struct to detect random access safe iterators.
 
3027
   template<typename _Iterator>
 
3028
     struct __is_safe_random_iterator
 
3029
Index: libstdc++-v3/include/debug/macros.h
 
3030
===================================================================
 
3031
--- a/src/libstdc++-v3/include/debug/macros.h   (.../tags/gcc_4_8_2_release)
 
3032
+++ b/src/libstdc++-v3/include/debug/macros.h   (.../branches/gcc-4_8-branch)
 
3033
@@ -261,8 +261,9 @@
 
3034
     w.r.t. the value _Value. */
 
3035
 #define __glibcxx_check_partitioned_lower(_First,_Last,_Value)         \
 
3036
 __glibcxx_check_valid_range(_First,_Last);                             \
 
3037
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(_First, _Last, \
 
3038
-                                                           _Value),    \
 
3039
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(          \
 
3040
+                       __gnu_debug::__base(_First),                    \
 
3041
+                       __gnu_debug::__base(_Last), _Value),            \
 
3042
                      _M_message(__gnu_debug::__msg_unpartitioned)      \
 
3043
                      ._M_iterator(_First, #_First)                     \
 
3044
                      ._M_iterator(_Last, #_Last)                       \
 
3045
@@ -270,8 +271,9 @@
 
3046
 
 
3047
 #define __glibcxx_check_partitioned_upper(_First,_Last,_Value)         \
 
3048
 __glibcxx_check_valid_range(_First,_Last);                             \
 
3049
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(_First, _Last, \
 
3050
-                                                           _Value),    \
 
3051
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(          \
 
3052
+                       __gnu_debug::__base(_First),                    \
 
3053
+                       __gnu_debug::__base(_Last), _Value),            \
 
3054
                      _M_message(__gnu_debug::__msg_unpartitioned)      \
 
3055
                      ._M_iterator(_First, #_First)                     \
 
3056
                      ._M_iterator(_Last, #_Last)                       \
 
3057
@@ -281,8 +283,9 @@
 
3058
     w.r.t. the value _Value and predicate _Pred. */
 
3059
 #define __glibcxx_check_partitioned_lower_pred(_First,_Last,_Value,_Pred) \
 
3060
 __glibcxx_check_valid_range(_First,_Last);                             \
 
3061
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(_First, _Last, \
 
3062
-                                                        _Value, _Pred), \
 
3063
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_lower(          \
 
3064
+                       __gnu_debug::__base(_First),                    \
 
3065
+                       __gnu_debug::__base(_Last), _Value, _Pred),     \
 
3066
                      _M_message(__gnu_debug::__msg_unpartitioned_pred) \
 
3067
                      ._M_iterator(_First, #_First)                     \
 
3068
                      ._M_iterator(_Last, #_Last)                       \
 
3069
@@ -293,8 +296,9 @@
 
3070
     w.r.t. the value _Value and predicate _Pred. */
 
3071
 #define __glibcxx_check_partitioned_upper_pred(_First,_Last,_Value,_Pred) \
 
3072
 __glibcxx_check_valid_range(_First,_Last);                             \
 
3073
-_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(_First, _Last, \
 
3074
-                                                        _Value, _Pred), \
 
3075
+_GLIBCXX_DEBUG_VERIFY(__gnu_debug::__check_partitioned_upper(          \
 
3076
+                       __gnu_debug::__base(_First),                    \
 
3077
+                       __gnu_debug::__base(_Last), _Value, _Pred),     \
 
3078
                      _M_message(__gnu_debug::__msg_unpartitioned_pred) \
 
3079
                      ._M_iterator(_First, #_First)                     \
 
3080
                      ._M_iterator(_Last, #_Last)                       \
 
3081
Index: libstdc++-v3/include/std/future
 
3082
===================================================================
 
3083
--- a/src/libstdc++-v3/include/std/future       (.../tags/gcc_4_8_2_release)
 
3084
+++ b/src/libstdc++-v3/include/std/future       (.../branches/gcc-4_8-branch)
 
3085
@@ -1261,9 +1261,11 @@
 
3086
     struct __future_base::_Task_state<_Fn, _Alloc, _Res(_Args...)> final
 
3087
     : __future_base::_Task_state_base<_Res(_Args...)>
 
3088
     {
 
3089
-      _Task_state(_Fn&& __fn, const _Alloc& __a)
 
3090
-      : _Task_state_base<_Res(_Args...)>(__a), _M_impl(std::move(__fn), __a)
 
3091
-      { }
 
3092
+      template<typename _Fn2>
 
3093
+       _Task_state(_Fn2&& __fn, const _Alloc& __a)
 
3094
+       : _Task_state_base<_Res(_Args...)>(__a),
 
3095
+         _M_impl(std::forward<_Fn2>(__fn), __a)
 
3096
+       { }
 
3097
 
 
3098
     private:
 
3099
       virtual void
 
3100
@@ -1292,19 +1294,21 @@
 
3101
 
 
3102
       struct _Impl : _Alloc
 
3103
       {
 
3104
-       _Impl(_Fn&& __fn, const _Alloc& __a)
 
3105
-         : _Alloc(__a), _M_fn(std::move(__fn)) { }
 
3106
+       template<typename _Fn2>
 
3107
+         _Impl(_Fn2&& __fn, const _Alloc& __a)
 
3108
+         : _Alloc(__a), _M_fn(std::forward<_Fn2>(__fn)) { }
 
3109
        _Fn _M_fn;
 
3110
       } _M_impl;
 
3111
     };
 
3112
 
 
3113
-    template<typename _Signature, typename _Fn, typename _Alloc>
 
3114
-      static shared_ptr<__future_base::_Task_state_base<_Signature>>
 
3115
-      __create_task_state(_Fn&& __fn, const _Alloc& __a)
 
3116
-      {
 
3117
-       typedef __future_base::_Task_state<_Fn, _Alloc, _Signature> _State;
 
3118
-       return std::allocate_shared<_State>(__a, std::move(__fn), __a);
 
3119
-      }
 
3120
+  template<typename _Signature, typename _Fn, typename _Alloc>
 
3121
+    static shared_ptr<__future_base::_Task_state_base<_Signature>>
 
3122
+    __create_task_state(_Fn&& __fn, const _Alloc& __a)
 
3123
+    {
 
3124
+      typedef typename decay<_Fn>::type _Fn2;
 
3125
+      typedef __future_base::_Task_state<_Fn2, _Alloc, _Signature> _State;
 
3126
+      return std::allocate_shared<_State>(__a, std::forward<_Fn>(__fn), __a);
 
3127
+    }
 
3128
 
 
3129
   template<typename _Fn, typename _Alloc, typename _Res, typename... _Args>
 
3130
     shared_ptr<__future_base::_Task_state_base<_Res(_Args...)>>
 
3131
@@ -1344,7 +1348,8 @@
 
3132
               __constrain_pkgdtask<packaged_task, _Fn>::__type>
 
3133
        explicit
 
3134
        packaged_task(_Fn&& __fn)
 
3135
-       : packaged_task(allocator_arg, std::allocator<int>(), std::move(__fn))
 
3136
+       : packaged_task(allocator_arg, std::allocator<int>(),
 
3137
+                       std::forward<_Fn>(__fn))
 
3138
        { }
 
3139
 
 
3140
       // _GLIBCXX_RESOLVE_LIB_DEFECTS
 
3141
Index: libstdc++-v3/include/bits/stl_vector.h
 
3142
===================================================================
 
3143
--- a/src/libstdc++-v3/include/bits/stl_vector.h        (.../tags/gcc_4_8_2_release)
 
3144
+++ b/src/libstdc++-v3/include/bits/stl_vector.h        (.../branches/gcc-4_8-branch)
 
3145
@@ -1361,7 +1361,8 @@
 
3146
       void
 
3147
       _M_move_assign(vector&& __x, std::true_type) noexcept
 
3148
       {
 
3149
-       const vector __tmp(std::move(*this));
 
3150
+       vector __tmp(get_allocator());
 
3151
+       this->_M_impl._M_swap_data(__tmp._M_impl);
 
3152
        this->_M_impl._M_swap_data(__x._M_impl);
 
3153
        if (_Alloc_traits::_S_propagate_on_move_assign())
 
3154
          std::__alloc_on_move(_M_get_Tp_allocator(),
 
3155
Index: libstdc++-v3/include/bits/stl_algo.h
 
3156
===================================================================
 
3157
--- a/src/libstdc++-v3/include/bits/stl_algo.h  (.../tags/gcc_4_8_2_release)
 
3158
+++ b/src/libstdc++-v3/include/bits/stl_algo.h  (.../branches/gcc-4_8-branch)
 
3159
@@ -2279,7 +2279,7 @@
 
3160
                                _RandomAccessIterator __last)
 
3161
     {
 
3162
       _RandomAccessIterator __mid = __first + (__last - __first) / 2;
 
3163
-      std::__move_median_to_first(__first, __first + 1, __mid, (__last - 2));
 
3164
+      std::__move_median_to_first(__first, __first + 1, __mid, __last - 1);
 
3165
       return std::__unguarded_partition(__first + 1, __last, *__first);
 
3166
     }
 
3167
 
 
3168
@@ -2291,7 +2291,7 @@
 
3169
                                _RandomAccessIterator __last, _Compare __comp)
 
3170
     {
 
3171
       _RandomAccessIterator __mid = __first + (__last - __first) / 2;
 
3172
-      std::__move_median_to_first(__first, __first + 1, __mid, (__last - 2),
 
3173
+      std::__move_median_to_first(__first, __first + 1, __mid, __last - 1,
 
3174
                                  __comp);
 
3175
       return std::__unguarded_partition(__first + 1, __last, *__first, __comp);
 
3176
     }
 
3177
Index: libstdc++-v3/include/bits/shared_ptr_base.h
 
3178
===================================================================
 
3179
--- a/src/libstdc++-v3/include/bits/shared_ptr_base.h   (.../tags/gcc_4_8_2_release)
 
3180
+++ b/src/libstdc++-v3/include/bits/shared_ptr_base.h   (.../branches/gcc-4_8-branch)
 
3181
@@ -233,7 +233,7 @@
 
3182
     _M_add_ref_lock()
 
3183
     {
 
3184
       // Perform lock-free add-if-not-zero operation.
 
3185
-      _Atomic_word __count = _M_use_count;
 
3186
+      _Atomic_word __count = _M_get_use_count();
 
3187
       do
 
3188
        {
 
3189
          if (__count == 0)
 
3190
@@ -391,7 +391,7 @@
 
3191
     public:
 
3192
       template<typename... _Args>
 
3193
        _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
 
3194
-       : _M_impl(__a), _M_storage()
 
3195
+       : _M_impl(__a)
 
3196
        {
 
3197
          _M_impl._M_ptr = static_cast<_Tp*>(static_cast<void*>(&_M_storage));
 
3198
          // _GLIBCXX_RESOLVE_LIB_DEFECTS
 
3199
@@ -819,7 +819,7 @@
 
3200
        : _M_ptr(__r.get()), _M_refcount()
 
3201
        {
 
3202
          __glibcxx_function_requires(_ConvertibleConcept<_Tp1*, _Tp*>)
 
3203
-         auto __tmp = std::__addressof(*__r.get());
 
3204
+         auto __tmp = __r.get();
 
3205
          _M_refcount = __shared_count<_Lp>(std::move(__r));
 
3206
          __enable_shared_from_this_helper(_M_refcount, __tmp, __tmp);
 
3207
        }
 
3208
Index: libstdc++-v3/include/c_global/cstdio
 
3209
===================================================================
 
3210
--- a/src/libstdc++-v3/include/c_global/cstdio  (.../tags/gcc_4_8_2_release)
 
3211
+++ b/src/libstdc++-v3/include/c_global/cstdio  (.../branches/gcc-4_8-branch)
 
3212
@@ -69,6 +69,7 @@
 
3213
 #undef ftell
 
3214
 #undef fwrite
 
3215
 #undef getc
 
3216
+#undef getchar
 
3217
 #undef gets
 
3218
 #undef perror
 
3219
 #undef printf
 
3220
Index: libstdc++-v3/ChangeLog
 
3221
===================================================================
 
3222
--- a/src/libstdc++-v3/ChangeLog        (.../tags/gcc_4_8_2_release)
 
3223
+++ b/src/libstdc++-v3/ChangeLog        (.../branches/gcc-4_8-branch)
 
3224
@@ -1,3 +1,136 @@
 
3225
+2014-03-18  Jonathan Wakely  <jwakely@redhat.com>
 
3226
+
 
3227
+       PR libstdc++/60564
 
3228
+       * include/std/future (__future_base::_Task_state<>): Change
 
3229
+       constructors to template functions using perfect forwarding.
 
3230
+       (__create_task_state): Use decayed type as stored task.
 
3231
+       (packaged_task::packaged_task(_Fn&&)): Forward instead of moving.
 
3232
+       * testsuite/30_threads/packaged_task/60564.cc: New.
 
3233
+
 
3234
+2014-03-12  Roland McGrath  <mcgrathr@google.com>
 
3235
+           Mark Seaborn  <mseaborn@google.com>
 
3236
+
 
3237
+       PR libstdc++/59392
 
3238
+       * libsupc++/eh_call.cc (__cxa_call_unexpected): Call __do_catch with
 
3239
+       the address of a null pointer, not with a null pointer to pointer.
 
3240
+       Copy comment for this case from eh_personality.cc:__cxa_call_unexpected.
 
3241
+       * testsuite/18_support/bad_exception/59392.cc: New file.
 
3242
+
 
3243
+2014-03-11  Jonathan Wakely  <jwakely@redhat.com>
 
3244
+
 
3245
+       Backport from mainline.
 
3246
+       2014-01-09  Jonathan Wakely  <jwakely@redhat.com>
 
3247
+
 
3248
+       PR libstdc++/59680
 
3249
+       * src/c++11/thread.cc (__sleep_for): Fix call to ::sleep.
 
3250
+
 
3251
+2014-03-11  Jonathan Wakely  <jwakely@redhat.com>
 
3252
+
 
3253
+       Backport from mainline.
 
3254
+       2014-01-27  Jonathan Wakely  <jwakely@redhat.com>
 
3255
+
 
3256
+       PR libstdc++/59215
 
3257
+       * include/bits/shared_ptr_base.h
 
3258
+       (_Sp_counted_base<_S_atomic>::_M_add_ref_lock()): Use relaxed atomic
 
3259
+       load.
 
3260
+
 
3261
+2014-03-11  Jonathan Wakely  <jwakely@redhat.com>
 
3262
+
 
3263
+       Backport from mainline.
 
3264
+
 
3265
+       2014-01-09  Jonathan Wakely  <jwakely@redhat.com>
 
3266
+
 
3267
+       PR libstdc++/59738
 
3268
+       * include/bits/stl_vector.h (vector<>::_M_move_assign): Restore
 
3269
+       support for non-Movable types.
 
3270
+
 
3271
+       2014-01-08  François Dumont  <fdumont@gcc.gnu.org>
 
3272
+
 
3273
+       * include/bits/stl_vector.h (std::vector<>::_M_move_assign): Pass
 
3274
+       *this allocator instance when building temporary vector instance
 
3275
+       so that *this allocator does not get moved.
 
3276
+       * testsuite/23_containers/vector/allocator/move.cc (test01): Add
 
3277
+       check on a vector iterator.
 
3278
+       * testsuite/23_containers/vector/allocator/move_assign.cc
 
3279
+       (test02): Likewise.
 
3280
+       (test03): New, test with a non-propagating allocator.
 
3281
+
 
3282
+       2013-11-15  Jonathan Wakely  <jwakely.gcc@gmail.com>
 
3283
+
 
3284
+       * testsuite/23_containers/vector/allocator/move.cc: New
 
3285
+
 
3286
+2014-01-27  Jason Merrill  <jason@redhat.com>
 
3287
+
 
3288
+       Core DR 475
 
3289
+       PR c++/41174
 
3290
+       PR c++/59224
 
3291
+       * libsupc++/eh_throw.cc (__cxa_throw): Set uncaughtExceptions.
 
3292
+       * libsupc++/eh_alloc.cc (__cxa_allocate_dependent_exception)
 
3293
+       (__cxa_allocate_exception): Don't set it here.
 
3294
+
 
3295
+2013-12-15  H.J. Lu  <hongjiu.lu@intel.com>
 
3296
+
 
3297
+       * config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt: Update.
 
3298
+
 
3299
+2013-11-22  Jonathan Wakely  <jwakely.gcc@gmail.com>
 
3300
+
 
3301
+       * acinclude.m4 (libtool_VERSION): Bump.
 
3302
+       * configure: Regenerate.
 
3303
+       * doc/xml/manual/abi.xml: Update version information.
 
3304
+
 
3305
+2013-11-05  Jonathan Wakely  <jwakely.gcc@gmail.com>
 
3306
+
 
3307
+       * doc/xml/manual/status_cxx2011.xml: Document aligned_union as
 
3308
+       missing.
 
3309
+
 
3310
+       * doc/xml/manual/spine.xml: Update copyright years.
 
3311
+       * doc/html/*: Regenerate.
 
3312
+
 
3313
+2013-11-01  Paolo Carlini  <paolo.carlini@oracle.com>
 
3314
+
 
3315
+       PR libstdc++/58952
 
3316
+       * include/c_global/cstdio: Undef getchar.
 
3317
+
 
3318
+2013-10-31  Jonathan Wakely  <jwakely.gcc@gmail.com>
 
3319
+
 
3320
+       * testsuite/20_util/shared_ptr/cons/58839.cc: Do not use
 
3321
+       default_delete<void>.
 
3322
+
 
3323
+2013-10-30  Chris Studholme  <cvs@cs.utoronto.ca>
 
3324
+
 
3325
+       PR libstdc++/58912
 
3326
+       * include/bits/shared_ptr_base.h (_Sp_counted_ptr_inplace): Remove
 
3327
+       unnecessary initialization of storage buffer.
 
3328
+
 
3329
+2013-10-29  Jonathan Wakely  <jwakely.gcc@gmail.com>
 
3330
+
 
3331
+       PR libstdc++/58839
 
3332
+       * include/bits/shared_ptr_base.h
 
3333
+       (__shared_ptr<T>::__shared_ptr(unique_ptr<U,D>&&)): Do not dereference
 
3334
+       pointer.
 
3335
+       * testsuite/20_util/shared_ptr/cons/58839.cc: New.
 
3336
+
 
3337
+2013-10-20  Chris Jefferson  <chris@bubblescope.net>
 
3338
+           Paolo Carlini  <paolo.carlini@oracle.com>
 
3339
+
 
3340
+       PR libstdc++/58800
 
3341
+       * include/bits/stl_algo.h (__unguarded_partition_pivot): Change
 
3342
+       __last - 2 to __last - 1.
 
3343
+       * testsuite/25_algorithms/nth_element/58800.cc: New
 
3344
+
 
3345
+2013-10-16  François Dumont  <fdumont@gcc.gnu.org>
 
3346
+
 
3347
+       PR libstdc++/58191
 
3348
+       * include/debug/macros.h (__glibcxx_check_partitioned_lower): Add
 
3349
+       __gnu_debug::__base calls on iterators passed to internal debug
 
3350
+       check.
 
3351
+       (__glibcxx_check_partitioned_lower_pred): Likewise.
 
3352
+       (__glibcxx_check_partitioned_upper): Likewise.
 
3353
+       (__glibcxx_check_partitioned_upper_pred): Likewise.
 
3354
+       * include/debug/functions.h (__check_partitioned_lower):
 
3355
+       Remove code to detect safe iterators.
 
3356
+       (__check_partitioned_upper): Likewise.
 
3357
+
 
3358
 2013-10-16  Release Manager
 
3359
 
 
3360
        * GCC 4.8.2 released.
 
3361
Index: libstdc++-v3/libsupc++/eh_call.cc
 
3362
===================================================================
 
3363
--- a/src/libstdc++-v3/libsupc++/eh_call.cc     (.../tags/gcc_4_8_2_release)
 
3364
+++ b/src/libstdc++-v3/libsupc++/eh_call.cc     (.../branches/gcc-4_8-branch)
 
3365
@@ -104,14 +104,14 @@
 
3366
   } end_catch_protect_obj;
 
3367
 
 
3368
 
 
3369
-  __try 
 
3370
-    { 
 
3371
+  __try
 
3372
+    {
 
3373
       if (foreign_exception)
 
3374
        std::unexpected();
 
3375
       else
 
3376
        __unexpected(unexpectedHandler);
 
3377
     }
 
3378
-  __catch(...) 
 
3379
+  __catch(...)
 
3380
     {
 
3381
       /* See if the new exception matches the rtti list.  */
 
3382
       if (foreign_exception)
 
3383
@@ -140,15 +140,19 @@
 
3384
                               &new_ptr) != ctm_failed)
 
3385
            __throw_exception_again;
 
3386
 
 
3387
-         if (catch_type->__do_catch(&bad_exc, 0, 1))
 
3388
+         // If the exception spec allows std::bad_exception, throw that.
 
3389
+         // We don't have a thrown object to compare against, but since
 
3390
+         // bad_exception doesn't have virtual bases, that's OK; just pass NULL.
 
3391
+         void* obj = NULL;
 
3392
+         if (catch_type->__do_catch(&bad_exc, &obj, 1))
 
3393
            bad_exception_allowed = true;
 
3394
        }
 
3395
 
 
3396
       // If the exception spec allows std::bad_exception, throw that.
 
3397
-#ifdef __EXCEPTIONS  
 
3398
+#ifdef __EXCEPTIONS
 
3399
       if (bad_exception_allowed)
 
3400
        throw std::bad_exception();
 
3401
-#endif   
 
3402
+#endif
 
3403
 
 
3404
       // Otherwise, die.
 
3405
       __terminate(terminateHandler);
 
3406
Index: libstdc++-v3/libsupc++/eh_alloc.cc
 
3407
===================================================================
 
3408
--- a/src/libstdc++-v3/libsupc++/eh_alloc.cc    (.../tags/gcc_4_8_2_release)
 
3409
+++ b/src/libstdc++-v3/libsupc++/eh_alloc.cc    (.../branches/gcc-4_8-branch)
 
3410
@@ -129,12 +129,6 @@
 
3411
        std::terminate ();
 
3412
     }
 
3413
 
 
3414
-  // We have an uncaught exception as soon as we allocate memory.  This
 
3415
-  // yields uncaught_exception() true during the copy-constructor that
 
3416
-  // initializes the exception object.  See Issue 475.
 
3417
-  __cxa_eh_globals *globals = __cxa_get_globals ();
 
3418
-  globals->uncaughtExceptions += 1;
 
3419
-
 
3420
   memset (ret, 0, sizeof (__cxa_refcounted_exception));
 
3421
 
 
3422
   return (void *)((char *)ret + sizeof (__cxa_refcounted_exception));
 
3423
@@ -191,12 +185,6 @@
 
3424
        std::terminate ();
 
3425
     }
 
3426
 
 
3427
-  // We have an uncaught exception as soon as we allocate memory.  This
 
3428
-  // yields uncaught_exception() true during the copy-constructor that
 
3429
-  // initializes the exception object.  See Issue 475.
 
3430
-  __cxa_eh_globals *globals = __cxa_get_globals ();
 
3431
-  globals->uncaughtExceptions += 1;
 
3432
-
 
3433
   memset (ret, 0, sizeof (__cxa_dependent_exception));
 
3434
 
 
3435
   return ret;
 
3436
Index: libstdc++-v3/libsupc++/eh_throw.cc
 
3437
===================================================================
 
3438
--- a/src/libstdc++-v3/libsupc++/eh_throw.cc    (.../tags/gcc_4_8_2_release)
 
3439
+++ b/src/libstdc++-v3/libsupc++/eh_throw.cc    (.../branches/gcc-4_8-branch)
 
3440
@@ -62,6 +62,9 @@
 
3441
 {
 
3442
   PROBE2 (throw, obj, tinfo);
 
3443
 
 
3444
+  __cxa_eh_globals *globals = __cxa_get_globals ();
 
3445
+  globals->uncaughtExceptions += 1;
 
3446
+
 
3447
   // Definitely a primary.
 
3448
   __cxa_refcounted_exception *header
 
3449
     = __get_refcounted_exception_header_from_obj (obj);
 
3450
Index: libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc
 
3451
===================================================================
 
3452
--- a/src/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc     (.../tags/gcc_4_8_2_release)
 
3453
+++ b/src/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc     (.../branches/gcc-4_8-branch)
 
3454
@@ -0,0 +1,52 @@
 
3455
+// Copyright (C) 2013 Free Software Foundation, Inc.
 
3456
+//
 
3457
+// This file is part of the GNU ISO C++ Library.  This library is free
 
3458
+// software; you can redistribute it and/or modify it under the
 
3459
+// terms of the GNU General Public License as published by the
 
3460
+// Free Software Foundation; either version 3, or (at your option)
 
3461
+// any later version.
 
3462
+
 
3463
+// This library is distributed in the hope that it will be useful,
 
3464
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
 
3465
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
3466
+// GNU General Public License for more details.
 
3467
+
 
3468
+// You should have received a copy of the GNU General Public License along
 
3469
+// with this library; see the file COPYING3.  If not see
 
3470
+// <http://www.gnu.org/licenses/>.
 
3471
+
 
3472
+// 25.3.2 [lib.alg.nth.element]
 
3473
+
 
3474
+// { dg-options "-std=gnu++11" }
 
3475
+
 
3476
+#include <algorithm>
 
3477
+#include <testsuite_hooks.h>
 
3478
+#include <testsuite_iterators.h>
 
3479
+
 
3480
+using __gnu_test::test_container;
 
3481
+using __gnu_test::random_access_iterator_wrapper;
 
3482
+
 
3483
+typedef test_container<int, random_access_iterator_wrapper> Container;
 
3484
+
 
3485
+void test01()
 
3486
+{
 
3487
+  std::vector<int> v = {
 
3488
+    207089,
 
3489
+    202585,
 
3490
+    180067,
 
3491
+    157549,
 
3492
+    211592,
 
3493
+    216096,
 
3494
+    207089
 
3495
+  };
 
3496
+
 
3497
+  Container con(v.data(), v.data() + 7);
 
3498
+
 
3499
+  std::nth_element(con.begin(), con.begin() + 3, con.end());
 
3500
+}
 
3501
+
 
3502
+int main()
 
3503
+{
 
3504
+  test01();
 
3505
+  return 0;
 
3506
+}
 
3507
Index: libstdc++-v3/testsuite/18_support/bad_exception/59392.cc
 
3508
===================================================================
 
3509
--- a/src/libstdc++-v3/testsuite/18_support/bad_exception/59392.cc      (.../tags/gcc_4_8_2_release)
 
3510
+++ b/src/libstdc++-v3/testsuite/18_support/bad_exception/59392.cc      (.../branches/gcc-4_8-branch)
 
3511
@@ -0,0 +1,51 @@
 
3512
+// Copyright (C) 2014 Free Software Foundation, Inc.
 
3513
+//
 
3514
+// This file is part of the GNU ISO C++ Library.  This library is free
 
3515
+// software; you can redistribute it and/or modify it under the
 
3516
+// terms of the GNU General Public License as published by the
 
3517
+// Free Software Foundation; either version 3, or (at your option)
 
3518
+// any later version.
 
3519
+
 
3520
+// This library is distributed in the hope that it will be useful,
 
3521
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
 
3522
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
3523
+// GNU General Public License for more details.
 
3524
+
 
3525
+// You should have received a copy of the GNU General Public License along
 
3526
+// with this library; see the file COPYING3.  If not see
 
3527
+// <http://www.gnu.org/licenses/>.
 
3528
+
 
3529
+#include <exception>
 
3530
+#include <cstdlib>
 
3531
+
 
3532
+class expected {};
 
3533
+class unexpected {};
 
3534
+class from_handler {};
 
3535
+
 
3536
+static void func_with_exception_spec() throw(expected)
 
3537
+{
 
3538
+  throw unexpected();
 
3539
+}
 
3540
+
 
3541
+static void unexpected_handler()
 
3542
+{
 
3543
+  throw from_handler();
 
3544
+}
 
3545
+
 
3546
+static void terminate_handler()
 
3547
+{
 
3548
+  exit(0);
 
3549
+}
 
3550
+
 
3551
+// libstdc++/59392
 
3552
+int main()
 
3553
+{
 
3554
+  std::set_unexpected(unexpected_handler);
 
3555
+  std::set_terminate(terminate_handler);
 
3556
+  try {
 
3557
+    func_with_exception_spec();
 
3558
+  } catch (expected&) {
 
3559
+    abort();
 
3560
+  }
 
3561
+  abort();
 
3562
+}
 
3563
 
 
3564
Property changes on: libstdc++-v3/testsuite/18_support/bad_exception/59392.cc
 
3565
___________________________________________________________________
 
3566
Added: svn:eol-style
 
3567
## -0,0 +1 ##
 
3568
+LF
 
3569
\ No newline at end of property
 
3570
Index: libstdc++-v3/testsuite/30_threads/packaged_task/60564.cc
 
3571
===================================================================
 
3572
--- a/src/libstdc++-v3/testsuite/30_threads/packaged_task/60564.cc      (.../tags/gcc_4_8_2_release)
 
3573
+++ b/src/libstdc++-v3/testsuite/30_threads/packaged_task/60564.cc      (.../branches/gcc-4_8-branch)
 
3574
@@ -0,0 +1,51 @@
 
3575
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-gnu* *-*-solaris* *-*-cygwin *-*-darwin* powerpc-ibm-aix* } }
 
3576
+// { dg-options " -std=gnu++11 -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-gnu* powerpc-ibm-aix* } }
 
3577
+// { dg-options " -std=gnu++11 -pthreads" { target *-*-solaris* } }
 
3578
+// { dg-options " -std=gnu++11 " { target *-*-cygwin *-*-darwin* } }
 
3579
+// { dg-require-cstdint "" }
 
3580
+// { dg-require-gthreads "" }
 
3581
+// { dg-require-atomic-builtins "" }
 
3582
+
 
3583
+// Copyright (C) 2014 Free Software Foundation, Inc.
 
3584
+//
 
3585
+// This file is part of the GNU ISO C++ Library.  This library is free
 
3586
+// software; you can redistribute it and/or modify it under the
 
3587
+// terms of the GNU General Public License as published by the
 
3588
+// Free Software Foundation; either version 3, or (at your option)
 
3589
+// any later version.
 
3590
+
 
3591
+// This library is distributed in the hope that it will be useful,
 
3592
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
 
3593
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
3594
+// GNU General Public License for more details.
 
3595
+
 
3596
+// You should have received a copy of the GNU General Public License along
 
3597
+// with this library; see the file COPYING3.  If not see
 
3598
+// <http://www.gnu.org/licenses/>.
 
3599
+
 
3600
+
 
3601
+#include <future>
 
3602
+#include <testsuite_hooks.h>
 
3603
+
 
3604
+struct X
 
3605
+{
 
3606
+  X() = default;
 
3607
+  X(const X&) = default;
 
3608
+  X(X&& x) { x.moved = true; }
 
3609
+
 
3610
+  void operator()() const { }
 
3611
+
 
3612
+  bool moved = false;
 
3613
+};
 
3614
+
 
3615
+void test01()
 
3616
+{
 
3617
+  X x;
 
3618
+  std::packaged_task<void()> p(x);
 
3619
+  VERIFY( !x.moved );
 
3620
+}
 
3621
+
 
3622
+int main()
 
3623
+{
 
3624
+  test01();
 
3625
+}
 
3626
Index: libstdc++-v3/testsuite/23_containers/vector/allocator/move.cc
 
3627
===================================================================
 
3628
--- a/src/libstdc++-v3/testsuite/23_containers/vector/allocator/move.cc (.../tags/gcc_4_8_2_release)
 
3629
+++ b/src/libstdc++-v3/testsuite/23_containers/vector/allocator/move.cc (.../branches/gcc-4_8-branch)
 
3630
@@ -0,0 +1,59 @@
 
3631
+// Copyright (C) 2013 Free Software Foundation, Inc.
 
3632
+//
 
3633
+// This file is part of the GNU ISO C++ Library.  This library is free
 
3634
+// software; you can redistribute it and/or modify it under the
 
3635
+// terms of the GNU General Public License as published by the
 
3636
+// Free Software Foundation; either version 3, or (at your option)
 
3637
+// any later version.
 
3638
+
 
3639
+// This library is distributed in the hope that it will be useful,
 
3640
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
 
3641
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
3642
+// GNU General Public License for more details.
 
3643
+
 
3644
+// You should have received a copy of the GNU General Public License along
 
3645
+// with this library; see the file COPYING3.  If not see
 
3646
+// <http://www.gnu.org/licenses/>.
 
3647
+
 
3648
+// { dg-options "-std=gnu++11" }
 
3649
+
 
3650
+#include <vector>
 
3651
+#include <testsuite_hooks.h>
 
3652
+#include <testsuite_allocator.h>
 
3653
+
 
3654
+struct T { int i; };
 
3655
+
 
3656
+using __gnu_test::uneq_allocator;
 
3657
+
 
3658
+void test01()
 
3659
+{
 
3660
+  bool test __attribute__((unused)) = true;
 
3661
+  typedef uneq_allocator<T> alloc_type;
 
3662
+  typedef std::vector<T, alloc_type> test_type;
 
3663
+  test_type v1(alloc_type(1));
 
3664
+  v1 = { T() };
 
3665
+  auto it = v1.begin();
 
3666
+  test_type v2(std::move(v1));
 
3667
+  VERIFY(1 == v1.get_allocator().get_personality());
 
3668
+  VERIFY(1 == v2.get_allocator().get_personality());
 
3669
+  VERIFY( it == v2.begin() );
 
3670
+}
 
3671
+
 
3672
+void test02()
 
3673
+{
 
3674
+  bool test __attribute__((unused)) = true;
 
3675
+  typedef uneq_allocator<T> alloc_type;
 
3676
+  typedef std::vector<T, alloc_type> test_type;
 
3677
+  test_type v1(alloc_type(1));
 
3678
+  v1 = { T() };
 
3679
+  test_type v2(std::move(v1), alloc_type(2));
 
3680
+  VERIFY(1 == v1.get_allocator().get_personality());
 
3681
+  VERIFY(2 == v2.get_allocator().get_personality());
 
3682
+}
 
3683
+
 
3684
+int main()
 
3685
+{
 
3686
+  test01();
 
3687
+  test02();
 
3688
+  return 0;
 
3689
+}
 
3690
Index: libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc
 
3691
===================================================================
 
3692
--- a/src/libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc  (.../tags/gcc_4_8_2_release)
 
3693
+++ b/src/libstdc++-v3/testsuite/23_containers/vector/allocator/move_assign.cc  (.../branches/gcc-4_8-branch)
 
3694
@@ -46,16 +46,35 @@
 
3695
   typedef std::vector<T, alloc_type> test_type;
 
3696
   test_type v1(alloc_type(1));
 
3697
   v1.push_back(T());
 
3698
+  auto it = v1.begin();
 
3699
   test_type v2(alloc_type(2));
 
3700
+  v2.push_back(T());
 
3701
   v2 = std::move(v1);
 
3702
-  v2.push_back(T());
 
3703
+  VERIFY( it == v2.begin() );
 
3704
   VERIFY(0 == v1.get_allocator().get_personality());
 
3705
   VERIFY(1 == v2.get_allocator().get_personality());
 
3706
 }
 
3707
 
 
3708
+void test03()
 
3709
+{
 
3710
+  bool test __attribute__((unused)) = true;
 
3711
+  typedef propagating_allocator<T, false> alloc_type;
 
3712
+  typedef std::vector<T, alloc_type> test_type;
 
3713
+  test_type v1(alloc_type(1));
 
3714
+  v1.push_back(T());
 
3715
+  auto it = v1.begin();
 
3716
+  test_type v2(alloc_type(1));
 
3717
+  v2.push_back(T());
 
3718
+  v2 = std::move(v1);
 
3719
+  VERIFY( it == v2.begin() );
 
3720
+  VERIFY(1 == v1.get_allocator().get_personality());
 
3721
+  VERIFY(1 == v2.get_allocator().get_personality());
 
3722
+}
 
3723
+
 
3724
 int main()
 
3725
 {
 
3726
   test01();
 
3727
   test02();
 
3728
+  test03();
 
3729
   return 0;
 
3730
 }
 
3731
Index: libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc
 
3732
===================================================================
 
3733
--- a/src/libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc       (.../tags/gcc_4_8_2_release)
 
3734
+++ b/src/libstdc++-v3/testsuite/20_util/shared_ptr/cons/58839.cc       (.../branches/gcc-4_8-branch)
 
3735
@@ -0,0 +1,33 @@
 
3736
+// { dg-options "-std=gnu++11" }
 
3737
+// { dg-do compile }
 
3738
+
 
3739
+// Copyright (C) 2013 Free Software Foundation, Inc.
 
3740
+//
 
3741
+// This file is part of the GNU ISO C++ Library.  This library is free
 
3742
+// software; you can redistribute it and/or modify it under the
 
3743
+// terms of the GNU General Public License as published by the
 
3744
+// Free Software Foundation; either version 3, or (at your option)
 
3745
+// any later version.
 
3746
+
 
3747
+// This library is distributed in the hope that it will be useful,
 
3748
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
 
3749
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
3750
+// GNU General Public License for more details.
 
3751
+
 
3752
+// You should have received a copy of the GNU General Public License along
 
3753
+// with this library; see the file COPYING3.  If not see
 
3754
+// <http://www.gnu.org/licenses/>.
 
3755
+
 
3756
+#include <memory>
 
3757
+
 
3758
+// libstdc++/58839
 
3759
+
 
3760
+struct D {
 
3761
+  void operator()(void*) const noexcept { }
 
3762
+};
 
3763
+
 
3764
+void test01()
 
3765
+{
 
3766
+  std::unique_ptr<void, D> y;
 
3767
+  std::shared_ptr<void> x = std::move(y);
 
3768
+}
 
3769
Index: libstdc++-v3/testsuite/20_util/bind/57899.cc
 
3770
===================================================================
 
3771
--- a/src/libstdc++-v3/testsuite/20_util/bind/57899.cc  (.../tags/gcc_4_8_2_release)
 
3772
+++ b/src/libstdc++-v3/testsuite/20_util/bind/57899.cc  (.../branches/gcc-4_8-branch)
 
3773
@@ -0,0 +1,48 @@
 
3774
+// Copyright (C) 2010-2014 Free Software Foundation, Inc.
 
3775
+//
 
3776
+// This file is part of the GNU ISO C++ Library.  This library is free
 
3777
+// software; you can redistribute it and/or modify it under the
 
3778
+// terms of the GNU General Public License as published by the
 
3779
+// Free Software Foundation; either version 3, or (at your option)
 
3780
+// any later version.
 
3781
+
 
3782
+// This library is distributed in the hope that it will be useful,
 
3783
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
 
3784
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
3785
+// GNU General Public License for more details.
 
3786
+
 
3787
+// You should have received a copy of the GNU General Public License along
 
3788
+// with this library; see the file COPYING3.  If not see
 
3789
+// <http://www.gnu.org/licenses/>.
 
3790
+
 
3791
+// 20.7.11 Function template bind
 
3792
+
 
3793
+// PR c++/57899
 
3794
+// { dg-do compile }
 
3795
+// { dg-options -std=c++11 }
 
3796
+
 
3797
+#include <functional>
 
3798
+using std::bind;
 
3799
+using std::placeholders::_1;
 
3800
+
 
3801
+struct S { int i; };
 
3802
+
 
3803
+struct P { S s; };
 
3804
+
 
3805
+struct get_s
 
3806
+{
 
3807
+  const S& operator()(const P& p) const { return p.s; }
 
3808
+} gs;
 
3809
+
 
3810
+int gi(const S& s) { return s.i; }
 
3811
+
 
3812
+bool cmp(int, int) { return true; }
 
3813
+
 
3814
+int main()
 
3815
+{
 
3816
+  P p{};
 
3817
+  auto f1 = bind(gs, _1);
 
3818
+  auto f2 = bind(gi, f1);
 
3819
+  auto f3 = bind(cmp, f2, 5);
 
3820
+  f3(p);
 
3821
+}
 
3822
Index: libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt
 
3823
===================================================================
 
3824
--- a/src/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt        (.../tags/gcc_4_8_2_release)
 
3825
+++ b/src/libstdc++-v3/config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt        (.../branches/gcc-4_8-branch)
 
3826
@@ -403,6 +403,7 @@
 
3827
 FUNC:_ZNKSt15basic_streambufIwSt11char_traitsIwEE6getlocEv@@GLIBCXX_3.4
 
3828
 FUNC:_ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4
 
3829
 FUNC:_ZNKSt15basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4
 
3830
+FUNC:_ZNKSt17bad_function_call4whatEv@@GLIBCXX_3.4.18
 
3831
 FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4
 
3832
 FUNC:_ZNKSt18basic_stringstreamIcSt11char_traitsIcESaIcEE5rdbufEv@@GLIBCXX_3.4
 
3833
 FUNC:_ZNKSt18basic_stringstreamIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4
 
3834
@@ -590,6 +591,8 @@
 
3835
 FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewm@@GLIBCXX_3.4
 
3836
 FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewx@@GLIBCXX_3.4
 
3837
 FUNC:_ZNKSt7num_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES3_RSt8ios_basewy@@GLIBCXX_3.4
 
3838
+FUNC:_ZNKSt8__detail20_Prime_rehash_policy11_M_next_bktEj@@GLIBCXX_3.4.18
 
3839
+FUNC:_ZNKSt8__detail20_Prime_rehash_policy14_M_need_rehashEjjj@@GLIBCXX_3.4.18
 
3840
 FUNC:_ZNKSt8bad_cast4whatEv@@GLIBCXX_3.4.9
 
3841
 FUNC:_ZNKSt8ios_base7failure4whatEv@@GLIBCXX_3.4
 
3842
 FUNC:_ZNKSt8messagesIcE18_M_convert_to_charERKSs@@GLIBCXX_3.4
 
3843
@@ -1207,6 +1210,7 @@
 
3844
 FUNC:_ZNSt11regex_errorD0Ev@@GLIBCXX_3.4.15
 
3845
 FUNC:_ZNSt11regex_errorD1Ev@@GLIBCXX_3.4.15
 
3846
 FUNC:_ZNSt11regex_errorD2Ev@@GLIBCXX_3.4.15
 
3847
+FUNC:_ZNSt11this_thread11__sleep_forENSt6chrono8durationIxSt5ratioILx1ELx1EEEENS1_IxS2_ILx1ELx1000000000EEEE@@GLIBCXX_3.4.18
 
3848
 FUNC:_ZNSt12__basic_fileIcE2fdEv@@GLIBCXX_3.4
 
3849
 FUNC:_ZNSt12__basic_fileIcE4fileEv@@GLIBCXX_3.4.1
 
3850
 FUNC:_ZNSt12__basic_fileIcE4openEPKcSt13_Ios_Openmodei@@GLIBCXX_3.4
 
3851
@@ -1485,6 +1489,11 @@
 
3852
 FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEt@@GLIBCXX_3.4
 
3853
 FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEx@@GLIBCXX_3.4
 
3854
 FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEy@@GLIBCXX_3.4
 
3855
+FUNC:_ZNSt13random_device14_M_init_pretr1ERKSs@@GLIBCXX_3.4.18
 
3856
+FUNC:_ZNSt13random_device16_M_getval_pretr1Ev@@GLIBCXX_3.4.18
 
3857
+FUNC:_ZNSt13random_device7_M_finiEv@@GLIBCXX_3.4.18
 
3858
+FUNC:_ZNSt13random_device7_M_initERKSs@@GLIBCXX_3.4.18
 
3859
+FUNC:_ZNSt13random_device9_M_getvalEv@@GLIBCXX_3.4.18
 
3860
 FUNC:_ZNSt13runtime_errorC1ERKSs@@GLIBCXX_3.4
 
3861
 FUNC:_ZNSt13runtime_errorC2ERKSs@@GLIBCXX_3.4
 
3862
 FUNC:_ZNSt13runtime_errorD0Ev@@GLIBCXX_3.4
 
3863
@@ -1929,6 +1938,8 @@
 
3864
 FUNC:_ZNSt6__norm15_List_node_base8transferEPS0_S1_@@GLIBCXX_3.4.9
 
3865
 FUNC:_ZNSt6__norm15_List_node_base9_M_unhookEv@@GLIBCXX_3.4.14
 
3866
 FUNC:_ZNSt6chrono12system_clock3nowEv@@GLIBCXX_3.4.11
 
3867
+FUNC:_ZNSt6chrono3_V212steady_clock3nowEv@@GLIBCXX_3.4.19
 
3868
+FUNC:_ZNSt6chrono3_V212system_clock3nowEv@@GLIBCXX_3.4.19
 
3869
 FUNC:_ZNSt6gslice8_IndexerC1EjRKSt8valarrayIjES4_@@GLIBCXX_3.4
 
3870
 FUNC:_ZNSt6gslice8_IndexerC2EjRKSt8valarrayIjES4_@@GLIBCXX_3.4
 
3871
 FUNC:_ZNSt6locale11_M_coalesceERKS_S1_i@@GLIBCXX_3.4
 
3872
@@ -2467,6 +2478,7 @@
 
3873
 FUNC:__cxa_guard_release@@CXXABI_1.3
 
3874
 FUNC:__cxa_pure_virtual@@CXXABI_1.3
 
3875
 FUNC:__cxa_rethrow@@CXXABI_1.3
 
3876
+FUNC:__cxa_thread_atexit@@CXXABI_1.3.7
 
3877
 FUNC:__cxa_throw@@CXXABI_1.3
 
3878
 FUNC:__cxa_tm_cleanup@@CXXABI_TM_1
 
3879
 FUNC:__cxa_vec_cctor@@CXXABI_1.3
 
3880
@@ -2491,6 +2503,7 @@
 
3881
 OBJECT:0:CXXABI_1.3.4
 
3882
 OBJECT:0:CXXABI_1.3.5
 
3883
 OBJECT:0:CXXABI_1.3.6
 
3884
+OBJECT:0:CXXABI_1.3.7
 
3885
 OBJECT:0:CXXABI_TM_1
 
3886
 OBJECT:0:GLIBCXX_3.4
 
3887
 OBJECT:0:GLIBCXX_3.4.1
 
3888
@@ -2502,6 +2515,8 @@
 
3889
 OBJECT:0:GLIBCXX_3.4.15
 
3890
 OBJECT:0:GLIBCXX_3.4.16
 
3891
 OBJECT:0:GLIBCXX_3.4.17
 
3892
+OBJECT:0:GLIBCXX_3.4.18
 
3893
+OBJECT:0:GLIBCXX_3.4.19
 
3894
 OBJECT:0:GLIBCXX_3.4.2
 
3895
 OBJECT:0:GLIBCXX_3.4.3
 
3896
 OBJECT:0:GLIBCXX_3.4.4
 
3897
@@ -3033,6 +3048,8 @@
 
3898
 OBJECT:1:_ZNSt21__numeric_limits_base9is_moduloE@@GLIBCXX_3.4
 
3899
 OBJECT:1:_ZNSt21__numeric_limits_base9is_signedE@@GLIBCXX_3.4
 
3900
 OBJECT:1:_ZNSt6chrono12system_clock12is_monotonicE@@GLIBCXX_3.4.11
 
3901
+OBJECT:1:_ZNSt6chrono3_V212steady_clock9is_steadyE@@GLIBCXX_3.4.19
 
3902
+OBJECT:1:_ZNSt6chrono3_V212system_clock9is_steadyE@@GLIBCXX_3.4.19
 
3903
 OBJECT:1:_ZSt10adopt_lock@@GLIBCXX_3.4.11
 
3904
 OBJECT:1:_ZSt10defer_lock@@GLIBCXX_3.4.11
 
3905
 OBJECT:1:_ZSt11try_to_lock@@GLIBCXX_3.4.11
 
3906
Index: libstdc++-v3/acinclude.m4
 
3907
===================================================================
 
3908
--- a/src/libstdc++-v3/acinclude.m4     (.../tags/gcc_4_8_2_release)
 
3909
+++ b/src/libstdc++-v3/acinclude.m4     (.../branches/gcc-4_8-branch)
 
3910
@@ -3266,7 +3266,7 @@
 
3911
 fi
 
3912
 
 
3913
 # For libtool versioning info, format is CURRENT:REVISION:AGE
 
3914
-libtool_VERSION=6:18:0
 
3915
+libtool_VERSION=6:19:0
 
3916
 
 
3917
 # Everything parsed; figure out what files and settings to use.
 
3918
 case $enable_symvers in
 
3919
Index: boehm-gc/include/private/gcconfig.h
 
3920
===================================================================
 
3921
--- a/src/boehm-gc/include/private/gcconfig.h   (.../tags/gcc_4_8_2_release)
 
3922
+++ b/src/boehm-gc/include/private/gcconfig.h   (.../branches/gcc-4_8-branch)
 
3923
@@ -837,7 +837,15 @@
 
3924
 #     define NO_PTHREAD_TRYLOCK
 
3925
 #   endif
 
3926
 #   ifdef FREEBSD
 
3927
+#   if defined(__powerpc64__)
 
3928
+#       define ALIGNMENT 8
 
3929
+#       define CPP_WORDSZ 64
 
3930
+#       ifndef HBLKSIZE
 
3931
+#           define HBLKSIZE 4096
 
3932
+#       endif
 
3933
+#   else
 
3934
 #       define ALIGNMENT 4
 
3935
+#   endif
 
3936
 #       define OS_TYPE "FREEBSD"
 
3937
 #       ifndef GC_FREEBSD_THREADS
 
3938
 #           define MPROTECT_VDB
 
3939
Index: boehm-gc/ChangeLog
 
3940
===================================================================
 
3941
--- a/src/boehm-gc/ChangeLog    (.../tags/gcc_4_8_2_release)
 
3942
+++ b/src/boehm-gc/ChangeLog    (.../branches/gcc-4_8-branch)
 
3943
@@ -1,3 +1,8 @@
 
3944
+2013-12-29  Andreas Tobler  <andreast@gcc.gnu.org>
 
3945
+
 
3946
+       Merge from trunk:
 
3947
+       * include/private/gcconfig.h: Add FreeBSD powerpc64 defines.
 
3948
+
 
3949
 2013-10-16  Release Manager
 
3950
 
 
3951
        * GCC 4.8.2 released.
 
3952
Index: contrib/ChangeLog
 
3953
===================================================================
 
3954
--- a/src/contrib/ChangeLog     (.../tags/gcc_4_8_2_release)
 
3955
+++ b/src/contrib/ChangeLog     (.../branches/gcc-4_8-branch)
 
3956
@@ -1,3 +1,7 @@
 
3957
+2013-10-21  Mike Stump  <mikestump@comcast.net>
 
3958
+
 
3959
+       * gcc_update (configure): Update to handle svn 1.8.1.
 
3960
+
 
3961
 2013-10-16  Release Manager
 
3962
 
 
3963
        * GCC 4.8.2 released.
 
3964
Index: contrib/gcc_update
 
3965
===================================================================
 
3966
--- a/src/contrib/gcc_update    (.../tags/gcc_4_8_2_release)
 
3967
+++ b/src/contrib/gcc_update    (.../branches/gcc-4_8-branch)
 
3968
@@ -382,7 +382,7 @@
 
3969
        fi
 
3970
 
 
3971
        revision=`$GCC_SVN info | awk '/Revision:/ { print $2 }'`
 
3972
-       branch=`$GCC_SVN info | sed -ne "/URL:/ {
 
3973
+       branch=`$GCC_SVN info | sed -ne "/^URL:/ {
 
3974
            s,.*/trunk,trunk,
 
3975
            s,.*/branches/,,
 
3976
            s,.*/tags/,,
 
3977
Index: libatomic/cas_n.c
 
3978
===================================================================
 
3979
--- a/src/libatomic/cas_n.c     (.../tags/gcc_4_8_2_release)
 
3980
+++ b/src/libatomic/cas_n.c     (.../branches/gcc-4_8-branch)
 
3981
@@ -51,10 +51,9 @@
 
3982
 #if !DONE && N <= WORDSIZE && defined(atomic_compare_exchange_w)
 
3983
 bool
 
3984
 SIZE(libat_compare_exchange) (UTYPE *mptr, UTYPE *eptr, UTYPE newval,
 
3985
-                             int smodel, int fmodel UNUSED)
 
3986
+                             int smodel, int fmodel)
 
3987
 {
 
3988
   UWORD mask, shift, weval, woldval, wnewval, t, *wptr;
 
3989
-  bool ret = false;
 
3990
 
 
3991
   pre_barrier (smodel);
 
3992
 
 
3993
@@ -82,12 +81,13 @@
 
3994
     }
 
3995
   while (!atomic_compare_exchange_w (wptr, &woldval, t, true,
 
3996
                                     __ATOMIC_RELAXED, __ATOMIC_RELAXED));
 
3997
-  ret = true;
 
3998
+  post_barrier (smodel);
 
3999
+  return true;
 
4000
+
 
4001
  failure:
 
4002
   *eptr = woldval >> shift;
 
4003
-
 
4004
-  post_barrier (smodel);
 
4005
-  return ret;
 
4006
+  post_barrier (fmodel);
 
4007
+  return false;
 
4008
 }
 
4009
 
 
4010
 #define DONE 1
 
4011
@@ -102,18 +102,17 @@
 
4012
 {
 
4013
   UTYPE oldval;
 
4014
   UWORD magic;
 
4015
-  bool ret = false;
 
4016
+  bool ret;
 
4017
 
 
4018
   pre_seq_barrier (smodel);
 
4019
   magic = protect_start (mptr);
 
4020
 
 
4021
   oldval = *mptr;
 
4022
-  if (oldval == *eptr)
 
4023
-    {
 
4024
-      *mptr = newval;
 
4025
-      ret = true;
 
4026
-    }
 
4027
-  *eptr = oldval;
 
4028
+  ret = (oldval == *eptr);
 
4029
+  if (ret)
 
4030
+    *mptr = newval;
 
4031
+  else
 
4032
+    *eptr = oldval;
 
4033
 
 
4034
   protect_end (mptr, magic);
 
4035
   post_seq_barrier (smodel);
 
4036
Index: libatomic/ChangeLog
 
4037
===================================================================
 
4038
--- a/src/libatomic/ChangeLog   (.../tags/gcc_4_8_2_release)
 
4039
+++ b/src/libatomic/ChangeLog   (.../branches/gcc-4_8-branch)
 
4040
@@ -1,3 +1,9 @@
 
4041
+2014-02-20  Richard Henderson  <rth@redhat.com>
 
4042
+
 
4043
+       PR c++/60272
 
4044
+       * cas_n.c (libat_compare_exchange): Conditionalize on failure
 
4045
+       the store back to EPTR.
 
4046
+
 
4047
 2013-10-16  Release Manager
 
4048
 
 
4049
        * GCC 4.8.2 released.
 
4050
Index: libbacktrace/configure
 
4051
===================================================================
 
4052
--- a/src/libbacktrace/configure        (.../tags/gcc_4_8_2_release)
 
4053
+++ b/src/libbacktrace/configure        (.../branches/gcc-4_8-branch)
 
4054
@@ -11667,12 +11667,13 @@
 
4055
   return 0;
 
4056
 }
 
4057
 _ACEOF
 
4058
-if ac_fn_c_try_compile "$LINENO"; then :
 
4059
+if ac_fn_c_try_link "$LINENO"; then :
 
4060
   have_unwind_getipinfo=yes
 
4061
 else
 
4062
   have_unwind_getipinfo=no
 
4063
 fi
 
4064
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
4065
+rm -f core conftest.err conftest.$ac_objext \
 
4066
+    conftest$ac_exeext conftest.$ac_ext
 
4067
   CFLAGS="$ac_save_CFLAGS"
 
4068
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_unwind_getipinfo" >&5
 
4069
 $as_echo "$have_unwind_getipinfo" >&6; }
 
4070
Index: libbacktrace/Makefile.in
 
4071
===================================================================
 
4072
--- a/src/libbacktrace/Makefile.in      (.../tags/gcc_4_8_2_release)
 
4073
+++ b/src/libbacktrace/Makefile.in      (.../branches/gcc-4_8-branch)
 
4074
@@ -16,7 +16,7 @@
 
4075
 @SET_MAKE@
 
4076
 
 
4077
 # Makefile.am -- Backtrace Makefile.
 
4078
-# Copyright (C) 2012 Free Software Foundation, Inc.
 
4079
+# Copyright (C) 2012-2013 Free Software Foundation, Inc.
 
4080
 
 
4081
 # Redistribution and use in source and binary forms, with or without
 
4082
 # modification, are permitted provided that the following conditions are
 
4083
Index: libbacktrace/dwarf.c
 
4084
===================================================================
 
4085
--- a/src/libbacktrace/dwarf.c  (.../tags/gcc_4_8_2_release)
 
4086
+++ b/src/libbacktrace/dwarf.c  (.../branches/gcc-4_8-branch)
 
4087
@@ -2507,7 +2507,6 @@
 
4088
   if (pfvec->count == 0)
 
4089
     return;
 
4090
 
 
4091
-  addrs = (struct function_addrs *) pfvec->vec.base;
 
4092
   addrs_count = pfvec->count;
 
4093
 
 
4094
   if (fvec == NULL)
 
4095
@@ -2514,12 +2513,17 @@
 
4096
     {
 
4097
       if (!backtrace_vector_release (state, &lvec.vec, error_callback, data))
 
4098
        return;
 
4099
+      addrs = (struct function_addrs *) pfvec->vec.base;
 
4100
     }
 
4101
   else
 
4102
     {
 
4103
       /* Finish this list of addresses, but leave the remaining space in
 
4104
         the vector available for the next function unit.  */
 
4105
-      backtrace_vector_finish (state, &fvec->vec);
 
4106
+      addrs = ((struct function_addrs *)
 
4107
+              backtrace_vector_finish (state, &fvec->vec,
 
4108
+                                       error_callback, data));
 
4109
+      if (addrs == NULL)
 
4110
+       return;
 
4111
       fvec->count = 0;
 
4112
     }
 
4113
 
 
4114
Index: libbacktrace/ChangeLog
 
4115
===================================================================
 
4116
--- a/src/libbacktrace/ChangeLog        (.../tags/gcc_4_8_2_release)
 
4117
+++ b/src/libbacktrace/ChangeLog        (.../branches/gcc-4_8-branch)
 
4118
@@ -1,3 +1,28 @@
 
4119
+2014-02-07  Misty De Meo  <misty@brew.sh>
 
4120
+
 
4121
+       PR target/58710
 
4122
+       * configure.ac: Use AC_LINK_IFELSE in check for
 
4123
+       _Unwind_GetIPInfo.
 
4124
+       * configure: Regenerate.
 
4125
+
 
4126
+2013-12-05  Ian Lance Taylor  <iant@google.com>
 
4127
+
 
4128
+       * alloc.c (backtrace_vector_finish): Add error_callback and data
 
4129
+       parameters.  Call backtrace_vector_release.  Return address base.
 
4130
+       * mmap.c (backtrace_vector_finish): Add error_callback and data
 
4131
+       parameters.  Return address base.
 
4132
+       * dwarf.c (read_function_info): Get new address base from
 
4133
+       backtrace_vector_finish.
 
4134
+       * internal.h (backtrace_vector_finish): Update declaration.
 
4135
+
 
4136
+2013-11-30  Ian Lance Taylor  <iant@google.com>
 
4137
+
 
4138
+       Backport from mainline:
 
4139
+       2013-10-17  Ian Lance Taylor  <iant@google.com>
 
4140
+
 
4141
+       * elf.c (elf_add): Don't get the wrong offsets if a debug section
 
4142
+       is missing.
 
4143
+
 
4144
 2013-10-16  Release Manager
 
4145
 
 
4146
        * GCC 4.8.2 released.
 
4147
Index: libbacktrace/elf.c
 
4148
===================================================================
 
4149
--- a/src/libbacktrace/elf.c    (.../tags/gcc_4_8_2_release)
 
4150
+++ b/src/libbacktrace/elf.c    (.../branches/gcc-4_8-branch)
 
4151
@@ -725,6 +725,8 @@
 
4152
     {
 
4153
       off_t end;
 
4154
 
 
4155
+      if (sections[i].size == 0)
 
4156
+       continue;
 
4157
       if (min_offset == 0 || sections[i].offset < min_offset)
 
4158
        min_offset = sections[i].offset;
 
4159
       end = sections[i].offset + sections[i].size;
 
4160
@@ -751,8 +753,13 @@
 
4161
   descriptor = -1;
 
4162
 
 
4163
   for (i = 0; i < (int) DEBUG_MAX; ++i)
 
4164
-    sections[i].data = ((const unsigned char *) debug_view.data
 
4165
-                       + (sections[i].offset - min_offset));
 
4166
+    {
 
4167
+      if (sections[i].size == 0)
 
4168
+       sections[i].data = NULL;
 
4169
+      else
 
4170
+       sections[i].data = ((const unsigned char *) debug_view.data
 
4171
+                           + (sections[i].offset - min_offset));
 
4172
+    }
 
4173
 
 
4174
   if (!backtrace_dwarf_add (state, base_address,
 
4175
                            sections[DEBUG_INFO].data,
 
4176
Index: libbacktrace/internal.h
 
4177
===================================================================
 
4178
--- a/src/libbacktrace/internal.h       (.../tags/gcc_4_8_2_release)
 
4179
+++ b/src/libbacktrace/internal.h       (.../branches/gcc-4_8-branch)
 
4180
@@ -192,13 +192,17 @@
 
4181
                                    struct backtrace_vector *vec);
 
4182
 
 
4183
 /* Finish the current allocation on VEC.  Prepare to start a new
 
4184
-   allocation.  The finished allocation will never be freed.  */
 
4185
+   allocation.  The finished allocation will never be freed.  Returns
 
4186
+   a pointer to the base of the finished entries, or NULL on
 
4187
+   failure.  */
 
4188
 
 
4189
-extern void backtrace_vector_finish (struct backtrace_state *state,
 
4190
-                                    struct backtrace_vector *vec);
 
4191
+extern void* backtrace_vector_finish (struct backtrace_state *state,
 
4192
+                                     struct backtrace_vector *vec,
 
4193
+                                     backtrace_error_callback error_callback,
 
4194
+                                     void *data);
 
4195
 
 
4196
-/* Release any extra space allocated for VEC.  Returns 1 on success, 0
 
4197
-   on failure.  */
 
4198
+/* Release any extra space allocated for VEC.  This may change
 
4199
+   VEC->base.  Returns 1 on success, 0 on failure.  */
 
4200
 
 
4201
 extern int backtrace_vector_release (struct backtrace_state *state,
 
4202
                                     struct backtrace_vector *vec,
 
4203
Index: libbacktrace/configure.ac
 
4204
===================================================================
 
4205
--- a/src/libbacktrace/configure.ac     (.../tags/gcc_4_8_2_release)
 
4206
+++ b/src/libbacktrace/configure.ac     (.../branches/gcc-4_8-branch)
 
4207
@@ -144,7 +144,7 @@
 
4208
   ac_save_CFFLAGS="$CFLAGS"
 
4209
   CFLAGS="$CFLAGS -Werror-implicit-function-declaration"
 
4210
   AC_MSG_CHECKING([for _Unwind_GetIPInfo])
 
4211
-  AC_COMPILE_IFELSE(
 
4212
+  AC_LINK_IFELSE(
 
4213
     [AC_LANG_PROGRAM(
 
4214
        [#include "unwind.h"
 
4215
        struct _Unwind_Context *context;
 
4216
Index: libbacktrace/alloc.c
 
4217
===================================================================
 
4218
--- a/src/libbacktrace/alloc.c  (.../tags/gcc_4_8_2_release)
 
4219
+++ b/src/libbacktrace/alloc.c  (.../branches/gcc-4_8-branch)
 
4220
@@ -113,12 +113,24 @@
 
4221
 
 
4222
 /* Finish the current allocation on VEC.  */
 
4223
 
 
4224
-void
 
4225
-backtrace_vector_finish (struct backtrace_state *state ATTRIBUTE_UNUSED,
 
4226
-                        struct backtrace_vector *vec)
 
4227
+void *
 
4228
+backtrace_vector_finish (struct backtrace_state *state,
 
4229
+                        struct backtrace_vector *vec,
 
4230
+                        backtrace_error_callback error_callback,
 
4231
+                        void *data)
 
4232
 {
 
4233
-  vec->base = (char *) vec->base + vec->size;
 
4234
+  void *ret;
 
4235
+
 
4236
+  /* With this allocator we call realloc in backtrace_vector_grow,
 
4237
+     which means we can't easily reuse the memory here.  So just
 
4238
+     release it.  */
 
4239
+  if (!backtrace_vector_release (state, vec, error_callback, data))
 
4240
+    return NULL;
 
4241
+  ret = vec->base;
 
4242
+  vec->base = NULL;
 
4243
   vec->size = 0;
 
4244
+  vec->alc = 0;
 
4245
+  return ret;
 
4246
 }
 
4247
 
 
4248
 /* Release any extra space allocated for VEC.  */
 
4249
Index: libbacktrace/mmap.c
 
4250
===================================================================
 
4251
--- a/src/libbacktrace/mmap.c   (.../tags/gcc_4_8_2_release)
 
4252
+++ b/src/libbacktrace/mmap.c   (.../branches/gcc-4_8-branch)
 
4253
@@ -230,12 +230,19 @@
 
4254
 
 
4255
 /* Finish the current allocation on VEC.  */
 
4256
 
 
4257
-void
 
4258
-backtrace_vector_finish (struct backtrace_state *state ATTRIBUTE_UNUSED,
 
4259
-                        struct backtrace_vector *vec)
 
4260
+void *
 
4261
+backtrace_vector_finish (
 
4262
+  struct backtrace_state *state ATTRIBUTE_UNUSED,
 
4263
+  struct backtrace_vector *vec,
 
4264
+  backtrace_error_callback error_callback ATTRIBUTE_UNUSED,
 
4265
+  void *data ATTRIBUTE_UNUSED)
 
4266
 {
 
4267
+  void *ret;
 
4268
+
 
4269
+  ret = vec->base;
 
4270
   vec->base = (char *) vec->base + vec->size;
 
4271
   vec->size = 0;
 
4272
+  return ret;
 
4273
 }
 
4274
 
 
4275
 /* Release any extra space allocated for VEC.  */
 
4276
Index: libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
 
4277
===================================================================
 
4278
--- a/src/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c     (.../tags/gcc_4_8_2_release)
 
4279
+++ b/src/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c     (.../branches/gcc-4_8-branch)
 
4280
@@ -39,10 +39,11 @@
 
4281
 #include <pango/pango.h>
 
4282
 #include <pango/pangoft2.h>
 
4283
 #include <pango/pangofc-font.h>
 
4284
-#include <freetype/ftglyph.h>
 
4285
-#include <freetype/ftoutln.h>
 
4286
-#include <freetype/fttypes.h>
 
4287
-#include <freetype/tttables.h>
 
4288
+#include <ft2build.h>
 
4289
+#include FT_GLYPH_H
 
4290
+#include FT_OUTLINE_H
 
4291
+#include FT_TYPES_H
 
4292
+#include FT_TRUETYPE_TABLES_H
 
4293
 #include "gdkfont.h"
 
4294
 #include "gtkpeer.h"
 
4295
 #include "gnu_java_awt_peer_gtk_GdkFontPeer.h"
 
4296
Index: libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c
 
4297
===================================================================
 
4298
--- a/src/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c     (.../tags/gcc_4_8_2_release)
 
4299
+++ b/src/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c     (.../branches/gcc-4_8-branch)
 
4300
@@ -42,8 +42,9 @@
 
4301
 #include <pango/pango.h>
 
4302
 #include <pango/pangoft2.h>
 
4303
 #include <pango/pangofc-font.h>
 
4304
-#include <freetype/ftglyph.h>
 
4305
-#include <freetype/ftoutln.h>
 
4306
+#include <ft2build.h>
 
4307
+#include FT_GLYPH_H
 
4308
+#include FT_OUTLINE_H
 
4309
 #include "jcl.h"
 
4310
 #include "gdkfont.h"
 
4311
 #include "gnu_java_awt_peer_gtk_FreetypeGlyphVector.h"
 
4312
Index: libjava/classpath/ChangeLog.gcj
 
4313
===================================================================
 
4314
--- a/src/libjava/classpath/ChangeLog.gcj       (.../tags/gcc_4_8_2_release)
 
4315
+++ b/src/libjava/classpath/ChangeLog.gcj       (.../branches/gcc-4_8-branch)
 
4316
@@ -1,3 +1,9 @@
 
4317
+2013-11-29  Matthias Klose  <doko@ubuntu.com>
 
4318
+
 
4319
+       * native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c,
 
4320
+       native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c:
 
4321
+       Fix freetype includes.
 
4322
+
 
4323
 2013-03-22  Jakub Jelinek  <jakub@redhat.com>
 
4324
 
 
4325
        PR other/43620
 
4326
Index: libjava/classpath
 
4327
===================================================================
 
4328
--- a/src/libjava/classpath     (.../tags/gcc_4_8_2_release)
 
4329
+++ b/src/libjava/classpath     (.../branches/gcc-4_8-branch)
 
4330
 
 
4331
Property changes on: libjava/classpath
 
4332
___________________________________________________________________
 
4333
Modified: svn:mergeinfo
 
4334
   Merged /trunk/libjava/classpath:r206395
 
4335
Index: libjava/ChangeLog
 
4336
===================================================================
 
4337
--- a/src/libjava/ChangeLog     (.../tags/gcc_4_8_2_release)
 
4338
+++ b/src/libjava/ChangeLog     (.../branches/gcc-4_8-branch)
 
4339
@@ -1,3 +1,8 @@
 
4340
+2014-03-11  Uros Bizjak  <ubizjak@gmail.com>
 
4341
+
 
4342
+       * java/lang/natObject.cc (_Jv_MonitorEnter): Add missing parenthesis
 
4343
+       around comparison with (address | LOCKED) in JvAssert.
 
4344
+
 
4345
 2013-10-16  Release Manager
 
4346
 
 
4347
        * GCC 4.8.2 released.
 
4348
Index: libjava/java/lang/natObject.cc
 
4349
===================================================================
 
4350
--- a/src/libjava/java/lang/natObject.cc        (.../tags/gcc_4_8_2_release)
 
4351
+++ b/src/libjava/java/lang/natObject.cc        (.../branches/gcc-4_8-branch)
 
4352
@@ -929,7 +929,7 @@
 
4353
          // only be held by other threads waiting for conversion, and
 
4354
          // they, like us, drop it quickly without blocking.
 
4355
          _Jv_MutexLock(&(hl->si.mutex));
 
4356
-         JvAssert(he -> address == address | LOCKED );
 
4357
+         JvAssert(he -> address == (address | LOCKED));
 
4358
          release_set(&(he -> address), (address | REQUEST_CONVERSION | HEAVY));
 
4359
                                // release lock on he
 
4360
          LOG(REQ_CONV, (address | REQUEST_CONVERSION | HEAVY), self);
 
4361
@@ -961,7 +961,7 @@
 
4362
     }
 
4363
   obj_addr_t was_heavy = (address & HEAVY);
 
4364
   if ((address & LOCKED) ||
 
4365
-      !compare_and_swap(&(he -> address), address, (address | LOCKED )))
 
4366
+      !compare_and_swap(&(he -> address), address, address | LOCKED ))
 
4367
     {
 
4368
       wait_unlocked(he);
 
4369
       goto retry;
 
4370
Index: gnattools/configure
 
4371
===================================================================
 
4372
--- a/src/gnattools/configure   (.../tags/gcc_4_8_2_release)
 
4373
+++ b/src/gnattools/configure   (.../branches/gcc-4_8-branch)
 
4374
@@ -2029,66 +2029,59 @@
 
4375
 # Per-target case statement
 
4376
 # -------------------------
 
4377
 case "${target}" in
 
4378
-  alpha*-dec-vx*) # Unlike all other Vxworks
 
4379
+  *-*-aix*)
 
4380
+    TOOLS_TARGET_PAIRS="\
 
4381
+    mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
 
4382
+    indepsw.adb<indepsw-aix.adb"
 
4383
     ;;
 
4384
-  m68k*-wrs-vx* \
 
4385
-  | powerpc*-wrs-vxworks \
 
4386
-  | sparc*-wrs-vx* \
 
4387
-  | *86-wrs-vxworks \
 
4388
-  | mips*-wrs-vx*)
 
4389
-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb"
 
4390
+  *-*-darwin*)
 
4391
+    TOOLS_TARGET_PAIRS="\
 
4392
+    mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb \
 
4393
+    indepsw.adb<indepsw-darwin.adb"
 
4394
     ;;
 
4395
-  sparc-sun-solaris*)
 
4396
-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
 
4397
+  *-*-freebsd*)
 
4398
+    TOOLS_TARGET_PAIRS="\
 
4399
+    mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
 
4400
+    indepsw.adb<indepsw-gnu.adb"
 
4401
     ;;
 
4402
-  *86-*-solaris2* | x86_64-*-solaris2.1[0-9]*)
 
4403
-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
 
4404
-    ;;
 
4405
-  *86-*-linux* \
 
4406
-  | powerpc*-*-linux* \
 
4407
-  | *ia64-*-linux* \
 
4408
-  | alpha*-*-linux* \
 
4409
-  | sparc*-*-linux* \
 
4410
-  | hppa*-*-linux* \
 
4411
-  | *x86_64-*-linux*)
 
4412
+  *-*-linux*)
 
4413
     TOOLS_TARGET_PAIRS="\
 
4414
     mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
 
4415
     indepsw.adb<indepsw-gnu.adb"
 
4416
     ;;
 
4417
-  s390*-*-linux*)
 
4418
-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb"
 
4419
+  *-*-lynxos*)
 
4420
+    TOOLS_TARGET_PAIRS="\
 
4421
+    mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
 
4422
+    indepsw.adb<indepsw-gnu.adb"
 
4423
     ;;
 
4424
-  *86-*-freebsd*)
 
4425
+  *-*-solaris*)
 
4426
+    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
 
4427
+    ;;
 
4428
+  *-*-vxworks*)
 
4429
     TOOLS_TARGET_PAIRS="\
 
4430
-    mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
 
4431
+    mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb \
 
4432
     indepsw.adb<indepsw-gnu.adb"
 
4433
     ;;
 
4434
-  hppa*-hp-hpux10*) # Unlike hpux11
 
4435
+  hppa*-hp-hpux10*)
 
4436
     ;;
 
4437
   hppa*-hp-hpux11*)
 
4438
     TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-hpux.adb"
 
4439
     ;;
 
4440
-  *-ibm-aix*)
 
4441
-    TOOLS_TARGET_PAIRS="\
 
4442
-    mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
 
4443
-    indepsw.adb<indepsw-aix.adb"
 
4444
+  ia64-hp-hpux11*)
 
4445
+    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-ia64-hpux.adb"
 
4446
     ;;
 
4447
-  alpha*-dec-vms* | alpha*-dec-openvms* | alpha*-dec-vms* \
 
4448
-  | alpha*-hp-vms* | alpha*-hp-openvms* | alpha*-hp-vms*)
 
4449
+  alpha*-*-vms* | alpha*-*-openvms*)
 
4450
     TOOLS_TARGET_PAIRS="\
 
4451
     mlib-tgt-specific.adb<mlib-tgt-specific-vms-alpha.adb \
 
4452
     symbols.adb<symbols-vms.adb \
 
4453
     symbols-processing.adb<symbols-processing-vms-alpha.adb"
 
4454
-
 
4455
     EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
 
4456
     ;;
 
4457
-  ia64*-dec-vms* | ia64*-dec-openvms* | ia64*-dec-vms* \
 
4458
-  | ia64*-hp-vms* | ia64*-hp-openvms* | ia64*-hp-vms*)
 
4459
+  ia64-*-vms* | ia64-*-openvms*)
 
4460
     TOOLS_TARGET_PAIRS="\
 
4461
     mlib-tgt-specific.adb<mlib-tgt-specific-vms-ia64.adb \
 
4462
     symbols.adb<symbols-vms.adb \
 
4463
     symbols-processing.adb<symbols-processing-vms-ia64.adb"
 
4464
-
 
4465
     EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
 
4466
     ;;
 
4467
   *-*-cygwin32* | *-*-mingw32* | *-*-pe)
 
4468
@@ -2097,14 +2090,6 @@
 
4469
     indepsw.adb<indepsw-mingw.adb"
 
4470
     EXTRA_GNATTOOLS='../../gnatdll$(exeext)'
 
4471
     ;;
 
4472
-  *-*-darwin*)
 
4473
-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb"
 
4474
-    ;;
 
4475
-  *-*-lynxos)
 
4476
-    TOOLS_TARGET_PAIRS="\
 
4477
-    mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
 
4478
-    indepsw.adb<indepsw-gnu.adb"
 
4479
-    ;;
 
4480
 esac
 
4481
 
 
4482
 # From user or toplevel makefile.
 
4483
Index: gnattools/Makefile.in
 
4484
===================================================================
 
4485
--- a/src/gnattools/Makefile.in (.../tags/gcc_4_8_2_release)
 
4486
+++ b/src/gnattools/Makefile.in (.../branches/gcc-4_8-branch)
 
4487
@@ -24,6 +24,8 @@
 
4488
 libdir = @libdir@
 
4489
 build = @build@
 
4490
 target = @target@
 
4491
+host = @host@
 
4492
+host_alias = @host_alias@
 
4493
 prefix = @prefix@
 
4494
 INSTALL = @INSTALL@
 
4495
 INSTALL_DATA = @INSTALL_DATA@
 
4496
@@ -84,6 +86,7 @@
 
4497
 TOOLS_FLAGS_TO_PASS_RE= \
 
4498
        "CC=../../xgcc -B../../" \
 
4499
        "CFLAGS=$(CFLAGS)" \
 
4500
+       "LDFLAGS=$(LDFLAGS)" \
 
4501
        "ADAFLAGS=$(ADAFLAGS)" \
 
4502
        "ADA_CFLAGS=$(ADA_CFLAGS)" \
 
4503
        "INCLUDES=$(INCLUDES_FOR_SUBDIR)" \
 
4504
@@ -97,6 +100,22 @@
 
4505
        "TOOLSCASE=cross"
 
4506
 
 
4507
 # Variables for gnattools, cross
 
4508
+ifeq ($(build), $(host))
 
4509
+  GNATMAKE_FOR_HOST=gnatmake
 
4510
+  GNATLINK_FOR_HOST=gnatlink
 
4511
+  GNATBIND_FOR_HOST=gnatbind
 
4512
+  GNATLS_FOR_HOST=gnatls
 
4513
+else
 
4514
+  GNATMAKE_FOR_HOST=$(host_alias)-gnatmake
 
4515
+  GNATLINK_FOR_HOST=$(host_alias)-gnatlink
 
4516
+  GNATBIND_FOR_HOST=$(host_alias)-gnatbind
 
4517
+  GNATLS_FOR_HOST=$(host_alias)-gnatls
 
4518
+endif
 
4519
+
 
4520
+# Put the host RTS dir first in the PATH to hide the default runtime
 
4521
+# files that are among the sources
 
4522
+RTS_DIR:=$(strip $(subst \,/,$(shell $(GNATLS_FOR_HOST) -v | grep adalib )))
 
4523
+
 
4524
 TOOLS_FLAGS_TO_PASS_CROSS= \
 
4525
        "CC=$(CC)" \
 
4526
        "CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \
 
4527
@@ -108,9 +127,9 @@
 
4528
        "exeext=$(exeext)" \
 
4529
        "fsrcdir=$(fsrcdir)" \
 
4530
        "srcdir=$(fsrcdir)" \
 
4531
-       "GNATMAKE=gnatmake" \
 
4532
-       "GNATLINK=gnatlink" \
 
4533
-       "GNATBIND=gnatbind" \
 
4534
+       "GNATMAKE=$(GNATMAKE_FOR_HOST)" \
 
4535
+       "GNATLINK=$(GNATLINK_FOR_HOST)" \
 
4536
+       "GNATBIND=$(GNATBIND_FOR_HOST)" \
 
4537
        "TOOLSCASE=cross" \
 
4538
        "LIBGNAT="
 
4539
 
 
4540
@@ -179,11 +198,6 @@
 
4541
        $(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
 
4542
          $(TOOLS_FLAGS_TO_PASS_NATIVE) common-tools
 
4543
 
 
4544
-# For cross builds of gnattools,
 
4545
-# put the host RTS dir first in the PATH to hide the default runtime
 
4546
-# files that are among the sources
 
4547
-# FIXME: This should be done in configure.
 
4548
-RTS_DIR:=$(strip $(subst \,/,$(shell gnatls -v | grep adalib )))
 
4549
 gnattools-cross: $(GCC_DIR)/stamp-tools
 
4550
        # gnattools1-re
 
4551
        $(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
 
4552
Index: gnattools/configure.ac
 
4553
===================================================================
 
4554
--- a/src/gnattools/configure.ac        (.../tags/gcc_4_8_2_release)
 
4555
+++ b/src/gnattools/configure.ac        (.../branches/gcc-4_8-branch)
 
4556
@@ -69,66 +69,59 @@
 
4557
 # Per-target case statement
 
4558
 # -------------------------
 
4559
 case "${target}" in
 
4560
-  alpha*-dec-vx*) # Unlike all other Vxworks
 
4561
+  *-*-aix*)
 
4562
+    TOOLS_TARGET_PAIRS="\
 
4563
+    mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
 
4564
+    indepsw.adb<indepsw-aix.adb"
 
4565
     ;;
 
4566
-  m68k*-wrs-vx* \
 
4567
-  | powerpc*-wrs-vxworks \
 
4568
-  | sparc*-wrs-vx* \
 
4569
-  | *86-wrs-vxworks \
 
4570
-  | mips*-wrs-vx*)
 
4571
-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb"
 
4572
+  *-*-darwin*)
 
4573
+    TOOLS_TARGET_PAIRS="\
 
4574
+    mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb \
 
4575
+    indepsw.adb<indepsw-darwin.adb"
 
4576
     ;;
 
4577
-  sparc-sun-solaris*)
 
4578
-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
 
4579
+  *-*-freebsd*)
 
4580
+    TOOLS_TARGET_PAIRS="\
 
4581
+    mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
 
4582
+    indepsw.adb<indepsw-gnu.adb"
 
4583
     ;;
 
4584
-  *86-*-solaris2* | x86_64-*-solaris2.1[[0-9]]*)
 
4585
-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
 
4586
-    ;;
 
4587
-  *86-*-linux* \
 
4588
-  | powerpc*-*-linux* \
 
4589
-  | *ia64-*-linux* \
 
4590
-  | alpha*-*-linux* \
 
4591
-  | sparc*-*-linux* \
 
4592
-  | hppa*-*-linux* \
 
4593
-  | *x86_64-*-linux*)
 
4594
+  *-*-linux*)
 
4595
     TOOLS_TARGET_PAIRS="\
 
4596
     mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
 
4597
     indepsw.adb<indepsw-gnu.adb"
 
4598
     ;;
 
4599
-  s390*-*-linux*)
 
4600
-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb"
 
4601
+  *-*-lynxos*)
 
4602
+    TOOLS_TARGET_PAIRS="\
 
4603
+    mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
 
4604
+    indepsw.adb<indepsw-gnu.adb"
 
4605
     ;;
 
4606
-  *86-*-freebsd*)
 
4607
+  *-*-solaris*)
 
4608
+    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb"
 
4609
+    ;;
 
4610
+  *-*-vxworks*)
 
4611
     TOOLS_TARGET_PAIRS="\
 
4612
-    mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
 
4613
+    mlib-tgt-specific.adb<mlib-tgt-specific-vxworks.adb \
 
4614
     indepsw.adb<indepsw-gnu.adb"
 
4615
     ;;
 
4616
-  hppa*-hp-hpux10*) # Unlike hpux11
 
4617
+  hppa*-hp-hpux10*)
 
4618
     ;;
 
4619
   hppa*-hp-hpux11*)
 
4620
     TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-hpux.adb"
 
4621
     ;;
 
4622
-  *-ibm-aix*)
 
4623
-    TOOLS_TARGET_PAIRS="\
 
4624
-    mlib-tgt-specific.adb<mlib-tgt-specific-aix.adb \
 
4625
-    indepsw.adb<indepsw-aix.adb"
 
4626
+  ia64-hp-hpux11*)
 
4627
+    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-ia64-hpux.adb"
 
4628
     ;;
 
4629
-  alpha*-dec-vms* | alpha*-dec-openvms* | alpha*-dec-vms* \
 
4630
-  | alpha*-hp-vms* | alpha*-hp-openvms* | alpha*-hp-vms*)
 
4631
+  alpha*-*-vms* | alpha*-*-openvms*)
 
4632
     TOOLS_TARGET_PAIRS="\
 
4633
     mlib-tgt-specific.adb<mlib-tgt-specific-vms-alpha.adb \
 
4634
     symbols.adb<symbols-vms.adb \
 
4635
     symbols-processing.adb<symbols-processing-vms-alpha.adb"
 
4636
-
 
4637
     EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
 
4638
     ;;
 
4639
-  ia64*-dec-vms* | ia64*-dec-openvms* | ia64*-dec-vms* \
 
4640
-  | ia64*-hp-vms* | ia64*-hp-openvms* | ia64*-hp-vms*)
 
4641
+  ia64-*-vms* | ia64-*-openvms*)
 
4642
     TOOLS_TARGET_PAIRS="\
 
4643
     mlib-tgt-specific.adb<mlib-tgt-specific-vms-ia64.adb \
 
4644
     symbols.adb<symbols-vms.adb \
 
4645
     symbols-processing.adb<symbols-processing-vms-ia64.adb"
 
4646
-
 
4647
     EXTRA_GNATTOOLS='../../gnatlbr$(exeext) ../../gnatsym$(exeext)'
 
4648
     ;;
 
4649
   *-*-cygwin32* | *-*-mingw32* | *-*-pe)
 
4650
@@ -137,14 +130,6 @@
 
4651
     indepsw.adb<indepsw-mingw.adb"
 
4652
     EXTRA_GNATTOOLS='../../gnatdll$(exeext)'
 
4653
     ;;
 
4654
-  *-*-darwin*)
 
4655
-    TOOLS_TARGET_PAIRS="mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb"
 
4656
-    ;;
 
4657
-  *-*-lynxos)
 
4658
-    TOOLS_TARGET_PAIRS="\
 
4659
-    mlib-tgt-specific.adb<mlib-tgt-specific-lynxos.adb \
 
4660
-    indepsw.adb<indepsw-gnu.adb"
 
4661
-    ;;
 
4662
 esac
 
4663
 
 
4664
 # From user or toplevel makefile.
 
4665
Index: gnattools/ChangeLog
 
4666
===================================================================
 
4667
--- a/src/gnattools/ChangeLog   (.../tags/gcc_4_8_2_release)
 
4668
+++ b/src/gnattools/ChangeLog   (.../branches/gcc-4_8-branch)
 
4669
@@ -1,3 +1,23 @@
 
4670
+2013-12-12  Eric Botcazou  <ebotcazou@adacore.com>
 
4671
+           Iain Sandoe  <iain@codesourcery.com>
 
4672
+
 
4673
+       PR ada/55946
 
4674
+       * Makefile.in (host): Define.
 
4675
+       (host_alias): Likewise.
 
4676
+       (TOOLS_FLAGS_TO_PASS_RE): Add LDFLAGS.
 
4677
+       (GNATMAKE_FOR_HOST): Define.
 
4678
+       (GNATLINK_FOR_HOST): Likewise.
 
4679
+       (GNATBIND_FOR_HOST): Likewise.
 
4680
+       (GNATLS_FOR_HOST): Likewise.
 
4681
+       (RTS_DIR): Move around and use GNATLS_FOR_HOST.
 
4682
+       (TOOLS_FLAGS_TO_PASS_CROSS): Use the other *_HOST variables.
 
4683
+
 
4684
+2013-12-04  Eric Botcazou  <ebotcazou@adacore.com>
 
4685
+
 
4686
+       PR ada/59382
 
4687
+       * configure.ac (target parameterization): Rewrite.
 
4688
+       * configure: Regenerate.
 
4689
+
 
4690
 2013-10-16  Release Manager
 
4691
 
 
4692
        * GCC 4.8.2 released.
 
4693
Index: maintainer-scripts/ChangeLog
 
4694
===================================================================
 
4695
--- a/src/maintainer-scripts/ChangeLog  (.../tags/gcc_4_8_2_release)
 
4696
+++ b/src/maintainer-scripts/ChangeLog  (.../branches/gcc-4_8-branch)
 
4697
@@ -1,3 +1,9 @@
 
4698
+2014-02-01  Dmitry Gorbachev  <d.g.gorbachev@gmail.com>
 
4699
+
 
4700
+       PR other/56653
 
4701
+       * gcc_release: Avoid printing empty line to generated MD5SUMS files.
 
4702
+       Bump copyright year.
 
4703
+
 
4704
 2013-10-16  Release Manager
 
4705
 
 
4706
        * GCC 4.8.2 released.
 
4707
Index: maintainer-scripts/gcc_release
 
4708
===================================================================
 
4709
--- a/src/maintainer-scripts/gcc_release        (.../tags/gcc_4_8_2_release)
 
4710
+++ b/src/maintainer-scripts/gcc_release        (.../branches/gcc-4_8-branch)
 
4711
@@ -9,7 +9,7 @@
 
4712
 # Contents:
 
4713
 #   Script to create a GCC release.
 
4714
 #
 
4715
-# Copyright (c) 2001, 2002, 2006, 2009, 2010, 2011 Free Software Foundation.
 
4716
+# Copyright (c) 2001-2014 Free Software Foundation.
 
4717
 #
 
4718
 # This file is part of GCC.
 
4719
 #
 
4720
@@ -213,7 +213,7 @@
 
4721
 #
 
4722
 # Suggested usage:
 
4723
 # md5sum -c MD5SUMS | grep -v \"OK$\"
 
4724
-" > MD5SUMS
 
4725
+#" > MD5SUMS
 
4726
 
 
4727
   find . -type f |
 
4728
   sed -e 's:^\./::' -e '/MD5SUMS/d' |
 
4729
Index: libgcc/config.host
 
4730
===================================================================
 
4731
--- a/src/libgcc/config.host    (.../tags/gcc_4_8_2_release)
 
4732
+++ b/src/libgcc/config.host    (.../branches/gcc-4_8-branch)
 
4733
@@ -331,10 +331,10 @@
 
4734
        ;;
 
4735
 arm*-*-uclinux*)               # ARM ucLinux
 
4736
        tmake_file="${tmake_file} t-fixedpoint-gnu-prefix"
 
4737
+       tmake_file="$tmake_file arm/t-arm arm/t-elf t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp"
 
4738
        tmake_file="${tmake_file} arm/t-bpabi"
 
4739
        tm_file="$tm_file arm/bpabi-lib.h"
 
4740
        unwind_header=config/arm/unwind-arm.h
 
4741
-       tmake_file="$tmake_file arm/t-arm arm/t-elf t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp"
 
4742
        extra_parts="$extra_parts crti.o crtn.o"
 
4743
        ;;
 
4744
 arm*-*-eabi* | arm*-*-symbianelf* | arm*-*-rtems*)
 
4745
@@ -718,6 +718,10 @@
 
4746
        tmake_file="${tmake_file} microblaze/t-microblaze t-fdpbit"
 
4747
        extra_parts="$extra_parts crtbeginS.o crtendS.o crtbeginT.o crti.o crtn.o"
 
4748
        ;;
 
4749
+microblaze*-*-rtems*)
 
4750
+       tmake_file="${tmake_file} microblaze/t-microblaze t-fdpbit"
 
4751
+       extra_parts="$extra_parts crtbeginS.o crtendS.o crtbeginT.o crti.o crtn.o"
 
4752
+       ;;
 
4753
 mips*-*-netbsd*)                       # NetBSD/mips, either endian.
 
4754
        ;;
 
4755
 mips*-*-linux*)                                # Linux MIPS, either endian.
 
4756
@@ -1081,7 +1085,7 @@
 
4757
        md_unwind_header=tilepro/linux-unwind.h
 
4758
         ;;
 
4759
 v850*-*-*)
 
4760
-       tmake_file="v850/t-v850 t-fdpbit"
 
4761
+       tmake_file="${tmake_file} v850/t-v850 t-fdpbit"
 
4762
        ;;
 
4763
 vax-*-linux*)
 
4764
        tmake_file="$tmake_file vax/t-linux"
 
4765
@@ -1098,7 +1102,7 @@
 
4766
        extra_parts="$extra_parts crti.o crtn.o"
 
4767
        ;;
 
4768
 xtensa*-*-linux*)
 
4769
-       tmake_file="$tmake_file xtensa/t-xtensa xtensa/t-linux"
 
4770
+       tmake_file="$tmake_file xtensa/t-xtensa xtensa/t-linux t-slibgcc-libgcc"
 
4771
        md_unwind_header=xtensa/linux-unwind.h
 
4772
        ;;
 
4773
 am33_2.0-*-linux*)
 
4774
Index: libgcc/ChangeLog
 
4775
===================================================================
 
4776
--- a/src/libgcc/ChangeLog      (.../tags/gcc_4_8_2_release)
 
4777
+++ b/src/libgcc/ChangeLog      (.../branches/gcc-4_8-branch)
 
4778
@@ -1,3 +1,170 @@
 
4779
+2014-03-20  Joel Sherrill  <joel.sherrill@oarcorp.com>
 
4780
+
 
4781
+       * config.host (v850*-*-*): Add to tmake_file instead of resetting it.
 
4782
+
 
4783
+2014-02-28  Joey Ye  <joey.ye@arm.com>
 
4784
+
 
4785
+       Backport from mainline r208229
 
4786
+       2014-02-28  Joey Ye  <joey.ye@arm.com>
 
4787
+
 
4788
+       PR libgcc/60166
 
4789
+       * config/arm/sfp-machine.h (_FP_NANFRAC_H,
 
4790
+       _FP_NANFRAC_S, _FP_NANFRAC_D, _FP_NANFRAC_Q):
 
4791
+       Set to zero.
 
4792
+
 
4793
+2014-02-18  Kai Tietz  <ktietz@redhat.com>
 
4794
+       Jonathan Schleifer  <js@webkeks.org>
 
4795
+
 
4796
+       PR objc/56870
 
4797
+       * unwind-seh.c (_GCC_specific_handler): Pass proper
 
4798
+       value to unwind-handler.
 
4799
+
 
4800
+2014-01-25  Walter Lee  <walt@tilera.com>
 
4801
+
 
4802
+       Backport from mainline
 
4803
+       2014-01-25  Walter Lee  <walt@tilera.com>
 
4804
+
 
4805
+       * config/tilepro/atomic.c (pre_atomic_barrier): Mark inline.
 
4806
+       (post_atomic_barrier): Ditto.
 
4807
+       (__fetch_and_do): New macro.
 
4808
+       (__atomic_fetch_and_do): Use __fetch_and_do.
 
4809
+       (__sync_fetch_and_do): New macro.
 
4810
+       (__sync_fetch_and_add_4): New function.
 
4811
+       (__sync_fetch_and_sub_4): New function.
 
4812
+       (__sync_fetch_and_or_4): New function.
 
4813
+       (__sync_fetch_and_and_4): New function.
 
4814
+       (__sync_fetch_and_xor_4): New function.
 
4815
+       (__sync_fetch_and_nand_4): New function.
 
4816
+       (__sync_fetch_and_add_8): New function.
 
4817
+       (__sync_fetch_and_sub_8): New function.
 
4818
+       (__sync_fetch_and_or_8): New function.
 
4819
+       (__sync_fetch_and_and_8): New function.
 
4820
+       (__sync_fetch_and_xor_8): New function.
 
4821
+       (__sync_fetch_and_nand_8): New function.
 
4822
+       (__do_and_fetch): New macro.
 
4823
+       (__atomic_do_and_fetch): Use __do_and_fetch.
 
4824
+       (__sync_do_and_fetch): New macro.
 
4825
+       (__sync_add_and_fetch_4): New function.
 
4826
+       (__sync_sub_and_fetch_4): New function.
 
4827
+       (__sync_or_and_fetch_4): New function.
 
4828
+       (__sync_and_and_fetch_4): New function.
 
4829
+       (__sync_xor_and_fetch_4): New function.
 
4830
+       (__sync_nand_and_fetch_4): New function.
 
4831
+       (__sync_add_and_fetch_8): New function.
 
4832
+       (__sync_sub_and_fetch_8): New function.
 
4833
+       (__sync_or_and_fetch_8): New function.
 
4834
+       (__sync_and_and_fetch_8): New function.
 
4835
+       (__sync_xor_and_fetch_8): New function.
 
4836
+       (__sync_nand_and_fetch_8): New function.
 
4837
+       (__sync_exchange_methods): New macro.
 
4838
+       (__sync_val_compare_and_swap_4): New function.
 
4839
+       (__sync_bool_compare_and_swap_4): New function.
 
4840
+       (__sync_lock_test_and_test_4): New function.
 
4841
+       (__sync_val_compare_and_swap_8): New function.
 
4842
+       (__sync_bool_compare_and_swap_8): New function.
 
4843
+       (__sync_lock_test_and_test_8): New function.
 
4844
+       (__subword_cmpxchg_body): New macro.
 
4845
+       (__atomic_compare_exchange_1): Use __subword_cmpxchg_body.
 
4846
+       (__atomic_compare_exchange_2): Ditto.
 
4847
+       (__sync_subword_cmpxchg): New macro.
 
4848
+       (__sync_val_compare_and_swap_1): New function.
 
4849
+       (__sync_bool_compare_and_swap_1): New function.
 
4850
+       (__sync_val_compare_and_swap_2): New function.
 
4851
+       (__sync_bool_compare_and_swap_2): New function.
 
4852
+       (__atomic_subword): Rename to ...
 
4853
+       (__subword): ... New name.
 
4854
+       (__atomic_subword_fetch): Use __subword.
 
4855
+       (__sync_subword_fetch): New macro.
 
4856
+       (__sync_fetch_and_add_1): New function.
 
4857
+       (__sync_fetch_and_sub_1): New function.
 
4858
+       (__sync_fetch_and_or_1): New function.
 
4859
+       (__sync_fetch_and_and_1): New function.
 
4860
+       (__sync_fetch_and_xor_1): New function.
 
4861
+       (__sync_fetch_and_nand_1): New function.
 
4862
+       (__sync_fetch_and_add_2): New function.
 
4863
+       (__sync_fetch_and_sub_2): New function.
 
4864
+       (__sync_fetch_and_or_2): New function.
 
4865
+       (__sync_fetch_and_and_2): New function.
 
4866
+       (__sync_fetch_and_xor_2): New function.
 
4867
+       (__sync_fetch_and_nand_2): New function.
 
4868
+       (__sync_add_and_fetch_1): New function.
 
4869
+       (__sync_sub_and_fetch_1): New function.
 
4870
+       (__sync_or_and_fetch_1): New function.
 
4871
+       (__sync_and_and_fetch_1): New function.
 
4872
+       (__sync_xor_and_fetch_1): New function.
 
4873
+       (__sync_nand_and_fetch_1): New function.
 
4874
+       (__sync_add_and_fetch_2): New function.
 
4875
+       (__sync_sub_and_fetch_2): New function.
 
4876
+       (__sync_or_and_fetch_2): New function.
 
4877
+       (__sync_and_and_fetch_2): New function.
 
4878
+       (__sync_xor_and_fetch_2): New function.
 
4879
+       (__sync_nand_and_fetch_2): New function.
 
4880
+       (__atomic_subword_lock): Use __subword.
 
4881
+       (__sync_subword_lock): New macro.
 
4882
+       (__sync_lock_test_and_set_1): New function.
 
4883
+       (__sync_lock_test_and_set_2): New function.
 
4884
+
 
4885
+2014-01-25  Walter Lee  <walt@tilera.com>
 
4886
+
 
4887
+       Backport from mainline
 
4888
+       2014-01-25  Walter Lee  <walt@tilera.com>
 
4889
+
 
4890
+       * config/tilepro/atomic.c (BIT_OFFSET): Define.
 
4891
+       (__atomic_subword_cmpxchg): Use BIT_OFFSET.
 
4892
+       (__atomic_subword): Ditto.
 
4893
+
 
4894
+2014-01-25  Walter Lee  <walt@tilera.com>
 
4895
+
 
4896
+       Backport from mainline
 
4897
+       2014-01-25  Walter Lee  <walt@tilera.com>
 
4898
+
 
4899
+       * config/tilepro/atomic.c (__atomic_do_and_fetch): Add
 
4900
+       a prefix op argument.
 
4901
+       (__atomic_nand_fetch_4): Add prefix op.
 
4902
+       (__atomic_nand_fetch_8): Ditto.
 
4903
+
 
4904
+2014-01-21  Baruch Siach <barch@tkos.co.il>
 
4905
+
 
4906
+       * config.host (tmake_file): add t-slibgcc-libgcc for xtensa*-*-linux*.
 
4907
+
 
4908
+2014-01-03  Joseph Myers  <joseph@codesourcery.com>
 
4909
+
 
4910
+       * config/rs6000/ibm-ldouble.c (__gcc_qdiv): Scale up arguments in
 
4911
+       case of small numerator and finite nonzero result.
 
4912
+
 
4913
+2013-12-12  Zhenqiang Chen  <zhenqiang.chen@arm.com>
 
4914
+
 
4915
+       Backport from trunk r205917.
 
4916
+       2013-12-12  Zhenqiang Chen  <zhenqiang.chen@arm.com>
 
4917
+       * config.host (arm*-*-uclinux*): Move t-arm before t-bpabi.
 
4918
+
 
4919
+2013-12-10  Uros Bizjak  <ubizjak@gmail.com>
 
4920
+
 
4921
+       * config/i386/sfp-exceptions.c (__sfp_handle_exceptions): Emit SSE
 
4922
+       instructions when __SSE_MATH__ is defined.
 
4923
+
 
4924
+2013-12-06  Ralf Corsépius  <ralf.corsepius@rtems.org>
 
4925
+
 
4926
+       * config.host (microblaze-*-rtems*): New.
 
4927
+
 
4928
+2013-11-10  Kai Tietz  <ktietz@redhat.com>
 
4929
+
 
4930
+       Back-merged from trunk
 
4931
+       * config/i386/cygming-crtbegin.c (__gcc_register_frame):
 
4932
+       Increment load-count on use of LIBGCC_SONAME DLL.
 
4933
+       (hmod_libgcc): New static variable to hold handle of
 
4934
+       LIBGCC_SONAME DLL.
 
4935
+       (__gcc_deregister_frame): Decrement load-count of
 
4936
+       LIBGCC_SONAME DLL.
 
4937
+
 
4938
+2013-11-07  Uros Bizjak  <ubizjak@gmail.com>
 
4939
+
 
4940
+       * config/i386/sfp-exceptions.c (__sfp_handle_exceptions): Handle
 
4941
+       FP_EX_DENORM.  Store result to volatile location after SSE division
 
4942
+       to close interrupt window.  Remove unneeded fwait after x87
 
4943
+       division since interrupt window will be closed by emitted fstp.
 
4944
+       Rewrite FP_EX_INEXACT handling.
 
4945
+
 
4946
 2013-10-16  Release Manager
 
4947
 
 
4948
        * GCC 4.8.2 released.
 
4949
@@ -151,7 +318,7 @@
 
4950
        * config/mips/crtn.S (fini, init): New labels.
 
4951
 
 
4952
 2012-02-19  Edgar E. Iglesias  <edgar.iglesias@gmail.com>
 
4953
-       * config/microblaze/modsi3.S (modsi3): Fix case with 0x80000000 
 
4954
+       * config/microblaze/modsi3.S (modsi3): Fix case with 0x80000000
 
4955
        as dividend.
 
4956
 
 
4957
 2013-02-16  Alan Modra  <amodra@gmail.com>
 
4958
Index: libgcc/config/i386/sfp-exceptions.c
 
4959
===================================================================
 
4960
--- a/src/libgcc/config/i386/sfp-exceptions.c   (.../tags/gcc_4_8_2_release)
 
4961
+++ b/src/libgcc/config/i386/sfp-exceptions.c   (.../branches/gcc-4_8-branch)
 
4962
@@ -47,21 +47,33 @@
 
4963
   if (_fex & FP_EX_INVALID)
 
4964
     {
 
4965
       float f = 0.0f;
 
4966
-#ifdef __x86_64__
 
4967
+#ifdef __SSE_MATH__
 
4968
+      volatile float r __attribute__ ((unused));
 
4969
       asm volatile ("%vdivss\t{%0, %d0|%d0, %0}" : "+x" (f));
 
4970
+      r = f; /* Needed to trigger exception.   */
 
4971
 #else
 
4972
       asm volatile ("fdiv\t{%y0, %0|%0, %y0}" : "+t" (f));
 
4973
-      asm volatile ("fwait");
 
4974
+      /* No need for fwait, exception is triggered by emitted fstp.  */
 
4975
 #endif
 
4976
     }
 
4977
+  if (_fex & FP_EX_DENORM)
 
4978
+    {
 
4979
+      struct fenv temp;
 
4980
+      asm volatile ("fnstenv\t%0" : "=m" (temp));
 
4981
+      temp.__status_word |= FP_EX_DENORM;
 
4982
+      asm volatile ("fldenv\t%0" : : "m" (temp));
 
4983
+      asm volatile ("fwait");
 
4984
+    }
 
4985
   if (_fex & FP_EX_DIVZERO)
 
4986
     {
 
4987
       float f = 1.0f, g = 0.0f;
 
4988
-#ifdef __x86_64__
 
4989
+#ifdef __SSE_MATH__
 
4990
+      volatile float r __attribute__ ((unused));
 
4991
       asm volatile ("%vdivss\t{%1, %d0|%d0, %1}" : "+x" (f) : "xm" (g));
 
4992
+      r = f; /* Needed to trigger exception.   */
 
4993
 #else
 
4994
       asm volatile ("fdivs\t%1" : "+t" (f) : "m" (g));
 
4995
-      asm volatile ("fwait");
 
4996
+      /* No need for fwait, exception is triggered by emitted fstp.  */
 
4997
 #endif
 
4998
     }
 
4999
   if (_fex & FP_EX_OVERFLOW)
 
5000
@@ -82,11 +94,15 @@
 
5001
     }
 
5002
   if (_fex & FP_EX_INEXACT)
 
5003
     {
 
5004
-      struct fenv temp;
 
5005
-      asm volatile ("fnstenv\t%0" : "=m" (temp));
 
5006
-      temp.__status_word |= FP_EX_INEXACT;
 
5007
-      asm volatile ("fldenv\t%0" : : "m" (temp));
 
5008
-      asm volatile ("fwait");
 
5009
+      float f = 1.0f, g = 3.0f;
 
5010
+#ifdef __SSE_MATH__
 
5011
+      volatile float r __attribute__ ((unused));
 
5012
+      asm volatile ("%vdivss\t{%1, %d0|%d0, %1}" : "+x" (f) : "xm" (g));
 
5013
+      r = f; /* Needed to trigger exception.   */
 
5014
+#else
 
5015
+      asm volatile ("fdivs\t%1" : "+t" (f) : "m" (g));
 
5016
+      /* No need for fwait, exception is triggered by emitted fstp.  */
 
5017
+#endif
 
5018
     }
 
5019
 };
 
5020
 #endif
 
5021
Index: libgcc/config/i386/cygming-crtbegin.c
 
5022
===================================================================
 
5023
--- a/src/libgcc/config/i386/cygming-crtbegin.c (.../tags/gcc_4_8_2_release)
 
5024
+++ b/src/libgcc/config/i386/cygming-crtbegin.c (.../branches/gcc-4_8-branch)
 
5025
@@ -69,6 +69,9 @@
 
5026
   = { };
 
5027
 
 
5028
 static struct object obj;
 
5029
+
 
5030
+/* Handle of libgcc's DLL reference.  */
 
5031
+HANDLE hmod_libgcc;
 
5032
 #endif
 
5033
 
 
5034
 #if TARGET_USE_JCR_SECTION
 
5035
@@ -93,9 +96,14 @@
 
5036
 
 
5037
   void (*register_frame_fn) (const void *, struct object *);
 
5038
   HANDLE h = GetModuleHandle (LIBGCC_SONAME);
 
5039
+
 
5040
   if (h)
 
5041
-    register_frame_fn = (void (*) (const void *, struct object *))
 
5042
-                       GetProcAddress (h, "__register_frame_info");
 
5043
+    {
 
5044
+      /* Increasing the load-count of LIBGCC_SONAME DLL.  */
 
5045
+      hmod_libgcc = LoadLibrary (LIBGCC_SONAME);
 
5046
+      register_frame_fn = (void (*) (const void *, struct object *))
 
5047
+                         GetProcAddress (h, "__register_frame_info");
 
5048
+    }
 
5049
   else 
 
5050
     register_frame_fn = __register_frame_info;
 
5051
   if (register_frame_fn)
 
5052
@@ -132,5 +140,7 @@
 
5053
     deregister_frame_fn = __deregister_frame_info;
 
5054
   if (deregister_frame_fn)
 
5055
      deregister_frame_fn (__EH_FRAME_BEGIN__);
 
5056
+  if (hmod_libgcc)
 
5057
+    FreeLibrary (hmod_libgcc);
 
5058
 #endif
 
5059
 }
 
5060
Index: libgcc/config/rs6000/ibm-ldouble.c
 
5061
===================================================================
 
5062
--- a/src/libgcc/config/rs6000/ibm-ldouble.c    (.../tags/gcc_4_8_2_release)
 
5063
+++ b/src/libgcc/config/rs6000/ibm-ldouble.c    (.../branches/gcc-4_8-branch)
 
5064
@@ -188,7 +188,16 @@
 
5065
       || nonfinite (t))
 
5066
     return t;
 
5067
 
 
5068
-  /* Finite nonzero result requires corrections to the highest order term.  */
 
5069
+  /* Finite nonzero result requires corrections to the highest order
 
5070
+     term.  These corrections require the low part of c * t to be
 
5071
+     exactly represented in double.  */
 
5072
+  if (fabs (a) <= 0x1p-969)
 
5073
+    {
 
5074
+      a *= 0x1p106;
 
5075
+      b *= 0x1p106;
 
5076
+      c *= 0x1p106;
 
5077
+      d *= 0x1p106;
 
5078
+    }
 
5079
 
 
5080
   s = c * t;                    /* (s,sigma) = c*t exactly.  */
 
5081
   w = -(-b + d * t);   /* Written to get fnmsub for speed, but not
 
5082
Index: libgcc/config/tilepro/atomic.c
 
5083
===================================================================
 
5084
--- a/src/libgcc/config/tilepro/atomic.c        (.../tags/gcc_4_8_2_release)
 
5085
+++ b/src/libgcc/config/tilepro/atomic.c        (.../branches/gcc-4_8-branch)
 
5086
@@ -28,7 +28,7 @@
 
5087
 /* This code should be inlined by the compiler, but for now support
 
5088
    it as out-of-line methods in libgcc.  */
 
5089
 
 
5090
-static void
 
5091
+static inline void
 
5092
 pre_atomic_barrier (int model)
 
5093
 {
 
5094
   switch ((enum memmodel) model)
 
5095
@@ -44,7 +44,7 @@
 
5096
   return;
 
5097
 }
 
5098
 
 
5099
-static void
 
5100
+static inline void
 
5101
 post_atomic_barrier (int model)
 
5102
 {
 
5103
   switch ((enum memmodel) model)
 
5104
@@ -62,16 +62,21 @@
 
5105
 
 
5106
 #define __unused __attribute__((unused))
 
5107
 
 
5108
-#define __atomic_fetch_and_do(type, size, opname)              \
 
5109
-type                                                           \
 
5110
-__atomic_fetch_##opname##_##size(type* p, type i, int model)   \
 
5111
+#define __fetch_and_do(proto, type, size, opname, top, bottom) \
 
5112
+proto                                                          \
 
5113
 {                                                              \
 
5114
-  pre_atomic_barrier(model);                                   \
 
5115
+  top;                                                         \
 
5116
   type rv = arch_atomic_##opname(p, i);                                \
 
5117
-  post_atomic_barrier(model);                                  \
 
5118
+  bottom;                                                      \
 
5119
   return rv;                                                   \
 
5120
 }
 
5121
 
 
5122
+#define __atomic_fetch_and_do(type, size, opname)                      \
 
5123
+  __fetch_and_do(type __atomic_fetch_##opname##_##size(type* p, type i, int model), \
 
5124
+                type, size, opname,                                    \
 
5125
+                pre_atomic_barrier(model),                             \
 
5126
+                post_atomic_barrier(model))                            \
 
5127
+
 
5128
 __atomic_fetch_and_do (int, 4, add)
 
5129
 __atomic_fetch_and_do (int, 4, sub)
 
5130
 __atomic_fetch_and_do (int, 4, or)
 
5131
@@ -84,27 +89,73 @@
 
5132
 __atomic_fetch_and_do (long long, 8, and)
 
5133
 __atomic_fetch_and_do (long long, 8, xor)
 
5134
 __atomic_fetch_and_do (long long, 8, nand)
 
5135
-#define __atomic_do_and_fetch(type, size, opname, op)          \
 
5136
-type                                                           \
 
5137
-__atomic_##opname##_fetch_##size(type* p, type i, int model)   \
 
5138
-{                                                              \
 
5139
-  pre_atomic_barrier(model);                                   \
 
5140
-  type rv = arch_atomic_##opname(p, i) op i;                   \
 
5141
-  post_atomic_barrier(model);                                  \
 
5142
-  return rv;                                                   \
 
5143
+
 
5144
+#define __sync_fetch_and_do(type, size, opname)                                \
 
5145
+  __fetch_and_do(type __sync_fetch_and_##opname##_##size(type* p, type i), \
 
5146
+                type, size, opname,                                    \
 
5147
+                arch_atomic_write_barrier(),                           \
 
5148
+                arch_atomic_read_barrier())
 
5149
+
 
5150
+__sync_fetch_and_do (int, 4, add)
 
5151
+__sync_fetch_and_do (int, 4, sub)
 
5152
+__sync_fetch_and_do (int, 4, or)
 
5153
+__sync_fetch_and_do (int, 4, and)
 
5154
+__sync_fetch_and_do (int, 4, xor)
 
5155
+__sync_fetch_and_do (int, 4, nand)
 
5156
+__sync_fetch_and_do (long long, 8, add)
 
5157
+__sync_fetch_and_do (long long, 8, sub)
 
5158
+__sync_fetch_and_do (long long, 8, or)
 
5159
+__sync_fetch_and_do (long long, 8, and)
 
5160
+__sync_fetch_and_do (long long, 8, xor)
 
5161
+__sync_fetch_and_do (long long, 8, nand)
 
5162
+
 
5163
+#define __do_and_fetch(proto, type, size, opname, op, op2, top, bottom)        \
 
5164
+proto                                                                  \
 
5165
+{                                                                      \
 
5166
+  top;                                                                 \
 
5167
+  type rv = op2 (arch_atomic_##opname(p, i) op i);                     \
 
5168
+  bottom;                                                              \
 
5169
+  return rv;                                                           \
 
5170
 }
 
5171
-__atomic_do_and_fetch (int, 4, add, +)
 
5172
-__atomic_do_and_fetch (int, 4, sub, -)
 
5173
-__atomic_do_and_fetch (int, 4, or, |)
 
5174
-__atomic_do_and_fetch (int, 4, and, &)
 
5175
-__atomic_do_and_fetch (int, 4, xor, |)
 
5176
-__atomic_do_and_fetch (int, 4, nand, &)
 
5177
-__atomic_do_and_fetch (long long, 8, add, +)
 
5178
-__atomic_do_and_fetch (long long, 8, sub, -)
 
5179
-__atomic_do_and_fetch (long long, 8, or, |)
 
5180
-__atomic_do_and_fetch (long long, 8, and, &)
 
5181
-__atomic_do_and_fetch (long long, 8, xor, |)
 
5182
-__atomic_do_and_fetch (long long, 8, nand, &)
 
5183
+
 
5184
+#define __atomic_do_and_fetch(type, size, opname, op, op2)             \
 
5185
+  __do_and_fetch(type __atomic_##opname##_fetch_##size(type* p, type i, int model), \
 
5186
+                type, size, opname, op, op2,                           \
 
5187
+                pre_atomic_barrier(model),                             \
 
5188
+                post_atomic_barrier(model))                            \
 
5189
+
 
5190
+__atomic_do_and_fetch (int, 4, add, +, )
 
5191
+__atomic_do_and_fetch (int, 4, sub, -, )
 
5192
+__atomic_do_and_fetch (int, 4, or, |, )
 
5193
+__atomic_do_and_fetch (int, 4, and, &, )
 
5194
+__atomic_do_and_fetch (int, 4, xor, |, )
 
5195
+__atomic_do_and_fetch (int, 4, nand, &, ~)
 
5196
+__atomic_do_and_fetch (long long, 8, add, +, )
 
5197
+__atomic_do_and_fetch (long long, 8, sub, -, )
 
5198
+__atomic_do_and_fetch (long long, 8, or, |, )
 
5199
+__atomic_do_and_fetch (long long, 8, and, &, )
 
5200
+__atomic_do_and_fetch (long long, 8, xor, |, )
 
5201
+__atomic_do_and_fetch (long long, 8, nand, &, ~)
 
5202
+
 
5203
+#define __sync_do_and_fetch(type, size, opname, op, op2)               \
 
5204
+  __do_and_fetch(type __sync_##opname##_and_fetch_##size(type* p, type i), \
 
5205
+                type, size, opname, op, op2,                           \
 
5206
+                arch_atomic_write_barrier(),                           \
 
5207
+                arch_atomic_read_barrier())                            \
 
5208
+
 
5209
+__sync_do_and_fetch (int, 4, add, +, )
 
5210
+__sync_do_and_fetch (int, 4, sub, -, )
 
5211
+__sync_do_and_fetch (int, 4, or, |, )
 
5212
+__sync_do_and_fetch (int, 4, and, &, )
 
5213
+__sync_do_and_fetch (int, 4, xor, |, )
 
5214
+__sync_do_and_fetch (int, 4, nand, &, ~)
 
5215
+__sync_do_and_fetch (long long, 8, add, +, )
 
5216
+__sync_do_and_fetch (long long, 8, sub, -, )
 
5217
+__sync_do_and_fetch (long long, 8, or, |, )
 
5218
+__sync_do_and_fetch (long long, 8, and, &, )
 
5219
+__sync_do_and_fetch (long long, 8, xor, |, )
 
5220
+__sync_do_and_fetch (long long, 8, nand, &, ~)
 
5221
+
 
5222
 #define __atomic_exchange_methods(type, size)                          \
 
5223
 bool                                                                   \
 
5224
 __atomic_compare_exchange_##size(volatile type* ptr, type* oldvalp,    \
 
5225
@@ -128,49 +179,117 @@
 
5226
   post_atomic_barrier(model);                                          \
 
5227
   return retval;                                                       \
 
5228
 }
 
5229
+
 
5230
 __atomic_exchange_methods (int, 4)
 
5231
 __atomic_exchange_methods (long long, 8)
 
5232
 
 
5233
+#define __sync_exchange_methods(type, size)                            \
 
5234
+type                                                                   \
 
5235
+__sync_val_compare_and_swap_##size(type* ptr, type oldval, type newval)        \
 
5236
+{                                                                      \
 
5237
+  arch_atomic_write_barrier();                                         \
 
5238
+  type retval = arch_atomic_val_compare_and_exchange(ptr, oldval, newval); \
 
5239
+  arch_atomic_read_barrier();                                          \
 
5240
+  return retval;                                                       \
 
5241
+}                                                                      \
 
5242
+                                                                       \
 
5243
+bool                                                                   \
 
5244
+__sync_bool_compare_and_swap_##size(type* ptr, type oldval, type newval) \
 
5245
+{                                                                      \
 
5246
+  arch_atomic_write_barrier();                                         \
 
5247
+  bool retval = arch_atomic_bool_compare_and_exchange(ptr, oldval, newval); \
 
5248
+  arch_atomic_read_barrier();                                          \
 
5249
+  return retval;                                                       \
 
5250
+}                                                                      \
 
5251
+                                                                       \
 
5252
+type                                                                   \
 
5253
+__sync_lock_test_and_set_##size(type* ptr, type val)                   \
 
5254
+{                                                                      \
 
5255
+  type retval = arch_atomic_exchange(ptr, val);                                \
 
5256
+  arch_atomic_acquire_barrier_value(retval);                           \
 
5257
+  return retval;                                                       \
 
5258
+}
 
5259
+
 
5260
+__sync_exchange_methods (int, 4)
 
5261
+__sync_exchange_methods (long long, 8)
 
5262
+
 
5263
+#ifdef __LITTLE_ENDIAN__
 
5264
+#define BIT_OFFSET(n, type) ((n) * 8)
 
5265
+#else
 
5266
+#define BIT_OFFSET(n, type) ((4 - sizeof(type) - (n)) * 8)
 
5267
+#endif
 
5268
+
 
5269
 /* Subword methods require the same approach for both TILEPro and
 
5270
    TILE-Gx.  We load the background data for the word, insert the
 
5271
    desired subword piece, then compare-and-exchange it into place.  */
 
5272
 #define u8 unsigned char
 
5273
 #define u16 unsigned short
 
5274
+
 
5275
+#define __subword_cmpxchg_body(type, size, ptr, guess, val)            \
 
5276
+  ({                                                                   \
 
5277
+    unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL);     \
 
5278
+    const int shift = BIT_OFFSET((unsigned long)ptr & 3UL, type);      \
 
5279
+    const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1;                \
 
5280
+    const unsigned int bgmask = ~(valmask << shift);                   \
 
5281
+    unsigned int oldword = *p;                                         \
 
5282
+    type oldval = (oldword >> shift) & valmask;                                \
 
5283
+    if (__builtin_expect((oldval == guess), 1)) {                      \
 
5284
+      unsigned int word = (oldword & bgmask) | ((val & valmask) << shift); \
 
5285
+      oldword = arch_atomic_val_compare_and_exchange(p, oldword, word);        \
 
5286
+      oldval = (oldword >> shift) & valmask;                           \
 
5287
+    }                                                                  \
 
5288
+    oldval;                                                            \
 
5289
+  })                                                                   \
 
5290
+
 
5291
 #define __atomic_subword_cmpxchg(type, size)                           \
 
5292
                                                                        \
 
5293
 bool                                                                   \
 
5294
-__atomic_compare_exchange_##size(volatile type* ptr, type* guess,      \
 
5295
+__atomic_compare_exchange_##size(volatile type* ptr, type* guess_ptr,  \
 
5296
                                 type val, bool weak __unused, int models, \
 
5297
                                 int modelf __unused)                   \
 
5298
 {                                                                      \
 
5299
   pre_atomic_barrier(models);                                          \
 
5300
-  unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL);       \
 
5301
-  const int shift = ((unsigned long)ptr & 3UL) * 8;                    \
 
5302
-  const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1;          \
 
5303
-  const unsigned int bgmask = ~(valmask << shift);                     \
 
5304
-  unsigned int oldword = *p;                                           \
 
5305
-  type oldval = (oldword >> shift) & valmask;                          \
 
5306
-  if (__builtin_expect((oldval == *guess), 1)) {                       \
 
5307
-    unsigned int word = (oldword & bgmask) | ((val & valmask) << shift); \
 
5308
-    oldword = arch_atomic_val_compare_and_exchange(p, oldword, word);  \
 
5309
-    oldval = (oldword >> shift) & valmask;                             \
 
5310
-  }                                                                    \
 
5311
+  type guess = *guess_ptr;                                             \
 
5312
+  type oldval = __subword_cmpxchg_body(type, size, ptr, guess, val);   \
 
5313
   post_atomic_barrier(models);                                         \
 
5314
-  bool success = (oldval == *guess);                                   \
 
5315
-  *guess = oldval;                                                     \
 
5316
+  bool success = (oldval == guess);                                    \
 
5317
+  *guess_ptr = oldval;                                                 \
 
5318
   return success;                                                      \
 
5319
 }
 
5320
+
 
5321
 __atomic_subword_cmpxchg (u8, 1)
 
5322
 __atomic_subword_cmpxchg (u16, 2)
 
5323
+
 
5324
+#define __sync_subword_cmpxchg(type, size)                             \
 
5325
+                                                                       \
 
5326
+type                                                                   \
 
5327
+__sync_val_compare_and_swap_##size(type* ptr, type guess, type val)    \
 
5328
+{                                                                      \
 
5329
+  arch_atomic_write_barrier();                                         \
 
5330
+  type oldval = __subword_cmpxchg_body(type, size, ptr, guess, val);   \
 
5331
+  arch_atomic_read_barrier();                                          \
 
5332
+  return oldval;                                                       \
 
5333
+}                                                                      \
 
5334
+                                                                       \
 
5335
+bool                                                                   \
 
5336
+__sync_bool_compare_and_swap_##size(type* ptr, type guess, type val)   \
 
5337
+{                                                                      \
 
5338
+  type oldval = __sync_val_compare_and_swap_##size(ptr, guess, val);   \
 
5339
+  return oldval == guess;                                              \
 
5340
+}
 
5341
+
 
5342
+__sync_subword_cmpxchg (u8, 1)
 
5343
+__sync_subword_cmpxchg (u16, 2)
 
5344
+
 
5345
 /* For the atomic-update subword methods, we use the same approach as
 
5346
    above, but we retry until we succeed if the compare-and-exchange
 
5347
    fails.  */
 
5348
-#define __atomic_subword(type, proto, top, expr, bottom)               \
 
5349
+#define __subword(type, proto, top, expr, bottom)                      \
 
5350
 proto                                                                  \
 
5351
 {                                                                      \
 
5352
   top                                                                  \
 
5353
   unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL);       \
 
5354
-  const int shift = ((unsigned long)ptr & 3UL) * 8;                    \
 
5355
+  const int shift = BIT_OFFSET((unsigned long)ptr & 3UL, type);                \
 
5356
   const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1;          \
 
5357
   const unsigned int bgmask = ~(valmask << shift);                     \
 
5358
   unsigned int oldword, xword = *p;                                    \
 
5359
@@ -184,12 +303,14 @@
 
5360
   } while (__builtin_expect(xword != oldword, 0));                     \
 
5361
   bottom                                                               \
 
5362
 }
 
5363
+
 
5364
 #define __atomic_subword_fetch(type, funcname, expr, retval)           \
 
5365
-  __atomic_subword(type,                                               \
 
5366
-                  type __atomic_ ## funcname(volatile type *ptr, type i, int model), \
 
5367
-                  pre_atomic_barrier(model);,                          \
 
5368
-                  expr,                                                \
 
5369
-                  post_atomic_barrier(model); return retval;)
 
5370
+  __subword(type,                                                      \
 
5371
+           type __atomic_ ## funcname(volatile type *ptr, type i, int model), \
 
5372
+           pre_atomic_barrier(model);,                                 \
 
5373
+           expr,                                                       \
 
5374
+           post_atomic_barrier(model); return retval;)
 
5375
+
 
5376
 __atomic_subword_fetch (u8, fetch_add_1, oldval + i, oldval)
 
5377
 __atomic_subword_fetch (u8, fetch_sub_1, oldval - i, oldval)
 
5378
 __atomic_subword_fetch (u8, fetch_or_1, oldval | i, oldval)
 
5379
@@ -196,6 +317,7 @@
 
5380
 __atomic_subword_fetch (u8, fetch_and_1, oldval & i, oldval)
 
5381
 __atomic_subword_fetch (u8, fetch_xor_1, oldval ^ i, oldval)
 
5382
 __atomic_subword_fetch (u8, fetch_nand_1, ~(oldval & i), oldval)
 
5383
+
 
5384
 __atomic_subword_fetch (u16, fetch_add_2, oldval + i, oldval)
 
5385
 __atomic_subword_fetch (u16, fetch_sub_2, oldval - i, oldval)
 
5386
 __atomic_subword_fetch (u16, fetch_or_2, oldval | i, oldval)
 
5387
@@ -202,6 +324,7 @@
 
5388
 __atomic_subword_fetch (u16, fetch_and_2, oldval & i, oldval)
 
5389
 __atomic_subword_fetch (u16, fetch_xor_2, oldval ^ i, oldval)
 
5390
 __atomic_subword_fetch (u16, fetch_nand_2, ~(oldval & i), oldval)
 
5391
+
 
5392
 __atomic_subword_fetch (u8, add_fetch_1, oldval + i, val)
 
5393
 __atomic_subword_fetch (u8, sub_fetch_1, oldval - i, val)
 
5394
 __atomic_subword_fetch (u8, or_fetch_1, oldval | i, val)
 
5395
@@ -208,6 +331,7 @@
 
5396
 __atomic_subword_fetch (u8, and_fetch_1, oldval & i, val)
 
5397
 __atomic_subword_fetch (u8, xor_fetch_1, oldval ^ i, val)
 
5398
 __atomic_subword_fetch (u8, nand_fetch_1, ~(oldval & i), val)
 
5399
+
 
5400
 __atomic_subword_fetch (u16, add_fetch_2, oldval + i, val)
 
5401
 __atomic_subword_fetch (u16, sub_fetch_2, oldval - i, val)
 
5402
 __atomic_subword_fetch (u16, or_fetch_2, oldval | i, val)
 
5403
@@ -214,12 +338,58 @@
 
5404
 __atomic_subword_fetch (u16, and_fetch_2, oldval & i, val)
 
5405
 __atomic_subword_fetch (u16, xor_fetch_2, oldval ^ i, val)
 
5406
 __atomic_subword_fetch (u16, nand_fetch_2, ~(oldval & i), val)
 
5407
+
 
5408
+#define __sync_subword_fetch(type, funcname, expr, retval)     \
 
5409
+  __subword(type,                                              \
 
5410
+           type __sync_ ## funcname(type *ptr, type i),        \
 
5411
+           arch_atomic_read_barrier();,                        \
 
5412
+           expr,                                               \
 
5413
+           arch_atomic_write_barrier(); return retval;)
 
5414
+
 
5415
+__sync_subword_fetch (u8, fetch_and_add_1, oldval + i, oldval)
 
5416
+__sync_subword_fetch (u8, fetch_and_sub_1, oldval - i, oldval)
 
5417
+__sync_subword_fetch (u8, fetch_and_or_1, oldval | i, oldval)
 
5418
+__sync_subword_fetch (u8, fetch_and_and_1, oldval & i, oldval)
 
5419
+__sync_subword_fetch (u8, fetch_and_xor_1, oldval ^ i, oldval)
 
5420
+__sync_subword_fetch (u8, fetch_and_nand_1, ~(oldval & i), oldval)
 
5421
+
 
5422
+__sync_subword_fetch (u16, fetch_and_add_2, oldval + i, oldval)
 
5423
+__sync_subword_fetch (u16, fetch_and_sub_2, oldval - i, oldval)
 
5424
+__sync_subword_fetch (u16, fetch_and_or_2, oldval | i, oldval)
 
5425
+__sync_subword_fetch (u16, fetch_and_and_2, oldval & i, oldval)
 
5426
+__sync_subword_fetch (u16, fetch_and_xor_2, oldval ^ i, oldval)
 
5427
+__sync_subword_fetch (u16, fetch_and_nand_2, ~(oldval & i), oldval)
 
5428
+
 
5429
+__sync_subword_fetch (u8, add_and_fetch_1, oldval + i, val)
 
5430
+__sync_subword_fetch (u8, sub_and_fetch_1, oldval - i, val)
 
5431
+__sync_subword_fetch (u8, or_and_fetch_1, oldval | i, val)
 
5432
+__sync_subword_fetch (u8, and_and_fetch_1, oldval & i, val)
 
5433
+__sync_subword_fetch (u8, xor_and_fetch_1, oldval ^ i, val)
 
5434
+__sync_subword_fetch (u8, nand_and_fetch_1, ~(oldval & i), val)
 
5435
+
 
5436
+__sync_subword_fetch (u16, add_and_fetch_2, oldval + i, val)
 
5437
+__sync_subword_fetch (u16, sub_and_fetch_2, oldval - i, val)
 
5438
+__sync_subword_fetch (u16, or_and_fetch_2, oldval | i, val)
 
5439
+__sync_subword_fetch (u16, and_and_fetch_2, oldval & i, val)
 
5440
+__sync_subword_fetch (u16, xor_and_fetch_2, oldval ^ i, val)
 
5441
+__sync_subword_fetch (u16, nand_and_fetch_2, ~(oldval & i), val)
 
5442
+
 
5443
 #define __atomic_subword_lock(type, size)                              \
 
5444
-                                                                       \
 
5445
-__atomic_subword(type,                                                 \
 
5446
-                type __atomic_exchange_##size(volatile type* ptr, type nval, int model), \
 
5447
-                pre_atomic_barrier(model);,                            \
 
5448
-                nval,                                                  \
 
5449
-                post_atomic_barrier(model); return oldval;)
 
5450
+  __subword(type,                                                      \
 
5451
+           type __atomic_exchange_##size(volatile type* ptr, type nval, int model), \
 
5452
+           pre_atomic_barrier(model);,                                 \
 
5453
+           nval,                                                       \
 
5454
+           post_atomic_barrier(model); return oldval;)
 
5455
+
 
5456
 __atomic_subword_lock (u8, 1)
 
5457
 __atomic_subword_lock (u16, 2)
 
5458
+
 
5459
+#define __sync_subword_lock(type, size)                                        \
 
5460
+  __subword(type,                                                      \
 
5461
+           type __sync_lock_test_and_set_##size(type* ptr, type nval), \
 
5462
+           ,                                                           \
 
5463
+           nval,                                                       \
 
5464
+           arch_atomic_acquire_barrier_value(oldval); return oldval;)
 
5465
+
 
5466
+__sync_subword_lock (u8, 1)
 
5467
+__sync_subword_lock (u16, 2)
 
5468
Index: libgcc/config/arm/sfp-machine.h
 
5469
===================================================================
 
5470
--- a/src/libgcc/config/arm/sfp-machine.h       (.../tags/gcc_4_8_2_release)
 
5471
+++ b/src/libgcc/config/arm/sfp-machine.h       (.../branches/gcc-4_8-branch)
 
5472
@@ -19,10 +19,12 @@
 
5473
 #define _FP_DIV_MEAT_D(R,X,Y)  _FP_DIV_MEAT_2_udiv(D,R,X,Y)
 
5474
 #define _FP_DIV_MEAT_Q(R,X,Y)  _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
 
5475
 
 
5476
-#define _FP_NANFRAC_H          ((_FP_QNANBIT_H << 1) - 1)
 
5477
-#define _FP_NANFRAC_S          ((_FP_QNANBIT_S << 1) - 1)
 
5478
-#define _FP_NANFRAC_D          ((_FP_QNANBIT_D << 1) - 1), -1
 
5479
-#define _FP_NANFRAC_Q          ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1
 
5480
+/* According to RTABI, QNAN is only with the most significant bit of the
 
5481
+   significand set, and all other significand bits zero.  */
 
5482
+#define _FP_NANFRAC_H          0
 
5483
+#define _FP_NANFRAC_S          0
 
5484
+#define _FP_NANFRAC_D          0, 0
 
5485
+#define _FP_NANFRAC_Q          0, 0, 0, 0
 
5486
 #define _FP_NANSIGN_H          0
 
5487
 #define _FP_NANSIGN_S          0
 
5488
 #define _FP_NANSIGN_D          0
 
5489
Index: libgcc/unwind-seh.c
 
5490
===================================================================
 
5491
--- a/src/libgcc/unwind-seh.c   (.../tags/gcc_4_8_2_release)
 
5492
+++ b/src/libgcc/unwind-seh.c   (.../branches/gcc-4_8-branch)
 
5493
@@ -313,8 +313,9 @@
 
5494
          ms_exc->ExceptionInformation[3] = gcc_context.reg[1];
 
5495
 
 
5496
          /* Begin phase 2.  Perform the unwinding.  */
 
5497
-         RtlUnwindEx (this_frame, gcc_context.ra, ms_exc, gcc_exc,
 
5498
-                      ms_orig_context, ms_disp->HistoryTable);
 
5499
+         RtlUnwindEx (this_frame, gcc_context.ra, ms_exc,
 
5500
+                      (PVOID)gcc_context.reg[0], ms_orig_context,
 
5501
+                      ms_disp->HistoryTable);
 
5502
        }
 
5503
 
 
5504
       /* In _Unwind_RaiseException we return _URC_FATAL_PHASE1_ERROR.  */
 
5505
Index: gcc/tree-vrp.c
 
5506
===================================================================
 
5507
--- a/src/gcc/tree-vrp.c        (.../tags/gcc_4_8_2_release)
 
5508
+++ b/src/gcc/tree-vrp.c        (.../branches/gcc-4_8-branch)
 
5509
@@ -5271,9 +5271,13 @@
 
5510
     }
 
5511
   else if (CONVERT_EXPR_CODE_P (gimple_assign_rhs_code (op_def)))
 
5512
     {
 
5513
-      /* Recurse through the type conversion.  */
 
5514
-      retval |= register_edge_assert_for_1 (gimple_assign_rhs1 (op_def),
 
5515
-                                           code, e, bsi);
 
5516
+      /* Recurse through the type conversion, unless it is a narrowing
 
5517
+        conversion or conversion from non-integral type.  */
 
5518
+      tree rhs = gimple_assign_rhs1 (op_def);
 
5519
+      if (INTEGRAL_TYPE_P (TREE_TYPE (rhs))
 
5520
+         && (TYPE_PRECISION (TREE_TYPE (rhs))
 
5521
+             <= TYPE_PRECISION (TREE_TYPE (op))))
 
5522
+       retval |= register_edge_assert_for_1 (rhs, code, e, bsi);
 
5523
     }
 
5524
 
 
5525
   return retval;
 
5526
@@ -7453,7 +7457,8 @@
 
5527
     }
 
5528
   else if ((operand_less_p (vr1min, *vr0max) == 1
 
5529
            || operand_equal_p (vr1min, *vr0max, 0))
 
5530
-          && operand_less_p (*vr0min, vr1min) == 1)
 
5531
+          && operand_less_p (*vr0min, vr1min) == 1
 
5532
+          && operand_less_p (*vr0max, vr1max) == 1)
 
5533
     {
 
5534
       /* [  (  ]  ) or [   ](   ) */
 
5535
       if (*vr0type == VR_RANGE
 
5536
@@ -7487,7 +7492,8 @@
 
5537
     }
 
5538
   else if ((operand_less_p (*vr0min, vr1max) == 1
 
5539
            || operand_equal_p (*vr0min, vr1max, 0))
 
5540
-          && operand_less_p (vr1min, *vr0min) == 1)
 
5541
+          && operand_less_p (vr1min, *vr0min) == 1
 
5542
+          && operand_less_p (vr1max, *vr0max) == 1)
 
5543
     {
 
5544
       /* (  [  )  ] or (   )[   ] */
 
5545
       if (*vr0type == VR_RANGE
 
5546
Index: gcc/loop-unswitch.c
 
5547
===================================================================
 
5548
--- a/src/gcc/loop-unswitch.c   (.../tags/gcc_4_8_2_release)
 
5549
+++ b/src/gcc/loop-unswitch.c   (.../branches/gcc-4_8-branch)
 
5550
@@ -191,6 +191,7 @@
 
5551
   if (!test)
 
5552
     return NULL_RTX;
 
5553
 
 
5554
+  mode = VOIDmode;
 
5555
   for (i = 0; i < 2; i++)
 
5556
     {
 
5557
       op[i] = XEXP (test, i);
 
5558
@@ -205,11 +206,15 @@
 
5559
        return NULL_RTX;
 
5560
 
 
5561
       op[i] = get_iv_value (&iv, const0_rtx);
 
5562
+      if (iv.extend != IV_UNKNOWN_EXTEND
 
5563
+         && iv.mode != iv.extend_mode)
 
5564
+       op[i] = lowpart_subreg (iv.mode, op[i], iv.extend_mode);
 
5565
+      if (mode == VOIDmode)
 
5566
+       mode = iv.mode;
 
5567
+      else
 
5568
+       gcc_assert (mode == iv.mode);
 
5569
     }
 
5570
 
 
5571
-  mode = GET_MODE (op[0]);
 
5572
-  if (mode == VOIDmode)
 
5573
-    mode = GET_MODE (op[1]);
 
5574
   if (GET_MODE_CLASS (mode) == MODE_CC)
 
5575
     {
 
5576
       if (at != BB_END (bb))
 
5577
Index: gcc/tree-ssa-loop-im.c
 
5578
===================================================================
 
5579
--- a/src/gcc/tree-ssa-loop-im.c        (.../tags/gcc_4_8_2_release)
 
5580
+++ b/src/gcc/tree-ssa-loop-im.c        (.../branches/gcc-4_8-branch)
 
5581
@@ -1190,6 +1190,67 @@
 
5582
   fini_walk_dominator_tree (&walk_data);
 
5583
 }
 
5584
 
 
5585
+/* Return true if CODE is an operation that when operating on signed
 
5586
+   integer types involves undefined behavior on overflow and the
 
5587
+   operation can be expressed with unsigned arithmetic.  */
 
5588
+
 
5589
+static bool
 
5590
+arith_code_with_undefined_signed_overflow (tree_code code)
 
5591
+{
 
5592
+  switch (code)
 
5593
+    {
 
5594
+    case PLUS_EXPR:
 
5595
+    case MINUS_EXPR:
 
5596
+    case MULT_EXPR:
 
5597
+    case NEGATE_EXPR:
 
5598
+    case POINTER_PLUS_EXPR:
 
5599
+      return true;
 
5600
+    default:
 
5601
+      return false;
 
5602
+    }
 
5603
+}
 
5604
+
 
5605
+/* Rewrite STMT, an assignment with a signed integer or pointer arithmetic
 
5606
+   operation that can be transformed to unsigned arithmetic by converting
 
5607
+   its operand, carrying out the operation in the corresponding unsigned
 
5608
+   type and converting the result back to the original type.
 
5609
+
 
5610
+   Returns a sequence of statements that replace STMT and also contain
 
5611
+   a modified form of STMT itself.  */
 
5612
+
 
5613
+static gimple_seq
 
5614
+rewrite_to_defined_overflow (gimple stmt)
 
5615
+{
 
5616
+  if (dump_file && (dump_flags & TDF_DETAILS))
 
5617
+    {
 
5618
+      fprintf (dump_file, "rewriting stmt with undefined signed "
 
5619
+              "overflow ");
 
5620
+      print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM);
 
5621
+    }
 
5622
+
 
5623
+  tree lhs = gimple_assign_lhs (stmt);
 
5624
+  tree type = unsigned_type_for (TREE_TYPE (lhs));
 
5625
+  gimple_seq stmts = NULL;
 
5626
+  for (unsigned i = 1; i < gimple_num_ops (stmt); ++i)
 
5627
+    {
 
5628
+      gimple_seq stmts2 = NULL;
 
5629
+      gimple_set_op (stmt, i,
 
5630
+                    force_gimple_operand (fold_convert (type,
 
5631
+                                                        gimple_op (stmt, i)),
 
5632
+                                          &stmts2, true, NULL_TREE));
 
5633
+      gimple_seq_add_seq (&stmts, stmts2);
 
5634
+    }
 
5635
+  gimple_assign_set_lhs (stmt, make_ssa_name (type, stmt));
 
5636
+  if (gimple_assign_rhs_code (stmt) == POINTER_PLUS_EXPR)
 
5637
+    gimple_assign_set_rhs_code (stmt, PLUS_EXPR);
 
5638
+  gimple_seq_add_stmt (&stmts, stmt);
 
5639
+  gimple cvt = gimple_build_assign_with_ops
 
5640
+      (NOP_EXPR, lhs, gimple_assign_lhs (stmt), NULL_TREE);
 
5641
+  gimple_seq_add_stmt (&stmts, cvt);
 
5642
+
 
5643
+  return stmts;
 
5644
+}
 
5645
+
 
5646
 /* Hoist the statements in basic block BB out of the loops prescribed by
 
5647
    data stored in LIM_DATA structures associated with each statement.  Callback
 
5648
    for walk_dominator_tree.  */
 
5649
@@ -1321,7 +1382,21 @@
 
5650
            }
 
5651
        }
 
5652
       gsi_remove (&bsi, false);
 
5653
-      gsi_insert_on_edge (e, stmt);
 
5654
+      /* In case this is a stmt that is not unconditionally executed
 
5655
+         when the target loop header is executed and the stmt may
 
5656
+        invoke undefined integer or pointer overflow rewrite it to
 
5657
+        unsigned arithmetic.  */
 
5658
+      if (is_gimple_assign (stmt)
 
5659
+         && INTEGRAL_TYPE_P (TREE_TYPE (gimple_assign_lhs (stmt)))
 
5660
+         && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (gimple_assign_lhs (stmt)))
 
5661
+         && arith_code_with_undefined_signed_overflow
 
5662
+              (gimple_assign_rhs_code (stmt))
 
5663
+         && (!ALWAYS_EXECUTED_IN (bb)
 
5664
+             || !(ALWAYS_EXECUTED_IN (bb) == level
 
5665
+                  || flow_loop_nested_p (ALWAYS_EXECUTED_IN (bb), level))))
 
5666
+       gsi_insert_seq_on_edge (e, rewrite_to_defined_overflow (stmt));
 
5667
+      else
 
5668
+       gsi_insert_on_edge (e, stmt);
 
5669
     }
 
5670
 }
 
5671
 
 
5672
Index: gcc/tree-ssa-tail-merge.c
 
5673
===================================================================
 
5674
--- a/src/gcc/tree-ssa-tail-merge.c     (.../tags/gcc_4_8_2_release)
 
5675
+++ b/src/gcc/tree-ssa-tail-merge.c     (.../branches/gcc-4_8-branch)
 
5676
@@ -297,7 +297,8 @@
 
5677
   tree val;
 
5678
   def_operand_p def_p;
 
5679
 
 
5680
-  if (gimple_has_side_effects (stmt))
 
5681
+  if (gimple_has_side_effects (stmt)
 
5682
+      || gimple_vdef (stmt) != NULL_TREE)
 
5683
     return false;
 
5684
 
 
5685
   def_p = SINGLE_SSA_DEF_OPERAND (stmt, SSA_OP_DEF);
 
5686
Index: gcc/cgraphbuild.c
 
5687
===================================================================
 
5688
--- a/src/gcc/cgraphbuild.c     (.../tags/gcc_4_8_2_release)
 
5689
+++ b/src/gcc/cgraphbuild.c     (.../branches/gcc-4_8-branch)
 
5690
@@ -73,7 +73,7 @@
 
5691
       decl = get_base_var (*tp);
 
5692
       if (TREE_CODE (decl) == FUNCTION_DECL)
 
5693
        {
 
5694
-         struct cgraph_node *node = cgraph_get_create_node (decl);
 
5695
+         struct cgraph_node *node = cgraph_get_create_real_symbol_node (decl);
 
5696
          if (!ctx->only_vars)
 
5697
            cgraph_mark_address_taken_node (node);
 
5698
          ipa_record_reference ((symtab_node)ctx->varpool_node,
 
5699
@@ -143,7 +143,7 @@
 
5700
     {
 
5701
       struct cgraph_node *per_node;
 
5702
 
 
5703
-      per_node = cgraph_get_create_node (DECL_FUNCTION_PERSONALITY (node->symbol.decl));
 
5704
+      per_node = cgraph_get_create_real_symbol_node (DECL_FUNCTION_PERSONALITY (node->symbol.decl));
 
5705
       ipa_record_reference ((symtab_node)node, (symtab_node)per_node, IPA_REF_ADDR, NULL);
 
5706
       cgraph_mark_address_taken_node (per_node);
 
5707
     }
 
5708
@@ -218,12 +218,12 @@
 
5709
 /* Mark address taken in STMT.  */
 
5710
 
 
5711
 static bool
 
5712
-mark_address (gimple stmt, tree addr, void *data)
 
5713
+mark_address (gimple stmt, tree addr, tree, void *data)
 
5714
 {
 
5715
   addr = get_base_address (addr);
 
5716
   if (TREE_CODE (addr) == FUNCTION_DECL)
 
5717
     {
 
5718
-      struct cgraph_node *node = cgraph_get_create_node (addr);
 
5719
+      struct cgraph_node *node = cgraph_get_create_real_symbol_node (addr);
 
5720
       cgraph_mark_address_taken_node (node);
 
5721
       ipa_record_reference ((symtab_node)data,
 
5722
                            (symtab_node)node,
 
5723
@@ -245,7 +245,7 @@
 
5724
 /* Mark load of T.  */
 
5725
 
 
5726
 static bool
 
5727
-mark_load (gimple stmt, tree t, void *data)
 
5728
+mark_load (gimple stmt, tree t, tree, void *data)
 
5729
 {
 
5730
   t = get_base_address (t);
 
5731
   if (t && TREE_CODE (t) == FUNCTION_DECL)
 
5732
@@ -252,7 +252,7 @@
 
5733
     {
 
5734
       /* ??? This can happen on platforms with descriptors when these are
 
5735
         directly manipulated in the code.  Pretend that it's an address.  */
 
5736
-      struct cgraph_node *node = cgraph_get_create_node (t);
 
5737
+      struct cgraph_node *node = cgraph_get_create_real_symbol_node (t);
 
5738
       cgraph_mark_address_taken_node (node);
 
5739
       ipa_record_reference ((symtab_node)data,
 
5740
                            (symtab_node)node,
 
5741
@@ -273,7 +273,7 @@
 
5742
 /* Mark store of T.  */
 
5743
 
 
5744
 static bool
 
5745
-mark_store (gimple stmt, tree t, void *data)
 
5746
+mark_store (gimple stmt, tree t, tree, void *data)
 
5747
 {
 
5748
   t = get_base_address (t);
 
5749
   if (t && TREE_CODE (t) == VAR_DECL
 
5750
@@ -330,7 +330,7 @@
 
5751
            {
 
5752
              tree fn = gimple_omp_parallel_child_fn (stmt);
 
5753
              ipa_record_reference ((symtab_node)node,
 
5754
-                                   (symtab_node)cgraph_get_create_node (fn),
 
5755
+                                   (symtab_node)cgraph_get_create_real_symbol_node (fn),
 
5756
                                    IPA_REF_ADDR, stmt);
 
5757
            }
 
5758
          if (gimple_code (stmt) == GIMPLE_OMP_TASK)
 
5759
@@ -338,12 +338,12 @@
 
5760
              tree fn = gimple_omp_task_child_fn (stmt);
 
5761
              if (fn)
 
5762
                ipa_record_reference ((symtab_node)node,
 
5763
-                                     (symtab_node) cgraph_get_create_node (fn),
 
5764
+                                     (symtab_node) cgraph_get_create_real_symbol_node (fn),
 
5765
                                      IPA_REF_ADDR, stmt);
 
5766
              fn = gimple_omp_task_copy_fn (stmt);
 
5767
              if (fn)
 
5768
                ipa_record_reference ((symtab_node)node,
 
5769
-                                     (symtab_node)cgraph_get_create_node (fn),
 
5770
+                                     (symtab_node)cgraph_get_create_real_symbol_node (fn),
 
5771
                                      IPA_REF_ADDR, stmt);
 
5772
            }
 
5773
        }
 
5774
Index: gcc/tree-ssa-uninit.c
 
5775
===================================================================
 
5776
--- a/src/gcc/tree-ssa-uninit.c (.../tags/gcc_4_8_2_release)
 
5777
+++ b/src/gcc/tree-ssa-uninit.c (.../branches/gcc-4_8-branch)
 
5778
@@ -36,6 +36,7 @@
 
5779
 #include "hashtab.h"
 
5780
 #include "tree-pass.h"
 
5781
 #include "diagnostic-core.h"
 
5782
+#include "params.h"
 
5783
 
 
5784
 /* This implements the pass that does predicate aware warning on uses of
 
5785
    possibly uninitialized variables. The pass first collects the set of
 
5786
@@ -246,8 +247,8 @@
 
5787
 
 
5788
 /* Computes the control dependence chains (paths of edges)
 
5789
    for DEP_BB up to the dominating basic block BB (the head node of a
 
5790
-   chain should be dominated by it).  CD_CHAINS is pointer to a
 
5791
-   dynamic array holding the result chains. CUR_CD_CHAIN is the current
 
5792
+   chain should be dominated by it).  CD_CHAINS is pointer to an
 
5793
+   array holding the result chains.  CUR_CD_CHAIN is the current
 
5794
    chain being computed.  *NUM_CHAINS is total number of chains.  The
 
5795
    function returns true if the information is successfully computed,
 
5796
    return false if there is no control dependence or not computed.  */
 
5797
@@ -256,7 +257,8 @@
 
5798
 compute_control_dep_chain (basic_block bb, basic_block dep_bb,
 
5799
                            vec<edge> *cd_chains,
 
5800
                            size_t *num_chains,
 
5801
-                           vec<edge> *cur_cd_chain)
 
5802
+                          vec<edge> *cur_cd_chain,
 
5803
+                          int *num_calls)
 
5804
 {
 
5805
   edge_iterator ei;
 
5806
   edge e;
 
5807
@@ -267,6 +269,10 @@
 
5808
   if (EDGE_COUNT (bb->succs) < 2)
 
5809
     return false;
 
5810
 
 
5811
+  if (*num_calls > PARAM_VALUE (PARAM_UNINIT_CONTROL_DEP_ATTEMPTS))
 
5812
+    return false;
 
5813
+  ++*num_calls;
 
5814
+
 
5815
   /* Could  use a set instead.  */
 
5816
   cur_chain_len = cur_cd_chain->length ();
 
5817
   if (cur_chain_len > MAX_CHAIN_LEN)
 
5818
@@ -306,7 +312,7 @@
 
5819
 
 
5820
           /* Now check if DEP_BB is indirectly control dependent on BB.  */
 
5821
           if (compute_control_dep_chain (cd_bb, dep_bb, cd_chains,
 
5822
-                                         num_chains, cur_cd_chain))
 
5823
+                                        num_chains, cur_cd_chain, num_calls))
 
5824
             {
 
5825
               found_cd_chain = true;
 
5826
               break;
 
5827
@@ -438,14 +444,12 @@
 
5828
                  basic_block use_bb)
 
5829
 {
 
5830
   size_t num_chains = 0, i;
 
5831
-  vec<edge> *dep_chains = 0;
 
5832
+  int num_calls = 0;
 
5833
+  vec<edge> dep_chains[MAX_NUM_CHAINS];
 
5834
   vec<edge> cur_chain = vNULL;
 
5835
   bool has_valid_pred = false;
 
5836
   basic_block cd_root = 0;
 
5837
 
 
5838
-  typedef vec<edge> vec_edge_heap;
 
5839
-  dep_chains = XCNEWVEC (vec_edge_heap, MAX_NUM_CHAINS);
 
5840
-
 
5841
   /* First find the closest bb that is control equivalent to PHI_BB
 
5842
      that also dominates USE_BB.  */
 
5843
   cd_root = phi_bb;
 
5844
@@ -458,20 +462,16 @@
 
5845
         break;
 
5846
     }
 
5847
 
 
5848
-  compute_control_dep_chain (cd_root, use_bb,
 
5849
-                             dep_chains, &num_chains,
 
5850
-                             &cur_chain);
 
5851
+  compute_control_dep_chain (cd_root, use_bb, dep_chains, &num_chains,
 
5852
+                            &cur_chain, &num_calls);
 
5853
 
 
5854
   has_valid_pred
 
5855
-      = convert_control_dep_chain_into_preds (dep_chains,
 
5856
-                                              num_chains,
 
5857
-                                              preds,
 
5858
-                                              num_preds);
 
5859
+    = convert_control_dep_chain_into_preds (dep_chains, num_chains, preds,
 
5860
+                                           num_preds);
 
5861
   /* Free individual chain  */
 
5862
   cur_chain.release ();
 
5863
   for (i = 0; i < num_chains; i++)
 
5864
     dep_chains[i].release ();
 
5865
-  free (dep_chains);
 
5866
   return has_valid_pred;
 
5867
 }
 
5868
 
 
5869
@@ -539,7 +539,7 @@
 
5870
                 size_t *num_preds, gimple phi)
 
5871
 {
 
5872
   size_t num_chains = 0, i, n;
 
5873
-  vec<edge> *dep_chains = 0;
 
5874
+  vec<edge> dep_chains[MAX_NUM_CHAINS];
 
5875
   vec<edge> cur_chain = vNULL;
 
5876
   vec<edge> def_edges = vNULL;
 
5877
   bool has_valid_pred = false;
 
5878
@@ -546,9 +546,6 @@
 
5879
   basic_block phi_bb, cd_root = 0;
 
5880
   struct pointer_set_t *visited_phis;
 
5881
 
 
5882
-  typedef vec<edge> vec_edge_heap;
 
5883
-  dep_chains = XCNEWVEC (vec_edge_heap, MAX_NUM_CHAINS);
 
5884
-
 
5885
   phi_bb = gimple_bb (phi);
 
5886
   /* First find the closest dominating bb to be
 
5887
      the control dependence root  */
 
5888
@@ -567,38 +564,33 @@
 
5889
   for (i = 0; i < n; i++)
 
5890
     {
 
5891
       size_t prev_nc, j;
 
5892
+      int num_calls = 0;
 
5893
       edge opnd_edge;
 
5894
 
 
5895
       opnd_edge = def_edges[i];
 
5896
       prev_nc = num_chains;
 
5897
-      compute_control_dep_chain (cd_root, opnd_edge->src,
 
5898
-                                 dep_chains, &num_chains,
 
5899
-                                 &cur_chain);
 
5900
-      /* Free individual chain  */
 
5901
-      cur_chain.release ();
 
5902
+      compute_control_dep_chain (cd_root, opnd_edge->src, dep_chains,
 
5903
+                                &num_chains, &cur_chain, &num_calls);
 
5904
 
 
5905
       /* Now update the newly added chains with
 
5906
          the phi operand edge:  */
 
5907
       if (EDGE_COUNT (opnd_edge->src->succs) > 1)
 
5908
         {
 
5909
-          if (prev_nc == num_chains
 
5910
-              && num_chains < MAX_NUM_CHAINS)
 
5911
-            num_chains++;
 
5912
+         if (prev_nc == num_chains && num_chains < MAX_NUM_CHAINS)
 
5913
+           dep_chains[num_chains++] = vNULL;
 
5914
           for (j = prev_nc; j < num_chains; j++)
 
5915
-            {
 
5916
-              dep_chains[j].safe_push (opnd_edge);
 
5917
-            }
 
5918
+           dep_chains[j].safe_push (opnd_edge);
 
5919
         }
 
5920
     }
 
5921
 
 
5922
+  /* Free individual chain  */
 
5923
+  cur_chain.release ();
 
5924
+
 
5925
   has_valid_pred
 
5926
-      = convert_control_dep_chain_into_preds (dep_chains,
 
5927
-                                              num_chains,
 
5928
-                                              preds,
 
5929
-                                              num_preds);
 
5930
+    = convert_control_dep_chain_into_preds (dep_chains, num_chains, preds,
 
5931
+                                           num_preds);
 
5932
   for (i = 0; i < num_chains; i++)
 
5933
     dep_chains[i].release ();
 
5934
-  free (dep_chains);
 
5935
   return has_valid_pred;
 
5936
 }
 
5937
 
 
5938
Index: gcc/tree-ssa-loop-niter.c
 
5939
===================================================================
 
5940
--- a/src/gcc/tree-ssa-loop-niter.c     (.../tags/gcc_4_8_2_release)
 
5941
+++ b/src/gcc/tree-ssa-loop-niter.c     (.../branches/gcc-4_8-branch)
 
5942
@@ -2075,7 +2075,8 @@
 
5943
       return NULL;
 
5944
     }
 
5945
 
 
5946
-  if (gimple_code (stmt) != GIMPLE_ASSIGN)
 
5947
+  if (gimple_code (stmt) != GIMPLE_ASSIGN
 
5948
+      || gimple_assign_rhs_class (stmt) == GIMPLE_TERNARY_RHS)
 
5949
     return NULL;
 
5950
 
 
5951
   code = gimple_assign_rhs_code (stmt);
 
5952
@@ -2143,7 +2144,7 @@
 
5953
 {
 
5954
   gimple stmt;
 
5955
 
 
5956
-  gcc_assert (is_gimple_min_invariant (base));
 
5957
+  gcc_checking_assert (is_gimple_min_invariant (base));
 
5958
 
 
5959
   if (!x)
 
5960
     return base;
 
5961
@@ -2152,7 +2153,7 @@
 
5962
   if (gimple_code (stmt) == GIMPLE_PHI)
 
5963
     return base;
 
5964
 
 
5965
-  gcc_assert (is_gimple_assign (stmt));
 
5966
+  gcc_checking_assert (is_gimple_assign (stmt));
 
5967
 
 
5968
   /* STMT must be either an assignment of a single SSA name or an
 
5969
      expression involving an SSA name and a constant.  Try to fold that
 
5970
Index: gcc/c-family/ChangeLog
 
5971
===================================================================
 
5972
--- a/src/gcc/c-family/ChangeLog        (.../tags/gcc_4_8_2_release)
 
5973
+++ b/src/gcc/c-family/ChangeLog        (.../branches/gcc-4_8-branch)
 
5974
@@ -1,3 +1,36 @@
 
5975
+2014-03-06  Jakub Jelinek  <jakub@redhat.com>
 
5976
+
 
5977
+       Backport from mainline
 
5978
+       2014-02-19  Jakub Jelinek  <jakub@redhat.com>
 
5979
+
 
5980
+       PR c/37743
 
5981
+       * c-common.c (c_common_nodes_and_builtins): When initializing
 
5982
+       c_uint{16,32,64}_type_node, also set corresponding
 
5983
+       uint{16,32,64}_type_node to the same value.
 
5984
+
 
5985
+       2014-02-12  Jakub Jelinek  <jakub@redhat.com>
 
5986
+
 
5987
+       PR c/60101
 
5988
+       * c-common.c (merge_tlist): If copy is true, call new_tlist,
 
5989
+       if false, add ADD itself, rather than vice versa.
 
5990
+       (verify_tree): For COND_EXPR, don't call merge_tlist with non-zero
 
5991
+       copy.  For SAVE_EXPR, only call merge_tlist once.
 
5992
+
 
5993
+2013-11-29  Jakub Jelinek  <jakub@redhat.com>
 
5994
+
 
5995
+       PR c/59280
 
5996
+       * c-common.c (get_priority): If TREE_VALUE (args) is IDENTIFIER_NODE,
 
5997
+       goto invalid.  If it is error_mark_node, don't issue further
 
5998
+       diagnostics.
 
5999
+
 
6000
+2013-11-04  Marek Polacek  <polacek@redhat.com>
 
6001
+
 
6002
+       Backport from mainline
 
6003
+       2013-11-04  Marek Polacek  <polacek@redhat.com>
 
6004
+
 
6005
+       PR c++/58979
 
6006
+       * c-common.c (invalid_indirection_error): Handle RO_ARROW_STAR case.
 
6007
+
 
6008
 2013-10-16  Release Manager
 
6009
 
 
6010
        * GCC 4.8.2 released.
 
6011
Index: gcc/c-family/c-common.c
 
6012
===================================================================
 
6013
--- a/src/gcc/c-family/c-common.c       (.../tags/gcc_4_8_2_release)
 
6014
+++ b/src/gcc/c-family/c-common.c       (.../branches/gcc-4_8-branch)
 
6015
@@ -2894,7 +2894,7 @@
 
6016
          }
 
6017
       if (!found)
 
6018
        {
 
6019
-         *end = copy ? add : new_tlist (NULL, add->expr, add->writer);
 
6020
+         *end = copy ? new_tlist (NULL, add->expr, add->writer) : add;
 
6021
          end = &(*end)->next;
 
6022
          *end = 0;
 
6023
        }
 
6024
@@ -3052,7 +3052,7 @@
 
6025
       verify_tree (TREE_OPERAND (x, 0), &tmp_before, &tmp_list2, NULL_TREE);
 
6026
       warn_for_collisions (tmp_list2);
 
6027
       merge_tlist (pbefore_sp, tmp_before, 0);
 
6028
-      merge_tlist (pbefore_sp, tmp_list2, 1);
 
6029
+      merge_tlist (pbefore_sp, tmp_list2, 0);
 
6030
 
 
6031
       tmp_list3 = tmp_nosp = 0;
 
6032
       verify_tree (TREE_OPERAND (x, 1), &tmp_list3, &tmp_nosp, NULL_TREE);
 
6033
@@ -3156,12 +3156,7 @@
 
6034
            warn_for_collisions (tmp_nosp);
 
6035
 
 
6036
            tmp_list3 = 0;
 
6037
-           while (tmp_nosp)
 
6038
-             {
 
6039
-               struct tlist *t = tmp_nosp;
 
6040
-               tmp_nosp = t->next;
 
6041
-               merge_tlist (&tmp_list3, t, 0);
 
6042
-             }
 
6043
+           merge_tlist (&tmp_list3, tmp_nosp, 0);
 
6044
            t->cache_before_sp = tmp_before;
 
6045
            t->cache_after_sp = tmp_list3;
 
6046
          }
 
6047
@@ -5511,13 +5506,13 @@
 
6048
     uint8_type_node =
 
6049
       TREE_TYPE (identifier_global_value (c_get_ident (UINT8_TYPE)));
 
6050
   if (UINT16_TYPE)
 
6051
-    c_uint16_type_node =
 
6052
+    c_uint16_type_node = uint16_type_node =
 
6053
       TREE_TYPE (identifier_global_value (c_get_ident (UINT16_TYPE)));
 
6054
   if (UINT32_TYPE)
 
6055
-    c_uint32_type_node =
 
6056
+    c_uint32_type_node = uint32_type_node =
 
6057
       TREE_TYPE (identifier_global_value (c_get_ident (UINT32_TYPE)));
 
6058
   if (UINT64_TYPE)
 
6059
-    c_uint64_type_node =
 
6060
+    c_uint64_type_node = uint64_type_node =
 
6061
       TREE_TYPE (identifier_global_value (c_get_ident (UINT64_TYPE)));
 
6062
   if (INT_LEAST8_TYPE)
 
6063
     int_least8_type_node =
 
6064
@@ -6917,6 +6912,10 @@
 
6065
     }
 
6066
 
 
6067
   arg = TREE_VALUE (args);
 
6068
+  if (TREE_CODE (arg) == IDENTIFIER_NODE)
 
6069
+    goto invalid;
 
6070
+  if (arg == error_mark_node)
 
6071
+    return DEFAULT_INIT_PRIORITY;
 
6072
   arg = default_conversion (arg);
 
6073
   if (!host_integerp (arg, /*pos=*/0)
 
6074
       || !INTEGRAL_TYPE_P (TREE_TYPE (arg)))
 
6075
@@ -9763,6 +9762,11 @@
 
6076
                "invalid type argument of %<->%> (have %qT)",
 
6077
                type);
 
6078
       break;
 
6079
+    case RO_ARROW_STAR:
 
6080
+      error_at (loc,
 
6081
+               "invalid type argument of %<->*%> (have %qT)",
 
6082
+               type);
 
6083
+      break;
 
6084
     case RO_IMPLICIT_CONVERSION:
 
6085
       error_at (loc,
 
6086
                "invalid type argument of implicit conversion (have %qT)",
 
6087
Index: gcc/c/c-typeck.c
 
6088
===================================================================
 
6089
--- a/src/gcc/c/c-typeck.c      (.../tags/gcc_4_8_2_release)
 
6090
+++ b/src/gcc/c/c-typeck.c      (.../branches/gcc-4_8-branch)
 
6091
@@ -3629,7 +3629,8 @@
 
6092
       /* Report invalid types.  */
 
6093
 
 
6094
       if (typecode != POINTER_TYPE && typecode != FIXED_POINT_TYPE
 
6095
-         && typecode != INTEGER_TYPE && typecode != REAL_TYPE)
 
6096
+         && typecode != INTEGER_TYPE && typecode != REAL_TYPE
 
6097
+         && typecode != VECTOR_TYPE)
 
6098
        {
 
6099
          if (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR)
 
6100
            error_at (location, "wrong type argument to increment");
 
6101
@@ -3694,7 +3695,9 @@
 
6102
          }
 
6103
        else
 
6104
          {
 
6105
-           inc = integer_one_node;
 
6106
+           inc = (TREE_CODE (argtype) == VECTOR_TYPE
 
6107
+                  ? build_one_cst (argtype)
 
6108
+                  : integer_one_node);
 
6109
            inc = convert (argtype, inc);
 
6110
          }
 
6111
 
 
6112
@@ -4331,8 +4334,10 @@
 
6113
     {
 
6114
       if (int_operands)
 
6115
        {
 
6116
-         op1 = remove_c_maybe_const_expr (op1);
 
6117
-         op2 = remove_c_maybe_const_expr (op2);
 
6118
+         /* Use c_fully_fold here, since C_MAYBE_CONST_EXPR might be
 
6119
+            nested inside of the expression.  */
 
6120
+         op1 = c_fully_fold (op1, false, NULL);
 
6121
+         op2 = c_fully_fold (op2, false, NULL);
 
6122
        }
 
6123
       ret = build3 (COND_EXPR, result_type, ifexp, op1, op2);
 
6124
       if (int_operands)
 
6125
@@ -10618,7 +10623,8 @@
 
6126
                        "%qE has invalid type for %<reduction%>", t);
 
6127
              remove = true;
 
6128
            }
 
6129
-         else if (FLOAT_TYPE_P (TREE_TYPE (t)))
 
6130
+         else if (FLOAT_TYPE_P (TREE_TYPE (t))
 
6131
+                  || TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
 
6132
            {
 
6133
              enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
 
6134
              const char *r_name = NULL;
 
6135
@@ -10628,8 +10634,14 @@
 
6136
                case PLUS_EXPR:
 
6137
                case MULT_EXPR:
 
6138
                case MINUS_EXPR:
 
6139
+                 break;
 
6140
                case MIN_EXPR:
 
6141
+                 if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
 
6142
+                   r_name = "min";
 
6143
+                 break;
 
6144
                case MAX_EXPR:
 
6145
+                 if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
 
6146
+                   r_name = "max";
 
6147
                  break;
 
6148
                case BIT_AND_EXPR:
 
6149
                  r_name = "&";
 
6150
@@ -10641,10 +10653,12 @@
 
6151
                  r_name = "|";
 
6152
                  break;
 
6153
                case TRUTH_ANDIF_EXPR:
 
6154
-                 r_name = "&&";
 
6155
+                 if (FLOAT_TYPE_P (TREE_TYPE (t)))
 
6156
+                   r_name = "&&";
 
6157
                  break;
 
6158
                case TRUTH_ORIF_EXPR:
 
6159
-                 r_name = "||";
 
6160
+                 if (FLOAT_TYPE_P (TREE_TYPE (t)))
 
6161
+                   r_name = "||";
 
6162
                  break;
 
6163
                default:
 
6164
                  gcc_unreachable ();
 
6165
Index: gcc/c/ChangeLog
 
6166
===================================================================
 
6167
--- a/src/gcc/c/ChangeLog       (.../tags/gcc_4_8_2_release)
 
6168
+++ b/src/gcc/c/ChangeLog       (.../branches/gcc-4_8-branch)
 
6169
@@ -1,3 +1,33 @@
 
6170
+2014-01-23  Jakub Jelinek  <jakub@redhat.com>
 
6171
+
 
6172
+       PR middle-end/58809
 
6173
+       * c-typeck.c (c_finish_omp_clause): Reject MIN_EXPR, MAX_EXPR,
 
6174
+       BIT_AND_EXPR, BIT_IOR_EXPR and BIT_XOR_EXPR on COMPLEX_TYPEs.
 
6175
+
 
6176
+2014-01-22  Marek Polacek  <polacek@redhat.com>
 
6177
+
 
6178
+       Backport from mainline
 
6179
+       2014-01-22  Marek Polacek  <polacek@redhat.com>
 
6180
+
 
6181
+       PR c/59891
 
6182
+       * c-typeck.c (build_conditional_expr): Call c_fully_fold instead
 
6183
+       of remove_c_maybe_const_expr on op1 and op2.
 
6184
+
 
6185
+2013-12-03  Marek Polacek  <polacek@redhat.com>
 
6186
+
 
6187
+       Backport from mainline
 
6188
+       2013-12-03  Marek Polacek  <polacek@redhat.com>
 
6189
+
 
6190
+       PR c/59351
 
6191
+       * c-decl.c (build_compound_literal): Allow compound literals with
 
6192
+       empty initial value.
 
6193
+
 
6194
+2013-11-27  Tom de Vries  <tom@codesourcery.com>
 
6195
+           Marc Glisse  <marc.glisse@inria.fr>
 
6196
+
 
6197
+       PR c++/59032
 
6198
+       * c-typeck.c (build_unary_op): Allow vector increment and decrement.
 
6199
+
 
6200
 2013-10-16  Release Manager
 
6201
 
 
6202
        * GCC 4.8.2 released.
 
6203
Index: gcc/c/c-decl.c
 
6204
===================================================================
 
6205
--- a/src/gcc/c/c-decl.c        (.../tags/gcc_4_8_2_release)
 
6206
+++ b/src/gcc/c/c-decl.c        (.../branches/gcc-4_8-branch)
 
6207
@@ -4632,7 +4632,9 @@
 
6208
     {
 
6209
       int failure = complete_array_type (&TREE_TYPE (decl),
 
6210
                                         DECL_INITIAL (decl), true);
 
6211
-      gcc_assert (!failure);
 
6212
+      /* If complete_array_type returns 3, it means that the
 
6213
+         initial value of the compound literal is empty.  Allow it.  */
 
6214
+      gcc_assert (failure == 0 || failure == 3);
 
6215
 
 
6216
       type = TREE_TYPE (decl);
 
6217
       TREE_TYPE (DECL_INITIAL (decl)) = type;
 
6218
Index: gcc/cgraph.c
 
6219
===================================================================
 
6220
--- a/src/gcc/cgraph.c  (.../tags/gcc_4_8_2_release)
 
6221
+++ b/src/gcc/cgraph.c  (.../branches/gcc-4_8-branch)
 
6222
@@ -2596,4 +2596,47 @@
 
6223
   FOR_EACH_FUNCTION (node)
 
6224
     verify_cgraph_node (node);
 
6225
 }
 
6226
+
 
6227
+/* Create external decl node for DECL.
 
6228
+   The difference i nbetween cgraph_get_create_node and
 
6229
+   cgraph_get_create_real_symbol_node is that cgraph_get_create_node
 
6230
+   may return inline clone, while cgraph_get_create_real_symbol_node
 
6231
+   will create a new node in this case.
 
6232
+   FIXME: This function should be removed once clones are put out of decl
 
6233
+   hash.  */
 
6234
+
 
6235
+struct cgraph_node *
 
6236
+cgraph_get_create_real_symbol_node (tree decl)
 
6237
+{
 
6238
+  struct cgraph_node *first_clone = cgraph_get_node (decl);
 
6239
+  struct cgraph_node *node;
 
6240
+  /* create symbol table node.  even if inline clone exists, we can not take
 
6241
+     it as a target of non-inlined call.  */
 
6242
+  node = cgraph_get_node (decl);
 
6243
+  if (node && !node->global.inlined_to)
 
6244
+    return node;
 
6245
+
 
6246
+  node = cgraph_create_node (decl);
 
6247
+
 
6248
+  /* ok, we previously inlined the function, then removed the offline copy and
 
6249
+     now we want it back for external call.  this can happen when devirtualizing
 
6250
+     while inlining function called once that happens after extern inlined and
 
6251
+     virtuals are already removed.  in this case introduce the external node
 
6252
+     and make it available for call.  */
 
6253
+  if (first_clone)
 
6254
+    {
 
6255
+      first_clone->clone_of = node;
 
6256
+      node->clones = first_clone;
 
6257
+      symtab_prevail_in_asm_name_hash ((symtab_node) node);
 
6258
+      symtab_insert_node_to_hashtable ((symtab_node) node);
 
6259
+      if (dump_file)
 
6260
+       fprintf (dump_file, "Introduced new external node "
 
6261
+                "(%s/%i) and turned into root of the clone tree.\n",
 
6262
+                xstrdup (cgraph_node_name (node)), node->uid);
 
6263
+    }
 
6264
+  else if (dump_file)
 
6265
+    fprintf (dump_file, "Introduced new external node "
 
6266
+            "(%s/%i).\n", xstrdup (cgraph_node_name (node)), node->uid);
 
6267
+  return node;
 
6268
+}
 
6269
 #include "gt-cgraph.h"
 
6270
Index: gcc/cgraph.h
 
6271
===================================================================
 
6272
--- a/src/gcc/cgraph.h  (.../tags/gcc_4_8_2_release)
 
6273
+++ b/src/gcc/cgraph.h  (.../branches/gcc-4_8-branch)
 
6274
@@ -575,6 +575,7 @@
 
6275
 struct cgraph_node * cgraph_create_node (tree);
 
6276
 struct cgraph_node * cgraph_create_empty_node (void);
 
6277
 struct cgraph_node * cgraph_get_create_node (tree);
 
6278
+struct cgraph_node * cgraph_get_create_real_symbol_node (tree);
 
6279
 struct cgraph_node * cgraph_same_body_alias (struct cgraph_node *, tree, tree);
 
6280
 struct cgraph_node * cgraph_add_thunk (struct cgraph_node *, tree, tree, bool, HOST_WIDE_INT,
 
6281
                                       HOST_WIDE_INT, tree, tree);
 
6282
Index: gcc/optabs.c
 
6283
===================================================================
 
6284
--- a/src/gcc/optabs.c  (.../tags/gcc_4_8_2_release)
 
6285
+++ b/src/gcc/optabs.c  (.../branches/gcc-4_8-branch)
 
6286
@@ -4558,8 +4558,11 @@
 
6287
   if (!COMPARISON_P (comparison))
 
6288
     return NULL_RTX;
 
6289
 
 
6290
+  /* State variables we need to save and restore if cmove can't be used.  */
 
6291
+  int save_pending_stack_adjust = pending_stack_adjust;
 
6292
+  int save_stack_pointer_delta = stack_pointer_delta;
 
6293
+  last = get_last_insn ();
 
6294
   do_pending_stack_adjust ();
 
6295
-  last = get_last_insn ();
 
6296
   prepare_cmp_insn (XEXP (comparison, 0), XEXP (comparison, 1),
 
6297
                    GET_CODE (comparison), NULL_RTX, unsignedp, OPTAB_WIDEN,
 
6298
                    &comparison, &cmode);
 
6299
@@ -4579,6 +4582,8 @@
 
6300
        }
 
6301
     }
 
6302
   delete_insns_since (last);
 
6303
+  pending_stack_adjust = save_pending_stack_adjust;
 
6304
+  stack_pointer_delta = save_stack_pointer_delta;
 
6305
   return NULL_RTX;
 
6306
 }
 
6307
 
 
6308
@@ -6233,7 +6238,7 @@
 
6309
 
 
6310
   /* If the optabs changed, record it.  */
 
6311
   if (memcmp (tmp_optabs, this_target_optabs, sizeof (struct target_optabs)))
 
6312
-    TREE_OPTIMIZATION_OPTABS (optnode) = (unsigned char *) tmp_optabs;
 
6313
+    TREE_OPTIMIZATION_OPTABS (optnode) = tmp_optabs;
 
6314
   else
 
6315
     {
 
6316
       TREE_OPTIMIZATION_OPTABS (optnode) = NULL;
 
6317
@@ -7035,8 +7040,7 @@
 
6318
 
 
6319
       create_output_operand (&ops[0], target, mode);
 
6320
       create_fixed_operand (&ops[1], mem);
 
6321
-      /* VAL may have been promoted to a wider mode.  Shrink it if so.  */
 
6322
-      create_convert_operand_to (&ops[2], val, mode, true);
 
6323
+      create_input_operand (&ops[2], val, mode);
 
6324
       create_integer_operand (&ops[3], model);
 
6325
       if (maybe_expand_insn (icode, 4, ops))
 
6326
        return ops[0].value;
 
6327
@@ -7075,8 +7079,7 @@
 
6328
       struct expand_operand ops[3];
 
6329
       create_output_operand (&ops[0], target, mode);
 
6330
       create_fixed_operand (&ops[1], mem);
 
6331
-      /* VAL may have been promoted to a wider mode.  Shrink it if so.  */
 
6332
-      create_convert_operand_to (&ops[2], val, mode, true);
 
6333
+      create_input_operand (&ops[2], val, mode);
 
6334
       if (maybe_expand_insn (icode, 3, ops))
 
6335
        return ops[0].value;
 
6336
     }
 
6337
@@ -7118,8 +7121,6 @@
 
6338
     {
 
6339
       if (!target || !register_operand (target, mode))
 
6340
        target = gen_reg_rtx (mode);
 
6341
-      if (GET_MODE (val) != VOIDmode && GET_MODE (val) != mode)
 
6342
-       val = convert_modes (mode, GET_MODE (val), val, 1);
 
6343
       if (expand_compare_and_swap_loop (mem, target, val, NULL_RTX))
 
6344
        return target;
 
6345
     }
 
6346
@@ -7331,8 +7332,8 @@
 
6347
       create_output_operand (&ops[0], target_bool, bool_mode);
 
6348
       create_output_operand (&ops[1], target_oval, mode);
 
6349
       create_fixed_operand (&ops[2], mem);
 
6350
-      create_convert_operand_to (&ops[3], expected, mode, true);
 
6351
-      create_convert_operand_to (&ops[4], desired, mode, true);
 
6352
+      create_input_operand (&ops[3], expected, mode);
 
6353
+      create_input_operand (&ops[4], desired, mode);
 
6354
       create_integer_operand (&ops[5], is_weak);
 
6355
       create_integer_operand (&ops[6], succ_model);
 
6356
       create_integer_operand (&ops[7], fail_model);
 
6357
@@ -7353,8 +7354,8 @@
 
6358
 
 
6359
       create_output_operand (&ops[0], target_oval, mode);
 
6360
       create_fixed_operand (&ops[1], mem);
 
6361
-      create_convert_operand_to (&ops[2], expected, mode, true);
 
6362
-      create_convert_operand_to (&ops[3], desired, mode, true);
 
6363
+      create_input_operand (&ops[2], expected, mode);
 
6364
+      create_input_operand (&ops[3], desired, mode);
 
6365
       if (!maybe_expand_insn (icode, 4, ops))
 
6366
        return false;
 
6367
 
 
6368
Index: gcc/DATESTAMP
 
6369
===================================================================
 
6370
--- a/src/gcc/DATESTAMP (.../tags/gcc_4_8_2_release)
 
6371
+++ b/src/gcc/DATESTAMP (.../branches/gcc-4_8-branch)
 
6372
@@ -1 +1 @@
 
6373
-20131016
 
6374
+20140320
 
6375
Index: gcc/value-prof.c
 
6376
===================================================================
 
6377
--- a/src/gcc/value-prof.c      (.../tags/gcc_4_8_2_release)
 
6378
+++ b/src/gcc/value-prof.c      (.../branches/gcc-4_8-branch)
 
6379
@@ -1270,8 +1270,7 @@
 
6380
 
 
6381
   /* Build an EH edge for the direct call if necessary.  */
 
6382
   lp_nr = lookup_stmt_eh_lp (icall_stmt);
 
6383
-  if (lp_nr != 0
 
6384
-      && stmt_could_throw_p (dcall_stmt))
 
6385
+  if (lp_nr > 0 && stmt_could_throw_p (dcall_stmt))
 
6386
     {
 
6387
       edge e_eh, e;
 
6388
       edge_iterator ei;
 
6389
Index: gcc/tree.h
 
6390
===================================================================
 
6391
--- a/src/gcc/tree.h    (.../tags/gcc_4_8_2_release)
 
6392
+++ b/src/gcc/tree.h    (.../branches/gcc-4_8-branch)
 
6393
@@ -3589,7 +3589,7 @@
 
6394
 
 
6395
   /* Target optabs for this set of optimization options.  This is of
 
6396
      type `struct target_optabs *'.  */
 
6397
-  unsigned char *GTY ((atomic)) optabs;
 
6398
+  void *GTY ((atomic)) optabs;
 
6399
 
 
6400
   /* The value of this_target_optabs against which the optabs above were
 
6401
      generated.  */
 
6402
@@ -5854,6 +5854,7 @@
 
6403
 extern tree fold_builtin_fputs (location_t, tree, tree, bool, bool, tree);
 
6404
 extern tree fold_builtin_strcpy (location_t, tree, tree, tree, tree);
 
6405
 extern tree fold_builtin_strncpy (location_t, tree, tree, tree, tree, tree);
 
6406
+extern tree fold_builtin_strcat (location_t, tree, tree, tree);
 
6407
 extern tree fold_builtin_memory_chk (location_t, tree, tree, tree, tree, tree, tree, bool,
 
6408
                                     enum built_in_function);
 
6409
 extern tree fold_builtin_stxcpy_chk (location_t, tree, tree, tree, tree, tree, bool,
 
6410
@@ -6545,4 +6546,18 @@
 
6411
          && builtin_info.implicit_p[uns_fncode]);
 
6412
 }
 
6413
 
 
6414
+/* Return pointer to optimization flags of FNDECL.  */
 
6415
+static inline struct cl_optimization *
 
6416
+opts_for_fn (const_tree fndecl)
 
6417
+{
 
6418
+  tree fn_opts = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (fndecl);
 
6419
+  if (fn_opts == NULL_TREE)
 
6420
+    fn_opts = optimization_default_node;
 
6421
+  return TREE_OPTIMIZATION (fn_opts);
 
6422
+}
 
6423
+
 
6424
+/* opt flag for function FNDECL, e.g. opts_for_fn (fndecl, optimize) is
 
6425
+   the optimization level of function fndecl.  */
 
6426
+#define opt_for_fn(fndecl, opt) (opts_for_fn (fndecl)->x_##opt)
 
6427
+
 
6428
 #endif  /* GCC_TREE_H  */
 
6429
Index: gcc/ipa-cp.c
 
6430
===================================================================
 
6431
--- a/src/gcc/ipa-cp.c  (.../tags/gcc_4_8_2_release)
 
6432
+++ b/src/gcc/ipa-cp.c  (.../branches/gcc-4_8-branch)
 
6433
@@ -444,6 +444,9 @@
 
6434
     reason = "not a tree_versionable_function";
 
6435
   else if (cgraph_function_body_availability (node) <= AVAIL_OVERWRITABLE)
 
6436
     reason = "insufficient body availability";
 
6437
+  else if (!opt_for_fn (node->symbol.decl, optimize)
 
6438
+          || !opt_for_fn (node->symbol.decl, flag_ipa_cp))
 
6439
+    reason = "non-optimized function";
 
6440
 
 
6441
   if (reason && dump_file && !node->alias && !node->thunk.thunk_p)
 
6442
     fprintf (dump_file, "Function %s/%i is not versionable, reason: %s.\n",
 
6443
@@ -3119,6 +3122,7 @@
 
6444
                                          struct cgraph_node *node)
 
6445
 {
 
6446
   struct ipa_node_params *orig_caller_info = IPA_NODE_REF (cs->caller);
 
6447
+  struct ipa_node_params *orig_node_info;
 
6448
   struct ipa_agg_replacement_value *aggval;
 
6449
   int i, ec, count;
 
6450
 
 
6451
@@ -3133,6 +3137,7 @@
 
6452
       if (aggval->index >= ec)
 
6453
        return false;
 
6454
 
 
6455
+  orig_node_info = IPA_NODE_REF (IPA_NODE_REF (node)->ipcp_orig_node);
 
6456
   if (orig_caller_info->ipcp_orig_node)
 
6457
     orig_caller_info = IPA_NODE_REF (orig_caller_info->ipcp_orig_node);
 
6458
 
 
6459
@@ -3150,7 +3155,7 @@
 
6460
       if (!interesting)
 
6461
        continue;
 
6462
 
 
6463
-      plats = ipa_get_parm_lattices (orig_caller_info, aggval->index);
 
6464
+      plats = ipa_get_parm_lattices (orig_node_info, aggval->index);
 
6465
       if (plats->aggs_bottom)
 
6466
        return false;
 
6467
 
 
6468
Index: gcc/configure
 
6469
===================================================================
 
6470
--- a/src/gcc/configure (.../tags/gcc_4_8_2_release)
 
6471
+++ b/src/gcc/configure (.../branches/gcc-4_8-branch)
 
6472
@@ -11202,13 +11202,11 @@
 
6473
        /* | A-Za-z:\\/* ) realsrcdir=${srcdir};;
 
6474
        *) realsrcdir=../${srcdir};;
 
6475
        esac
 
6476
-       saved_CFLAGS="${CFLAGS}"
 
6477
        CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
 
6478
-       LDFLAGS="${LDFLAGS_FOR_BUILD}" \
 
6479
+       LDFLAGS="${LDFLAGS_FOR_BUILD}" GMPINC="" \
 
6480
        ${realsrcdir}/configure \
 
6481
                --enable-languages=${enable_languages-all} \
 
6482
                --target=$target_alias --host=$build_alias --build=$build_alias
 
6483
-       CFLAGS="${saved_CFLAGS}"
 
6484
 
 
6485
        # We just finished tests for the build machine, so rename
 
6486
        # the file auto-build.h in the gcc directory.
 
6487
@@ -11703,6 +11701,7 @@
 
6488
 if test x$build != x$host || test "x$coverage_flags" != x
 
6489
 then
 
6490
     BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)'
 
6491
+    BUILD_CXXFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CXXFLAGS_FOR_BUILD)'
 
6492
     BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)'
 
6493
 fi
 
6494
 
 
6495
@@ -17828,7 +17827,7 @@
 
6496
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
 
6497
   lt_status=$lt_dlunknown
 
6498
   cat > conftest.$ac_ext <<_LT_EOF
 
6499
-#line 17831 "configure"
 
6500
+#line 17830 "configure"
 
6501
 #include "confdefs.h"
 
6502
 
 
6503
 #if HAVE_DLFCN_H
 
6504
@@ -17934,7 +17933,7 @@
 
6505
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
 
6506
   lt_status=$lt_dlunknown
 
6507
   cat > conftest.$ac_ext <<_LT_EOF
 
6508
-#line 17937 "configure"
 
6509
+#line 17936 "configure"
 
6510
 #include "confdefs.h"
 
6511
 
 
6512
 #if HAVE_DLFCN_H
 
6513
@@ -24263,6 +24262,43 @@
 
6514
 $as_echo "#define HAVE_AS_SPARC4 1" >>confdefs.h
 
6515
 
 
6516
 fi
 
6517
+
 
6518
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for LEON instructions" >&5
 
6519
+$as_echo_n "checking assembler for LEON instructions... " >&6; }
 
6520
+if test "${gcc_cv_as_sparc_leon+set}" = set; then :
 
6521
+  $as_echo_n "(cached) " >&6
 
6522
+else
 
6523
+  gcc_cv_as_sparc_leon=no
 
6524
+  if test x$gcc_cv_as != x; then
 
6525
+    $as_echo '.text
 
6526
+       .register %g2, #scratch
 
6527
+       .register %g3, #scratch
 
6528
+       .align 4
 
6529
+       smac %g2, %g3, %g1
 
6530
+       umac %g2, %g3, %g1
 
6531
+       cas [%g2], %g3, %g1' > conftest.s
 
6532
+    if { ac_try='$gcc_cv_as $gcc_cv_as_flags -Aleon -o conftest.o conftest.s >&5'
 
6533
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
 
6534
+  (eval $ac_try) 2>&5
 
6535
+  ac_status=$?
 
6536
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
 
6537
+  test $ac_status = 0; }; }
 
6538
+    then
 
6539
+       gcc_cv_as_sparc_leon=yes
 
6540
+    else
 
6541
+      echo "configure: failed program was" >&5
 
6542
+      cat conftest.s >&5
 
6543
+    fi
 
6544
+    rm -f conftest.o conftest.s
 
6545
+  fi
 
6546
+fi
 
6547
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_sparc_leon" >&5
 
6548
+$as_echo "$gcc_cv_as_sparc_leon" >&6; }
 
6549
+if test $gcc_cv_as_sparc_leon = yes; then
 
6550
+
 
6551
+$as_echo "#define HAVE_AS_LEON 1" >>confdefs.h
 
6552
+
 
6553
+fi
 
6554
     ;;
 
6555
 
 
6556
   i[34567]86-*-* | x86_64-*-*)
 
6557
@@ -24745,6 +24781,10 @@
 
6558
 
 
6559
     # These two are used unconditionally by i386.[ch]; it is to be defined
 
6560
     # to 1 if the feature is present, 0 otherwise.
 
6561
+    as_ix86_gotoff_in_data_opt=
 
6562
+    if test x$gas = xyes; then
 
6563
+      as_ix86_gotoff_in_data_opt="--32"
 
6564
+    fi
 
6565
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for GOTOFF in data" >&5
 
6566
 $as_echo_n "checking assembler for GOTOFF in data... " >&6; }
 
6567
 if test "${gcc_cv_as_ix86_gotoff_in_data+set}" = set; then :
 
6568
@@ -24761,7 +24801,7 @@
 
6569
        nop
 
6570
        .data
 
6571
        .long .L0@GOTOFF' > conftest.s
 
6572
-    if { ac_try='$gcc_cv_as $gcc_cv_as_flags  -o conftest.o conftest.s >&5'
 
6573
+    if { ac_try='$gcc_cv_as $gcc_cv_as_flags $as_ix86_gotoff_in_data_opt -o conftest.o conftest.s >&5'
 
6574
   { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
 
6575
   (eval $ac_try) 2>&5
 
6576
   ac_status=$?
 
6577
@@ -24822,6 +24862,37 @@
 
6578
 
 
6579
 fi
 
6580
 
 
6581
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for ud2 mnemonic" >&5
 
6582
+$as_echo_n "checking assembler for ud2 mnemonic... " >&6; }
 
6583
+if test "${gcc_cv_as_ix86_ud2+set}" = set; then :
 
6584
+  $as_echo_n "(cached) " >&6
 
6585
+else
 
6586
+  gcc_cv_as_ix86_ud2=no
 
6587
+  if test x$gcc_cv_as != x; then
 
6588
+    $as_echo 'ud2' > conftest.s
 
6589
+    if { ac_try='$gcc_cv_as $gcc_cv_as_flags  -o conftest.o conftest.s >&5'
 
6590
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
 
6591
+  (eval $ac_try) 2>&5
 
6592
+  ac_status=$?
 
6593
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
 
6594
+  test $ac_status = 0; }; }
 
6595
+    then
 
6596
+       gcc_cv_as_ix86_ud2=yes
 
6597
+    else
 
6598
+      echo "configure: failed program was" >&5
 
6599
+      cat conftest.s >&5
 
6600
+    fi
 
6601
+    rm -f conftest.o conftest.s
 
6602
+  fi
 
6603
+fi
 
6604
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_ix86_ud2" >&5
 
6605
+$as_echo "$gcc_cv_as_ix86_ud2" >&6; }
 
6606
+if test $gcc_cv_as_ix86_ud2 = yes; then
 
6607
+
 
6608
+$as_echo "#define HAVE_AS_IX86_UD2 1" >>confdefs.h
 
6609
+
 
6610
+fi
 
6611
+
 
6612
     { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for R_386_TLS_GD_PLT reloc" >&5
 
6613
 $as_echo_n "checking assembler for R_386_TLS_GD_PLT reloc... " >&6; }
 
6614
 if test "${gcc_cv_as_ix86_tlsgdplt+set}" = set; then :
 
6615
@@ -27239,8 +27310,8 @@
 
6616
 $as_echo_n "checking for exported symbols... " >&6; }
 
6617
   if test "x$export_sym_check" != x; then
 
6618
     echo "int main() {return 0;} int foobar() {return 0;}" > conftest.c
 
6619
-    ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest > /dev/null 2>&1
 
6620
-    if $export_sym_check conftest | grep foobar > /dev/null; then
 
6621
+    ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest$ac_exeext > /dev/null 2>&1
 
6622
+    if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
 
6623
       : # No need to use a flag
 
6624
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 
6625
 $as_echo "yes" >&6; }
 
6626
@@ -27249,8 +27320,8 @@
 
6627
 $as_echo "yes" >&6; }
 
6628
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -rdynamic" >&5
 
6629
 $as_echo_n "checking for -rdynamic... " >&6; }
 
6630
-      ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest > /dev/null 2>&1
 
6631
-      if $export_sym_check conftest | grep foobar > /dev/null; then
 
6632
+      ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest$ac_exeext > /dev/null 2>&1
 
6633
+      if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
 
6634
         plugin_rdynamic=yes
 
6635
         pluginlibs="-rdynamic"
 
6636
       else
 
6637
Index: gcc/builtins.c
 
6638
===================================================================
 
6639
--- a/src/gcc/builtins.c        (.../tags/gcc_4_8_2_release)
 
6640
+++ b/src/gcc/builtins.c        (.../branches/gcc-4_8-branch)
 
6641
@@ -180,7 +180,6 @@
 
6642
 static tree fold_builtin_strpbrk (location_t, tree, tree, tree);
 
6643
 static tree fold_builtin_strstr (location_t, tree, tree, tree);
 
6644
 static tree fold_builtin_strrchr (location_t, tree, tree, tree);
 
6645
-static tree fold_builtin_strcat (location_t, tree, tree);
 
6646
 static tree fold_builtin_strncat (location_t, tree, tree, tree);
 
6647
 static tree fold_builtin_strspn (location_t, tree, tree);
 
6648
 static tree fold_builtin_strcspn (location_t, tree, tree);
 
6649
@@ -1958,6 +1957,7 @@
 
6650
   tree fndecl = get_callee_fndecl (exp);
 
6651
   enum machine_mode mode;
 
6652
   bool errno_set = false;
 
6653
+  bool try_widening = false;
 
6654
   tree arg;
 
6655
 
 
6656
   if (!validate_arglist (exp, REAL_TYPE, VOID_TYPE))
 
6657
@@ -1969,6 +1969,7 @@
 
6658
     {
 
6659
     CASE_FLT_FN (BUILT_IN_SQRT):
 
6660
       errno_set = ! tree_expr_nonnegative_p (arg);
 
6661
+      try_widening = true;
 
6662
       builtin_optab = sqrt_optab;
 
6663
       break;
 
6664
     CASE_FLT_FN (BUILT_IN_EXP):
 
6665
@@ -2025,8 +2026,10 @@
 
6666
   if (! flag_errno_math || ! HONOR_NANS (mode))
 
6667
     errno_set = false;
 
6668
 
 
6669
-  /* Before working hard, check whether the instruction is available.  */
 
6670
-  if (optab_handler (builtin_optab, mode) != CODE_FOR_nothing
 
6671
+  /* Before working hard, check whether the instruction is available, but try
 
6672
+     to widen the mode for specific operations.  */
 
6673
+  if ((optab_handler (builtin_optab, mode) != CODE_FOR_nothing
 
6674
+       || (try_widening && !excess_precision_type (TREE_TYPE (exp))))
 
6675
       && (!errno_set || !optimize_insn_for_size_p ()))
 
6676
     {
 
6677
       rtx result = gen_reg_rtx (mode);
 
6678
@@ -5347,7 +5350,7 @@
 
6679
 expand_builtin_atomic_compare_exchange (enum machine_mode mode, tree exp, 
 
6680
                                        rtx target)
 
6681
 {
 
6682
-  rtx expect, desired, mem, oldval;
 
6683
+  rtx expect, desired, mem, oldval, label;
 
6684
   enum memmodel success, failure;
 
6685
   tree weak;
 
6686
   bool is_weak;
 
6687
@@ -5385,14 +5388,26 @@
 
6688
   if (host_integerp (weak, 0) && tree_low_cst (weak, 0) != 0)
 
6689
     is_weak = true;
 
6690
 
 
6691
-  oldval = expect;
 
6692
-  if (!expand_atomic_compare_and_swap ((target == const0_rtx ? NULL : &target),
 
6693
-                                      &oldval, mem, oldval, desired,
 
6694
+  if (target == const0_rtx)
 
6695
+    target = NULL;
 
6696
+
 
6697
+  /* Lest the rtl backend create a race condition with an imporoper store
 
6698
+     to memory, always create a new pseudo for OLDVAL.  */
 
6699
+  oldval = NULL;
 
6700
+
 
6701
+  if (!expand_atomic_compare_and_swap (&target, &oldval, mem, expect, desired,
 
6702
                                       is_weak, success, failure))
 
6703
     return NULL_RTX;
 
6704
 
 
6705
-  if (oldval != expect)
 
6706
-    emit_move_insn (expect, oldval);
 
6707
+  /* Conditionally store back to EXPECT, lest we create a race condition
 
6708
+     with an improper store to memory.  */
 
6709
+  /* ??? With a rearrangement of atomics at the gimple level, we can handle
 
6710
+     the normal case where EXPECT is totally private, i.e. a register.  At
 
6711
+     which point the store can be unconditional.  */
 
6712
+  label = gen_label_rtx ();
 
6713
+  emit_cmp_and_jump_insns (target, const0_rtx, NE, NULL, VOIDmode, 1, label);
 
6714
+  emit_move_insn (expect, oldval);
 
6715
+  emit_label (label);
 
6716
 
 
6717
   return target;
 
6718
 }
 
6719
@@ -10766,7 +10781,7 @@
 
6720
       return fold_builtin_strstr (loc, arg0, arg1, type);
 
6721
 
 
6722
     case BUILT_IN_STRCAT:
 
6723
-      return fold_builtin_strcat (loc, arg0, arg1);
 
6724
+      return fold_builtin_strcat (loc, arg0, arg1, NULL_TREE);
 
6725
 
 
6726
     case BUILT_IN_STRSPN:
 
6727
       return fold_builtin_strspn (loc, arg0, arg1);
 
6728
@@ -11809,8 +11824,9 @@
 
6729
    COMPOUND_EXPR in the chain will contain the tree for the simplified
 
6730
    form of the builtin function call.  */
 
6731
 
 
6732
-static tree
 
6733
-fold_builtin_strcat (location_t loc ATTRIBUTE_UNUSED, tree dst, tree src)
 
6734
+tree
 
6735
+fold_builtin_strcat (location_t loc ATTRIBUTE_UNUSED, tree dst, tree src,
 
6736
+                    tree len)
 
6737
 {
 
6738
   if (!validate_arg (dst, POINTER_TYPE)
 
6739
       || !validate_arg (src, POINTER_TYPE))
 
6740
@@ -11828,22 +11844,17 @@
 
6741
          /* See if we can store by pieces into (dst + strlen(dst)).  */
 
6742
          tree newdst, call;
 
6743
          tree strlen_fn = builtin_decl_implicit (BUILT_IN_STRLEN);
 
6744
-         tree strcpy_fn = builtin_decl_implicit (BUILT_IN_STRCPY);
 
6745
+         tree memcpy_fn = builtin_decl_implicit (BUILT_IN_MEMCPY);
 
6746
 
 
6747
-         if (!strlen_fn || !strcpy_fn)
 
6748
+         if (!strlen_fn || !memcpy_fn)
 
6749
            return NULL_TREE;
 
6750
 
 
6751
-         /* If we don't have a movstr we don't want to emit an strcpy
 
6752
-            call.  We have to do that if the length of the source string
 
6753
-            isn't computable (in that case we can use memcpy probably
 
6754
-            later expanding to a sequence of mov instructions).  If we
 
6755
-            have movstr instructions we can emit strcpy calls.  */
 
6756
-         if (!HAVE_movstr)
 
6757
-           {
 
6758
-             tree len = c_strlen (src, 1);
 
6759
-             if (! len || TREE_SIDE_EFFECTS (len))
 
6760
-               return NULL_TREE;
 
6761
-           }
 
6762
+         /* If the length of the source string isn't computable don't
 
6763
+            split strcat into strlen and memcpy.  */
 
6764
+         if (! len)
 
6765
+           len = c_strlen (src, 1);
 
6766
+         if (! len || TREE_SIDE_EFFECTS (len))
 
6767
+           return NULL_TREE;
 
6768
 
 
6769
          /* Stabilize the argument list.  */
 
6770
          dst = builtin_save_expr (dst);
 
6771
@@ -11855,7 +11866,11 @@
 
6772
          newdst = fold_build_pointer_plus_loc (loc, dst, newdst);
 
6773
          newdst = builtin_save_expr (newdst);
 
6774
 
 
6775
-         call = build_call_expr_loc (loc, strcpy_fn, 2, newdst, src);
 
6776
+         len = fold_convert_loc (loc, size_type_node, len);
 
6777
+         len = size_binop_loc (loc, PLUS_EXPR, len,
 
6778
+                               build_int_cst (size_type_node, 1));
 
6779
+
 
6780
+         call = build_call_expr_loc (loc, memcpy_fn, 3, newdst, src, len);
 
6781
          return build2 (COMPOUND_EXPR, TREE_TYPE (dst), call, dst);
 
6782
        }
 
6783
       return NULL_TREE;
 
6784
Index: gcc/fold-const.c
 
6785
===================================================================
 
6786
--- a/src/gcc/fold-const.c      (.../tags/gcc_4_8_2_release)
 
6787
+++ b/src/gcc/fold-const.c      (.../branches/gcc-4_8-branch)
 
6788
@@ -2664,10 +2664,11 @@
 
6789
        case COMPONENT_REF:
 
6790
          /* Handle operand 2 the same as for ARRAY_REF.  Operand 0
 
6791
             may be NULL when we're called to compare MEM_EXPRs.  */
 
6792
-         if (!OP_SAME_WITH_NULL (0))
 
6793
+         if (!OP_SAME_WITH_NULL (0)
 
6794
+             || !OP_SAME (1))
 
6795
            return 0;
 
6796
          flags &= ~OEP_CONSTANT_ADDRESS_OF;
 
6797
-         return OP_SAME (1) && OP_SAME_WITH_NULL (2);
 
6798
+         return OP_SAME_WITH_NULL (2);
 
6799
 
 
6800
        case BIT_FIELD_REF:
 
6801
          if (!OP_SAME (0))
 
6802
@@ -4920,12 +4921,16 @@
 
6803
   int in0_p, in1_p, in_p;
 
6804
   tree low0, low1, low, high0, high1, high;
 
6805
   bool strict_overflow_p = false;
 
6806
-  tree lhs = make_range (op0, &in0_p, &low0, &high0, &strict_overflow_p);
 
6807
-  tree rhs = make_range (op1, &in1_p, &low1, &high1, &strict_overflow_p);
 
6808
-  tree tem;
 
6809
+  tree tem, lhs, rhs;
 
6810
   const char * const warnmsg = G_("assuming signed overflow does not occur "
 
6811
                                  "when simplifying range test");
 
6812
 
 
6813
+  if (!INTEGRAL_TYPE_P (type))
 
6814
+    return 0;
 
6815
+
 
6816
+  lhs = make_range (op0, &in0_p, &low0, &high0, &strict_overflow_p);
 
6817
+  rhs = make_range (op1, &in1_p, &low1, &high1, &strict_overflow_p);
 
6818
+
 
6819
   /* If this is an OR operation, invert both sides; we will invert
 
6820
      again at the end.  */
 
6821
   if (or_op)
 
6822
@@ -10927,6 +10932,13 @@
 
6823
                                fold_build2_loc (loc, MULT_EXPR, type,
 
6824
                                             build_int_cst (type, 2) , arg1));
 
6825
 
 
6826
+         /* ((T) (X /[ex] C)) * C cancels out if the conversion is
 
6827
+            sign-changing only.  */
 
6828
+         if (TREE_CODE (arg1) == INTEGER_CST
 
6829
+             && TREE_CODE (arg0) == EXACT_DIV_EXPR
 
6830
+             && operand_equal_p (arg1, TREE_OPERAND (arg0, 1), 0))
 
6831
+           return fold_convert_loc (loc, type, TREE_OPERAND (arg0, 0));
 
6832
+
 
6833
          strict_overflow_p = false;
 
6834
          if (TREE_CODE (arg1) == INTEGER_CST
 
6835
              && 0 != (tem = extract_muldiv (op0, arg1, code, NULL_TREE,
 
6836
@@ -16587,7 +16599,7 @@
 
6837
              unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
 
6838
              tree index = bitsize_int (indexi);
 
6839
 
 
6840
-             if (offset/part_widthi <= TYPE_VECTOR_SUBPARTS (op00type))
 
6841
+             if (offset / part_widthi < TYPE_VECTOR_SUBPARTS (op00type))
 
6842
                return fold_build3_loc (loc,
 
6843
                                        BIT_FIELD_REF, type, op00,
 
6844
                                        part_width, index);
 
6845
Index: gcc/reorg.c
 
6846
===================================================================
 
6847
--- a/src/gcc/reorg.c   (.../tags/gcc_4_8_2_release)
 
6848
+++ b/src/gcc/reorg.c   (.../branches/gcc-4_8-branch)
 
6849
@@ -1105,6 +1105,7 @@
 
6850
   int used_annul = 0;
 
6851
   int i;
 
6852
   struct resources cc_set;
 
6853
+  bool *redundant;
 
6854
 
 
6855
   /* We can't do anything if there are more delay slots in SEQ than we
 
6856
      can handle, or if we don't know that it will be a taken branch.
 
6857
@@ -1145,6 +1146,7 @@
 
6858
     return delay_list;
 
6859
 #endif
 
6860
 
 
6861
+  redundant = XALLOCAVEC (bool, XVECLEN (seq, 0));
 
6862
   for (i = 1; i < XVECLEN (seq, 0); i++)
 
6863
     {
 
6864
       rtx trial = XVECEXP (seq, 0, i);
 
6865
@@ -1166,7 +1168,8 @@
 
6866
 
 
6867
       /* If this insn was already done (usually in a previous delay slot),
 
6868
         pretend we put it in our delay slot.  */
 
6869
-      if (redundant_insn (trial, insn, new_delay_list))
 
6870
+      redundant[i] = redundant_insn (trial, insn, new_delay_list);
 
6871
+      if (redundant[i])
 
6872
        continue;
 
6873
 
 
6874
       /* We will end up re-vectoring this branch, so compute flags
 
6875
@@ -1199,6 +1202,12 @@
 
6876
        return delay_list;
 
6877
     }
 
6878
 
 
6879
+  /* Record the effect of the instructions that were redundant and which
 
6880
+     we therefore decided not to copy.  */
 
6881
+  for (i = 1; i < XVECLEN (seq, 0); i++)
 
6882
+    if (redundant[i])
 
6883
+      update_block (XVECEXP (seq, 0, i), insn);
 
6884
+
 
6885
   /* Show the place to which we will be branching.  */
 
6886
   *pnew_thread = first_active_target_insn (JUMP_LABEL (XVECEXP (seq, 0, 0)));
 
6887
 
 
6888
@@ -1262,6 +1271,7 @@
 
6889
       /* If this insn was already done, we don't need it.  */
 
6890
       if (redundant_insn (trial, insn, delay_list))
 
6891
        {
 
6892
+         update_block (trial, insn);
 
6893
          delete_from_delay_slot (trial);
 
6894
          continue;
 
6895
        }
 
6896
@@ -3266,6 +3276,7 @@
 
6897
         to reprocess this insn.  */
 
6898
       if (redundant_insn (XVECEXP (pat, 0, 1), delay_insn, 0))
 
6899
        {
 
6900
+         update_block (XVECEXP (pat, 0, 1), insn);
 
6901
          delete_from_delay_slot (XVECEXP (pat, 0, 1));
 
6902
          next = prev_active_insn (next);
 
6903
          continue;
 
6904
@@ -3385,6 +3396,7 @@
 
6905
              && redirect_with_delay_slots_safe_p (delay_insn, target_label,
 
6906
                                                   insn))
 
6907
            {
 
6908
+             update_block (XVECEXP (PATTERN (trial), 0, 1), insn);
 
6909
              reorg_redirect_jump (delay_insn, target_label);
 
6910
              next = insn;
 
6911
              continue;
 
6912
Index: gcc/tree-ssa-sccvn.c
 
6913
===================================================================
 
6914
--- a/src/gcc/tree-ssa-sccvn.c  (.../tags/gcc_4_8_2_release)
 
6915
+++ b/src/gcc/tree-ssa-sccvn.c  (.../branches/gcc-4_8-branch)
 
6916
@@ -660,7 +660,7 @@
 
6917
     }
 
6918
 
 
6919
   /* For non-calls, store the information that makes up the address.  */
 
6920
-
 
6921
+  tree orig = ref;
 
6922
   while (ref)
 
6923
     {
 
6924
       vn_reference_op_s temp;
 
6925
@@ -711,7 +711,15 @@
 
6926
                          .arshift (BITS_PER_UNIT == 8
 
6927
                                    ? 3 : exact_log2 (BITS_PER_UNIT),
 
6928
                                    HOST_BITS_PER_DOUBLE_INT);
 
6929
-                   if (off.fits_shwi ())
 
6930
+                   if (off.fits_shwi ()
 
6931
+                       /* Probibit value-numbering zero offset components
 
6932
+                          of addresses the same before the pass folding
 
6933
+                          __builtin_object_size had a chance to run
 
6934
+                          (checking cfun->after_inlining does the
 
6935
+                          trick here).  */
 
6936
+                       && (TREE_CODE (orig) != ADDR_EXPR
 
6937
+                           || !off.is_zero ()
 
6938
+                           || cfun->after_inlining))
 
6939
                      temp.off = off.low;
 
6940
                  }
 
6941
              }
 
6942
Index: gcc/ChangeLog
 
6943
===================================================================
 
6944
--- a/src/gcc/ChangeLog (.../tags/gcc_4_8_2_release)
 
6945
+++ b/src/gcc/ChangeLog (.../branches/gcc-4_8-branch)
 
6946
@@ -1,3 +1,1751 @@
 
6947
+2014-03-20  Jakub Jelinek  <jakub@redhat.com>
 
6948
+
 
6949
+       PR target/60568
 
6950
+       * config/i386/i386.c (x86_output_mi_thunk): Surround UNSPEC_GOT
 
6951
+       into CONST, put pic register as first operand of PLUS.  Use
 
6952
+       gen_const_mem for both 32-bit and 64-bit PIC got loads.
 
6953
+
 
6954
+2014-03-20  Eric Botcazou  <ebotcazou@adacore.com>
 
6955
+
 
6956
+       * config/sparc/sparc.c (sparc_do_work_around_errata): Implement work
 
6957
+       around for store forwarding issue in the FPU on the UT699.
 
6958
+       * config/sparc/sparc.md (in_branch_delay): Return false for single FP
 
6959
+       loads and operations if -mfix-ut699 is specified.
 
6960
+       (divtf3_hq): Tweak attribute.
 
6961
+       (sqrttf2_hq): Likewise.
 
6962
+
 
6963
+2014-03-18  Kai Tietz  <ktietz@redhat.com>
 
6964
+
 
6965
+       PR rtl-optimization/56356
 
6966
+       * sdbout.c (sdbout_parms): Verify that parms'
 
6967
+       incoming argument is valid.
 
6968
+       (sdbout_reg_parms): Likewise.
 
6969
+
 
6970
+2014-03-18  Eric Botcazou  <ebotcazou@adacore.com>
 
6971
+
 
6972
+       * config/sparc/sparc.c (sparc_do_work_around_errata): Speed up and use
 
6973
+       proper constant for the store mode.
 
6974
+
 
6975
+2014-03-17  Mikael Pettersson  <mikpelinux@gmail.com>
 
6976
+           Committed by Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
 
6977
+
 
6978
+       Backport from mainline:
 
6979
+
 
6980
+       2013-06-20  Joern Rennecke <joern.rennecke@embecosm.com>
 
6981
+
 
6982
+       PR rtl-optimization/57425
 
6983
+       PR rtl-optimization/57569
 
6984
+       * alias.c (write_dependence_p): Remove parameters mem_mode and
 
6985
+       canon_mem_addr.  Add parameters x_mode, x_addr and x_canonicalized.
 
6986
+       Changed all callers.
 
6987
+       (canon_anti_dependence): Get comments and semantics in sync.
 
6988
+       Add parameter mem_canonicalized.  Changed all callers.
 
6989
+       * rtl.h (canon_anti_dependence): Update prototype.
 
6990
+
 
6991
+       2013-06-16  Joern Rennecke <joern.rennecke@embecosm.com>
 
6992
+
 
6993
+       PR rtl-optimization/57425
 
6994
+       PR rtl-optimization/57569
 
6995
+       * alias.c (write_dependence_p): Add new parameters mem_mode,
 
6996
+       canon_mem_addr and mem_canonicalized.  Change type of writep to bool.
 
6997
+       Changed all callers.
 
6998
+       (canon_anti_dependence): New function.
 
6999
+       * cse.c (check_dependence): Use canon_anti_dependence.
 
7000
+       * cselib.c (cselib_invalidate_mem): Likewise.
 
7001
+       * rtl.h (canon_anti_dependence): Declare.
 
7002
+
 
7003
+2014-03-17  Richard Biener  <rguenther@suse.de>
 
7004
+
 
7005
+       Backport from mainline
 
7006
+       2014-03-11  Richard Biener  <rguenther@suse.de>
 
7007
+
 
7008
+       PR tree-optimization/60429
 
7009
+       PR tree-optimization/60485
 
7010
+       * tree-ssa-structalias.c (set_union_with_increment): Properly
 
7011
+       take into account all fields that overlap the shifted vars.
 
7012
+       (do_sd_constraint): Likewise.
 
7013
+       (do_ds_constraint): Likewise.
 
7014
+       (get_constraint_for_ptr_offset): Likewise.
 
7015
+
 
7016
+2014-03-15  Eric Botcazou  <ebotcazou@adacore.com>
 
7017
+
 
7018
+       * config/sparc/sparc-protos.h (tls_call_delay): Delete.
 
7019
+       (eligible_for_call_delay): New prototype.
 
7020
+       * config/sparc/sparc.c (tls_call_delay): Rename into...
 
7021
+       (eligible_for_call_delay): ...this.  Return false if the instruction
 
7022
+       cannot be put in the delay slot of a branch.
 
7023
+       (eligible_for_restore_insn): Simplify.
 
7024
+       (eligible_for_return_delay): Return false if the instruction cannot be
 
7025
+       put in the delay slot of a branch and simplify.
 
7026
+       (eligible_for_sibcall_delay): Return false if the instruction cannot be
 
7027
+       put in the delay slot of a branch.
 
7028
+       * config/sparc/sparc.md (fix_ut699): New attribute.
 
7029
+       (tls_call_delay): Delete.
 
7030
+       (in_call_delay): Reimplement.
 
7031
+       (eligible_for_sibcall_delay): Rename into...
 
7032
+       (in_sibcall_delay): ...this.
 
7033
+       (eligible_for_return_delay): Rename into...
 
7034
+       (in_return_delay): ...this.
 
7035
+       (in_branch_delay): Reimplement.
 
7036
+       (in_uncond_branch_delay): Delete.
 
7037
+       (in_annul_branch_delay): Delete.
 
7038
+
 
7039
+2014-03-14  Georg-Johann Lay  <avr@gjlay.de>
 
7040
+
 
7041
+       Backport from 2014-03-14 trunk r208562.
 
7042
+
 
7043
+       PR target/59396
 
7044
+       * config/avr/avr.c (avr_set_current_function): Pass function name
 
7045
+       through default_strip_name_encoding before sanity checking instead
 
7046
+       of skipping the first char of the assembler name.
 
7047
+
 
7048
+2014-03-13  Georg-Johann Lay  <avr@gjlay.de>
 
7049
+
 
7050
+       Backport from 2014-03-13 trunk r208532.
 
7051
+       
 
7052
+       PR target/60486
 
7053
+       * config/avr/avr.c (avr_out_plus): Swap cc_plus and cc_minus in
 
7054
+       calls of avr_out_plus_1.
 
7055
+
 
7056
+2014-03-13  Joey Ye  <joey.ye@arm.com>
 
7057
+
 
7058
+       Backport from mainline
 
7059
+       2014-03-12  Thomas Preud'homme  <thomas.preudhomme@arm.com>
 
7060
+
 
7061
+       PR tree-optimization/60454
 
7062
+       * tree-ssa-math-opts.c (find_bswap_1): Fix bswap detection.
 
7063
+
 
7064
+2014-03-06  Matthias Klose  <doko@ubuntu.com>
 
7065
+
 
7066
+       * Makefile.in (s-mlib): Only pass MULTIARCH_DIRNAME if
 
7067
+       MULTILIB_OSDIRNAMES is not defined.
 
7068
+
 
7069
+2014-03-06  Jakub Jelinek  <jakub@redhat.com>
 
7070
+
 
7071
+       PR tree-optimization/60276
 
7072
+       * tree-vect-data-refs.c (vect_analyze_data_ref_dependence): Avoid
 
7073
+       a -Wsign-compare warning.
 
7074
+
 
7075
+       * Makefile.in (tree-ssa-uninit.o): Depend on $(PARAMS_H).
 
7076
+
 
7077
+       Backport from mainline
 
7078
+       2014-02-21  Jakub Jelinek  <jakub@redhat.com>
 
7079
+
 
7080
+       PR tree-optimization/56490
 
7081
+       * params.def (PARAM_UNINIT_CONTROL_DEP_ATTEMPTS): New param.
 
7082
+       * tree-ssa-uninit.c: Include params.h.
 
7083
+       (compute_control_dep_chain): Add num_calls argument, return false
 
7084
+       if it exceed PARAM_UNINIT_CONTROL_DEP_ATTEMPTS param, pass
 
7085
+       num_calls to recursive call.
 
7086
+       (find_predicates): Change dep_chain into normal array, add num_calls
 
7087
+       variable and adjust compute_control_dep_chain caller.
 
7088
+       (find_def_preds): Likewise.
 
7089
+
 
7090
+       2014-02-13  Jakub Jelinek  <jakub@redhat.com>
 
7091
+
 
7092
+       PR target/43546
 
7093
+       * expr.c (compress_float_constant): If x is a hard register,
 
7094
+       extend into a pseudo and then move to x.
 
7095
+
 
7096
+       2014-02-11  Richard Henderson  <rth@redhat.com>
 
7097
+                   Jakub Jelinek  <jakub@redhat.com>
 
7098
+
 
7099
+       PR debug/59776
 
7100
+       * tree-sra.c (load_assign_lhs_subreplacements): Add VIEW_CONVERT_EXPR
 
7101
+       around drhs if type conversion to lacc->type is not useless.
 
7102
+
 
7103
+       2014-02-08  Jakub Jelinek  <jakub@redhat.com>
 
7104
+
 
7105
+       PR ipa/60026
 
7106
+       * ipa-cp.c (determine_versionability): Fail at -O0
 
7107
+       or __attribute__((optimize (0))) or -fno-ipa-cp functions.
 
7108
+       * tree-sra.c (ipa_sra_preliminary_function_checks): Similarly.
 
7109
+
 
7110
+       2014-02-06  Jakub Jelinek  <jakub@redhat.com>
 
7111
+
 
7112
+       PR target/60062
 
7113
+       * tree.h (opts_for_fn): New inline function.
 
7114
+       (opt_for_fn): Define.
 
7115
+       * config/i386/i386.c (ix86_function_regparm): Use
 
7116
+       opt_for_fn (decl, optimize) instead of optimize.
 
7117
+
 
7118
+       2014-02-05  Jakub Jelinek  <jakub@redhat.com>
 
7119
+
 
7120
+       PR middle-end/57499
 
7121
+       * tree-eh.c (cleanup_empty_eh): Bail out on totally empty
 
7122
+       bb with no successors.
 
7123
+
 
7124
+2014-03-04  Richard Biener  <rguenther@suse.de>
 
7125
+
 
7126
+       PR tree-optimization/60382
 
7127
+       * tree-vect-loop.c (vect_is_simple_reduction_1): Do not consider
 
7128
+       dead PHIs a reduction.
 
7129
+
 
7130
+2014-02-25  Richard Biener  <rguenther@suse.de>
 
7131
+
 
7132
+       Backport from mainline
 
7133
+       2014-02-21  Richard Biener  <rguenther@suse.de>
 
7134
+
 
7135
+        PR tree-optimization/60276
 
7136
+        * tree-vectorizer.h (struct _stmt_vec_info): Add min_neg_dist field.
 
7137
+        (STMT_VINFO_MIN_NEG_DIST): New macro.
 
7138
+        * tree-vect-data-refs.c (vect_analyze_data_ref_dependence): Record
 
7139
+        STMT_VINFO_MIN_NEG_DIST.
 
7140
+        * tree-vect-stmts.c (vectorizable_load): Verify if assumptions
 
7141
+        made for negative dependence distances still hold.
 
7142
+
 
7143
+2014-02-25  Richard Biener  <rguenther@suse.de>
 
7144
+
 
7145
+       Backport from mainline
 
7146
+       2014-02-21  Richard Biener  <rguenther@suse.de>
 
7147
+
 
7148
+       PR middle-end/60291
 
7149
+       * tree-ssa-live.c (mark_all_vars_used_1): Do not walk
 
7150
+       DECL_INITIAL for globals not in the current function context.
 
7151
+
 
7152
+       2014-02-20  Richard Biener  <rguenther@suse.de>
 
7153
+
 
7154
+       PR middle-end/60221
 
7155
+       * tree-eh.c (execute_cleanup_eh_1): Also cleanup empty EH
 
7156
+       regions at -O0.
 
7157
+
 
7158
+       2014-02-14  Richard Biener  <rguenther@suse.de>
 
7159
+
 
7160
+       PR tree-optimization/60183
 
7161
+       * tree-ssa-phiprop.c (propagate_with_phi): Avoid speculating
 
7162
+       loads.
 
7163
+       (tree_ssa_phiprop): Calculate and free post-dominators.
 
7164
+
 
7165
+2014-02-25  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
7166
+
 
7167
+       PR target/55426
 
7168
+       * config/arm/arm.h (CANNOT_CHANGE_MODE_CLASS): Allow 128 to 64-bit
 
7169
+       conversions.
 
7170
+
 
7171
+2014-02-24  John David Anglin  <danglin@gcc.gnu.org>
 
7172
+
 
7173
+       * config/pa/pa.c (pa_output_move_double): Don't valididate when
 
7174
+       adjusting offsetable addresses.
 
7175
+
 
7176
+2014-02-23  David Holsgrove <david.holsgrove@xilinx.com>
 
7177
+
 
7178
+       * config/microblaze/microblaze.md: Correct ashrsi_reg / lshrsi_reg names
 
7179
+
 
7180
+2014-02-23  Edgar E. Iglesias <edgar.iglesias@xilinx.com>
 
7181
+
 
7182
+       * config/microblaze/microblaze.h: Remove SECONDARY_MEMORY_NEEDED
 
7183
+       definition.
 
7184
+
 
7185
+2014-02-23  David Holsgrove <david.holsgrove@xilinx.com>
 
7186
+
 
7187
+       * /config/microblaze/microblaze.c: Add microblaze_asm_output_mi_thunk
 
7188
+       and define TARGET_ASM_OUTPUT_MI_THUNK and
 
7189
+       TARGET_ASM_CAN_OUTPUT_MI_THUNK.
 
7190
+
 
7191
+2014-02-23  David Holsgrove <david.holsgrove@xilinx.com>
 
7192
+
 
7193
+       * config/microblaze/predicates.md: Add cmp_op predicate.
 
7194
+       * config/microblaze/microblaze.md: Add branch_compare instruction 
 
7195
+       which uses cmp_op predicate and emits cmp insn before branch.
 
7196
+       * config/microblaze/microblaze.c (microblaze_emit_compare): Rename 
 
7197
+       to microblaze_expand_conditional_branch and consolidate logic.
 
7198
+       (microblaze_expand_conditional_branch): emit branch_compare
 
7199
+       insn instead of handling cmp op separate from branch insn.
 
7200
+
 
7201
+2014-02-21  Martin Jambor  <mjambor@suse.cz>
 
7202
+
 
7203
+       PR ipa/55260
 
7204
+       * ipa-cp.c (cgraph_edge_brings_all_agg_vals_for_node): Uce correct
 
7205
+       info when checking whether lattices are bottom.
 
7206
+
 
7207
+2014-02-21  Jakub Jelinek  <jakub@redhat.com>
 
7208
+
 
7209
+       * config/i386/i386.c (ix86_expand_vec_perm): Use V8SImode
 
7210
+       mode for mask of V8SFmode permutation.
 
7211
+
 
7212
+2014-02-20  Richard Henderson  <rth@redhat.com>
 
7213
+
 
7214
+       PR c++/60272
 
7215
+       * builtins.c (expand_builtin_atomic_compare_exchange): Conditionalize
 
7216
+       on failure the store back into EXPECT.  Always make a new pseudo for
 
7217
+       OLDVAL.
 
7218
+
 
7219
+2014-02-20  Jakub Jelinek  <jakub@redhat.com>
 
7220
+
 
7221
+       PR target/57896
 
7222
+       * config/i386/i386.c (expand_vec_perm_interleave2): Don't call
 
7223
+       gen_reg_rtx if d->testing_p.
 
7224
+       (expand_vec_perm_pshufb2, expand_vec_perm_even_odd_1,
 
7225
+       expand_vec_perm_broadcast_1): Return early if d->testing_p and
 
7226
+       we will certainly return true.
 
7227
+
 
7228
+2014-02-20  Richard Biener  <rguenther@suse.de>
 
7229
+
 
7230
+       * tree-cfg.c (replace_uses_by): Mark altered BBs before
 
7231
+       doing the substitution.
 
7232
+
 
7233
+2014-02-19  H.J. Lu  <hongjiu.lu@intel.com>
 
7234
+
 
7235
+       Backport from mainline
 
7236
+       2014-02-19  H.J. Lu  <hongjiu.lu@intel.com>
 
7237
+
 
7238
+       PR target/60207
 
7239
+       * config/i386/i386.c (construct_container): Remove TFmode check
 
7240
+       for X86_64_INTEGER_CLASS.
 
7241
+
 
7242
+2014-02-19  Uros Bizjak  <ubizjak@gmail.com>
 
7243
+
 
7244
+       Backport from mainline
 
7245
+       2014-02-19  Uros Bizjak  <ubizjak@gmail.com>
 
7246
+
 
7247
+       PR target/59794
 
7248
+       * config/i386/i386.c (type_natural_mode): Warn for ABI changes
 
7249
+       only when -Wpsabi is enabled.
 
7250
+
 
7251
+2014-02-19  Terry Guo  <terry.guo@arm.com>
 
7252
+
 
7253
+       Backport from mainline
 
7254
+       2014-02-08  Terry Guo  <terry.guo@arm.com>
 
7255
+
 
7256
+       * doc/invoke.texi: Document ARM -march=armv7e-m.
 
7257
+
 
7258
+2014-02-18  Kai Tietz  <ktietz@redhat.com>
 
7259
+
 
7260
+       Backport from mainline
 
7261
+       2014-02-18  Kai Tietz  <ktietz@redhat.com>
 
7262
+
 
7263
+       PR target/60193
 
7264
+       * config/i386/i386.c (ix86_expand_prologue): Use
 
7265
+       rax register as displacement for restoring %r10, %rax.
 
7266
+       Additional fix wrong offset for restoring both-registers.
 
7267
+
 
7268
+2014-02-18  Eric Botcazou  <ebotcazou@adacore.com>
 
7269
+
 
7270
+       * ipa-prop.c (compute_complex_ancestor_jump_func): Replace overzealous
 
7271
+       assertion with conditional return.
 
7272
+
 
7273
+2014-02-18  Jakub Jelinek  <jakub@redhat.com>
 
7274
+           Uros Bizjak  <ubizjak@gmail.com>
 
7275
+
 
7276
+       PR driver/60233
 
7277
+       * config/i386/driver-i386.c (host_detect_local_cpu): If
 
7278
+       YMM state is not saved by the OS, also clear has_f16c.  Move
 
7279
+       CPUID 0x80000001 handling before YMM state saving checking.
 
7280
+
 
7281
+2014-02-14  Roland McGrath  <mcgrathr@google.com>
 
7282
+
 
7283
+       * configure.ac (HAVE_AS_IX86_UD2): New test for 'ud2' mnemonic.
 
7284
+       * configure: Regenerated.
 
7285
+       * config.in: Regenerated.
 
7286
+       * config/i386/i386.md (trap) [HAVE_AS_IX86_UD2]: Use the mnemonic
 
7287
+       instead of ASM_SHORT.
 
7288
+
 
7289
+2014-02-13  Uros Bizjak  <ubizjak@gmail.com>
 
7290
+
 
7291
+       Backport from mainline
 
7292
+       2014-02-13  Uros Bizjak  <ubizjak@gmail.com>
 
7293
+
 
7294
+       * config/i386/sse.md (xop_vmfrcz<mode>2): Generate const0 in
 
7295
+       operands[2], not operands[3].
 
7296
+
 
7297
+2014-02-13  Dominik Vogt  <vogt@linux.vnet.ibm.com>
 
7298
+
 
7299
+       * config/s390/s390.c (s390_asm_output_function_label): Fix crash
 
7300
+       caused by bad second argument to warning_at() with -mhotpatch and
 
7301
+       nested functions (e.g. with gfortran).
 
7302
+
 
7303
+2014-02-12  H.J. Lu  <hongjiu.lu@intel.com>
 
7304
+
 
7305
+       Backport from mainline
 
7306
+       2014-02-12  H.J. Lu  <hongjiu.lu@intel.com>
 
7307
+                   Uros Bizjak  <ubizjak@gmail.com>
 
7308
+
 
7309
+       PR target/60151
 
7310
+       * configure.ac (HAVE_AS_GOTOFF_IN_DATA): Pass --32 to GNU assembler.
 
7311
+
 
7312
+2014-02-12  Eric Botcazou  <ebotcazou@adacore.com>
 
7313
+
 
7314
+       PR rtl-optimization/60116
 
7315
+       * combine.c (try_combine): Also remove dangling REG_DEAD notes on the
 
7316
+       other_insn once the combination has been validated.
 
7317
+
 
7318
+2014-02-10  Nagaraju Mekala <nagaraju.mekala@xilinx.com>
 
7319
+
 
7320
+       * config/microblaze/microblaze.md: Add movsi4_rev insn pattern.
 
7321
+       * config/microblaze/predicates.md: Add reg_or_mem_operand predicate.
 
7322
+
 
7323
+2014-02-10  Nagaraju Mekala <nagaraju.mekala@xilinx.com>
 
7324
+
 
7325
+       * config/microblaze/microblaze.c: Extend mcpu version format
 
7326
+
 
7327
+2014-02-10  David Holsgrove <david.holsgrove@xilinx.com>
 
7328
+
 
7329
+       * config/microblaze/microblaze.h: Define SIZE_TYPE and PTRDIFF_TYPE.
 
7330
+
 
7331
+2014-02-10  Richard Biener  <rguenther@suse.de>
 
7332
+
 
7333
+       Backport from mainline
 
7334
+       2014-01-30  Richard Biener  <rguenther@suse.de>
 
7335
+
 
7336
+       PR tree-optimization/59903
 
7337
+       * tree-vect-loop.c (vect_transform_loop): Guard multiple-types
 
7338
+       check properly.
 
7339
+
 
7340
+       2014-02-10  Richard Biener  <rguenther@suse.de>
 
7341
+
 
7342
+       PR tree-optimization/60115
 
7343
+       * tree-eh.c (tree_could_trap_p): Unify TARGET_MEM_REF and
 
7344
+       MEM_REF handling.  Properly verify that the accesses are not
 
7345
+       out of the objects bound.
 
7346
+
 
7347
+2014-02-05  James Greenhalgh  <james.greenhalgh@arm.com>
 
7348
+
 
7349
+       Backport from mainline.
 
7350
+       2014-02-05  James Greenhalgh  <james.greenhalgh@arm.com>
 
7351
+
 
7352
+       PR target/59718
 
7353
+       * doc/invoke.texi (-march): Clarify documentation for ARM.
 
7354
+       (-mtune): Likewise.
 
7355
+       (-mcpu): Likewise.
 
7356
+
 
7357
+2014-02-04  John David Anglin  <danglin@gcc.gnu.org>
 
7358
+
 
7359
+       PR target/59777
 
7360
+       * config/pa/pa.c (legitimize_tls_address): Return original address
 
7361
+       if not passed a SYMBOL_REF rtx.
 
7362
+       (hppa_legitimize_address): Call legitimize_tls_address for all TLS
 
7363
+       addresses.
 
7364
+       (pa_emit_move_sequence): Simplify TLS source operands.
 
7365
+       (pa_legitimate_constant_p): Reject all TLS constants.
 
7366
+       * config/pa/pa.h (PA_SYMBOL_REF_TLS_P): Correct comment.
 
7367
+       (CONSTANT_ADDRESS_P): Reject TLS CONST addresses.
 
7368
+
 
7369
+2014-02-04  Uros Bizjak  <ubizjak@gmail.com>
 
7370
+
 
7371
+       Backport from mainline
 
7372
+       2014-02-02  Uros Bizjak  <ubizjak@gmail.com>
 
7373
+
 
7374
+       PR target/60017
 
7375
+       * config/i386/i386.c (classify_argument): Fix handling of bit_offset
 
7376
+       when calculating size of integer atomic types.
 
7377
+
 
7378
+2014-02-02  Uros Bizjak  <ubizjak@gmail.com>
 
7379
+
 
7380
+       Backport from mainline
 
7381
+       2014-01-30  Jakub Jelinek  <jakub@redhat.com>
 
7382
+
 
7383
+       * config/i386/f16cintrin.h (_cvtsh_ss): Avoid -Wnarrowing warning.
 
7384
+
 
7385
+2014-01-31  Richard Henderson  <rth@redhat.com>
 
7386
+
 
7387
+       PR middle-end/60004
 
7388
+       * tree-eh.c (lower_try_finally_switch): Delay lowering finally block
 
7389
+       until after else_eh is processed.
 
7390
+
 
7391
+2014-01-30  David Holsgrove <david.holsgrove@xilinx.com>
 
7392
+
 
7393
+       Backport from mainline
 
7394
+       * config/microblaze/microblaze.md(cstoresf4, cbranchsf4): Replace
 
7395
+       comparison_operator with ordered_comparison_operator.
 
7396
+
 
7397
+2014-01-25  Walter Lee  <walt@tilera.com>
 
7398
+
 
7399
+       Backport from mainline
 
7400
+       2014-01-25  Walter Lee  <walt@tilera.com>
 
7401
+
 
7402
+       * config/tilegx/sync.md (atomic_fetch_sub): Fix negation and
 
7403
+       avoid clobbering a live register.
 
7404
+
 
7405
+2014-01-25  Walter Lee  <walt@tilera.com>
 
7406
+
 
7407
+       Backport from mainline
 
7408
+       2014-01-25  Walter Lee  <walt@tilera.com>
 
7409
+
 
7410
+       * config/tilegx/tilegx-c.c (tilegx_cpu_cpp_builtins):
 
7411
+       Define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_{1,2}.
 
7412
+       * config/tilegx/tilepro-c.c (tilepro_cpu_cpp_builtins):
 
7413
+       Define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_{1,2,4,8}.
 
7414
+
 
7415
+2014-01-25  Walter Lee  <walt@tilera.com>
 
7416
+
 
7417
+       Backport from mainline
 
7418
+       2014-01-25  Walter Lee  <walt@tilera.com>
 
7419
+
 
7420
+       * config/tilegx/tilegx.c (tilegx_gen_bundles): Delete barrier
 
7421
+       insns before bundling.
 
7422
+       * config/tilegx/tilegx.md (tile_network_barrier): Update comment.
 
7423
+
 
7424
+2014-01-25  Walter Lee  <walt@tilera.com>
 
7425
+
 
7426
+       Backport from mainline
 
7427
+       2014-01-25  Walter Lee  <walt@tilera.com>
 
7428
+
 
7429
+       * config/tilegx/tilegx.c (tilegx_expand_builtin): Set
 
7430
+       PREFETCH_SCHEDULE_BARRIER_P to true for prefetches.
 
7431
+       * config/tilepro/tilepro.c (tilepro_expand_builtin): Ditto.
 
7432
+
 
7433
+2014-01-25  Walter Lee  <walt@tilera.com>
 
7434
+
 
7435
+       Backport from mainline
 
7436
+       2014-01-25  Walter Lee  <walt@tilera.com>
 
7437
+
 
7438
+       * config/tilepro/tilepro.md (ctzdi2): Use register_operand
 
7439
+       predicate.
 
7440
+       (clzdi2): Ditto.
 
7441
+       (ffsdi2): Ditto.
 
7442
+
 
7443
+2014-01-25  Walter Lee  <walt@tilera.com>
 
7444
+
 
7445
+       Backport from mainline
 
7446
+       2014-01-25  Walter Lee  <walt@tilera.com>
 
7447
+
 
7448
+       * config/tilegx/tilegx.c (tilegx_expand_to_rtl_hook): New.
 
7449
+       (TARGET_EXPAND_TO_RTL_HOOK): Define.
 
7450
+
 
7451
+2014-01-24  H.J. Lu  <hongjiu.lu@intel.com>
 
7452
+
 
7453
+       Backport from mainline
 
7454
+       2014-01-23  H.J. Lu  <hongjiu.lu@intel.com>
 
7455
+
 
7456
+       PR target/59929
 
7457
+       * config/i386/i386.md (pushsf splitter): Get stack adjustment
 
7458
+       from push operand if code of push isn't PRE_DEC.
 
7459
+
 
7460
+2014-01-23  David Holsgrove <david.holsgrove@xilinx.com>
 
7461
+
 
7462
+       Backport from mainline.
 
7463
+       * config/microblaze/microblaze.md: Add trap insn and attribute
 
7464
+
 
7465
+2014-01-23  Marek Polacek  <polacek@redhat.com>
 
7466
+
 
7467
+       Backport from mainline
 
7468
+       2013-10-21  Marek Polacek  <polacek@redhat.com>
 
7469
+
 
7470
+       PR middle-end/58809
 
7471
+       * fold-const.c (fold_range_test): Return 0 if the type is not
 
7472
+       an integral type.
 
7473
+
 
7474
+2014-01-22  David Holsgrove <david.holsgrove@xilinx.com>
 
7475
+
 
7476
+       * config/microblaze/microblaze.md: Correct bswaphi2 insn.
 
7477
+
 
7478
+2014-01-22  Uros Bizjak  <ubizjak@gmail.com>
 
7479
+
 
7480
+       Backport from mainline
 
7481
+       2014-01-20  Uros Bizjak  <ubizjak@gmail.com>
 
7482
+
 
7483
+       * config/i386/i386.c (ix86_avoid_lea_for_addr): Return false
 
7484
+       for SImode_address_operand operands, having only a REG argument.
 
7485
+
 
7486
+       2014-01-20  Jakub Jelinek  <jakub@redhat.com>
 
7487
+
 
7488
+       PR target/59880
 
7489
+       * config/i386/i386.c (ix86_avoid_lea_for_addr): Return false
 
7490
+       if operands[1] is a REG or ZERO_EXTEND of a REG.
 
7491
+
 
7492
+       2014-01-18  Uros Bizjak  <ubizjak@gmail.com>
 
7493
+                   H.J. Lu  <hongjiu.lu@intel.com>
 
7494
+
 
7495
+       PR target/59379
 
7496
+       * config/i386/i386.md (*lea<mode>): Zero-extend return register
 
7497
+       to DImode for zero-extended addresses.
 
7498
+
 
7499
+2014-01-21  Andrew Pinski <apinski@cavium.com>
 
7500
+           Steve Ellcey  <sellcey@mips.com>
 
7501
+
 
7502
+       PR target/59462
 
7503
+       * config/mips/mips.c (mips_print_operand): Check operand mode instead
 
7504
+       of operator mode.
 
7505
+
 
7506
+2014-01-21  Andrey Belevantsev  <abel@ispras.ru>
 
7507
+
 
7508
+       Backport from mainline
 
7509
+       2013-12-23  Andrey Belevantsev  <abel@ispras.ru>
 
7510
+
 
7511
+       PR rtl-optimization/57422
 
7512
+       * sel-sched.c (mark_unavailable_hard_regs): Fix typo when calling
 
7513
+       add_to_hard_reg_set.
 
7514
+
 
7515
+2014-01-20  Jakub Jelinek  <jakub@redhat.com>
 
7516
+
 
7517
+       PR middle-end/59860
 
7518
+       * tree.h (fold_builtin_strcat): New prototype.
 
7519
+       * builtins.c (fold_builtin_strcat): No longer static.  Add len
 
7520
+       argument, if non-NULL, don't call c_strlen.  Optimize
 
7521
+       directly into __builtin_memcpy instead of __builtin_strcpy.
 
7522
+       (fold_builtin_2): Adjust fold_builtin_strcat caller.
 
7523
+       * gimple-fold.c (gimple_fold_builtin): Handle BUILT_IN_STRCAT.
 
7524
+
 
7525
+2014-01-20  Richard Biener  <rguenther@suse.de>
 
7526
+
 
7527
+       PR middle-end/59860
 
7528
+       * builtins.c (fold_builtin_strcat): Remove case better handled
 
7529
+       by tree-ssa-strlen.c.
 
7530
+
 
7531
+2014-01-19  John David Anglin  <danglin@gcc.gnu.org>
 
7532
+
 
7533
+       * config/pa/pa.c (pa_attr_length_millicode_call): Correct length of
 
7534
+       long non-pic millicode calls.
 
7535
+
 
7536
+2014-01-17  John David Anglin  <danglin@gcc.gnu.org>
 
7537
+
 
7538
+       * config/pa/pa.c (pa_attr_length_indirect_call): Don't output a short
 
7539
+       call to $$dyncall when TARGET_LONG_CALLS is true.
 
7540
+
 
7541
+2014-01-17  H.J. Lu  <hongjiu.lu@intel.com>
 
7542
+
 
7543
+       Backport from mainline
 
7544
+       2014-01-14  H.J. Lu  <hongjiu.lu@intel.com>
 
7545
+
 
7546
+       PR target/59794
 
7547
+       * config/i386/i386.c (type_natural_mode): Add a bool parameter
 
7548
+       to indicate if type is used for function return value.  Warn
 
7549
+       ABI change if the vector mode isn't available for function
 
7550
+       return value.
 
7551
+       (ix86_function_arg_advance): Pass false to type_natural_mode.
 
7552
+       (ix86_function_arg): Likewise.
 
7553
+       (ix86_gimplify_va_arg): Likewise.
 
7554
+       (function_arg_32): Don't warn ABI change.
 
7555
+       (ix86_function_value): Pass true to type_natural_mode.
 
7556
+       (ix86_return_in_memory): Likewise.
 
7557
+       (ix86_struct_value_rtx): Removed.
 
7558
+       (TARGET_STRUCT_VALUE_RTX): Likewise.
 
7559
+
 
7560
+2014-01-17  Charles Baylis  <charles.baylis@linaro.org>
 
7561
+
 
7562
+       Backport from mainline
 
7563
+       2013-12-19  Charles Baylis  <charles.baylis@linaro.org>
 
7564
+
 
7565
+       PR target/59142
 
7566
+       * config/arm/arm-ldmstm.ml: Use low_register_operand for Thumb
 
7567
+       patterns.
 
7568
+       * config/arm/ldmstm.md: Regenerate.
 
7569
+
 
7570
+       2013-12-19  Charles Baylis  <charles.baylis@linaro.org>
 
7571
+
 
7572
+       PR target/59142
 
7573
+       * config/arm/predicates.md (arm_hard_general_register_operand):
 
7574
+       New predicate.
 
7575
+       (arm_hard_register_operand): Remove.
 
7576
+       * config/arm/arm-ldmstm.ml: Use arm_hard_general_register_operand
 
7577
+       for all patterns.
 
7578
+       * config/arm/ldmstm.md: Regenerate.
 
7579
+
 
7580
+       2013-12-19  Charles Baylis  <charles.baylis@linaro.org>
 
7581
+
 
7582
+       PR target/59142
 
7583
+       * config/arm/predicates.md (vfp_hard_register_operand): New predicate.
 
7584
+       * config/arm/arm.md (vfp_pop_multiple_with_writeback): Use
 
7585
+       vfp_hard_register_operand.
 
7586
+
 
7587
+2014-01-17  Kugan Vivekanandarajah  <kuganv@linaro.org>
 
7588
+
 
7589
+       Backport from mainline
 
7590
+       2014-01-15  Matthew Gretton-Dann  <matthew.gretton-dann@linaro.org>
 
7591
+           Kugan Vivekanandarajah  <kuganv@linaro.org>
 
7592
+
 
7593
+       PR target/59695
 
7594
+       * config/aarch64/aarch64.c (aarch64_build_constant): Fix incorrect
 
7595
+       truncation.
 
7596
+
 
7597
+2014-01-17  Terry Guo  <terry.guo@arm.com>
 
7598
+
 
7599
+       PR target/59826
 
7600
+       * config/arm/arm.md (prefetch): Set insn type attribute to load1.
 
7601
+
 
7602
+2014-01-16  Jakub Jelinek  <jakub@redhat.com>
 
7603
+
 
7604
+       PR target/59839
 
7605
+       * config/i386/i386.c (ix86_expand_builtin): If target doesn't
 
7606
+       satisfy operand 0 predicate for gathers, use a new pseudo as
 
7607
+       subtarget.
 
7608
+
 
7609
+2014-01-16  Richard Henderson <rth@redhat.com>
 
7610
+
 
7611
+       PR debug/54694
 
7612
+       * reginfo.c (global_regs_decl): Globalize.
 
7613
+       * rtl.h (global_regs_decl): Declare.
 
7614
+       * ira.c (do_reload): Diagnose frame_pointer_needed and it
 
7615
+       reserved via global_regs.
 
7616
+
 
7617
+2014-01-16  Peter Bergner  <bergner@vnet.ibm.com>
 
7618
+
 
7619
+       Backport from mainline
 
7620
+       2014-01-15  Uros Bizjak  <ubizjak@gmail.com>
 
7621
+
 
7622
+       * config/i386/i386.c (ix86_hard_regno_mode_ok): Use
 
7623
+       VALID_AVX256_REG_OR_OI_MODE.
 
7624
+
 
7625
+       2013-09-05  Peter Bergner  <bergner@vnet.ibm.com>
 
7626
+
 
7627
+       PR target/58139
 
7628
+       * reginfo.c (choose_hard_reg_mode): Scan through all mode classes
 
7629
+       looking for widest mode.
 
7630
+
 
7631
+2014-01-16  Marek Polacek  <polacek@redhat.com>
 
7632
+
 
7633
+       Backported from mainline
 
7634
+       2014-01-16  Marek Polacek  <polacek@redhat.com>
 
7635
+
 
7636
+       PR middle-end/59827
 
7637
+       * gimple-low.c (gimple_check_call_args): Don't use DECL_ARG_TYPE if
 
7638
+       it is error_mark_node.
 
7639
+
 
7640
+2014-01-15  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
7641
+
 
7642
+       PR target/59803
 
7643
+       * config/s390/s390.c (s390_preferred_reload_class): Don't return
 
7644
+       ADDR_REGS for invalid symrefs in non-PIC code.
 
7645
+
 
7646
+2014-01-14  Uros Bizjak  <ubizjak@gmail.com>
 
7647
+
 
7648
+       Revert:
 
7649
+       2014-01-08  Uros Bizjak  <ubizjak@gmail.com>
 
7650
+
 
7651
+       * config/i386/i386.c (ix86_data_alignment): Calculate max_align
 
7652
+       from prefetch_block tune setting.
 
7653
+
 
7654
+2014-01-13  Jakub Jelinek  <jakub@redhat.com>
 
7655
+
 
7656
+       Backported from mainline
 
7657
+       2014-01-10  Jakub Jelinek  <jakub@redhat.com>
 
7658
+
 
7659
+       PR tree-optimization/59745
 
7660
+       * tree-predcom.c (tree_predictive_commoning_loop): Call
 
7661
+       free_affine_expand_cache if giving up because components is NULL.
 
7662
+
 
7663
+2014-01-10  Yufeng Zhang  <yufeng.zhang@arm.com>
 
7664
+
 
7665
+       * config/arm/arm.c (arm_expand_neon_args): Call expand_expr
 
7666
+       with EXPAND_MEMORY for NEON_ARG_MEMORY; check if the returned
 
7667
+       rtx is const0_rtx or not.
 
7668
+
 
7669
+2014-01-10  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
7670
+
 
7671
+       * config/s390/s390.c (s390_expand_tbegin): Remove jump over CC
 
7672
+       extraction in good case.
 
7673
+
 
7674
+2014-01-10  Huacai Chen  <chenhc@lemote.com>
 
7675
+
 
7676
+       * config/mips/driver-native.c (host_detect_local_cpu): Handle new
 
7677
+       kernel strings for Loongson-2E/2F/3A.
 
7678
+
 
7679
+2014-01-10  Richard Biener  <rguenther@suse.de>
 
7680
+
 
7681
+       PR tree-optimization/59715
 
7682
+       * tree-flow.h (split_critical_edges): Declare.
 
7683
+       * tree-cfg.c (split_critical_edges): Export.
 
7684
+       * tree-ssa-sink.c (execute_sink_code): Split critical edges.
 
7685
+
 
7686
+2014-01-09  Richard Sandiford  <rdsandiford@googlemail.com>
 
7687
+
 
7688
+       * config/mips/mips.h (ISA_HAS_WSBH): Define.
 
7689
+       * config/mips/mips.md (UNSPEC_WSBH, UNSPEC_DSBH, UNSPEC_DSHD): New
 
7690
+       constants.
 
7691
+       (bswaphi2, bswapsi2, bswapdi2, wsbh, dsbh, dshd): New patterns.
 
7692
+
 
7693
+2014-01-09  Richard Sandiford  <rdsandiford@googlemail.com>
 
7694
+
 
7695
+       PR rtl-optimization/59137
 
7696
+       * reorg.c (steal_delay_list_from_target): Call update_block for
 
7697
+       elided insns.
 
7698
+       (steal_delay_list_from_fallthrough, relax_delay_slots): Likewise.
 
7699
+
 
7700
+2014-01-09  Richard Sandiford  <rdsandiford@googlemail.com>
 
7701
+
 
7702
+       Revert:
 
7703
+       2012-10-07  Richard Sandiford  <rdsandiford@googlemail.com>
 
7704
+
 
7705
+       * config/mips/mips.c (mips_truncated_op_cost): New function.
 
7706
+       (mips_rtx_costs): Adjust test for BADDU.
 
7707
+       * config/mips/mips.md (*baddu_di<mode>): Push truncates to operands.
 
7708
+
 
7709
+       2012-10-02  Richard Sandiford  <rdsandiford@googlemail.com>
 
7710
+
 
7711
+       * config/mips/mips.md (*baddu_si_eb, *baddu_si_el): Merge into...
 
7712
+       (*baddu_si): ...this new pattern.
 
7713
+
 
7714
+2014-01-09  Richard Biener  <rguenther@suse.de>
 
7715
+
 
7716
+       Backport from mainline
 
7717
+       2013-11-18  Richard Biener  <rguenther@suse.de>
 
7718
+
 
7719
+       PR tree-optimization/59125
 
7720
+       PR tree-optimization/54570
 
7721
+       * tree-ssa-sccvn.c (copy_reference_ops_from_ref): When inlining
 
7722
+       is not complete do not treat component-references with offset zero
 
7723
+       but different fields as equal.
 
7724
+       * tree-object-size.c: Include tree-phinodes.h and ssa-iterators.h.
 
7725
+       (compute_object_sizes): Apply TLC.  Propagate the constant
 
7726
+       results into all uses and fold their stmts.
 
7727
+       * passes.def (pass_all_optimizations): Move pass_object_sizes
 
7728
+       after the first pass_forwprop and before pass_fre.
 
7729
+
 
7730
+       2013-12-03  Jakub Jelinek  <jakub@redhat.com>
 
7731
+
 
7732
+       PR tree-optimization/59362
 
7733
+       * tree-object-size.c (object_sizes): Change into array of
 
7734
+       vec<unsigned HOST_WIDE_INT>.
 
7735
+       (compute_builtin_object_size): Check computed bitmap for
 
7736
+       non-NULL instead of object_sizes.  Call safe_grow on object_sizes
 
7737
+       vector if new SSA_NAMEs appeared.
 
7738
+       (init_object_sizes): Check computed bitmap for non-NULL.
 
7739
+       Call safe_grow on object_sizes elements instead of initializing
 
7740
+       it with XNEWVEC.
 
7741
+       (fini_object_sizes): Call release on object_sizes elements, don't
 
7742
+       set it to NULL.
 
7743
+
 
7744
+2014-01-09  Richard Earnshaw  <rearnsha@arm.com>
 
7745
+
 
7746
+       PR rtl-optimization/54300
 
7747
+       * regcprop.c (copyprop_hardreg_forward_1): Ensure any unused
 
7748
+       outputs in a single-set are killed from the value chains.
 
7749
+
 
7750
+2014-01-09  Jakub Jelinek  <jakub@redhat.com>
 
7751
+
 
7752
+       PR rtl-optimization/59724
 
7753
+       * ifcvt.c (cond_exec_process_if_block): Don't call
 
7754
+       flow_find_head_matching_sequence with 0 longest_match.
 
7755
+       * cfgcleanup.c (flow_find_head_matching_sequence): Count even
 
7756
+       non-active insns if !stop_after.
 
7757
+       (try_head_merge_bb): Revert 2014-01-07 changes.
 
7758
+
 
7759
+2014-01-09  Hans-Peter Nilsson  <hp@axis.com>
 
7760
+
 
7761
+       Backport from mainline
 
7762
+       2013-12-23  Hans-Peter Nilsson  <hp@axis.com>
 
7763
+
 
7764
+       PR middle-end/59584
 
7765
+       * config/cris/predicates.md (cris_nonsp_register_operand):
 
7766
+       New define_predicate.
 
7767
+       * config/cris/cris.md: Replace register_operand with
 
7768
+       cris_nonsp_register_operand for destinations in all
 
7769
+       define_splits where a register is set more than once.
 
7770
+
 
7771
+2014-01-08   H.J. Lu  <hongjiu.lu@intel.com>
 
7772
+
 
7773
+       Backport from mainline
 
7774
+       2013-12-25   H.J. Lu  <hongjiu.lu@intel.com>
 
7775
+
 
7776
+       PR target/59587
 
7777
+       * config/i386/i386.c (struct ptt): Add a field for processor name.
 
7778
+       (processor_target_table): Sync with processor_type.  Add
 
7779
+       processor names.
 
7780
+       (cpu_names): Removed.
 
7781
+       (ix86_option_override_internal): Default x_ix86_tune_string
 
7782
+       to processor_target_table[TARGET_CPU_DEFAULT].name.
 
7783
+       (ix86_function_specific_print): Assert arch and tune <
 
7784
+       PROCESSOR_max.  Use processor_target_table to print arch and
 
7785
+       tune names.
 
7786
+       * config/i386/i386.h (TARGET_CPU_DEFAULT): Default to
 
7787
+       PROCESSOR_GENERIC32.
 
7788
+       (target_cpu_default): Removed.
 
7789
+       (processor_type): Reordered.
 
7790
+
 
7791
+2014-01-08  Uros Bizjak  <ubizjak@gmail.com>
 
7792
+
 
7793
+       Backport from mainline
 
7794
+       2014-01-05  Uros Bizjak  <ubizjak@gmail.com>
 
7795
+
 
7796
+       * config/i386/i386.c (ix86_data_alignment): Calculate max_align
 
7797
+       from prefetch_block tune setting.
 
7798
+       (nocona_cost): Correct size of prefetch block to 64.
 
7799
+
 
7800
+2014-01-08  Martin Jambor  <mjambor@suse.cz>
 
7801
+
 
7802
+       PR ipa/59610
 
7803
+       * ipa-prop.c (ipa_compute_jump_functions): Bail out if not optimizing.
 
7804
+       (parm_preserved_before_stmt_p): Assume modification present when not
 
7805
+       optimizing.
 
7806
+
 
7807
+2014-01-07  John David Anglin  <danglin@gcc.gnu.org>
 
7808
+
 
7809
+       PR target/59652
 
7810
+       * config/pa/pa.c (pa_legitimate_address_p): Return false before reload
 
7811
+       for 14-bit register offsets when INT14_OK_STRICT is false.
 
7812
+
 
7813
+2014-01-07  Roland Stigge  <stigge@antcom.de>
 
7814
+           Michael Meissner  <meissner@linux.vnet.ibm.com>
 
7815
+
 
7816
+       PR 57386/target
 
7817
+       * config/rs6000/rs6000.c (rs6000_legitimate_offset_address_p):
 
7818
+       Only check TFmode for SPE constants.  Don't check TImode or TDmode.
 
7819
+
 
7820
+2014-01-07  Jakub Jelinek  <jakub@redhat.com>
 
7821
+
 
7822
+       PR rtl-optimization/58668
 
7823
+       * cfgcleanup.c (flow_find_cross_jump): Don't count
 
7824
+       any jumps if dir_p is NULL.  Remove p1 variable and make USE/CLOBBER
 
7825
+       check consistent with other places.
 
7826
+       (flow_find_head_matching_sequence): Don't count USE or CLOBBER insns.
 
7827
+       (try_head_merge_bb): Adjust for the flow_find_head_matching_sequence
 
7828
+       counting change.
 
7829
+       * ifcvt.c (count_bb_insns): Don't count USE or CLOBBER insns.
 
7830
+
 
7831
+2014-01-07  Mike Stump  <mikestump@comcast.net>
 
7832
+           Jakub Jelinek  <jakub@redhat.com>
 
7833
+
 
7834
+       PR pch/59436
 
7835
+       * tree.h (struct tree_optimization_option): Change optabs
 
7836
+       type from unsigned char * to void *.
 
7837
+       * optabs.c (init_tree_optimization_optabs): Adjust
 
7838
+       TREE_OPTIMIZATION_OPTABS initialization.
 
7839
+
 
7840
+2014-01-07  Jakub Jelinek  <jakub@redhat.com>
 
7841
+
 
7842
+       Backported from mainline
 
7843
+       2013-12-16  Jakub Jelinek  <jakub@redhat.com>
 
7844
+
 
7845
+       PR middle-end/58956
 
7846
+       PR middle-end/59470
 
7847
+       * gimple.h (walk_stmt_load_store_addr_fn): New typedef.
 
7848
+       (walk_stmt_load_store_addr_ops, walk_stmt_load_store_ops): Use it
 
7849
+       for callback params.
 
7850
+       * gimple.c (walk_stmt_load_store_ops): Likewise.
 
7851
+       (walk_stmt_load_store_addr_ops): Likewise.  Adjust all callback
 
7852
+       calls to supply the gimple operand containing the base tree
 
7853
+       as an extra argument.
 
7854
+       * tree-ssa-ter.c (find_ssaname, find_ssaname_in_store): New helper
 
7855
+       functions.
 
7856
+       (find_replaceable_in_bb): For calls or GIMPLE_ASM, only set
 
7857
+       same_root_var if USE is used somewhere in the stores of the stmt.
 
7858
+       * ipa-prop.c (visit_ref_for_mod_analysis): Remove name of the stmt
 
7859
+       argument and ATTRIBUTE_UNUSED, add another unnamed tree argument.
 
7860
+       * ipa-pure-const.c (check_load, check_store, check_ipa_load,
 
7861
+       check_ipa_store): Likewise.
 
7862
+       * gimple.c (gimple_ior_addresses_taken_1): Likewise.
 
7863
+       * ipa-split.c (test_nonssa_use, mark_nonssa_use): Likewise.
 
7864
+       (verify_non_ssa_vars, visit_bb): Adjust their callers.
 
7865
+       * cfgexpand.c (add_scope_conflicts_1): Use
 
7866
+       walk_stmt_load_store_addr_fn type for visit variable.
 
7867
+       (visit_op, visit_conflict): Remove name of the stmt
 
7868
+       argument and ATTRIBUTE_UNUSED, add another unnamed tree argument.
 
7869
+       * tree-sra.c (asm_visit_addr): Likewise.  Remove name of the data
 
7870
+       argument and ATTRIBUTE_UNUSED.
 
7871
+       * cgraphbuild.c (mark_address, mark_load, mark_store): Add another
 
7872
+       unnamed tree argument.
 
7873
+
 
7874
+2014-01-03  Andreas Schwab  <schwab@linux-m68k.org>
 
7875
+
 
7876
+       * config/m68k/m68k.c (handle_move_double): Handle pushes with
 
7877
+       overlapping registers also for registers other than the stack
 
7878
+       pointer.
 
7879
+
 
7880
+2014-01-03  Jakub Jelinek  <jakub@redhat.com>
 
7881
+
 
7882
+       PR target/59625
 
7883
+       * config/i386/i386.c (ix86_avoid_jump_mispredicts): Don't consider
 
7884
+       asm goto as jump.
 
7885
+
 
7886
+2014-01-01  Jakub Jelinek  <jakub@redhat.com>
 
7887
+
 
7888
+       PR rtl-optimization/59647
 
7889
+       * cse.c (cse_process_notes_1): Don't substitute negative VOIDmode
 
7890
+       new_rtx into UNSIGNED_FLOAT rtxes.
 
7891
+
 
7892
+2013-12-28  Eric Botcazou  <ebotcazou@adacore.com>
 
7893
+
 
7894
+       * doc/invoke.texi (output file options): Document -fada-spec-parent.
 
7895
+
 
7896
+2013-12-26  Uros Bizjak  <ubizjak@gmail.com>
 
7897
+
 
7898
+       * config/i386/driver-i386.c (decode_caches_intel): Add missing entries.
 
7899
+
 
7900
+2013-12-20  Jakub Jelinek  <jakub@redhat.com>
 
7901
+
 
7902
+       PR c++/59255
 
7903
+       Backported from mainline
 
7904
+       2013-08-19  Dehao Chen  <dehao@google.com>
 
7905
+
 
7906
+       * value-prof.c (gimple_ic): Fix the bug of adding EH edge.
 
7907
+
 
7908
+2013-12-19  James Greenhalgh  <james.greenhalgh@arm.com>
 
7909
+
 
7910
+       Backport from Mainline.
 
7911
+       2013-05-01  James Greenhalgh  <james.greenhalgh@arm.com>
 
7912
+
 
7913
+       * config/aarch64/aarch64-simd-builtins.def (cmhs): Rename to...
 
7914
+       (cmgeu): ...This.
 
7915
+       (cmhi): Rename to...
 
7916
+       (cmgtu): ...This.
 
7917
+       * config/aarch64/aarch64-simd.md
 
7918
+       (simd_mode): Add SF.
 
7919
+       (aarch64_vcond_internal): Use new names for unsigned comparison insns.
 
7920
+       (aarch64_cm<optab><mode>): Rewrite to not use UNSPECs.
 
7921
+       * config/aarch64/aarch64.md (*cstore<mode>_neg): Rename to...
 
7922
+       (cstore<mode>_neg): ...This.
 
7923
+       * config/aarch64/iterators.md
 
7924
+       (VALLF): new.
 
7925
+       (unspec): Remove UNSPEC_CM<EQ, LE, LT, GE, GT, HS, HI, TST>.
 
7926
+       (COMPARISONS): New.
 
7927
+       (UCOMPARISONS): Likewise.
 
7928
+       (optab): Add missing comparisons.
 
7929
+       (n_optab): New.
 
7930
+       (cmp_1): Likewise.
 
7931
+       (cmp_2): Likewise.
 
7932
+       (CMP): Likewise.
 
7933
+       (cmp): Remove.
 
7934
+       (VCMP_S): Likewise.
 
7935
+       (VCMP_U): Likewise.
 
7936
+       (V_cmp_result): Add DF, SF modes.
 
7937
+       (v_cmp_result): Likewise.
 
7938
+       (v): Likewise.
 
7939
+       (vmtype): Likewise.
 
7940
+       * config/aarch64/predicates.md (aarch64_reg_or_fp_zero): New.
 
7941
+
 
7942
+       Partial Backport from mainline.
 
7943
+       2013-05-01  James Greenhalgh  <james.greenhalgh@arm.com>
 
7944
+
 
7945
+       * config/aarch64/arm_neon.h
 
7946
+       (vc<eq, lt, le, gt, ge, tst><qsd>_<u><8,16,32,64>): Remap
 
7947
+       to builtins or C as appropriate.
 
7948
+
 
7949
+2013-12-19  Dominik Vogt  <vogt@linux.vnet.ibm.com>
 
7950
+           Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
7951
+
 
7952
+       Backport from mainline
 
7953
+       2013-12-19  Dominik Vogt  <vogt@linux.vnet.ibm.com>
 
7954
+       * config/s390/s390.c (s390_hotpatch_trampoline_halfwords_default): New
 
7955
+       constant
 
7956
+       (s390_hotpatch_trampoline_halfwords_max): New constant
 
7957
+       (s390_hotpatch_trampoline_halfwords): New static variable
 
7958
+       (get_hotpatch_attribute): New function
 
7959
+       (s390_handle_hotpatch_attribute): New function
 
7960
+       (s390_attribute_table): New target specific attribute table to implement
 
7961
+       the hotpatch attribute
 
7962
+       (s390_option_override): Parse hotpatch options
 
7963
+       (s390_function_num_hotpatch_trampoline_halfwords): New function
 
7964
+       (s390_can_inline_p): Implement target hook to
 
7965
+       suppress hotpatching for explicitly inlined functions
 
7966
+       (s390_asm_output_function_label): Generate hotpatch prologue
 
7967
+       (TARGET_ATTRIBUTE_TABLE): Define to implement target attribute table
 
7968
+       (TARGET_CAN_INLINE_P): Define to implement target hook
 
7969
+       * config/s390/s390.opt (mhotpatch): New options -mhotpatch, -mhotpatch=
 
7970
+       * config/s390/s390-protos.h (s390_asm_output_function_label): Add
 
7971
+       prototype
 
7972
+       * config/s390/s390.h (ASM_OUTPUT_FUNCTION_LABEL): Target specific
 
7973
+       function label generation for hotpatching
 
7974
+       (FUNCTION_BOUNDARY): Align functions to eight bytes
 
7975
+       * doc/extend.texi: Document hotpatch attribute
 
7976
+       * doc/invoke.texi: Document -mhotpatch option
 
7977
+
 
7978
+2013-12-18  Eric Botcazou  <ebotcazou@adacore.com>
 
7979
+
 
7980
+       * config/arm/arm.c (arm_expand_epilogue_apcs_frame): Fix thinko.
 
7981
+
 
7982
+2013-12-12  Vladimir Makarov  <vmakarov@redhat.com>
 
7983
+
 
7984
+       PR middle-end/59470
 
7985
+       * lra-coalesce.c (lra_coalesce): Invalidate inheritance pseudo
 
7986
+       values if necessary.
 
7987
+
 
7988
+2013-12-12  Jakub Jelinek  <jakub@redhat.com>
 
7989
+
 
7990
+       PR libgomp/59467
 
7991
+       * gimplify.c (omp_check_private): Add copyprivate argument, if it
 
7992
+       is true, don't check omp_privatize_by_reference.
 
7993
+       (gimplify_scan_omp_clauses): For OMP_CLAUSE_COPYPRIVATE verify
 
7994
+       decl is private in outer context.  Adjust omp_check_private caller.
 
7995
+
 
7996
+2013-12-10  Eric Botcazou  <ebotcazou@adacore.com>
 
7997
+
 
7998
+       PR rtl-optimization/58295
 
7999
+       * simplify-rtx.c (simplify_truncation): Restrict the distribution for
 
8000
+       WORD_REGISTER_OPERATIONS targets.
 
8001
+
 
8002
+2013-12-10  Kai Tietz  <ktietz@redhat.com>
 
8003
+
 
8004
+       PR target/56807
 
8005
+       * config/i386/i386.c (ix86_expand_prologue): Address saved
 
8006
+       registers stack-relative, not via frame-pointer.
 
8007
+
 
8008
+2013-12-09  Alan Modra  <amodra@gmail.com>
 
8009
+
 
8010
+       Apply from mainline
 
8011
+       2013-12-05  Alan Modra  <amodra@gmail.com>
 
8012
+       * configure.ac (BUILD_CXXFLAGS) Don't use ALL_CXXFLAGS for
 
8013
+       build != host.
 
8014
+       <recursive call for build != host>: Clear GMPINC.  Don't bother
 
8015
+       saving CFLAGS.
 
8016
+       * configure: Regenerate.
 
8017
+
 
8018
+2013-12-08  Uros Bizjak  <ubizjak@gmail.com>
 
8019
+
 
8020
+       Backport from mainline
 
8021
+       2013-12-06  Uros Bizjak  <ubizjak@gmail.com>
 
8022
+
 
8023
+       PR target/59405
 
8024
+       * config/i386/i386.c (type_natural_mode): Properly handle
 
8025
+       size 8 for !TARGET_64BIT.
 
8026
+
 
8027
+2013-12-07  Ralf Corsépius  <ralf.corsepius@rtems.org>
 
8028
+
 
8029
+       * config.gcc (microblaze*-*-rtems*): Add TARGET_BIG_ENDIAN_DEFAULT.
 
8030
+
 
8031
+2013-12-06  Jakub Jelinek  <jakub@redhat.com>
 
8032
+
 
8033
+       PR tree-optimization/59388
 
8034
+       * tree-ssa-reassoc.c (update_range_test): If op == range->exp,
 
8035
+       gimplify tem after stmt rather than before it.
 
8036
+
 
8037
+2013-12-06  Oleg Endo  <olegendo@gcc.gnu.org>
 
8038
+
 
8039
+       Backport from mainline
 
8040
+       2013-11-26  Oleg Endo  <olegendo@gcc.gnu.org>
 
8041
+
 
8042
+       PR target/58314
 
8043
+       PR target/50751
 
8044
+       * config/sh/sh.c (max_mov_insn_displacement, disp_addr_displacement):
 
8045
+       Prefix function names with 'sh_'.  Make them non-static.
 
8046
+       * config/sh/sh-protos.h (sh_disp_addr_displacement,
 
8047
+       sh_max_mov_insn_displacement): Add declarations.
 
8048
+       * config/sh/constraints.md (Q): Reject QImode.
 
8049
+       (Sdd): Use match_code "mem".
 
8050
+       (Snd): Fix erroneous matching of non-memory operands.
 
8051
+       * config/sh/predicates.md (short_displacement_mem_operand): New
 
8052
+       predicate.
 
8053
+       (general_movsrc_operand): Disallow PC relative QImode loads.
 
8054
+       * config/sh/sh.md (*mov<mode>_reg_reg): Remove it.
 
8055
+       (*movqi, *movhi): Merge both insns into...
 
8056
+       (*mov<mode>): ... this new insn.  Replace generic 'm' constraints with
 
8057
+       'Snd' and 'Sdd' constraints.  Calculate insn length dynamically based
 
8058
+       on the operand types.
 
8059
+
 
8060
+2013-12-06  Richard Biener  <rguenther@suse.de>
 
8061
+
 
8062
+       Backport from mainline
 
8063
+       2013-11-29  Richard Biener  <rguenther@suse.de>
 
8064
+
 
8065
+       PR tree-optimization/59334
 
8066
+       * tree-ssa-dce.c (eliminate_unnecessary_stmts): Fix bug
 
8067
+       in previous commit.
 
8068
+
 
8069
+       2013-11-28  Richard Biener  <rguenther@suse.de>
 
8070
+
 
8071
+       PR tree-optimization/59330
 
8072
+       * tree-ssa-dce.c (eliminate_unnecessary_stmts): Simplify
 
8073
+       and fix delayed marking of free calls not necessary.
 
8074
+
 
8075
+2013-12-06  Richard Biener  <rguenther@suse.de>
 
8076
+
 
8077
+       Backport from mainline
 
8078
+       2013-11-27  Richard Biener  <rguenther@suse.de>
 
8079
+
 
8080
+       PR tree-optimization/59288
 
8081
+       * tree-vect-loop.c (get_initial_def_for_induction): Do not
 
8082
+       re-analyze the PHI but use STMT_VINFO_LOOP_PHI_EVOLUTION_PART.
 
8083
+
 
8084
+       2013-11-19  Richard Biener  <rguenther@suse.de>
 
8085
+
 
8086
+       PR tree-optimization/59164
 
8087
+       * tree-vect-loop.c (vect_analyze_loop_operations): Adjust
 
8088
+       check whether we can create an epilogue loop to reflect the
 
8089
+       cases where we create one.
 
8090
+
 
8091
+       2013-09-05  Richard Biener  <rguenther@suse.de>
 
8092
+
 
8093
+       PR tree-optimization/58137
 
8094
+       * tree-vect-stmts.c (get_vectype_for_scalar_type_and_size):
 
8095
+       Do not create vectors of pointers.
 
8096
+       * tree-vect-loop.c (get_initial_def_for_induction): Use proper
 
8097
+       types for the components of the vector initializer.
 
8098
+       * tree-cfg.c (verify_gimple_assign_binary): Remove special-casing
 
8099
+       allowing pointer vectors with PLUS_EXPR/MINUS_EXPR.
 
8100
+
 
8101
+2013-12-06  Oleg Endo  <olegendo@gcc.gnu.org>
 
8102
+
 
8103
+       PR target/51244
 
8104
+       PR target/59343
 
8105
+       * config/sh/sh.md (*cbranch_t): Check that there are no labels between
 
8106
+       the s1 insn and the testing insn.  Remove REG_DEAD note from s1 insn.
 
8107
+
 
8108
+2013-12-05  Richard Biener  <rguenther@suse.de>
 
8109
+
 
8110
+       Backport from mainline
 
8111
+       2013-11-19  Richard Biener  <rguenther@suse.de>
 
8112
+
 
8113
+       PR middle-end/58956
 
8114
+       * tree-ssa-ter.c (find_replaceable_in_bb): Avoid forwarding
 
8115
+       loads into stmts that may clobber it.
 
8116
+
 
8117
+2013-12-04  Jakub Jelinek  <jakub@redhat.com>
 
8118
+
 
8119
+       PR rtl-optimization/58726
 
8120
+       * combine.c (force_to_mode): Fix comment typo.  Don't destructively
 
8121
+       modify x for ROTATE, ROTATERT and IF_THEN_ELSE.
 
8122
+
 
8123
+2013-12-04  Jakub Jelinek  <jakub@redhat.com>
 
8124
+           Uros Bizjak  <ubizjak@gmail.com>
 
8125
+
 
8126
+       PR target/59163
 
8127
+       * config/i386/i386.c (ix86_legitimate_combined_insn): If for
 
8128
+       !TARGET_AVX there is misaligned MEM operand with vector mode
 
8129
+       and get_attr_ssememalign is 0, return false.
 
8130
+       (ix86_expand_special_args_builtin): Add get_pointer_alignment
 
8131
+       computed alignment and for non-temporal loads/stores also
 
8132
+       at least GET_MODE_ALIGNMENT as MEM_ALIGN.
 
8133
+       * config/i386/sse.md
 
8134
+       (<sse>_loadu<ssemodesuffix><avxsizesuffix>,
 
8135
+       <sse>_storeu<ssemodesuffix><avxsizesuffix>,
 
8136
+       <sse2>_loaddqu<avxsizesuffix>,
 
8137
+       <sse2>_storedqu<avxsizesuffix>, <sse3>_lddqu<avxsizesuffix>,
 
8138
+       sse_vmrcpv4sf2, sse_vmrsqrtv4sf2, sse2_cvtdq2pd, sse_movhlps,
 
8139
+       sse_movlhps, sse_storehps, sse_loadhps, sse_loadlps,
 
8140
+       *vec_interleave_highv2df, *vec_interleave_lowv2df,
 
8141
+       *vec_extractv2df_1_sse, sse2_loadhpd, sse2_loadlpd, sse2_movsd,
 
8142
+       sse4_1_<code>v8qiv8hi2, sse4_1_<code>v4qiv4si2,
 
8143
+       sse4_1_<code>v4hiv4si2, sse4_1_<code>v2qiv2di2,
 
8144
+       sse4_1_<code>v2hiv2di2, sse4_1_<code>v2siv2di2, sse4_2_pcmpestr,
 
8145
+       *sse4_2_pcmpestr_unaligned, sse4_2_pcmpestri, sse4_2_pcmpestrm,
 
8146
+       sse4_2_pcmpestr_cconly, sse4_2_pcmpistr, *sse4_2_pcmpistr_unaligned,
 
8147
+       sse4_2_pcmpistri, sse4_2_pcmpistrm, sse4_2_pcmpistr_cconly): Add
 
8148
+       ssememalign attribute.
 
8149
+       * config/i386/i386.md (ssememalign): New define_attr.
 
8150
+
 
8151
+2013-12-03  Jakub Jelinek  <jakub@redhat.com>
 
8152
+
 
8153
+       PR middle-end/59011
 
8154
+       * gimplify.c (nonlocal_vla_vars): New variable.
 
8155
+       (gimplify_var_or_parm_decl): Put VAR_DECLs for VLAs into
 
8156
+       nonlocal_vla_vars chain.
 
8157
+       (gimplify_body): Call declare_vars on nonlocal_vla_vars chain
 
8158
+       if outer_bind has DECL_INITIAL (current_function_decl) block.
 
8159
+
 
8160
+       PR target/58864
 
8161
+       * optabs.c (emit_conditional_move): Save and restore
 
8162
+       pending_stack_adjust and stack_pointer_delta if cmove can't be used.
 
8163
+
 
8164
+2013-12-02  Jakub Jelinek  <jakub@redhat.com>
 
8165
+
 
8166
+       PR tree-optimization/59358
 
8167
+       * tree-vrp.c (union_ranges): To check for the partially
 
8168
+       overlapping ranges or adjacent ranges, also compare *vr0max
 
8169
+       with vr1max.
 
8170
+
 
8171
+2013-12-02  Richard Biener  <rguenther@suse.de>
 
8172
+
 
8173
+       PR tree-optimization/59139
 
8174
+       * tree-ssa-loop-niter.c (chain_of_csts_start): Properly match
 
8175
+       code in get_val_for.
 
8176
+       (get_val_for): Use gcc_checking_asserts.
 
8177
+
 
8178
+2013-11-27  Tom de Vries  <tom@codesourcery.com>
 
8179
+           Marc Glisse  <marc.glisse@inria.fr>
 
8180
+
 
8181
+       PR middle-end/59037
 
8182
+       * fold-const.c (fold_indirect_ref_1): Don't create out-of-bounds
 
8183
+       BIT_FIELD_REF.
 
8184
+       * gimplify.c (gimple_fold_indirect_ref): Same.
 
8185
+
 
8186
+2013-12-01  Eric Botcazou  <ebotcazou@adacore.com>
 
8187
+
 
8188
+       * config/i386/winnt.c (i386_pe_asm_named_section): Be prepared for an
 
8189
+       identifier node.
 
8190
+
 
8191
+2013-12-01  Bernd Edlinger  <bernd.edlinger@hotmail.de>
 
8192
+
 
8193
+       * expr.c (emit_group_store): Fix off-by-one BITFIELD_END argument.
 
8194
+
 
8195
+2013-11-28  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
8196
+
 
8197
+       Backport from mainline
 
8198
+       2013-11-28  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
8199
+
 
8200
+       * config/arm/iterators.md (vrint_conds): New int attribute.
 
8201
+       * config/arm/vfp.md (<vrint_pattern><SDF:mode>2): Set conds attribute.
 
8202
+       (smax<mode>3): Likewise.
 
8203
+       (smin<mode>3): Likewise.
 
8204
+
 
8205
+2013-11-28  Uros Bizjak  <ubizjak@gmail.com>
 
8206
+
 
8207
+       Backport from mainline
 
8208
+       2013-11-27  Uros Bizjak  <ubizjak@gmail.com>
 
8209
+                   Ganesh Gopalasubramanian  <Ganesh.Gopalasubramanian@amd.com>
 
8210
+
 
8211
+       PR target/56788
 
8212
+       * gcc.target/i386/xop-frczX.c: New test.
 
8213
+
 
8214
+2013-11-28  Terry Guo  <terry.guo@arm.com>
 
8215
+
 
8216
+       Backport mainline r205391
 
8217
+       2013-11-26  Terry Guo  <terry.guo@arm.com>
 
8218
+
 
8219
+       * config/arm/arm.c (require_pic_register): Handle high pic base
 
8220
+       register for thumb-1.
 
8221
+       (arm_load_pic_register): Also initialize high pic base register.
 
8222
+       * doc/invoke.texi: Update documentation for option -mpic-register.
 
8223
+
 
8224
+2013-11-27  Jakub Jelinek  <jakub@redhat.com>
 
8225
+
 
8226
+       Backported from mainline
 
8227
+       2013-11-26  Jakub Jelinek  <jakub@redhat.com>
 
8228
+
 
8229
+       PR tree-optimization/59014
 
8230
+       * tree-vrp.c (register_edge_assert_for_1): Don't look
 
8231
+       through conversions from non-integral types or through
 
8232
+       narrowing conversions.
 
8233
+
 
8234
+2013-11-27  Eric Botcazou  <ebotcazou@adacore.com>
 
8235
+
 
8236
+       PR middle-end/59138
 
8237
+       * expr.c (emit_group_store): Don't write past the end of the structure.
 
8238
+       (store_bit_field): Fix formatting.
 
8239
+
 
8240
+2013-11-24  Sebastian Huber  <sebastian.huber@embedded-brains.de>
 
8241
+
 
8242
+       Backport from mainline
 
8243
+       2013-09-17  Sebastian Huber  <sebastian.huber@embedded-brains.de>
 
8244
+
 
8245
+       * config/sparc/t-rtems: Add leon3 multilibs.
 
8246
+
 
8247
+2013-11-24  Sebastian Huber  <sebastian.huber@embedded-brains.de>
 
8248
+
 
8249
+       Backport from mainline
 
8250
+       2013-08-09  Eric Botcazou  <ebotcazou@adacore.com>
 
8251
+
 
8252
+       * configure.ac: Add GAS check for LEON instructions on SPARC.
 
8253
+       * configure: Regenerate.
 
8254
+       * config.in: Likewise.
 
8255
+       * config.gcc (with_cpu): Remove sparc-leon*-* and deal with LEON in the
 
8256
+       sparc*-*-* block.
 
8257
+       * config/sparc/sparc.opt (LEON, LEON3): New masks.
 
8258
+       * config/sparc/sparc.h (ASM_CPU32_DEFAULT_SPEC): Set to AS_LEON_FLAG
 
8259
+       for LEON or LEON3.
 
8260
+       (ASM_CPU_SPEC): Pass AS_LEON_FLAG if -mcpu=leon or -mcpu=leon3.
 
8261
+       (AS_LEON_FLAG): New macro.
 
8262
+       * config/sparc/sparc.c (sparc_option_override): Set MASK_LEON for leon
 
8263
+       and MASK_LEON3 for leon3 and unset them if HAVE_AS_LEON is not defined.
 
8264
+       Deal with LEON and LEON3 for the memory model.
 
8265
+       * config/sparc/sync.md (atomic_compare_and_swap<mode>): Enable if LEON3
 
8266
+       (atomic_compare_and_swap<mode>_1): Likewise.
 
8267
+       (*atomic_compare_and_swap<mode>_1): Likewise.
 
8268
+
 
8269
+2013-11-24  Sebastian Huber  <sebastian.huber@embedded-brains.de>
 
8270
+
 
8271
+       Backport from mainline
 
8272
+       2013-07-23  Eric Botcazou  <ebotcazou@adacore.com>
 
8273
+
 
8274
+       * doc/invoke.texi (SPARC Options): Document new leon3 processor value.
 
8275
+
 
8276
+2013-11-24  Sebastian Huber  <sebastian.huber@embedded-brains.de>
 
8277
+
 
8278
+       Backport from mainline
 
8279
+       2013-07-22  Eric Botcazou  <ebotcazou@adacore.com>
 
8280
+
 
8281
+       * config.gcc (sparc*-*-*): Accept leon3 processor.
 
8282
+       (sparc-leon*-*): Merge with sparc*-*-* and add leon3 support.
 
8283
+       * doc/invoke.texi (SPARC Options): Adjust -mfix-ut699 entry.
 
8284
+       * config/sparc/sparc-opts.h (enum processor_type): Add PROCESSOR_LEON3.
 
8285
+       * config/sparc/sparc.opt (enum processor_type): Add leon3.
 
8286
+       (mfix-ut699): Adjust comment.
 
8287
+       * config/sparc/sparc.h (TARGET_CPU_leon3): New define.
 
8288
+       (CPP_CPU32_DEFAULT_SPEC): Add leon3 support.
 
8289
+       (CPP_CPU_SPEC): Likewise.
 
8290
+       (ASM_CPU_SPEC): Likewise.
 
8291
+       * config/sparc/sparc.c (leon3_cost): New constant.
 
8292
+       (sparc_option_override): Add leon3 support.
 
8293
+       (mem_ref): New function.
 
8294
+       (sparc_gate_work_around_errata): Return true if -mfix-ut699 is enabled.
 
8295
+       (sparc_do_work_around_errata): Look into the instruction in the delay
 
8296
+       slot and adjust accordingly.  Add fix for the data cache nullify issues
 
8297
+       of the UT699.  Change insertion position for the NOP.
 
8298
+       * config/sparc/leon.md (leon_fpalu, leon_fpmds, write_buf): Delete.
 
8299
+       (leon3_load): New reservation.
 
8300
+       (leon_store): Bump latency to 2.
 
8301
+       (grfpu): New automaton.
 
8302
+       (grfpu_alu): New unit.
 
8303
+       (grfpu_ds): Likewise.
 
8304
+       (leon_fp_alu): Adjust.
 
8305
+       (leon_fp_mult): Delete.
 
8306
+       (leon_fp_div): Split into leon_fp_divs and leon_fp_divd.
 
8307
+       (leon_fp_sqrt): Split into leon_fp_sqrts and leon_fp_sqrtd.
 
8308
+       * config/sparc/sparc.md (cpu): Add leon3.
 
8309
+       * config/sparc/sync.md (atomic_exchangesi): Disable if -mfix-ut699.
 
8310
+       (swapsi): Likewise.
 
8311
+       (atomic_test_and_set): Likewise.
 
8312
+       (ldstub): Likewise.
 
8313
+
 
8314
+2013-11-24  Sebastian Huber  <sebastian.huber@embedded-brains.de>
 
8315
+
 
8316
+       Backport from mainline
 
8317
+       2013-04-10  Steven Bosscher  <steven@gcc.gnu.org>
 
8318
+
 
8319
+       * config/sparc/sparc.c: Include tree-pass.h.
 
8320
+       (TARGET_MACHINE_DEPENDENT_REORG): Do not redefine.
 
8321
+       (sparc_reorg): Rename to sparc_do_work_around_errata.  Move to
 
8322
+       head of file.  Change return type.  Split off gate function.
 
8323
+       (sparc_gate_work_around_errata): New function.
 
8324
+       (pass_work_around_errata): New pass definition.
 
8325
+       (insert_pass_work_around_errata) New pass insert definition to
 
8326
+       insert pass_work_around_errata just after delayed-branch scheduling.
 
8327
+       (sparc_option_override): Insert the pass.
 
8328
+       * config/sparc/t-sparc (sparc.o): Add TREE_PASS_H dependence.
 
8329
+
 
8330
+2013-11-24  Sebastian Huber  <sebastian.huber@embedded-brains.de>
 
8331
+
 
8332
+       Backport from mainline
 
8333
+       2013-05-28  Eric Botcazou  <ebotcazou@adacore.com>
 
8334
+
 
8335
+       * doc/invoke.texi (SPARC Options): Document -mfix-ut699.
 
8336
+       * builtins.c (expand_builtin_mathfn) <BUILT_IN_SQRT>: Try to widen the
 
8337
+       mode if the instruction isn't available in the original mode.
 
8338
+       * config/sparc/sparc.opt (mfix-ut699): New option.
 
8339
+       * config/sparc/sparc.md (muldf3_extend): Disable if -mfix-ut699.
 
8340
+       (divdf3): Turn into expander.
 
8341
+       (divdf3_nofix): New insn.
 
8342
+       (divdf3_fix): Likewise.
 
8343
+       (divsf3): Disable if -mfix-ut699.
 
8344
+       (sqrtdf2): Turn into expander.
 
8345
+       (sqrtdf2_nofix): New insn.
 
8346
+       (sqrtdf2_fix): Likewise.
 
8347
+       (sqrtsf2): Disable if -mfix-ut699.
 
8348
+
 
8349
+2013-11-22  Eric Botcazou  <ebotcazou@adacore.com>
 
8350
+
 
8351
+       * print-rtl.c (print_rtx) <case MEM>: Output a space if no MEM_EXPR.
 
8352
+
 
8353
+2013-11-21  Zhenqiang Chen  <zhenqiang.chen@linaro.org>
 
8354
+
 
8355
+       PR bootstrap/57683
 
8356
+       Backport from mainline: r197467 and r198999.
 
8357
+       2013-04-03  Jeff Law  <law@redhat.com>
 
8358
+
 
8359
+       * Makefile.in (lra-constraints.o): Depend on $(OPTABS_H).
 
8360
+       (lra-eliminations.o): Likewise.
 
8361
+
 
8362
+       2013-05-16  Jeff Law  <law@redhat.com>
 
8363
+
 
8364
+       * Makefile.in (tree-switch-conversion.o): Depend on $(OPTABS_H).
 
8365
+
 
8366
+2013-11-20  Eric Botcazou  <ebotcazou@adacore.com>
 
8367
+
 
8368
+       PR target/59207
 
8369
+       * config/sparc/sparc.c (sparc_fold_builtin) <case CODE_FOR_pdist_vis>:
 
8370
+       Make sure neg2_ovf is set before being used.
 
8371
+
 
8372
+2013-11-20  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
8373
+           Dominik Vogt  <vogt@linux.vnet.ibm.com>
 
8374
+
 
8375
+       Backport from mainline
 
8376
+       * config/s390/s390.c (s390_canonicalize_comparison): Don't fold
 
8377
+       int comparisons with an out of range condition code.
 
8378
+       (s390_optimize_nonescaping_tx): Skip empty BBs.
 
8379
+       Generate the new tbegin RTX when removing the FPR clobbers (with
 
8380
+       two SETs).
 
8381
+       (s390_expand_tbegin): Fix the retry loop counter.  Copy CC to the
 
8382
+       result before doing the retry calculations.
 
8383
+       (s390_init_builtins): Make tbegin "returns_twice" and tabort
 
8384
+       "noreturn".
 
8385
+       * config/s390/s390.md (UNSPECV_TBEGIN_TDB): New constant used for
 
8386
+       the TDB setting part of an tbegin.
 
8387
+       ("tbegin_1", "tbegin_nofloat_1"): Add a set for the TDB.
 
8388
+       ("tx_assist"): Set unused argument to an immediate zero instead of
 
8389
+       loading zero into a GPR and pass it as argument.
 
8390
+       * config/s390/htmxlintrin.h (__TM_simple_begin, __TM_begin):
 
8391
+       Remove inline and related attributes.
 
8392
+       (__TM_nesting_depth, __TM_is_user_abort, __TM_is_named_user_abort)
 
8393
+       (__TM_is_illegal, __TM_is_footprint_exceeded)
 
8394
+       (__TM_is_nested_too_deep, __TM_is_conflict): Fix format value
 
8395
+       check.
 
8396
+
 
8397
+2013-11-19  Uros Bizjak  <ubizjak@gmail.com>
 
8398
+
 
8399
+       Backport from mainline
 
8400
+       2013-11-18  Uros Bizjak  <ubizjak@gmail.com>
 
8401
+
 
8402
+       * config/i386/i386.c (ix86_decompose_address): Use REG_P instead of
 
8403
+       ix86_address_subreg_operand.  Move subreg checks to
 
8404
+       ix86_validate_address_register.  Move address override check to
 
8405
+       ix86_legitimate_address_p.
 
8406
+       (ix86_validate_address_register): New function.
 
8407
+       (ix86_legitimate_address_p): Call ix86_validate_address_register
 
8408
+       to validate base and index registers.  Add address override check
 
8409
+       from ix86_decompose_address.
 
8410
+       (ix86_decompose_address): Remove.
 
8411
+
 
8412
+       Backport from mainline
 
8413
+       2013-11-17  Uros Bizjak  <ubizjak@gmail.com>
 
8414
+
 
8415
+       PR target/59153
 
8416
+       * config/i386/i386.c (ix86_address_subreg_operand): Do not
 
8417
+       reject non-integer subregs.
 
8418
+       (ix86_decompose_address): Do not reject invalid CONST_INT RTXes.
 
8419
+       Move check for invalid x32 constant addresses ...
 
8420
+       (ix86_legitimate_address_p): ... here.
 
8421
+
 
8422
+2013-11-19  Richard Biener  <rguenther@suse.de>
 
8423
+
 
8424
+       Backport from mainline
 
8425
+       2013-11-07  Richard Biener  <rguenther@suse.de>
 
8426
+
 
8427
+       * tree-dfa.c (get_ref_base_and_extent): Fix casting.
 
8428
+
 
8429
+2013-11-19  Richard Biener  <rguenther@suse.de>
 
8430
+
 
8431
+       PR tree-optimization/57517
 
8432
+       * tree-predcom.c (combinable_refs_p): Verify the combination
 
8433
+       is always executed when the refs are.
 
8434
+
 
8435
+2013-11-19  Richard Biener  <rguenther@suse.de>
 
8436
+
 
8437
+       Backport from mainline
 
8438
+       2013-11-05  Richard Biener  <rguenther@suse.de>
 
8439
+
 
8440
+       PR middle-end/58941
 
8441
+       * tree-dfa.c (get_ref_base_and_extent): Merge common code
 
8442
+       in MEM_REF and TARGET_MEM_REF handling.  Make sure to
 
8443
+       process trailing array detection before diving into the
 
8444
+       view-converted object (and possibly apply some extra offset).
 
8445
+
 
8446
+2013-11-18  Richard Biener  <rguenther@suse.de>
 
8447
+
 
8448
+       Backport from mainline
 
8449
+       2013-10-21  Richard Biener  <rguenther@suse.de>
 
8450
+
 
8451
+       PR tree-optimization/58794
 
8452
+       * fold-const.c (operand_equal_p): Compare FIELD_DECL operand
 
8453
+       of COMPONENT_REFs with OEP_CONSTANT_ADDRESS_OF left in place.
 
8454
+
 
8455
+       2013-10-21  Richard Biener  <rguenther@suse.de>
 
8456
+
 
8457
+       PR middle-end/58742
 
8458
+       * fold-const.c (fold_binary_loc): Fold ((T) (X /[ex] C)) * C
 
8459
+       to (T) X for sign-changing conversions (or no conversion).
 
8460
+
 
8461
+       2013-11-06  Richard Biener  <rguenther@suse.de>
 
8462
+
 
8463
+       PR tree-optimization/58653
 
8464
+       * tree-predcom.c (ref_at_iteration): Rewrite to generate
 
8465
+       a MEM_REF.
 
8466
+       (prepare_initializers_chain): Adjust.
 
8467
+
 
8468
+       PR tree-optimization/59047
 
8469
+       * tree-predcom.c (ref_at_iteration): Handle bitfield accesses
 
8470
+       properly.
 
8471
+
 
8472
+       2013-10-15  Richard Biener  <rguenther@suse.de>
 
8473
+
 
8474
+       PR tree-optimization/58143
 
8475
+       * tree-ssa-loop-im.c (arith_code_with_undefined_signed_overflow):
 
8476
+       New function.
 
8477
+       (rewrite_to_defined_overflow): Likewise.
 
8478
+       (move_computations_dom_walker::before_dom): Rewrite stmts
 
8479
+       with undefined signed overflow that are not always executed
 
8480
+       into unsigned arithmetic.
 
8481
+
 
8482
+2013-11-14  Uros Bizjak  <ubizjak@gmail.com>
 
8483
+
 
8484
+       Backport from mainline
 
8485
+       2013-11-10  Uros Bizjak  <ubizjak@gmail.com>
 
8486
+
 
8487
+       * mode-switching.c (optimize_mode_switching): Mark block as
 
8488
+       nontransparent, if last_mode at block exit is different from no_mode.
 
8489
+
 
8490
+       Backport from mainline
 
8491
+       2013-11-06  Uros Bizjak  <ubizjak@gmail.com>
 
8492
+
 
8493
+       PR target/59021
 
8494
+       * config/i386/i386.c (ix86_avx_u128_mode_needed): Require
 
8495
+       AVX_U128_DIRTY mode for call_insn RTXes that use AVX256 registers.
 
8496
+       (ix86_avx_u128_mode_needed): Return AVX_U128_DIRTY mode for call_insn
 
8497
+       RTXes that return in AVX256 register.
 
8498
+
 
8499
+2013-11-14  Jakub Jelinek  <jakub@redhat.com>
 
8500
+           Uros Bizjak  <ubizjak@gmail.com>
 
8501
+
 
8502
+       PR target/59101
 
8503
+       * config/i386/i386.md (*anddi_2): Only allow CCZmode if
 
8504
+       operands[2] satisfies_constraint_Z that might have bit 31 set.
 
8505
+
 
8506
+2013-11-12  H.J. Lu  <hongjiu.lu@intel.com>
 
8507
+
 
8508
+       Backported from mainline
 
8509
+       2013-11-12  H.J. Lu  <hongjiu.lu@intel.com>
 
8510
+
 
8511
+       PR target/59088
 
8512
+       * config/i386/i386.c (initial_ix86_tune_features): Set
 
8513
+       X86_TUNE_SSE_UNALIGNED_LOAD_OPTIMAL and
 
8514
+       X86_TUNE_SSE_UNALIGNED_STORE_OPTIMAL for m_HASWELL.
 
8515
+
 
8516
+2013-11-11  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
 
8517
+
 
8518
+       Backported from mainline
 
8519
+       2013-10-30  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>
 
8520
+
 
8521
+       PR target/58854
 
8522
+       * config/arm/arm.c (arm_expand_epilogue_apcs_frame): Emit blockage
 
8523
+
 
8524
+2013-11-11  Jakub Jelinek  <jakub@redhat.com>
 
8525
+
 
8526
+       Backported from mainline
 
8527
+       2013-11-06  Jakub Jelinek  <jakub@redhat.com>
 
8528
+
 
8529
+       PR middle-end/58970
 
8530
+       * expr.c (get_bit_range): Handle *offset == NULL_TREE.
 
8531
+       (expand_assignment): If *bitpos is negative, set *offset
 
8532
+       and adjust *bitpos, so that it is not negative.
 
8533
+
 
8534
+       2013-11-05  Jakub Jelinek  <jakub@redhat.com>
 
8535
+
 
8536
+       PR rtl-optimization/58997
 
8537
+       * loop-iv.c (iv_subreg): For IV_UNKNOWN_EXTEND, expect
 
8538
+       get_iv_value to be in iv->mode rather than iv->extend_mode.
 
8539
+       (iv_extend): Likewise.  Otherwise, if iv->extend != extend,
 
8540
+       use lowpart_subreg on get_iv_value before calling simplify_gen_unary.
 
8541
+       * loop-unswitch.c (may_unswitch_on): Make sure op[i] is in the right
 
8542
+       mode.
 
8543
+
 
8544
+2013-11-10  Karlson2k  <k2k@narod.ru>
 
8545
+           Kai Tietz  <ktietz@redhat.com>
 
8546
+
 
8547
+       Merged from trunk
 
8548
+       PR plugins/52872
 
8549
+       * configure.ac: Adding for exported symbols check
 
8550
+       and for rdynamic-check executable-extension.
 
8551
+       * configure: Regenerated.
 
8552
+
 
8553
+2013-11-07  H.J. Lu  <hongjiu.lu@intel.com>
 
8554
+
 
8555
+       PR target/59034
 
8556
+       * config/i386/i386.md (push peepholer/splitter): Use Pmode
 
8557
+       with stack_pointer_rtx.
 
8558
+
 
8559
+2013-11-05  Uros Bizjak  <ubizjak@gmail.com>
 
8560
+
 
8561
+       * config/i386/t-rtems (MULTILIB_MATCHES): Fix option typos.
 
8562
+
 
8563
+2013-11-05  Jakub Jelinek  <jakub@redhat.com>
 
8564
+
 
8565
+       PR tree-optimization/58984
 
8566
+       * ipa-prop.c (ipa_load_from_parm_agg_1): Add SIZE_P argument,
 
8567
+       set *SIZE_P if non-NULL on success.
 
8568
+       (ipa_load_from_parm_agg, ipa_analyze_indirect_call_uses): Adjust
 
8569
+       callers.
 
8570
+       (ipcp_transform_function): Likewise.  Punt if size of access
 
8571
+       is different from TYPE_SIZE on v->value's type.
 
8572
+
 
8573
+2013-11-03  H.J. Lu  <hongjiu.lu@intel.com>
 
8574
+
 
8575
+       Backport from mainline
 
8576
+       2013-10-12  H.J. Lu  <hongjiu.lu@intel.com>
 
8577
+
 
8578
+       PR target/58690
 
8579
+       * config/i386/i386.c (ix86_copy_addr_to_reg): New function.
 
8580
+       (ix86_expand_movmem): Replace copy_addr_to_reg with
 
8581
+       ix86_copy_addr_to_reg.
 
8582
+       (ix86_expand_setmem): Likewise.
 
8583
+
 
8584
+2013-10-29  Uros Bizjak  <ubizjak@gmail.com>
 
8585
+
 
8586
+       Backport from mainline
 
8587
+       2013-08-08  Richard Sandiford  <rdsandiford@googlemail.com>
 
8588
+
 
8589
+       PR rtl-optimization/58079
 
8590
+       * combine.c (combine_simplify_rtx): Avoid using SUBST if
 
8591
+       simplify_comparison has widened a comparison with an integer.
 
8592
+
 
8593
+2013-10-29  Martin Jambor  <mjambor@suse.cz>
 
8594
+
 
8595
+       PR middle-end/58789
 
8596
+       Backport from mainline
 
8597
+       2013-05-09  Martin Jambor  <mjambor@suse.cz>
 
8598
+
 
8599
+       PR lto/57084
 
8600
+       * gimple-fold.c (canonicalize_constructor_val): Call
 
8601
+       cgraph_get_create_real_symbol_node instead of cgraph_get_create_node.
 
8602
+
 
8603
+       Backport from mainline
 
8604
+       2013-03-16  Jan Hubicka  <jh@suse.cz>
 
8605
+
 
8606
+       * cgraph.h (cgraph_get_create_real_symbol_node): Declare.
 
8607
+       * cgraph.c (cgraph_get_create_real_symbol_node): New function.
 
8608
+       * cgrpahbuild.c: Use cgraph_get_create_real_symbol_node instead
 
8609
+       of cgraph_get_create_node.
 
8610
+       * ipa-prop.c (ipa_make_edge_direct_to_target): Likewise.
 
8611
+
 
8612
+2013-10-28  Tom de Vries  <tom@codesourcery.com>
 
8613
+
 
8614
+       * cfgexpand.c (gimple_expand_cfg): Remove test for parm_birth_insn.
 
8615
+       Don't commit insertions after NOTE_INSN_FUNCTION_BEG.
 
8616
+
 
8617
+2013-10-26  Uros Bizjak  <ubizjak@gmail.com>
 
8618
+
 
8619
+       Backport from mainline
 
8620
+       2013-10-22  Uros Bizjak  <ubizjak@gmail.com>
 
8621
+
 
8622
+       PR target/58779
 
8623
+       * config/i386/i386.c (put_condition_code) <case GTU, case LEU>:
 
8624
+       Remove CCCmode handling.
 
8625
+       <case LTU>: Return 'c' suffix for CCCmode.
 
8626
+       <case GEU>: Return 'nc' suffix for CCCmode.
 
8627
+       (ix86_cc_mode) <case GTU, case LEU>: Do not generate overflow checks.
 
8628
+       * config/i386/i386.md (*sub<mode>3_cconly_overflow): Remove.
 
8629
+       (*sub<mode>3_cc_overflow): Ditto.
 
8630
+       (*subsi3_zext_cc_overflow): Ditto.
 
8631
+
 
8632
+2013-10-26  Uros Bizjak  <ubizjak@gmail.com>
 
8633
+
 
8634
+       Backport from mainline
 
8635
+       2013-10-19  Uros Bizjak  <ubizjak@gmail.com>
 
8636
+
 
8637
+       PR target/58792
 
8638
+       * config/i386/i386.c (ix86_function_value_regno): Add DX_REG,
 
8639
+       ST1_REG and XMM1_REG for 32bit and 64bit targets.  Also add DI_REG
 
8640
+       and SI_REG for 64bit SYSV ABI targets.
 
8641
+
 
8642
+2013-08-25  Richard Henderson  <rth@twiddle.net>
 
8643
+
 
8644
+       PR rtl/58542
 
8645
+       * optabs.c (maybe_emit_atomic_exchange): Use create_input_operand
 
8646
+       instead of create_convert_operand_to.
 
8647
+       (maybe_emit_sync_lock_test_and_set): Likewise.
 
8648
+       (expand_atomic_compare_and_swap): Likewise.
 
8649
+       (maybe_emit_compare_and_swap_exchange_loop): Don't convert_modes.
 
8650
+
 
8651
+2013-10-25  Eric Botcazou  <ebotcazou@adacore.com>
 
8652
+
 
8653
+       PR rtl-optimization/58831
 
8654
+       * alias.c (init_alias_analysis): At the beginning of each iteration, set
 
8655
+       the reg_seen[N] bit if static_reg_base_value[N] is non-null.
 
8656
+
 
8657
+2013-10-25  Eric Botcazou  <ebotcazou@adacore.com>
 
8658
+
 
8659
+       * recog.c (search_ofs): New static variable moved from...
 
8660
+       (peep2_find_free_register): ...here.
 
8661
+       (peephole2_optimize): Initialize it.
 
8662
+
 
8663
+2013-10-24  David Edelsohn  <dje.gcc@gmail.com>
 
8664
+
 
8665
+       Backport from mainline
 
8666
+       2013-10-23  David Edelsohn  <dje.gcc@gmail.com>
 
8667
+
 
8668
+       PR target/58838
 
8669
+       * config/rs6000/rs6000.md (mulsi3_internal1 and splitter): Add
 
8670
+       TARGET_32BIT final condition.
 
8671
+       (mulsi3_internal2 and splitter): Same.
 
8672
+
 
8673
+2013-10-23  Tom de Vries  <tom@codesourcery.com>
 
8674
+
 
8675
+       PR tree-optimization/58805
 
8676
+       * tree-ssa-tail-merge.c (stmt_local_def): Add gimple_vdef check.
 
8677
+
 
8678
+2013-10-23  Richard Biener  <rguenther@suse.de>
 
8679
+
 
8680
+       Backport from mainline
 
8681
+       2013-06-24  Richard Biener  <rguenther@suse.de>
 
8682
+
 
8683
+       PR tree-optimization/57488
 
8684
+       * tree-ssa-pre.c (insert): Clear NEW sets before each iteration.
 
8685
+
 
8686
+2013-10-16  Ganesh Gopalasubramanian  <Ganesh.Gopalasubramanian@amd.com>
 
8687
+
 
8688
+       Backport from mainline
 
8689
+       2013-10-16  Ganesh Gopalasubramanian
 
8690
+                   <Ganesh.Gopalasubramanian@amd.com>
 
8691
+
 
8692
+       * config/i386/i386.c (ix86_option_override_internal): Enable FMA4
 
8693
+       for AMD bdver3.
 
8694
+
 
8695
 2013-10-16  Release Manager
 
8696
 
 
8697
        * GCC 4.8.2 released.
 
8698
@@ -639,7 +2392,7 @@
 
8699
 2013-07-31  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
8700
 
 
8701
        Backport from mainline
 
8702
-        2013-03-27  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
8703
+       2013-03-27  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
8704
 
 
8705
        * config/s390/s390.h (TARGET_FLT_EVAL_METHOD): Define.
 
8706
 
 
8707
Index: gcc/testsuite/gcc.target/arm/thumb1-pic-single-base.c
 
8708
===================================================================
 
8709
--- a/src/gcc/testsuite/gcc.target/arm/thumb1-pic-single-base.c (.../tags/gcc_4_8_2_release)
 
8710
+++ b/src/gcc/testsuite/gcc.target/arm/thumb1-pic-single-base.c (.../branches/gcc-4_8-branch)
 
8711
@@ -0,0 +1,11 @@
 
8712
+/* { dg-do compile } */
 
8713
+/* { dg-require-effective-target arm_thumb1_ok } */
 
8714
+/* { dg-options "-mthumb -fpic -msingle-pic-base" } */
 
8715
+
 
8716
+int g_test;
 
8717
+
 
8718
+int
 
8719
+foo (int par)
 
8720
+{
 
8721
+    g_test = par;
 
8722
+}
 
8723
Index: gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64-1.c
 
8724
===================================================================
 
8725
--- a/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64-1.c   (.../tags/gcc_4_8_2_release)
 
8726
+++ b/src/gcc/testsuite/gcc.target/arm/neon/vst1Q_laneu64-1.c   (.../branches/gcc-4_8-branch)
 
8727
@@ -0,0 +1,25 @@
 
8728
+/* Test the `vst1Q_laneu64' ARM Neon intrinsic.  */
 
8729
+
 
8730
+/* Detect ICE in the case of unaligned memory address.  */
 
8731
+
 
8732
+/* { dg-do compile } */
 
8733
+/* { dg-require-effective-target arm_neon_ok } */
 
8734
+/* { dg-add-options arm_neon } */
 
8735
+
 
8736
+#include "arm_neon.h"
 
8737
+
 
8738
+unsigned char dummy_store[1000];
 
8739
+
 
8740
+void
 
8741
+foo (char* addr)
 
8742
+{
 
8743
+  uint8x16_t vdata = vld1q_u8 (addr);
 
8744
+  vst1q_lane_u64 ((uint64_t*) &dummy_store, vreinterpretq_u64_u8 (vdata), 0);
 
8745
+}
 
8746
+
 
8747
+uint64_t
 
8748
+bar (uint64x2_t vdata)
 
8749
+{
 
8750
+  vdata = vld1q_lane_u64 ((uint64_t*) &dummy_store, vdata, 0);
 
8751
+  return vgetq_lane_u64 (vdata, 0);
 
8752
+}
 
8753
Index: gcc/testsuite/gcc.target/arm/thumb1-pic-high-reg.c
 
8754
===================================================================
 
8755
--- a/src/gcc/testsuite/gcc.target/arm/thumb1-pic-high-reg.c    (.../tags/gcc_4_8_2_release)
 
8756
+++ b/src/gcc/testsuite/gcc.target/arm/thumb1-pic-high-reg.c    (.../branches/gcc-4_8-branch)
 
8757
@@ -0,0 +1,11 @@
 
8758
+/* { dg-do compile } */
 
8759
+/* { dg-require-effective-target arm_thumb1_ok } */
 
8760
+/* { dg-options "-mthumb -fpic -mpic-register=9" } */
 
8761
+
 
8762
+int g_test;
 
8763
+
 
8764
+int
 
8765
+foo (int par)
 
8766
+{
 
8767
+    g_test = par;
 
8768
+}
 
8769
Index: gcc/testsuite/gcc.target/arm/require-pic-register-loc.c
 
8770
===================================================================
 
8771
--- a/src/gcc/testsuite/gcc.target/arm/require-pic-register-loc.c       (.../tags/gcc_4_8_2_release)
 
8772
+++ b/src/gcc/testsuite/gcc.target/arm/require-pic-register-loc.c       (.../branches/gcc-4_8-branch)
 
8773
@@ -0,0 +1,29 @@
 
8774
+/* { dg-do compile } */
 
8775
+/* { dg-options "-g -fPIC" } */
 
8776
+
 
8777
+void *v;
 
8778
+void a (void *x) { }
 
8779
+void b (void) { }
 
8780
+                       /* line 7.  */
 
8781
+int                    /* line 8.  */
 
8782
+main (int argc)        /* line 9.  */
 
8783
+{                      /* line 10.  */
 
8784
+  if (argc == 12345)   /* line 11.  */
 
8785
+    {
 
8786
+      a (v);
 
8787
+      return 1;
 
8788
+    }
 
8789
+  b ();
 
8790
+
 
8791
+  return 0;
 
8792
+}
 
8793
+
 
8794
+/* { dg-final { scan-assembler-not "\.loc 1 7 0" } } */
 
8795
+/* { dg-final { scan-assembler-not "\.loc 1 8 0" } } */
 
8796
+/* { dg-final { scan-assembler-not "\.loc 1 9 0" } } */
 
8797
+
 
8798
+/* The loc at the start of the prologue.  */
 
8799
+/* { dg-final { scan-assembler-times "\.loc 1 10 0" 1 } } */
 
8800
+
 
8801
+/* The loc at the end of the prologue, with the first user line.  */
 
8802
+/* { dg-final { scan-assembler-times "\.loc 1 11 0" 1 } } */
 
8803
Index: gcc/testsuite/gcc.target/arm/vrinta-ce.c
 
8804
===================================================================
 
8805
--- a/src/gcc/testsuite/gcc.target/arm/vrinta-ce.c      (.../tags/gcc_4_8_2_release)
 
8806
+++ b/src/gcc/testsuite/gcc.target/arm/vrinta-ce.c      (.../branches/gcc-4_8-branch)
 
8807
@@ -0,0 +1,15 @@
 
8808
+/* { dg-do compile } */
 
8809
+/* { dg-require-effective-target arm_v8_vfp_ok } */
 
8810
+/* { dg-options "-O2 -marm -march=armv8-a" } */
 
8811
+/* { dg-add-options arm_v8_vfp } */
 
8812
+
 
8813
+double foo (double a)
 
8814
+{
 
8815
+  if (a > 3.0)
 
8816
+    return  __builtin_round (a);
 
8817
+
 
8818
+  return 0.0;
 
8819
+}
 
8820
+
 
8821
+/* { dg-final { scan-assembler-times "vrinta.f64\td\[0-9\]+" 1 } } */
 
8822
+
 
8823
Index: gcc/testsuite/gcc.target/arm/pr54300.C
 
8824
===================================================================
 
8825
--- a/src/gcc/testsuite/gcc.target/arm/pr54300.C        (.../tags/gcc_4_8_2_release)
 
8826
+++ b/src/gcc/testsuite/gcc.target/arm/pr54300.C        (.../branches/gcc-4_8-branch)
 
8827
@@ -0,0 +1,61 @@
 
8828
+/* { dg-do run } */
 
8829
+/* { dg-require-effective-target arm_neon } */
 
8830
+/* { dg-options "-O2" } */
 
8831
+/* { dg-add-options arm_neon } */
 
8832
+
 
8833
+#include <arm_neon.h>
 
8834
+#include <stdlib.h>
 
8835
+
 
8836
+struct __attribute__ ((aligned(8))) _v16u8_ {
 
8837
+  uint8x16_t val;
 
8838
+  _v16u8_( const int16x8_t &src) { val = vreinterpretq_u8_s16(src); }
 
8839
+  operator int16x8_t () const { return vreinterpretq_s16_u8(val); }
 
8840
+};
 
8841
+typedef struct _v16u8_ v16u8;
 
8842
+
 
8843
+struct __attribute__ ((aligned(4))) _v8u8_ {
 
8844
+  uint8x8_t val;
 
8845
+  _v8u8_( const uint8x8_t &src) { val = src; }
 
8846
+  operator int16x4_t () const { return vreinterpret_s16_u8(val); }
 
8847
+};
 
8848
+typedef struct _v8u8_ v8u8;
 
8849
+
 
8850
+typedef v16u8                v8i16;
 
8851
+typedef int32x4_t            v4i32;
 
8852
+typedef const short         cv1i16;
 
8853
+typedef const unsigned char cv1u8;
 
8854
+typedef const v8i16         cv8i16;
 
8855
+
 
8856
+static inline __attribute__((always_inline)) v8u8 zero_64(){ return vdup_n_u8( 0 ); }
 
8857
+
 
8858
+static inline __attribute__((always_inline)) v8i16 loadlo_8i16( cv8i16* p ){
 
8859
+  return vcombine_s16( vld1_s16( (cv1i16 *)p ), zero_64() );
 
8860
+}
 
8861
+static inline __attribute__((always_inline)) v8i16 _loadlo_8i16( cv8i16* p, int offset ){
 
8862
+  return loadlo_8i16( (cv8i16*)(&((cv1u8*)p)[offset]) );
 
8863
+}
 
8864
+
 
8865
+void __attribute__((noinline))
 
8866
+test(unsigned short *_Inp, int32_t *_Out,
 
8867
+     unsigned int s1v, unsigned int dv0,
 
8868
+     unsigned int smask_v)
 
8869
+{
 
8870
+  int32x4_t c = vdupq_n_s32(0);
 
8871
+
 
8872
+  for(unsigned int sv=0 ; sv!=dv0 ; sv=(sv+s1v)&smask_v )
 
8873
+    {
 
8874
+      int32x4_t s;
 
8875
+      s = vmovl_s16( vget_low_s16( _loadlo_8i16( (cv8i16*) _Inp, sv ) ) );
 
8876
+      c = vaddq_s32( c, s );
 
8877
+    }
 
8878
+  vst1q_s32( _Out, c );
 
8879
+}
 
8880
+
 
8881
+main()
 
8882
+{
 
8883
+  unsigned short a[4] = {1, 2, 3, 4};
 
8884
+  int32_t b[4] = {0, 0, 0, 0};
 
8885
+  test(a, b, 1, 1, ~0);
 
8886
+  if (b[0] != 1 || b[1] != 2 || b[2] != 3 || b[3] != 4)
 
8887
+    abort();
 
8888
+}
 
8889
Index: gcc/testsuite/gcc.target/arm/pr59826.c
 
8890
===================================================================
 
8891
--- a/src/gcc/testsuite/gcc.target/arm/pr59826.c        (.../tags/gcc_4_8_2_release)
 
8892
+++ b/src/gcc/testsuite/gcc.target/arm/pr59826.c        (.../branches/gcc-4_8-branch)
 
8893
@@ -0,0 +1,35 @@
 
8894
+/* { dg-do compile } */
 
8895
+/* { dg-options "-mthumb -mcpu=cortex-m4 -fprefetch-loop-arrays -O2" }  */
 
8896
+
 
8897
+typedef struct genxWriter_rec * genxWriter;
 
8898
+typedef unsigned char * utf8;
 
8899
+typedef const unsigned char * constUtf8;
 
8900
+
 
8901
+int genxScrubText(genxWriter w, constUtf8 in, utf8 out)
 
8902
+{
 
8903
+  int problems = 0;
 
8904
+  constUtf8 last = in;
 
8905
+
 
8906
+  while (*in)
 
8907
+  {
 
8908
+    int c = genxNextUnicodeChar(&in);
 
8909
+    if (c == -1)
 
8910
+    {
 
8911
+      problems++;
 
8912
+      last = in;
 
8913
+      continue;
 
8914
+    }
 
8915
+
 
8916
+    if (!isXMLChar(w, c))
 
8917
+    {
 
8918
+      problems++;
 
8919
+      last = in;
 
8920
+      continue;
 
8921
+    }
 
8922
+
 
8923
+    while (last < in)
 
8924
+      *out++ = *last++;
 
8925
+  }
 
8926
+  *out = 0;
 
8927
+  return problems;
 
8928
+}
 
8929
Index: gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c
 
8930
===================================================================
 
8931
--- a/src/gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c   (.../tags/gcc_4_8_2_release)
 
8932
+++ b/src/gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c   (.../branches/gcc-4_8-branch)
 
8933
@@ -0,0 +1,21 @@
 
8934
+/* Test accuracy of long double division (glibc bug 15396).  */
 
8935
+/* { dg-do run { target powerpc*-*-linux* powerpc*-*-darwin* powerpc*-*-aix* rs6000-*-* } } */
 
8936
+/* { dg-options "-mlong-double-128" } */
 
8937
+
 
8938
+extern void exit (int);
 
8939
+extern void abort (void);
 
8940
+
 
8941
+volatile long double a = 0x1p-1024L;
 
8942
+volatile long double b = 0x3p-53L;
 
8943
+volatile long double r;
 
8944
+volatile long double expected = 0x1.55555555555555555555555555p-973L;
 
8945
+
 
8946
+int
 
8947
+main (void)
 
8948
+{
 
8949
+  r = a / b;
 
8950
+  /* Allow error up to 2ulp.  */
 
8951
+  if (__builtin_fabsl (r - expected) > 0x1p-1073L)
 
8952
+    abort ();
 
8953
+  exit (0);
 
8954
+}
 
8955
Index: gcc/testsuite/gcc.target/microblaze/others/mem_reload.c
 
8956
===================================================================
 
8957
--- a/src/gcc/testsuite/gcc.target/microblaze/others/mem_reload.c       (.../tags/gcc_4_8_2_release)
 
8958
+++ b/src/gcc/testsuite/gcc.target/microblaze/others/mem_reload.c       (.../branches/gcc-4_8-branch)
 
8959
@@ -0,0 +1,74 @@
 
8960
+/* { dg-options "-O2 -fPIC" } */
 
8961
+
 
8962
+typedef struct test_struct
 
8963
+{
 
8964
+    unsigned long long h[8];
 
8965
+    unsigned long long Nl,Nh;
 
8966
+    union {
 
8967
+        unsigned long long d[16];
 
8968
+        unsigned char p[(16*8)];
 
8969
+    } u;
 
8970
+    unsigned int num,md_len;
 
8971
+} TEST_STRUCT;
 
8972
+
 
8973
+static const unsigned long long K512[12] = {
 
8974
+    0x428a2f98d728ae22,0x7137449123ef65cd,
 
8975
+    0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc,
 
8976
+    0x3956c25bf348b538,0x59f111f1b605d019,
 
8977
+    0x923f82a4af194f9b,0xab1c5ed5da6d8118,
 
8978
+    0xd807aa98a3030242,0x12835b0145706fbe,
 
8979
+    0x243185be4ee4b28c,0x550c7dc3d5ffb4e2};
 
8980
+
 
8981
+#define ROTR(x,s)   (((x)>>s) | (x)<<(64-s))
 
8982
+#define Sigma0(x)   (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39))
 
8983
+#define Sigma1(x)   (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41))
 
8984
+#define Ch(x,y,z)   (((x) & (y)) ^ ((~(x)) & (z)))
 
8985
+#define Maj(x,y,z)  (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
 
8986
+
 
8987
+#define ROUND_00_15(i,a,b,c,d,e,f,g,h)  do {    \
 
8988
+    T1 += h + Sigma1(e) + Ch(e,f,g) + K512[i];  \
 
8989
+    h = Sigma0(a) + Maj(a,b,c);         \
 
8990
+    d += T1;    h += T1;        } while (0)
 
8991
+
 
8992
+#define ROUND_16_80(i,a,b,c,d,e,f,g,h,X)    do {    \
 
8993
+    T1 = X[(i)&0x0f] += s0 + s1 + X[(i+9)&0x0f];    \
 
8994
+    ROUND_00_15(i,a,b,c,d,e,f,g,h);     } while (0)
 
8995
+
 
8996
+static void testfunc1 (TEST_STRUCT *ctx, const void *in, unsigned int num)
 
8997
+{
 
8998
+    const unsigned long long *W=in;
 
8999
+    unsigned long long  a,b,c,d,e,f,g,h,s0,s1,T1;
 
9000
+    unsigned long long  X[16];
 
9001
+    int i;
 
9002
+
 
9003
+    while (num--) {
 
9004
+
 
9005
+        T1 = X[0] = W[0];   ROUND_00_15(0,a,b,c,d,e,f,g,h);
 
9006
+        T1 = X[1] = W[1];   ROUND_00_15(1,h,a,b,c,d,e,f,g);
 
9007
+        T1 = X[2] = W[2];   ROUND_00_15(2,g,h,a,b,c,d,e,f);
 
9008
+        T1 = X[3] = W[3];   ROUND_00_15(3,f,g,h,a,b,c,d,e);
 
9009
+        T1 = X[4] = W[4];   ROUND_00_15(4,e,f,g,h,a,b,c,d);
 
9010
+        T1 = X[5] = W[5];   ROUND_00_15(5,d,e,f,g,h,a,b,c);
 
9011
+        T1 = X[6] = W[6];   ROUND_00_15(6,c,d,e,f,g,h,a,b);
 
9012
+        T1 = X[7] = W[7];   ROUND_00_15(7,b,c,d,e,f,g,h,a);
 
9013
+        T1 = X[8] = W[8];   ROUND_00_15(8,a,b,c,d,e,f,g,h);
 
9014
+        T1 = X[9] = W[9];   ROUND_00_15(9,h,a,b,c,d,e,f,g);
 
9015
+
 
9016
+        for (i=16;i<80;i+=8)
 
9017
+        {
 
9018
+            ROUND_16_80(i+0,a,b,c,d,e,f,g,h,X);
 
9019
+        }
 
9020
+
 
9021
+        ctx->h[4] += e; ctx->h[5] += f; ctx->h[6] += g; ctx->h[7] += h;
 
9022
+    }
 
9023
+}
 
9024
+
 
9025
+int testfunc2 (TEST_STRUCT *c, const void *_data, unsigned int len)
 
9026
+{
 
9027
+    const unsigned char *data=(const unsigned char *)_data;
 
9028
+
 
9029
+    unsigned char *p=(unsigned char *)c->u.p;
 
9030
+
 
9031
+    testfunc1 (c,p,0);
 
9032
+    testfunc1 (c,data,len/sizeof(c->u));
 
9033
+}
 
9034
Index: gcc/testsuite/gcc.target/microblaze/others/builtin-trap.c
 
9035
===================================================================
 
9036
--- a/src/gcc/testsuite/gcc.target/microblaze/others/builtin-trap.c     (.../tags/gcc_4_8_2_release)
 
9037
+++ b/src/gcc/testsuite/gcc.target/microblaze/others/builtin-trap.c     (.../branches/gcc-4_8-branch)
 
9038
@@ -0,0 +1,8 @@
 
9039
+/* { dg-do compile } */
 
9040
+
 
9041
+void trap ()
 
9042
+{
 
9043
+  __builtin_trap ();
 
9044
+}
 
9045
+
 
9046
+/* { dg-final { scan-assembler "brki\tr0,-1" } } */
 
9047
\ No newline at end of file
 
9048
Index: gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c
 
9049
===================================================================
 
9050
--- a/src/gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c       (.../tags/gcc_4_8_2_release)
 
9051
+++ b/src/gcc/testsuite/gcc.target/microblaze/isa/fcmp4.c       (.../branches/gcc-4_8-branch)
 
9052
@@ -0,0 +1,9 @@
 
9053
+/* { dg-options "-O3 -mcpu=v6.00.a -mhard-float" } */
 
9054
+
 
9055
+void float_func(float f1, float f2, float f3)
 
9056
+{
 
9057
+  /* { dg-final { scan-assembler "fcmp\.eq\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */
 
9058
+  /* { dg-final { scan-assembler "fcmp\.le\tr(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1]),r(\[0-9]\|\[1-2]\[0-9]\|3\[0-1])\[^0-9]" } } */
 
9059
+    if(f1==f2 && f1<=f3)
 
9060
+        print ("f1 eq f2 && f1 le f3");
 
9061
+}
 
9062
Index: gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c
 
9063
===================================================================
 
9064
--- a/src/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c  (.../tags/gcc_4_8_2_release)
 
9065
+++ b/src/gcc/testsuite/gcc.target/aarch64/scalar_intrinsics.c  (.../branches/gcc-4_8-branch)
 
9066
@@ -1,8 +1,14 @@
 
9067
 /* { dg-do compile } */
 
9068
 /* { dg-options "-O2" } */
 
9069
 
 
9070
-#include "../../../config/aarch64/arm_neon.h"
 
9071
+#include <arm_neon.h>
 
9072
 
 
9073
+/* Used to force a variable to a SIMD register.  */
 
9074
+#define force_simd(V1)   asm volatile ("mov %d0, %1.d[0]"      \
 
9075
+          : "=w"(V1)                                           \
 
9076
+          : "w"(V1)                                            \
 
9077
+          : /* No clobbers */);
 
9078
+
 
9079
 /* { dg-final { scan-assembler-times "\\tadd\\tx\[0-9\]+" 2 } } */
 
9080
 
 
9081
 uint64x1_t
 
9082
@@ -31,7 +37,12 @@
 
9083
 uint64x1_t
 
9084
 test_vceqd_s64 (int64x1_t a, int64x1_t b)
 
9085
 {
 
9086
-  return vceqd_s64 (a, b);
 
9087
+  uint64x1_t res;
 
9088
+  force_simd (a);
 
9089
+  force_simd (b);
 
9090
+  res = vceqd_s64 (a, b);
 
9091
+  force_simd (res);
 
9092
+  return res;
 
9093
 }
 
9094
 
 
9095
 /* { dg-final { scan-assembler-times "\\tcmeq\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
 
9096
@@ -39,7 +50,11 @@
 
9097
 uint64x1_t
 
9098
 test_vceqzd_s64 (int64x1_t a)
 
9099
 {
 
9100
-  return vceqzd_s64 (a);
 
9101
+  uint64x1_t res;
 
9102
+  force_simd (a);
 
9103
+  res = vceqzd_s64 (a);
 
9104
+  force_simd (res);
 
9105
+  return res;
 
9106
 }
 
9107
 
 
9108
 /* { dg-final { scan-assembler-times "\\tcmge\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 2 } } */
 
9109
@@ -47,21 +62,36 @@
 
9110
 uint64x1_t
 
9111
 test_vcged_s64 (int64x1_t a, int64x1_t b)
 
9112
 {
 
9113
-  return vcged_s64 (a, b);
 
9114
+  uint64x1_t res;
 
9115
+  force_simd (a);
 
9116
+  force_simd (b);
 
9117
+  res = vcged_s64 (a, b);
 
9118
+  force_simd (res);
 
9119
+  return res;
 
9120
 }
 
9121
 
 
9122
 uint64x1_t
 
9123
 test_vcled_s64 (int64x1_t a, int64x1_t b)
 
9124
 {
 
9125
-  return vcled_s64 (a, b);
 
9126
+  uint64x1_t res;
 
9127
+  force_simd (a);
 
9128
+  force_simd (b);
 
9129
+  res = vcled_s64 (a, b);
 
9130
+  force_simd (res);
 
9131
+  return res;
 
9132
 }
 
9133
 
 
9134
-/* { dg-final { scan-assembler-times "\\tcmge\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
 
9135
+/* Idiom recognition will cause this testcase not to generate
 
9136
+   the expected cmge instruction, so do not check for it.  */
 
9137
 
 
9138
 uint64x1_t
 
9139
 test_vcgezd_s64 (int64x1_t a)
 
9140
 {
 
9141
-  return vcgezd_s64 (a);
 
9142
+  uint64x1_t res;
 
9143
+  force_simd (a);
 
9144
+  res = vcgezd_s64 (a);
 
9145
+  force_simd (res);
 
9146
+  return res;
 
9147
 }
 
9148
 
 
9149
 /* { dg-final { scan-assembler-times "\\tcmhs\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 1 } } */
 
9150
@@ -69,7 +99,12 @@
 
9151
 uint64x1_t
 
9152
 test_vcged_u64 (uint64x1_t a, uint64x1_t b)
 
9153
 {
 
9154
-  return vcged_u64 (a, b);
 
9155
+  uint64x1_t res;
 
9156
+  force_simd (a);
 
9157
+  force_simd (b);
 
9158
+  res = vcged_u64 (a, b);
 
9159
+  force_simd (res);
 
9160
+  return res;
 
9161
 }
 
9162
 
 
9163
 /* { dg-final { scan-assembler-times "\\tcmgt\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 2 } } */
 
9164
@@ -77,13 +112,23 @@
 
9165
 uint64x1_t
 
9166
 test_vcgtd_s64 (int64x1_t a, int64x1_t b)
 
9167
 {
 
9168
-  return vcgtd_s64 (a, b);
 
9169
+  uint64x1_t res;
 
9170
+  force_simd (a);
 
9171
+  force_simd (b);
 
9172
+  res = vcgtd_s64 (a, b);
 
9173
+  force_simd (res);
 
9174
+  return res;
 
9175
 }
 
9176
 
 
9177
 uint64x1_t
 
9178
 test_vcltd_s64 (int64x1_t a, int64x1_t b)
 
9179
 {
 
9180
-  return vcltd_s64 (a, b);
 
9181
+  uint64x1_t res;
 
9182
+  force_simd (a);
 
9183
+  force_simd (b);
 
9184
+  res = vcltd_s64 (a, b);
 
9185
+  force_simd (res);
 
9186
+  return res;
 
9187
 }
 
9188
 
 
9189
 /* { dg-final { scan-assembler-times "\\tcmgt\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
 
9190
@@ -91,7 +136,11 @@
 
9191
 uint64x1_t
 
9192
 test_vcgtzd_s64 (int64x1_t a)
 
9193
 {
 
9194
-  return vcgtzd_s64 (a);
 
9195
+  uint64x1_t res;
 
9196
+  force_simd (a);
 
9197
+  res = vcgtzd_s64 (a);
 
9198
+  force_simd (res);
 
9199
+  return res;
 
9200
 }
 
9201
 
 
9202
 /* { dg-final { scan-assembler-times "\\tcmhi\\td\[0-9\]+, d\[0-9\]+, d\[0-9\]+" 1 } } */
 
9203
@@ -99,7 +148,12 @@
 
9204
 uint64x1_t
 
9205
 test_vcgtd_u64 (uint64x1_t a, uint64x1_t b)
 
9206
 {
 
9207
-  return vcgtd_u64 (a, b);
 
9208
+  uint64x1_t res;
 
9209
+  force_simd (a);
 
9210
+  force_simd (b);
 
9211
+  res = vcgtd_u64 (a, b);
 
9212
+  force_simd (res);
 
9213
+  return res;
 
9214
 }
 
9215
 
 
9216
 /* { dg-final { scan-assembler-times "\\tcmle\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
 
9217
@@ -107,15 +161,24 @@
 
9218
 uint64x1_t
 
9219
 test_vclezd_s64 (int64x1_t a)
 
9220
 {
 
9221
-  return vclezd_s64 (a);
 
9222
+  uint64x1_t res;
 
9223
+  force_simd (a);
 
9224
+  res = vclezd_s64 (a);
 
9225
+  force_simd (res);
 
9226
+  return res;
 
9227
 }
 
9228
 
 
9229
-/* { dg-final { scan-assembler-times "\\tcmlt\\td\[0-9\]+, d\[0-9\]+, #?0" 1 } } */
 
9230
+/* Idiom recognition will cause this testcase not to generate
 
9231
+   the expected cmlt instruction, so do not check for it.  */
 
9232
 
 
9233
 uint64x1_t
 
9234
 test_vcltzd_s64 (int64x1_t a)
 
9235
 {
 
9236
-  return vcltzd_s64 (a);
 
9237
+  uint64x1_t res;
 
9238
+  force_simd (a);
 
9239
+  res = vcltzd_s64 (a);
 
9240
+  force_simd (res);
 
9241
+  return res;
 
9242
 }
 
9243
 
 
9244
 /* { dg-final { scan-assembler-times "\\tdup\\tb\[0-9\]+, v\[0-9\]+\.b" 2 } } */
 
9245
@@ -179,13 +242,23 @@
 
9246
 int64x1_t
 
9247
 test_vtst_s64 (int64x1_t a, int64x1_t b)
 
9248
 {
 
9249
-  return vtstd_s64 (a, b);
 
9250
+  uint64x1_t res;
 
9251
+  force_simd (a);
 
9252
+  force_simd (b);
 
9253
+  res = vtstd_s64 (a, b);
 
9254
+  force_simd (res);
 
9255
+  return res;
 
9256
 }
 
9257
 
 
9258
 uint64x1_t
 
9259
 test_vtst_u64 (uint64x1_t a, uint64x1_t b)
 
9260
 {
 
9261
-  return vtstd_u64 (a, b);
 
9262
+  uint64x1_t res;
 
9263
+  force_simd (a);
 
9264
+  force_simd (b);
 
9265
+  res = vtstd_s64 (a, b);
 
9266
+  force_simd (res);
 
9267
+  return res;
 
9268
 }
 
9269
 
 
9270
 /* { dg-final { scan-assembler-times "\\taddp\\td\[0-9\]+, v\[0-9\]+\.2d" 1 } } */
 
9271
@@ -722,8 +795,11 @@
 
9272
   return vrshld_u64 (a, b);
 
9273
 }
 
9274
 
 
9275
-/* { dg-final { scan-assembler-times "\\tasr\\tx\[0-9\]+" 1 } } */
 
9276
+/* Other intrinsics can generate an asr instruction (vcltzd, vcgezd),
 
9277
+   so we cannot check scan-assembler-times.  */
 
9278
 
 
9279
+/* { dg-final { scan-assembler "\\tasr\\tx\[0-9\]+" } } */
 
9280
+
 
9281
 int64x1_t
 
9282
 test_vshrd_n_s64 (int64x1_t a)
 
9283
 {
 
9284
Index: gcc/testsuite/gcc.target/i386/pr59405.c
 
9285
===================================================================
 
9286
--- a/src/gcc/testsuite/gcc.target/i386/pr59405.c       (.../tags/gcc_4_8_2_release)
 
9287
+++ b/src/gcc/testsuite/gcc.target/i386/pr59405.c       (.../branches/gcc-4_8-branch)
 
9288
@@ -0,0 +1,24 @@
 
9289
+/* { dg-do run } */
 
9290
+/* { dg-options "-mmmx -mfpmath=387" } */
 
9291
+
 
9292
+#include "mmx-check.h"
 
9293
+
 
9294
+#include <mmintrin.h>
 
9295
+
 
9296
+typedef float float32x2_t __attribute__ ((vector_size (8)));
 
9297
+
 
9298
+float
 
9299
+foo32x2_be (float32x2_t x)
 
9300
+{
 
9301
+  _mm_empty ();
 
9302
+  return x[1];
 
9303
+}
 
9304
+
 
9305
+static void
 
9306
+mmx_test (void)
 
9307
+{
 
9308
+  float32x2_t b = { 0.0f, 1.0f };
 
9309
+
 
9310
+  if (foo32x2_be (b) != 1.0f)
 
9311
+    abort ();
 
9312
+}
 
9313
Index: gcc/testsuite/gcc.target/i386/pr59794-5.c
 
9314
===================================================================
 
9315
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-5.c     (.../tags/gcc_4_8_2_release)
 
9316
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-5.c     (.../branches/gcc-4_8-branch)
 
9317
@@ -0,0 +1,14 @@
 
9318
+/* PR target/59794 */
 
9319
+/* { dg-do compile { target { ia32 } } } */
 
9320
+/* { dg-options "-O2 -mno-sse" } */
 
9321
+/* { dg-skip-if "no SSE vector" { *-*-mingw* } } */
 
9322
+
 
9323
+typedef int __v4si __attribute__ ((__vector_size__ (16)));
 
9324
+
 
9325
+extern __v4si x;
 
9326
+
 
9327
+__v4si
 
9328
+foo (void)
 
9329
+{ /* { dg-warning "SSE vector return without SSE enabled changes the ABI" } */
 
9330
+  return x;
 
9331
+}
 
9332
Index: gcc/testsuite/gcc.target/i386/avx-vzeroupper-17.c
 
9333
===================================================================
 
9334
--- a/src/gcc/testsuite/gcc.target/i386/avx-vzeroupper-17.c     (.../tags/gcc_4_8_2_release)
 
9335
+++ b/src/gcc/testsuite/gcc.target/i386/avx-vzeroupper-17.c     (.../branches/gcc-4_8-branch)
 
9336
@@ -1,5 +1,5 @@
 
9337
 /* { dg-do compile { target lp64 } } */
 
9338
-/* { dg-options "-O2 -mavx -mabi=ms -mtune=generic -dp" } */
 
9339
+/* { dg-options "-O2 -mavx -mabi=ms -maccumulate-outgoing-args -dp" } */
 
9340
 
 
9341
 typedef float __m256 __attribute__ ((__vector_size__ (32), __may_alias__));
 
9342
 
 
9343
Index: gcc/testsuite/gcc.target/i386/pr54694.c
 
9344
===================================================================
 
9345
--- a/src/gcc/testsuite/gcc.target/i386/pr54694.c       (.../tags/gcc_4_8_2_release)
 
9346
+++ b/src/gcc/testsuite/gcc.target/i386/pr54694.c       (.../branches/gcc-4_8-branch)
 
9347
@@ -0,0 +1,11 @@
 
9348
+/* { dg-do compile } */
 
9349
+/* { dg-options "-O" } */
 
9350
+
 
9351
+register void *hfp __asm__("%ebp");    /* { dg-message "note: for" } */
 
9352
+
 
9353
+extern void g(void *);
 
9354
+
 
9355
+void f(int x)                  /* { dg-error "frame pointer required" } */
 
9356
+{
 
9357
+  g(__builtin_alloca(x));
 
9358
+}
 
9359
Index: gcc/testsuite/gcc.target/i386/pr59470.c
 
9360
===================================================================
 
9361
--- a/src/gcc/testsuite/gcc.target/i386/pr59470.c       (.../tags/gcc_4_8_2_release)
 
9362
+++ b/src/gcc/testsuite/gcc.target/i386/pr59470.c       (.../branches/gcc-4_8-branch)
 
9363
@@ -0,0 +1,17 @@
 
9364
+/* PR middle-end/58956 */
 
9365
+/* PR middle-end/59470 */
 
9366
+/* { dg-do run } */
 
9367
+/* { dg-options "-O2" } */
 
9368
+
 
9369
+int a, b, d[1024];
 
9370
+
 
9371
+int
 
9372
+main ()
 
9373
+{
 
9374
+  int c = a;
 
9375
+  asm ("{movl $6, (%2); movl $1, %0|mov dword ptr [%2], 6; mov %0, 1}"
 
9376
+       : "=r" (d[c]) : "rm" (b), "r" (&a) : "memory");
 
9377
+  if (d[0] != 1 || d[6] != 0)
 
9378
+    __builtin_abort ();
 
9379
+  return 0;
 
9380
+}
 
9381
Index: gcc/testsuite/gcc.target/i386/pr59034-1.c
 
9382
===================================================================
 
9383
--- a/src/gcc/testsuite/gcc.target/i386/pr59034-1.c     (.../tags/gcc_4_8_2_release)
 
9384
+++ b/src/gcc/testsuite/gcc.target/i386/pr59034-1.c     (.../branches/gcc-4_8-branch)
 
9385
@@ -0,0 +1,10 @@
 
9386
+/* { dg-do compile { target { ! { ia32 } } } } */
 
9387
+/* { dg-require-effective-target maybe_x32 } */
 
9388
+/* { dg-options "-O -mx32 -mtune=corei7 -maddress-mode=short" } */
 
9389
+
 
9390
+extern int foo(int, ...);
 
9391
+int bar(void) {
 
9392
+  long double l = 1.2345E6;
 
9393
+  foo(0, l);
 
9394
+  return 0;
 
9395
+}
 
9396
Index: gcc/testsuite/gcc.target/i386/pr58690.c
 
9397
===================================================================
 
9398
--- a/src/gcc/testsuite/gcc.target/i386/pr58690.c       (.../tags/gcc_4_8_2_release)
 
9399
+++ b/src/gcc/testsuite/gcc.target/i386/pr58690.c       (.../branches/gcc-4_8-branch)
 
9400
@@ -0,0 +1,14 @@
 
9401
+/* { dg-do compile { target { ! { ia32 } } } } */
 
9402
+/* { dg-require-effective-target maybe_x32 } */
 
9403
+/* { dg-options "-O2 -mx32 -maddress-mode=short" } */
 
9404
+
 
9405
+struct gomp_thread
 
9406
+{
 
9407
+  char foo[41];
 
9408
+};
 
9409
+extern __thread struct gomp_thread gomp_tls_data;
 
9410
+void
 
9411
+foo (void)
 
9412
+{
 
9413
+  __builtin_memset (&gomp_tls_data, '\0', sizeof (gomp_tls_data));
 
9414
+}
 
9415
Index: gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c
 
9416
===================================================================
 
9417
--- a/src/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c     (.../tags/gcc_4_8_2_release)
 
9418
+++ b/src/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c     (.../branches/gcc-4_8-branch)
 
9419
@@ -15,7 +15,7 @@
 
9420
 avx_test (void)
 
9421
 {
 
9422
   union256d u;
 
9423
-  double e [4] __attribute__ ((aligned (8))) = {0.0};
 
9424
+  double e [4] __attribute__ ((aligned (32))) = {0.0};
 
9425
 
 
9426
   u.x = _mm256_set_pd (39578.467285, 7856.342941, 85632.783567, 47563.234215);
 
9427
 
 
9428
Index: gcc/testsuite/gcc.target/i386/pr9771-1.c
 
9429
===================================================================
 
9430
--- a/src/gcc/testsuite/gcc.target/i386/pr9771-1.c      (.../tags/gcc_4_8_2_release)
 
9431
+++ b/src/gcc/testsuite/gcc.target/i386/pr9771-1.c      (.../branches/gcc-4_8-branch)
 
9432
@@ -45,7 +45,17 @@
 
9433
   exit(0);
 
9434
 }
 
9435
 
 
9436
-int main()
 
9437
+/* main usually performs dynamic realignment of the stack in case
 
9438
+   _start would fail to properly align the stack, but for dynamic
 
9439
+   stack realignment we need frame pointer which is incompatible
 
9440
+   with -ffixed-ebp and the global register var.  So, cheat here
 
9441
+   and hide from the compiler that main is really main.  */
 
9442
+#define ASMNAME(cname)  ASMNAME2 (__USER_LABEL_PREFIX__, cname)
 
9443
+#define ASMNAME2(prefix, cname) STRING (prefix) cname
 
9444
+#define STRING(x)    #x
 
9445
+int real_main() __asm (ASMNAME ("main"));
 
9446
+
 
9447
+int real_main()
 
9448
 {
 
9449
   test();
 
9450
   return 0;
 
9451
Index: gcc/testsuite/gcc.target/i386/pr59794-2.c
 
9452
===================================================================
 
9453
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-2.c     (.../tags/gcc_4_8_2_release)
 
9454
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-2.c     (.../branches/gcc-4_8-branch)
 
9455
@@ -0,0 +1,15 @@
 
9456
+/* PR target/59794 */
 
9457
+/* { dg-prune-output "ABI for passing parameters" } */
 
9458
+/* { dg-options "-O2 -mno-sse" } */
 
9459
+/* { dg-skip-if "no SSE vector" { *-*-mingw* } } */
 
9460
+
 
9461
+typedef double __v2df __attribute__ ((__vector_size__ (16)));
 
9462
+
 
9463
+extern __v2df x;
 
9464
+
 
9465
+extern void bar (__v2df);
 
9466
+void
 
9467
+foo (void)
 
9468
+{
 
9469
+  bar (x); /* { dg-message "warning: SSE vector argument without SSE enabled changes the ABI" } */
 
9470
+}
 
9471
Index: gcc/testsuite/gcc.target/i386/pr57003.c
 
9472
===================================================================
 
9473
--- a/src/gcc/testsuite/gcc.target/i386/pr57003.c       (.../tags/gcc_4_8_2_release)
 
9474
+++ b/src/gcc/testsuite/gcc.target/i386/pr57003.c       (.../branches/gcc-4_8-branch)
 
9475
@@ -1,6 +1,6 @@
 
9476
 /* PR rtl-optimization/57003 */
 
9477
 /* { dg-do run } */
 
9478
-/* { dg-options "-O2" } */
 
9479
+/* { dg-options "-O2 -maccumulate-outgoing-args" } */
 
9480
 
 
9481
 #define N 2001
 
9482
 unsigned short *b, *c, *d;
 
9483
Index: gcc/testsuite/gcc.target/i386/pr59929.c
 
9484
===================================================================
 
9485
--- a/src/gcc/testsuite/gcc.target/i386/pr59929.c       (.../tags/gcc_4_8_2_release)
 
9486
+++ b/src/gcc/testsuite/gcc.target/i386/pr59929.c       (.../branches/gcc-4_8-branch)
 
9487
@@ -0,0 +1,55 @@
 
9488
+/* { dg-do run } */
 
9489
+/* { dg-options "-O0 -mno-accumulate-outgoing-args" } */
 
9490
+/* { dg-options "-O0 -mno-accumulate-outgoing-args -mx32 -maddress-mode=short" { target x32 } } */
 
9491
+
 
9492
+void
 
9493
+__attribute__ ((noinline))
 
9494
+test (float x1, float x2, float x3, float x4, float x5, float x6,
 
9495
+      float x7, float x8, float x9, float x10, float x11, float x12,
 
9496
+      float x13, float x14, float x15, float x16)
 
9497
+{
 
9498
+  if (x1 != 91
 
9499
+      || x2 != 92
 
9500
+      || x3 != 93
 
9501
+      || x4 != 94
 
9502
+      || x5 != 95
 
9503
+      || x6 != 96
 
9504
+      || x7 != 97
 
9505
+      || x8 != 98
 
9506
+      || x9 != 99
 
9507
+      || x10 != 100
 
9508
+      || x11 != 101
 
9509
+      || x12 != 102
 
9510
+      || x13 != 103
 
9511
+      || x14 != 104
 
9512
+      || x15 != 105
 
9513
+      || x16 != 106)
 
9514
+    __builtin_abort ();
 
9515
+}
 
9516
+
 
9517
+float x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13,
 
9518
+      x14, x15, x16;
 
9519
+
 
9520
+int
 
9521
+main ()
 
9522
+{
 
9523
+  x1 = 91;
 
9524
+  x2 = 92;
 
9525
+  x3 = 93;
 
9526
+  x4 = 94;
 
9527
+  x5 = 95;
 
9528
+  x6 = 96;
 
9529
+  x7 = 97;
 
9530
+  x8 = 98;
 
9531
+  x9 = 99;
 
9532
+  x10 = 100;
 
9533
+  x11 = 101;
 
9534
+  x12 = 102;
 
9535
+  x13 = 103;
 
9536
+  x14 = 104;
 
9537
+  x15 = 105;
 
9538
+  x16 = 106;
 
9539
+  test (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13,
 
9540
+       x14, x15, x16);
 
9541
+  return 0;
 
9542
+}
 
9543
Index: gcc/testsuite/gcc.target/i386/pr59794-6.c
 
9544
===================================================================
 
9545
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-6.c     (.../tags/gcc_4_8_2_release)
 
9546
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-6.c     (.../branches/gcc-4_8-branch)
 
9547
@@ -0,0 +1,14 @@
 
9548
+/* PR target/59794 */
 
9549
+/* { dg-do compile { target { ! ia32 } } } */
 
9550
+/* { dg-options "-O2 -mno-sse" } */
 
9551
+/* { dg-skip-if "no SSE vector" { *-*-mingw* } } */
 
9552
+
 
9553
+typedef int __v4si __attribute__ ((__vector_size__ (16)));
 
9554
+
 
9555
+extern __v4si x;
 
9556
+
 
9557
+__v4si
 
9558
+foo (void)
 
9559
+{ /* { dg-error "SSE register return with SSE disabled" } */
 
9560
+  return x;
 
9561
+}
 
9562
Index: gcc/testsuite/gcc.target/i386/avx-vzeroupper-18.c
 
9563
===================================================================
 
9564
--- a/src/gcc/testsuite/gcc.target/i386/avx-vzeroupper-18.c     (.../tags/gcc_4_8_2_release)
 
9565
+++ b/src/gcc/testsuite/gcc.target/i386/avx-vzeroupper-18.c     (.../branches/gcc-4_8-branch)
 
9566
@@ -1,5 +1,5 @@
 
9567
 /* { dg-do compile { target lp64 } } */
 
9568
-/* { dg-options "-O0 -mavx -mabi=ms -mtune=generic -dp" } */
 
9569
+/* { dg-options "-O0 -mavx -mabi=ms -maccumulate-outgoing-args -dp" } */
 
9570
 
 
9571
 typedef float __m256 __attribute__ ((__vector_size__ (32), __may_alias__));
 
9572
 
 
9573
Index: gcc/testsuite/gcc.target/i386/sse2-movapd-1.c
 
9574
===================================================================
 
9575
--- a/src/gcc/testsuite/gcc.target/i386/sse2-movapd-1.c (.../tags/gcc_4_8_2_release)
 
9576
+++ b/src/gcc/testsuite/gcc.target/i386/sse2-movapd-1.c (.../branches/gcc-4_8-branch)
 
9577
@@ -25,7 +25,7 @@
 
9578
 TEST (void)
 
9579
 {
 
9580
   union128d u;
 
9581
-  double e[2] __attribute__ ((aligned (8))) = {2134.3343,1234.635654};
 
9582
+  double e[2] __attribute__ ((aligned (16))) = {2134.3343,1234.635654};
 
9583
 
 
9584
   u.x = test (e);   
 
9585
 
 
9586
Index: gcc/testsuite/gcc.target/i386/pr59021.c
 
9587
===================================================================
 
9588
--- a/src/gcc/testsuite/gcc.target/i386/pr59021.c       (.../tags/gcc_4_8_2_release)
 
9589
+++ b/src/gcc/testsuite/gcc.target/i386/pr59021.c       (.../branches/gcc-4_8-branch)
 
9590
@@ -0,0 +1,23 @@
 
9591
+/* { dg-do compile } */
 
9592
+/* { dg-options "-O2 -mavx -mvzeroupper" } */
 
9593
+
 
9594
+extern void abort (void);
 
9595
+
 
9596
+struct S {
 
9597
+  int i1;
 
9598
+  int i2;
 
9599
+  int i3;
 
9600
+};
 
9601
+
 
9602
+typedef double v4df  __attribute__ ((vector_size (32)));
 
9603
+
 
9604
+extern int foo (v4df, int i1, int i2, int i3, int i4, int i5, struct S s);
 
9605
+
 
9606
+void bar (v4df v, struct S s)
 
9607
+{
 
9608
+  int r = foo (v, 1, 2, 3, 4, 5, s);
 
9609
+  if (r)
 
9610
+    abort ();
 
9611
+}
 
9612
+
 
9613
+/* { dg-final { scan-assembler-not "vzeroupper" } } */
 
9614
Index: gcc/testsuite/gcc.target/i386/pr59034-2.c
 
9615
===================================================================
 
9616
--- a/src/gcc/testsuite/gcc.target/i386/pr59034-2.c     (.../tags/gcc_4_8_2_release)
 
9617
+++ b/src/gcc/testsuite/gcc.target/i386/pr59034-2.c     (.../branches/gcc-4_8-branch)
 
9618
@@ -0,0 +1,10 @@
 
9619
+/* { dg-do compile { target { ! { ia32 } } } } */
 
9620
+/* { dg-require-effective-target maybe_x32 } */
 
9621
+/* { dg-options "-O -mx32 -mtune=corei7 -maddress-mode=long" } */
 
9622
+
 
9623
+extern int foo(int, ...);
 
9624
+int bar(void) {
 
9625
+  long double l = 1.2345E6;
 
9626
+  foo(0, l);
 
9627
+  return 0;
 
9628
+}
 
9629
Index: gcc/testsuite/gcc.target/i386/pr59794-3.c
 
9630
===================================================================
 
9631
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-3.c     (.../tags/gcc_4_8_2_release)
 
9632
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-3.c     (.../branches/gcc-4_8-branch)
 
9633
@@ -0,0 +1,15 @@
 
9634
+/* PR target/59794 */
 
9635
+/* { dg-prune-output "ABI for passing parameters" } */
 
9636
+/* { dg-options "-O2 -mno-avx" } */
 
9637
+/* { dg-skip-if "no AVX vector" { *-*-mingw* } } */
 
9638
+
 
9639
+typedef int __v8si __attribute__ ((__vector_size__ (32)));
 
9640
+
 
9641
+extern __v8si x;
 
9642
+
 
9643
+extern void bar (__v8si);
 
9644
+void
 
9645
+foo (void)
 
9646
+{
 
9647
+  bar (x); /* { dg-message "warning: AVX vector argument without AVX enabled changes the ABI" } */
 
9648
+}
 
9649
Index: gcc/testsuite/gcc.target/i386/pr59839.c
 
9650
===================================================================
 
9651
--- a/src/gcc/testsuite/gcc.target/i386/pr59839.c       (.../tags/gcc_4_8_2_release)
 
9652
+++ b/src/gcc/testsuite/gcc.target/i386/pr59839.c       (.../branches/gcc-4_8-branch)
 
9653
@@ -0,0 +1,12 @@
 
9654
+/* PR target/59839 */
 
9655
+/* { dg-do compile } */
 
9656
+/* { dg-options "-O0 -mavx2" } */
 
9657
+
 
9658
+#include <x86intrin.h>
 
9659
+
 
9660
+void
 
9661
+test (const float *x)
 
9662
+{
 
9663
+  __m256i i = _mm256_set1_epi32 (1);
 
9664
+  __m256 d = _mm256_i32gather_ps (x, i, 1);
 
9665
+}
 
9666
Index: gcc/testsuite/gcc.target/i386/xop-frczX.c
 
9667
===================================================================
 
9668
--- a/src/gcc/testsuite/gcc.target/i386/xop-frczX.c     (.../tags/gcc_4_8_2_release)
 
9669
+++ b/src/gcc/testsuite/gcc.target/i386/xop-frczX.c     (.../branches/gcc-4_8-branch)
 
9670
@@ -0,0 +1,60 @@
 
9671
+/* { dg-do run } */
 
9672
+/* { dg-require-effective-target xop } */
 
9673
+/* { dg-options "-O2 -mxop" } */
 
9674
+
 
9675
+#include "xop-check.h"
 
9676
+
 
9677
+#include <x86intrin.h>
 
9678
+
 
9679
+void
 
9680
+check_mm_vmfrcz_sd (__m128d __A, __m128d __B)
 
9681
+{
 
9682
+  union128d a, b, c;
 
9683
+  double d[2];
 
9684
+
 
9685
+  a.x = __A;
 
9686
+  b.x = __B;
 
9687
+  c.x = _mm_frcz_sd (__A, __B);
 
9688
+  d[0] = b.a[0] - (int)b.a[0] ;
 
9689
+  d[1] = a.a[1];
 
9690
+  if (check_union128d (c, d))
 
9691
+    abort ();
 
9692
+}
 
9693
+
 
9694
+void
 
9695
+check_mm_vmfrcz_ss (__m128 __A, __m128 __B)
 
9696
+{
 
9697
+  union128 a, b, c;
 
9698
+  float f[4];
 
9699
+
 
9700
+  a.x = __A;
 
9701
+  b.x = __B;
 
9702
+  c.x = _mm_frcz_ss (__A, __B);
 
9703
+  f[0] = b.a[0] - (int)b.a[0] ;
 
9704
+  f[1] = a.a[1];
 
9705
+  f[2] = a.a[2];
 
9706
+  f[3] = a.a[3];
 
9707
+  if (check_union128 (c, f))
 
9708
+    abort ();
 
9709
+}
 
9710
+
 
9711
+static void
 
9712
+xop_test (void)
 
9713
+{
 
9714
+  union128 a, b;
 
9715
+  union128d c,d;
 
9716
+  int i;
 
9717
+
 
9718
+  for (i = 0; i < 4; i++)
 
9719
+    {
 
9720
+       a.a[i] = i + 3.5;
 
9721
+       b.a[i] = i + 7.9;
 
9722
+    }
 
9723
+  for (i = 0; i < 2; i++)
 
9724
+    {
 
9725
+       c.a[i] = i + 3.5;
 
9726
+       d.a[i] = i + 7.987654321;
 
9727
+    }
 
9728
+  check_mm_vmfrcz_ss (a.x, b.x);
 
9729
+  check_mm_vmfrcz_sd (c.x, d.x);
 
9730
+}
 
9731
Index: gcc/testsuite/gcc.target/i386/pr59794-7.c
 
9732
===================================================================
 
9733
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-7.c     (.../tags/gcc_4_8_2_release)
 
9734
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-7.c     (.../branches/gcc-4_8-branch)
 
9735
@@ -0,0 +1,13 @@
 
9736
+/* PR target/59794 */
 
9737
+/* { dg-options "-O2 -mno-avx" } */
 
9738
+/* { dg-skip-if "no AVX vector" { *-*-mingw* } } */
 
9739
+
 
9740
+typedef int __v8si __attribute__ ((__vector_size__ (32)));
 
9741
+
 
9742
+extern __v8si x;
 
9743
+
 
9744
+__v8si
 
9745
+foo (void)
 
9746
+{ /* { dg-warning "AVX vector return without AVX enabled changes the ABI" } */
 
9747
+  return x;
 
9748
+}
 
9749
Index: gcc/testsuite/gcc.target/i386/pr59625.c
 
9750
===================================================================
 
9751
--- a/src/gcc/testsuite/gcc.target/i386/pr59625.c       (.../tags/gcc_4_8_2_release)
 
9752
+++ b/src/gcc/testsuite/gcc.target/i386/pr59625.c       (.../branches/gcc-4_8-branch)
 
9753
@@ -0,0 +1,36 @@
 
9754
+/* PR target/59625 */
 
9755
+/* { dg-do compile } */
 
9756
+/* { dg-options "-O2 -mtune=atom" } */
 
9757
+
 
9758
+int
 
9759
+foo (void)
 
9760
+{
 
9761
+  asm goto ("" : : : : lab);
 
9762
+  asm goto ("" : : : : lab);
 
9763
+  asm goto ("" : : : : lab);
 
9764
+  asm goto ("" : : : : lab);
 
9765
+  asm goto ("" : : : : lab);
 
9766
+  asm goto ("" : : : : lab);
 
9767
+  asm goto ("" : : : : lab);
 
9768
+  asm goto ("" : : : : lab);
 
9769
+  asm goto ("" : : : : lab);
 
9770
+  asm goto ("" : : : : lab);
 
9771
+  asm goto ("" : : : : lab);
 
9772
+  asm goto ("" : : : : lab);
 
9773
+  asm goto ("" : : : : lab);
 
9774
+  asm goto ("" : : : : lab);
 
9775
+  asm goto ("" : : : : lab);
 
9776
+  asm goto ("" : : : : lab);
 
9777
+  asm goto ("" : : : : lab);
 
9778
+  asm goto ("" : : : : lab);
 
9779
+  asm goto ("" : : : : lab);
 
9780
+  asm goto ("" : : : : lab);
 
9781
+  return 0;
 
9782
+lab:
 
9783
+  return 1;
 
9784
+}
 
9785
+
 
9786
+/* Verify we don't consider asm goto as a jump for four jumps limit
 
9787
+   optimization.  asm goto doesn't have to contain a jump at all,
 
9788
+   the branching to labels can happen through different means.  */
 
9789
+/* { dg-final { scan-assembler-not "(p2align\[^\n\r\]*\[\n\r]*\[^\n\r\]*){8}p2align" } } */
 
9790
Index: gcc/testsuite/gcc.target/i386/sse2-movapd-2.c
 
9791
===================================================================
 
9792
--- a/src/gcc/testsuite/gcc.target/i386/sse2-movapd-2.c (.../tags/gcc_4_8_2_release)
 
9793
+++ b/src/gcc/testsuite/gcc.target/i386/sse2-movapd-2.c (.../branches/gcc-4_8-branch)
 
9794
@@ -25,7 +25,7 @@
 
9795
 TEST (void)
 
9796
 {
 
9797
   union128d u;
 
9798
-  double e[2] __attribute__ ((aligned (8))) = {0.0};
 
9799
+  double e[2] __attribute__ ((aligned (16))) = {0.0};
 
9800
 
 
9801
   u.x = _mm_set_pd (2134.3343,1234.635654);
 
9802
 
 
9803
Index: gcc/testsuite/gcc.target/i386/sse-5.c
 
9804
===================================================================
 
9805
--- a/src/gcc/testsuite/gcc.target/i386/sse-5.c (.../tags/gcc_4_8_2_release)
 
9806
+++ b/src/gcc/testsuite/gcc.target/i386/sse-5.c (.../branches/gcc-4_8-branch)
 
9807
@@ -1,6 +1,7 @@
 
9808
 /* { dg-do compile } */
 
9809
 /* { dg-require-effective-target ia32 } */
 
9810
-/* { dg-options "-Winline -Wno-psabi -O2 -mno-sse" } */
 
9811
+/* { dg-prune-output "ABI for passing parameters" } */
 
9812
+/* { dg-options "-Winline -O2 -mno-sse" } */
 
9813
 
 
9814
 typedef double v2df __attribute__ ((vector_size (16)));
 
9815
 v2df p;
 
9816
Index: gcc/testsuite/gcc.target/i386/pr39162.c
 
9817
===================================================================
 
9818
--- a/src/gcc/testsuite/gcc.target/i386/pr39162.c       (.../tags/gcc_4_8_2_release)
 
9819
+++ b/src/gcc/testsuite/gcc.target/i386/pr39162.c       (.../branches/gcc-4_8-branch)
 
9820
@@ -1,11 +1,14 @@
 
9821
 /* { dg-do compile } */
 
9822
-/* { dg-options "-O2 -Wno-psabi -msse2 -mno-avx" } */
 
9823
+/* { dg-prune-output "ABI for passing parameters" } */
 
9824
+/* { dg-options "-O2 -msse2 -mno-avx" } */
 
9825
 /* { dg-additional-options "-mabi=sysv" { target x86_64-*-mingw* } } */
 
9826
 
 
9827
 typedef long long __m256i __attribute__ ((__vector_size__ (32), __may_alias__));
 
9828
 
 
9829
-__m256i
 
9830
+extern __m256i y;
 
9831
+
 
9832
+void
 
9833
 bar (__m256i x) /* { dg-warning "AVX" "" } */
 
9834
 {
 
9835
-  return x;
 
9836
+  y = x;
 
9837
 }
 
9838
Index: gcc/testsuite/gcc.target/i386/pr58137.c
 
9839
===================================================================
 
9840
--- a/src/gcc/testsuite/gcc.target/i386/pr58137.c       (.../tags/gcc_4_8_2_release)
 
9841
+++ b/src/gcc/testsuite/gcc.target/i386/pr58137.c       (.../branches/gcc-4_8-branch)
 
9842
@@ -0,0 +1,33 @@
 
9843
+/* { dg-do compile } */
 
9844
+/* { dg-options "-O3 -mavx2" } */
 
9845
+
 
9846
+typedef unsigned int U32;
 
9847
+
 
9848
+struct sv {
 
9849
+  void* sv_any;
 
9850
+  U32 sv_refcnt;
 
9851
+  U32 sv_flags;
 
9852
+};
 
9853
+typedef struct sv SV;
 
9854
+
 
9855
+struct xrv {
 
9856
+  SV * xrv_rv;
 
9857
+};
 
9858
+typedef struct xrv XRV;
 
9859
+
 
9860
+extern XRV * PL_xrv_root;
 
9861
+
 
9862
+void
 
9863
+more_xrv (void)
 
9864
+{
 
9865
+  register XRV* xrv;
 
9866
+  register XRV* xrvend;
 
9867
+  xrv = PL_xrv_root;
 
9868
+  xrvend = &xrv[200 / sizeof (XRV) - 1];
 
9869
+  while (xrv < xrvend)
 
9870
+  {
 
9871
+    xrv->xrv_rv = (SV*)(xrv + 1);
 
9872
+    xrv++;
 
9873
+  }
 
9874
+  xrv->xrv_rv = 0;
 
9875
+}
 
9876
Index: gcc/testsuite/gcc.target/i386/pr59794-4.c
 
9877
===================================================================
 
9878
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-4.c     (.../tags/gcc_4_8_2_release)
 
9879
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-4.c     (.../branches/gcc-4_8-branch)
 
9880
@@ -0,0 +1,14 @@
 
9881
+/* PR target/59794 */
 
9882
+/* { dg-do compile { target { ia32 } } } */
 
9883
+/* { dg-options "-O2 -mno-mmx" } */
 
9884
+/* { dg-skip-if "no MMX vector" { *-*-mingw* } } */
 
9885
+
 
9886
+typedef int __v2si __attribute__ ((__vector_size__ (8)));
 
9887
+
 
9888
+extern __v2si x;
 
9889
+
 
9890
+__v2si
 
9891
+foo (void)
 
9892
+{ /* { dg-warning "MMX vector return without MMX enabled changes the ABI" } */
 
9893
+  return x;
 
9894
+}
 
9895
Index: gcc/testsuite/gcc.target/i386/avx-vzeroupper-16.c
 
9896
===================================================================
 
9897
--- a/src/gcc/testsuite/gcc.target/i386/avx-vzeroupper-16.c     (.../tags/gcc_4_8_2_release)
 
9898
+++ b/src/gcc/testsuite/gcc.target/i386/avx-vzeroupper-16.c     (.../branches/gcc-4_8-branch)
 
9899
@@ -1,5 +1,5 @@
 
9900
 /* { dg-do compile { target lp64 } } */
 
9901
-/* { dg-options "-O2 -mavx -mabi=ms -mtune=generic -dp" } */
 
9902
+/* { dg-options "-O2 -mavx -mabi=ms -maccumulate-outgoing-args -dp" } */
 
9903
 
 
9904
 typedef float __m256 __attribute__ ((__vector_size__ (32), __may_alias__));
 
9905
 
 
9906
Index: gcc/testsuite/gcc.target/i386/pr30315.c
 
9907
===================================================================
 
9908
--- a/src/gcc/testsuite/gcc.target/i386/pr30315.c       (.../tags/gcc_4_8_2_release)
 
9909
+++ b/src/gcc/testsuite/gcc.target/i386/pr30315.c       (.../branches/gcc-4_8-branch)
 
9910
@@ -1,6 +1,6 @@
 
9911
 /* { dg-do compile } */
 
9912
 /* { dg-options "-O2" } */
 
9913
-/* { dg-final { scan-assembler-times "cmp" 4 } } */
 
9914
+/* { dg-final { scan-assembler-not "cmp" } } */
 
9915
 
 
9916
 extern void abort (void);
 
9917
 int c;
 
9918
@@ -34,39 +34,10 @@
 
9919
 }
 
9920
 #define PLUSCCONLY(T, t) PLUSCCONLY1(T, t, a) PLUSCCONLY1(T, t, b)
 
9921
 
 
9922
-#define MINUSCC(T, t)  \
 
9923
-T minuscc##t (T a, T b)        \
 
9924
-{      \
 
9925
-  T difference = a - b;        \
 
9926
-  if (difference > a)  \
 
9927
-    abort ();          \
 
9928
-  return difference;   \
 
9929
-}
 
9930
-
 
9931
-#define DECCC(T, t)    \
 
9932
-T deccc##t (T a, T b)  \
 
9933
-{      \
 
9934
-  T difference = a - b;        \
 
9935
-  if (difference > a)  \
 
9936
-    c --;              \
 
9937
-  return difference;   \
 
9938
-}
 
9939
-
 
9940
-#define MINUSCCONLY(T, t)      \
 
9941
-void minuscconly##t (T a, T b) \
 
9942
-{      \
 
9943
-  T difference = a - b;        \
 
9944
-  if (difference > a)  \
 
9945
-    abort ();          \
 
9946
-}
 
9947
-
 
9948
 #define TEST(T, t)     \
 
9949
   PLUSCC(T, t)         \
 
9950
   PLUSCCONLY(T, t)     \
 
9951
-  INCCC(T, t)          \
 
9952
-  MINUSCC(T, t)                \
 
9953
-  MINUSCCONLY(T, t)    \
 
9954
-  DECCC(T, t)
 
9955
+  INCCC(T, t)
 
9956
 
 
9957
 TEST (unsigned long,  l)
 
9958
 TEST (unsigned int,   i)
 
9959
@@ -84,14 +55,3 @@
 
9960
 
 
9961
 PLUSCCZEXT(a)
 
9962
 PLUSCCZEXT(b)
 
9963
-
 
9964
-#define MINUSCCZEXT    \
 
9965
-unsigned long minuscczext (unsigned int a, unsigned int b)     \
 
9966
-{      \
 
9967
-  unsigned int difference = a - b;     \
 
9968
-  if (difference > a)          \
 
9969
-    abort ();                  \
 
9970
-  return difference;           \
 
9971
-}
 
9972
-
 
9973
-MINUSCCZEXT
 
9974
Index: gcc/testsuite/gcc.target/i386/pr43869.c
 
9975
===================================================================
 
9976
--- a/src/gcc/testsuite/gcc.target/i386/pr43869.c       (.../tags/gcc_4_8_2_release)
 
9977
+++ b/src/gcc/testsuite/gcc.target/i386/pr43869.c       (.../branches/gcc-4_8-branch)
 
9978
@@ -1,4 +1,5 @@
 
9979
 /* { dg-do compile { target lp64 } } */
 
9980
+/* { dg-options "-maccumulate-outgoing-args" } */
 
9981
 
 
9982
 int __attribute__((__noinline__))
 
9983
 bugged(float f1, float f2, float f3, float f4,
 
9984
Index: gcc/testsuite/gcc.target/i386/pr43546.c
 
9985
===================================================================
 
9986
--- a/src/gcc/testsuite/gcc.target/i386/pr43546.c       (.../tags/gcc_4_8_2_release)
 
9987
+++ b/src/gcc/testsuite/gcc.target/i386/pr43546.c       (.../branches/gcc-4_8-branch)
 
9988
@@ -0,0 +1,12 @@
 
9989
+/* PR target/43546 */
 
9990
+/* { dg-do compile } */
 
9991
+/* { dg-options "-O1" } */
 
9992
+/* { dg-additional-options "-mpreferred-stack-boundary=2 -msseregparm -msse" { target ia32 } } */
 
9993
+
 
9994
+extern void bar (double);
 
9995
+
 
9996
+void
 
9997
+foo (void)
 
9998
+{
 
9999
+  bar (1.0);
 
10000
+}
 
10001
Index: gcc/testsuite/gcc.target/i386/pr43662.c
 
10002
===================================================================
 
10003
--- a/src/gcc/testsuite/gcc.target/i386/pr43662.c       (.../tags/gcc_4_8_2_release)
 
10004
+++ b/src/gcc/testsuite/gcc.target/i386/pr43662.c       (.../branches/gcc-4_8-branch)
 
10005
@@ -1,5 +1,5 @@
 
10006
 /* { dg-do compile { target lp64 } } */
 
10007
-/* { dg-options "-O2" } */
 
10008
+/* { dg-options "-O2 -maccumulate-outgoing-args" } */
 
10009
 
 
10010
 void __attribute__ ((ms_abi)) foo (void)
 
10011
 {
 
10012
Index: gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c
 
10013
===================================================================
 
10014
--- a/src/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c     (.../tags/gcc_4_8_2_release)
 
10015
+++ b/src/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c     (.../branches/gcc-4_8-branch)
 
10016
@@ -15,7 +15,7 @@
 
10017
 avx_test (void)
 
10018
 {
 
10019
   union256d u;
 
10020
-  double e [4] __attribute__ ((aligned (8)))  = {41124.234,2344.2354,8653.65635,856.43576};
 
10021
+  double e [4] __attribute__ ((aligned (32)))  = {41124.234,2344.2354,8653.65635,856.43576};
 
10022
 
 
10023
   u.x = test (e);
 
10024
 
 
10025
Index: gcc/testsuite/gcc.target/i386/nest-1.c
 
10026
===================================================================
 
10027
--- a/src/gcc/testsuite/gcc.target/i386/nest-1.c        (.../tags/gcc_4_8_2_release)
 
10028
+++ b/src/gcc/testsuite/gcc.target/i386/nest-1.c        (.../branches/gcc-4_8-branch)
 
10029
@@ -0,0 +1,14 @@
 
10030
+/* { dg-do compile { target llp64 } } */
 
10031
+/* { dg-options "" } */
 
10032
+
 
10033
+void foo (int i)
 
10034
+{
 
10035
+  void nested (void)
 
10036
+  {
 
10037
+    char arr[(1U << 31) + 4U];
 
10038
+    arr[i] = 0;
 
10039
+  }
 
10040
+
 
10041
+  nested ();
 
10042
+}
 
10043
+
 
10044
Index: gcc/testsuite/gcc.target/i386/pr59794-1.c
 
10045
===================================================================
 
10046
--- a/src/gcc/testsuite/gcc.target/i386/pr59794-1.c     (.../tags/gcc_4_8_2_release)
 
10047
+++ b/src/gcc/testsuite/gcc.target/i386/pr59794-1.c     (.../branches/gcc-4_8-branch)
 
10048
@@ -0,0 +1,15 @@
 
10049
+/* PR target/59794 */
 
10050
+/* { dg-do compile { target { ia32 } } } */
 
10051
+/* { dg-options "-O2 -mno-mmx" } */
 
10052
+/* { dg-skip-if "no MMX vector" { *-*-mingw* } } */
 
10053
+
 
10054
+typedef int __v2si __attribute__ ((__vector_size__ (8)));
 
10055
+
 
10056
+extern __v2si x;
 
10057
+
 
10058
+extern void bar (__v2si);
 
10059
+void
 
10060
+foo (void)
 
10061
+{
 
10062
+  bar (x); /* { dg-message "warning: MMX vector argument without MMX enabled changes the ABI" } */
 
10063
+}
 
10064
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/pr38891.c
 
10065
===================================================================
 
10066
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/pr38891.c (.../tags/gcc_4_8_2_release)
 
10067
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/pr38891.c (.../branches/gcc-4_8-branch)
 
10068
@@ -1,7 +1,7 @@
 
10069
 /* Test for cross x86_64<->w64 abi standard calls.
 
10070
 */
 
10071
 /* { dg-do compile } */
 
10072
-/* { dg-options "-mno-sse" } */
 
10073
+/* { dg-options "-mno-sse -maccumulate-outgoing-args" } */
 
10074
 #include "callabi.h"
 
10075
 
 
10076
 long double
 
10077
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-1.c
 
10078
===================================================================
 
10079
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-1.c (.../tags/gcc_4_8_2_release)
 
10080
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-1.c (.../branches/gcc-4_8-branch)
 
10081
@@ -2,7 +2,7 @@
 
10082
 */
 
10083
 /* Origin: Kai Tietz <kai.tietz@onevision.com> */
 
10084
 /* { dg-do run } */
 
10085
-/* { dg-options "-std=gnu99" } */
 
10086
+/* { dg-options "-std=gnu99 -maccumulate-outgoing-args" } */
 
10087
 #include "callabi.h"
 
10088
 
 
10089
 extern __SIZE_TYPE__ strlen (const char *);
 
10090
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-2.c
 
10091
===================================================================
 
10092
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-2.c (.../tags/gcc_4_8_2_release)
 
10093
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-2.c (.../branches/gcc-4_8-branch)
 
10094
@@ -2,7 +2,7 @@
 
10095
 */
 
10096
 /* Origin: Kai Tietz <kai.tietz@onevision.com> */
 
10097
 /* { dg-do run } */
 
10098
-/* { dg-options "-std=gnu99" } */
 
10099
+/* { dg-options "-std=gnu99 -maccumulate-outgoing-args" } */
 
10100
 #include "callabi.h"
 
10101
 
 
10102
 extern void abort (void);
 
10103
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-3.c
 
10104
===================================================================
 
10105
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-3.c (.../tags/gcc_4_8_2_release)
 
10106
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-3.c (.../branches/gcc-4_8-branch)
 
10107
@@ -2,7 +2,7 @@
 
10108
 */
 
10109
 /* Origin: Kai Tietz <kai.tietz@onevision.com> */
 
10110
 /* { dg-do run } */
 
10111
-/* { dg-options "-std=gnu99" } */
 
10112
+/* { dg-options "-std=gnu99 -maccumulate-outgoing-args" } */
 
10113
 #include "callabi.h"
 
10114
 
 
10115
 extern void abort (void);
 
10116
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4a.c
 
10117
===================================================================
 
10118
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4a.c        (.../tags/gcc_4_8_2_release)
 
10119
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4a.c        (.../branches/gcc-4_8-branch)
 
10120
@@ -1,6 +1,6 @@
 
10121
 /* Test for cross x86_64<->w64 abi va_list calls.  */
 
10122
 /* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
 
10123
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */
 
10124
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin -maccumulate-outgoing-args" } */
 
10125
 /* { dg-additional-sources "vaarg-4b.c" } */
 
10126
 
 
10127
 extern __SIZE_TYPE__ __attribute__ ((sysv_abi)) strlen (const char *);
 
10128
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5a.c
 
10129
===================================================================
 
10130
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5a.c        (.../tags/gcc_4_8_2_release)
 
10131
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5a.c        (.../branches/gcc-4_8-branch)
 
10132
@@ -1,6 +1,6 @@
 
10133
 /* Test for cross x86_64<->w64 abi va_list calls.  */
 
10134
 /* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
 
10135
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */
 
10136
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin -maccumulate-outgoing-args" } */
 
10137
 /* { dg-additional-sources "vaarg-5b.c" } */
 
10138
 
 
10139
 extern void __attribute__ ((sysv_abi)) abort (void);
 
10140
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4b.c
 
10141
===================================================================
 
10142
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4b.c        (.../tags/gcc_4_8_2_release)
 
10143
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4b.c        (.../branches/gcc-4_8-branch)
 
10144
@@ -1,5 +1,5 @@
 
10145
 /* Test for cross x86_64<->w64 abi va_list calls.  */
 
10146
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */
 
10147
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin -maccumulate-outgoing-args" } */
 
10148
 
 
10149
 #include <stdarg.h>
 
10150
 
 
10151
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5b.c
 
10152
===================================================================
 
10153
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5b.c        (.../tags/gcc_4_8_2_release)
 
10154
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5b.c        (.../branches/gcc-4_8-branch)
 
10155
@@ -1,5 +1,5 @@
 
10156
 /* Test for cross x86_64<->w64 abi va_list calls.  */
 
10157
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */
 
10158
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin -maccumulate-outgoing-args" } */
 
10159
 
 
10160
 #include <stdarg.h>
 
10161
 
 
10162
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-1.c
 
10163
===================================================================
 
10164
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-1.c  (.../tags/gcc_4_8_2_release)
 
10165
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-1.c  (.../branches/gcc-4_8-branch)
 
10166
@@ -1,5 +1,5 @@
 
10167
 /* { dg-do compile } */
 
10168
-/* { dg-options "-O2 -mabi=sysv" } */
 
10169
+/* { dg-options "-O2 -mabi=sysv -maccumulate-outgoing-args" } */
 
10170
 
 
10171
 __attribute__ ((ms_abi))
 
10172
 int foo (void)
 
10173
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c
 
10174
===================================================================
 
10175
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c  (.../tags/gcc_4_8_2_release)
 
10176
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/leaf-2.c  (.../branches/gcc-4_8-branch)
 
10177
@@ -1,5 +1,5 @@
 
10178
 /* { dg-do compile } */
 
10179
-/* { dg-options "-O2 -mabi=sysv" } */
 
10180
+/* { dg-options "-O2 -mabi=sysv -maccumulate-outgoing-args" } */
 
10181
 
 
10182
 extern int glb1, gbl2, gbl3;
 
10183
 
 
10184
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/func-1.c
 
10185
===================================================================
 
10186
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-1.c  (.../tags/gcc_4_8_2_release)
 
10187
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-1.c  (.../branches/gcc-4_8-branch)
 
10188
@@ -2,7 +2,7 @@
 
10189
 */
 
10190
 /* Origin: Kai Tietz <kai.tietz@onevision.com> */
 
10191
 /* { dg-do run } */
 
10192
-/* { dg-options "-std=gnu99 -ffast-math" } */
 
10193
+/* { dg-options "-std=gnu99 -ffast-math -maccumulate-outgoing-args" } */
 
10194
 #include "callabi.h"
 
10195
 
 
10196
 extern void abort (void);
 
10197
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2a.c
 
10198
===================================================================
 
10199
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2a.c        (.../tags/gcc_4_8_2_release)
 
10200
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2a.c        (.../branches/gcc-4_8-branch)
 
10201
@@ -1,6 +1,6 @@
 
10202
 /* Test for cross x86_64<->w64 abi standard calls via variable.  */
 
10203
 /* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
 
10204
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */
 
10205
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin -maccumulate-outgoing-args" } */
 
10206
 /* { dg-additional-sources "func-indirect-2b.c" } */
 
10207
 
 
10208
 extern void __attribute__ ((sysv_abi)) abort (void);
 
10209
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect.c
 
10210
===================================================================
 
10211
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect.c   (.../tags/gcc_4_8_2_release)
 
10212
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect.c   (.../branches/gcc-4_8-branch)
 
10213
@@ -2,7 +2,7 @@
 
10214
 */
 
10215
 /* Origin: Kai Tietz <kai.tietz@onevision.com> */
 
10216
 /* { dg-do run } */
 
10217
-/* { dg-options "-std=gnu99 -ffast-math" } */
 
10218
+/* { dg-options "-std=gnu99 -ffast-math -maccumulate-outgoing-args" } */
 
10219
 #include "callabi.h"
 
10220
 
 
10221
 extern void abort (void);
 
10222
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2a.c
 
10223
===================================================================
 
10224
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2a.c (.../tags/gcc_4_8_2_release)
 
10225
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2a.c (.../branches/gcc-4_8-branch)
 
10226
@@ -1,6 +1,6 @@
 
10227
 /* Test for cross x86_64<->w64 abi standard calls.  */
 
10228
 /* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
 
10229
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */
 
10230
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin -maccumulate-outgoing-args" } */
 
10231
 /* { dg-additional-sources "func-2b.c" } */
 
10232
 
 
10233
 extern void __attribute__ ((sysv_abi)) abort (void);
 
10234
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2b.c
 
10235
===================================================================
 
10236
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2b.c        (.../tags/gcc_4_8_2_release)
 
10237
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2b.c        (.../branches/gcc-4_8-branch)
 
10238
@@ -1,5 +1,5 @@
 
10239
 /* Test for cross x86_64<->w64 abi standard calls via variable.  */
 
10240
-/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */
 
10241
+/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin -maccumulate-outgoing-args" } */
 
10242
 
 
10243
 typedef int (*func)(void *, char *, char *, short, long long);
 
10244
 
 
10245
Index: gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2b.c
 
10246
===================================================================
 
10247
--- a/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2b.c (.../tags/gcc_4_8_2_release)
 
10248
+++ b/src/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2b.c (.../branches/gcc-4_8-branch)
 
10249
@@ -1,5 +1,5 @@
 
10250
 /* Test for cross x86_64<->w64 abi standard calls.  */
 
10251
-/* { dg-options "-mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */
 
10252
+/* { dg-options "-mabi=ms -std=gnu99 -ffast-math -fno-builtin -maccumulate-outgoing-args" } */
 
10253
 
 
10254
 long double func_cross (long double a, double b, float c, long d, int e,
 
10255
                        char f)
 
10256
Index: gcc/testsuite/gcc.target/s390/htm-xl-intrin-1.c
 
10257
===================================================================
 
10258
--- a/src/gcc/testsuite/gcc.target/s390/htm-xl-intrin-1.c       (.../tags/gcc_4_8_2_release)
 
10259
+++ b/src/gcc/testsuite/gcc.target/s390/htm-xl-intrin-1.c       (.../branches/gcc-4_8-branch)
 
10260
@@ -1,37 +0,0 @@
 
10261
-/* This checks the availability of the XL compiler intrinsics for
 
10262
-   transactional execution with the expected prototypes.  */
 
10263
-
 
10264
-/* { dg-do compile } */
 
10265
-/* { dg-options "-O3 -march=zEC12 -mzarch" } */
 
10266
-
 
10267
-#include <htmxlintrin.h>
 
10268
-
 
10269
-int a = 0;
 
10270
-unsigned long g;
 
10271
-
 
10272
-int
 
10273
-foo ()
 
10274
-{
 
10275
-  struct __htm_tdb *tdb_struct;
 
10276
-  void * const tdb = tdb_struct;
 
10277
-  long result;
 
10278
-  unsigned char code;
 
10279
-
 
10280
-  result = __TM_simple_begin ();
 
10281
-  result = __TM_begin (tdb);
 
10282
-  result = __TM_end ();
 
10283
-  __TM_abort ();
 
10284
-  __TM_named_abort (42);
 
10285
-  __TM_non_transactional_store (&g, 42);
 
10286
-  result = __TM_nesting_depth (tdb);
 
10287
-
 
10288
-  result = __TM_is_user_abort (tdb);
 
10289
-  result = __TM_is_named_user_abort (tdb, &code);
 
10290
-  result = __TM_is_illegal (tdb);
 
10291
-  result = __TM_is_footprint_exceeded (tdb);
 
10292
-  result = __TM_is_nested_too_deep (tdb);
 
10293
-  result = __TM_is_conflict (tdb);
 
10294
-  result = __TM_is_failure_persistent (result);
 
10295
-  result = __TM_failure_address (tdb);
 
10296
-  result = __TM_failure_code (tdb);
 
10297
-}
 
10298
Index: gcc/testsuite/gcc.target/s390/htm-1.c
 
10299
===================================================================
 
10300
--- a/src/gcc/testsuite/gcc.target/s390/htm-1.c (.../tags/gcc_4_8_2_release)
 
10301
+++ b/src/gcc/testsuite/gcc.target/s390/htm-1.c (.../branches/gcc-4_8-branch)
 
10302
@@ -1,73 +0,0 @@
 
10303
-/* This checks the availability of the low-level builtins introduced
 
10304
-   for transactional execution.  */
 
10305
-
 
10306
-/* { dg-do compile } */
 
10307
-/* { dg-options "-O3 -march=zEC12 -mzarch" } */
 
10308
-
 
10309
-#include <stdint.h>
 
10310
-#include <htmintrin.h>
 
10311
-
 
10312
-int global = 0;
 
10313
-uint64_t g;
 
10314
-struct __htm_tdb global_tdb;
 
10315
-
 
10316
-int
 
10317
-foo (struct __htm_tdb* tdb, int reg, int *mem, uint64_t *mem64)
 
10318
-{
 
10319
-
 
10320
-  int cc;
 
10321
-  int n;
 
10322
-
 
10323
-  cc = __builtin_tbegin (0);
 
10324
-  cc = __builtin_tbegin (tdb);
 
10325
-  cc = __builtin_tbegin (&global_tdb);
 
10326
-
 
10327
-  cc = __builtin_tbegin_nofloat (0);
 
10328
-  cc = __builtin_tbegin_nofloat (&global_tdb);
 
10329
-
 
10330
-  cc = __builtin_tbegin_retry (0, 42);
 
10331
-  cc = __builtin_tbegin_retry (0, reg);
 
10332
-  cc = __builtin_tbegin_retry (0, *mem);
 
10333
-  cc = __builtin_tbegin_retry (0, global);
 
10334
-  cc = __builtin_tbegin_retry (tdb, 42);
 
10335
-  cc = __builtin_tbegin_retry (&global_tdb, 42);
 
10336
-
 
10337
-  cc = __builtin_tbegin_retry_nofloat (0, 42);
 
10338
-  cc = __builtin_tbegin_retry_nofloat (0, reg);
 
10339
-  cc = __builtin_tbegin_retry_nofloat (0, *mem);
 
10340
-  cc = __builtin_tbegin_retry_nofloat (0, global);
 
10341
-  cc = __builtin_tbegin_retry_nofloat (&global_tdb, 42);
 
10342
-
 
10343
-  __builtin_tbeginc ();
 
10344
-
 
10345
-  n = __builtin_tx_nesting_depth();
 
10346
-
 
10347
-  __builtin_non_tx_store(&g, 23);
 
10348
-  __builtin_non_tx_store(mem64, 23);
 
10349
-  __builtin_non_tx_store(&g, reg);
 
10350
-  __builtin_non_tx_store(&g, *mem);
 
10351
-  __builtin_non_tx_store(&g, global);
 
10352
-
 
10353
-  __builtin_tabort (42 + 255);
 
10354
-  __builtin_tabort (reg);
 
10355
-  /* { dg-final { scan-assembler-times "tabort\t255" 1 } } */
 
10356
-  __builtin_tabort (reg + 255);
 
10357
-  __builtin_tabort (*mem);
 
10358
-  __builtin_tabort (global);
 
10359
-  /* Here global + 255 gets reloaded into a reg.  Better would be to
 
10360
-     just reload global or *mem and get the +255 for free as address
 
10361
-     arithmetic.  */
 
10362
-  __builtin_tabort (*mem + 255);
 
10363
-  __builtin_tabort (global + 255);
 
10364
-
 
10365
-  __builtin_tend();
 
10366
-
 
10367
-  __builtin_tx_assist (23);
 
10368
-  __builtin_tx_assist (reg);
 
10369
-  __builtin_tx_assist (*mem);
 
10370
-  __builtin_tx_assist (global);
 
10371
-}
 
10372
-
 
10373
-/* Make sure the tdb NULL argument ends up as immediate value in the
 
10374
-   instruction.  */
 
10375
-/* { dg-final { scan-assembler-times "tbegin\t0," 10 } } */
 
10376
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c
 
10377
===================================================================
 
10378
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c    (.../tags/gcc_4_8_2_release)
 
10379
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c    (.../branches/gcc-4_8-branch)
 
10380
@@ -0,0 +1,27 @@
 
10381
+/* Functional tests for the function hotpatching feature.  */
 
10382
+
 
10383
+/* { dg-do run } */
 
10384
+/* { dg-options "-O3 -mzarch -mhotpatch" } */
 
10385
+
 
10386
+#include <stdio.h>
 
10387
+
 
10388
+void hp1(void)
 
10389
+{
 
10390
+  printf("hello, world!\n");
 
10391
+}
 
10392
+
 
10393
+inline void hp2(void)
 
10394
+{
 
10395
+  printf("hello, world!\n");
 
10396
+}
 
10397
+
 
10398
+__attribute__ ((always_inline))
 
10399
+void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
 
10400
+{
 
10401
+  printf("hello, world!\n");
 
10402
+} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
 
10403
+
 
10404
+int main (void)
 
10405
+{
 
10406
+  return 0;
 
10407
+}
 
10408
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c
 
10409
===================================================================
 
10410
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c    (.../tags/gcc_4_8_2_release)
 
10411
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c    (.../branches/gcc-4_8-branch)
 
10412
@@ -0,0 +1,27 @@
 
10413
+/* Functional tests for the function hotpatching feature.  */
 
10414
+
 
10415
+/* { dg-do run } */
 
10416
+/* { dg-options "-O3 -mzarch -mhotpatch=0" } */
 
10417
+
 
10418
+#include <stdio.h>
 
10419
+
 
10420
+void hp1(void)
 
10421
+{
 
10422
+  printf("hello, world!\n");
 
10423
+}
 
10424
+
 
10425
+inline void hp2(void)
 
10426
+{
 
10427
+  printf("hello, world!\n");
 
10428
+}
 
10429
+
 
10430
+__attribute__ ((always_inline))
 
10431
+void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
 
10432
+{
 
10433
+  printf("hello, world!\n");
 
10434
+} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
 
10435
+
 
10436
+int main (void)
 
10437
+{
 
10438
+  return 0;
 
10439
+}
 
10440
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c
 
10441
===================================================================
 
10442
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c    (.../tags/gcc_4_8_2_release)
 
10443
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c    (.../branches/gcc-4_8-branch)
 
10444
@@ -0,0 +1,27 @@
 
10445
+/* Functional tests for the function hotpatching feature.  */
 
10446
+
 
10447
+/* { dg-do run } */
 
10448
+/* { dg-options "-O3 -mzarch -mhotpatch=1" } */
 
10449
+
 
10450
+#include <stdio.h>
 
10451
+
 
10452
+void hp1(void)
 
10453
+{
 
10454
+  printf("hello, world!\n");
 
10455
+}
 
10456
+
 
10457
+inline void hp2(void)
 
10458
+{
 
10459
+  printf("hello, world!\n");
 
10460
+}
 
10461
+
 
10462
+__attribute__ ((always_inline))
 
10463
+void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
 
10464
+{
 
10465
+  printf("hello, world!\n");
 
10466
+} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
 
10467
+
 
10468
+int main (void)
 
10469
+{
 
10470
+  return 0;
 
10471
+}
 
10472
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c
 
10473
===================================================================
 
10474
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c    (.../tags/gcc_4_8_2_release)
 
10475
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c    (.../branches/gcc-4_8-branch)
 
10476
@@ -0,0 +1,11 @@
 
10477
+/* Functional tests for the function hotpatching feature.  */
 
10478
+
 
10479
+/* { dg-do compile } */
 
10480
+/* { dg-options "-O3 -mzarch -mhotpatch=-1" } */
 
10481
+
 
10482
+int main (void)
 
10483
+{
 
10484
+  return 0;
 
10485
+}
 
10486
+
 
10487
+/* { dg-excess-errors "argument to '-mhotpatch=' should be a non-negative integer" } */
 
10488
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c
 
10489
===================================================================
 
10490
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c    (.../tags/gcc_4_8_2_release)
 
10491
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c    (.../branches/gcc-4_8-branch)
 
10492
@@ -0,0 +1,28 @@
 
10493
+/* Functional tests for the function hotpatching feature.  */
 
10494
+
 
10495
+/* { dg-do compile } */
 
10496
+/* { dg-options "-O3 -mzarch -mhotpatch=1000000" } */
 
10497
+
 
10498
+#include <stdio.h>
 
10499
+
 
10500
+void hp1(void)
 
10501
+{
 
10502
+  printf("hello, world!\n");
 
10503
+}
 
10504
+
 
10505
+__attribute__ ((hotpatch(1000000)))
 
10506
+void hp2(void)
 
10507
+{
 
10508
+  printf("hello, world!\n");
 
10509
+}
 
10510
+
 
10511
+__attribute__ ((hotpatch(1000001)))
 
10512
+void hp3(void)
 
10513
+{ /* { dg-error "requested 'hotpatch' attribute is not a non-negative integer constant or too large .max. 1000000." } */
 
10514
+  printf("hello, world!\n");
 
10515
+}
 
10516
+
 
10517
+int main (void)
 
10518
+{
 
10519
+  return 0;
 
10520
+}
 
10521
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c
 
10522
===================================================================
 
10523
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c    (.../tags/gcc_4_8_2_release)
 
10524
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c    (.../branches/gcc-4_8-branch)
 
10525
@@ -0,0 +1,11 @@
 
10526
+/* Functional tests for the function hotpatching feature.  */
 
10527
+
 
10528
+/* { dg-do compile } */
 
10529
+/* { dg-options "-O3 -mzarch -mhotpatch=1000001" } */
 
10530
+
 
10531
+int main (void)
 
10532
+{
 
10533
+  return 0;
 
10534
+}
 
10535
+
 
10536
+/* { dg-excess-errors "argument to '-mhotpatch=' is too large .max. 1000000." } */
 
10537
Index: gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c
 
10538
===================================================================
 
10539
--- a/src/gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c        (.../tags/gcc_4_8_2_release)
 
10540
+++ b/src/gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c        (.../branches/gcc-4_8-branch)
 
10541
@@ -0,0 +1,165 @@
 
10542
+/* This checks the availability of the low-level builtins introduced
 
10543
+   for transactional execution.  */
 
10544
+
 
10545
+/* { dg-do compile } */
 
10546
+/* { dg-require-effective-target htm } */
 
10547
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
 
10548
+
 
10549
+#include <stdint.h>
 
10550
+#include <htmintrin.h>
 
10551
+
 
10552
+int global = 0;
 
10553
+uint64_t g;
 
10554
+struct __htm_tdb global_tdb;
 
10555
+
 
10556
+int
 
10557
+foo (struct __htm_tdb* tdb, int reg, int *mem, uint64_t *mem64)
 
10558
+{
 
10559
+
 
10560
+  int cc;
 
10561
+  int n;
 
10562
+
 
10563
+  __builtin_tbegin ((void *)0);
 
10564
+  __builtin_tbegin ((void *)-99999);
 
10565
+  __builtin_tbegin ((void *)99999);
 
10566
+  while (__builtin_tbegin ((void *)0) != 0)
 
10567
+  {
 
10568
+  }
 
10569
+  cc = __builtin_tbegin ((void *)0x12345678);
 
10570
+  cc = __builtin_tbegin (tdb);
 
10571
+  cc = __builtin_tbegin (&global_tdb);
 
10572
+  cc = __builtin_tbegin ((void *)(long long)(reg + 0x12345678));
 
10573
+  cc = __builtin_tbegin ((void *)(long long)(reg));
 
10574
+
 
10575
+  __builtin_tbegin_nofloat ((void *)0);
 
10576
+  __builtin_tbegin_nofloat ((void *)-99999);
 
10577
+  __builtin_tbegin_nofloat ((void *)99999);
 
10578
+  cc = __builtin_tbegin_nofloat ((void *)0x12345678);
 
10579
+  cc = __builtin_tbegin_nofloat (tdb);
 
10580
+  cc = __builtin_tbegin_nofloat (&global_tdb);
 
10581
+  cc = __builtin_tbegin_nofloat ((void *)(long long)(reg + 0x12345678));
 
10582
+  cc = __builtin_tbegin_nofloat ((void *)(long long)(reg));
 
10583
+
 
10584
+  __builtin_tbegin_retry ((void *)0, 0);
 
10585
+  cc = __builtin_tbegin_retry ((void *)0, 1);
 
10586
+  cc = __builtin_tbegin_retry ((void *)0, -1);
 
10587
+  cc = __builtin_tbegin_retry ((void *)0, 42);
 
10588
+  cc = __builtin_tbegin_retry ((void *)0, reg);
 
10589
+  cc = __builtin_tbegin_retry ((void *)0, *mem);
 
10590
+  cc = __builtin_tbegin_retry ((void *)0, global);
 
10591
+  cc = __builtin_tbegin_retry (tdb, 42);
 
10592
+  cc = __builtin_tbegin_retry (&global_tdb, 42);
 
10593
+  cc = __builtin_tbegin_retry ((void *)0x12345678, global);
 
10594
+  cc = __builtin_tbegin_retry (
 
10595
+         (void *)(long long) (reg + 0x12345678), global + 1);
 
10596
+  cc = __builtin_tbegin_retry (
 
10597
+         (void *)(long long)(reg), global - 1);
 
10598
+
 
10599
+  __builtin_tbegin_retry_nofloat ((void *)0, 0);
 
10600
+  cc = __builtin_tbegin_retry_nofloat ((void *)0, 1);
 
10601
+  cc = __builtin_tbegin_retry_nofloat ((void *)0, -1);
 
10602
+  cc = __builtin_tbegin_retry_nofloat ((void *)0, 42);
 
10603
+  cc = __builtin_tbegin_retry_nofloat ((void *)0, reg);
 
10604
+  cc = __builtin_tbegin_retry_nofloat ((void *)0, *mem);
 
10605
+  cc = __builtin_tbegin_retry_nofloat ((void *)0, global);
 
10606
+  cc = __builtin_tbegin_retry_nofloat (tdb, 42);
 
10607
+  cc = __builtin_tbegin_retry_nofloat (&global_tdb, 42);
 
10608
+  cc = __builtin_tbegin_retry_nofloat ((void *)0x12345678, global);
 
10609
+  cc = __builtin_tbegin_retry_nofloat (
 
10610
+         (void *)(long long) (reg + 0x12345678), global + 1);
 
10611
+  cc = __builtin_tbegin_retry_nofloat (
 
10612
+         (void *)(long long)(reg), global - 1);
 
10613
+
 
10614
+  __builtin_tbeginc ();
 
10615
+
 
10616
+  __builtin_tx_nesting_depth ();
 
10617
+  n = __builtin_tx_nesting_depth ();
 
10618
+
 
10619
+  __builtin_non_tx_store (mem64, 0);
 
10620
+  {
 
10621
+         const uint64_t val_var = 0x1122334455667788;
 
10622
+
 
10623
+         __builtin_non_tx_store (mem64, val_var);
 
10624
+  }
 
10625
+  __builtin_non_tx_store (mem64, (uint64_t)reg);
 
10626
+  __builtin_non_tx_store (mem64, g);
 
10627
+  __builtin_non_tx_store ((uint64_t *)0, 0);
 
10628
+  __builtin_non_tx_store ((uint64_t *)0x12345678, 0);
 
10629
+  __builtin_non_tx_store (&g, 23);
 
10630
+  __builtin_non_tx_store (&g, reg);
 
10631
+  __builtin_non_tx_store (&g, *mem);
 
10632
+  __builtin_non_tx_store (&g, global);
 
10633
+
 
10634
+  __builtin_tend();
 
10635
+
 
10636
+  __builtin_tx_assist (0);
 
10637
+  __builtin_tx_assist (1);
 
10638
+  __builtin_tx_assist (reg);
 
10639
+  __builtin_tx_assist (*mem);
 
10640
+  __builtin_tx_assist (global);
 
10641
+}
 
10642
+
 
10643
+/* The taborts must go into separate function since they are
 
10644
+   "noreturn".  */
 
10645
+
 
10646
+void
 
10647
+tabort1 ()
 
10648
+{
 
10649
+  __builtin_tabort (256);
 
10650
+}
 
10651
+
 
10652
+void
 
10653
+tabort2 (int reg)
 
10654
+{
 
10655
+  __builtin_tabort (reg);
 
10656
+}
 
10657
+
 
10658
+void
 
10659
+tabort3 (int reg)
 
10660
+{
 
10661
+  /* { dg-final { scan-assembler-times "tabort\t255" 1 } } */
 
10662
+  __builtin_tabort (reg + 255);
 
10663
+}
 
10664
+
 
10665
+void
 
10666
+tabort4 (int *mem)
 
10667
+{
 
10668
+  __builtin_tabort (*mem);
 
10669
+}
 
10670
+
 
10671
+void
 
10672
+tabort5 ()
 
10673
+{
 
10674
+  __builtin_tabort (global);
 
10675
+}
 
10676
+
 
10677
+void
 
10678
+tabort6 (int *mem)
 
10679
+{
 
10680
+  /* Here global + 255 gets reloaded into a reg.  Better would be to
 
10681
+     just reload global or *mem and get the +255 for free as address
 
10682
+     arithmetic.  */
 
10683
+  __builtin_tabort (*mem + 255);
 
10684
+}
 
10685
+
 
10686
+void
 
10687
+tabort7 ()
 
10688
+{
 
10689
+  __builtin_tabort (global + 255);
 
10690
+}
 
10691
+
 
10692
+void
 
10693
+tabort8 ()
 
10694
+{
 
10695
+  __builtin_tabort (-1);
 
10696
+}
 
10697
+
 
10698
+
 
10699
+/* Make sure the tdb NULL argument ends up as immediate value in the
 
10700
+   instruction.  */
 
10701
+/* { dg-final { scan-assembler-times "tbegin\t0," 17 } } */
 
10702
+/* { dg-final { scan-assembler-times "tbegin\t" 41 } } */
 
10703
+/* Check number of occurences of certain instructions.  */
 
10704
+/* { dg-final { scan-assembler-times "tbeginc\t" 1 } } */
 
10705
+/* { dg-final { scan-assembler-times "tabort\t" 8 } } */
 
10706
+/* { dg-final { scan-assembler "ppa\t" } } */
 
10707
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c
 
10708
===================================================================
 
10709
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c    (.../tags/gcc_4_8_2_release)
 
10710
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c    (.../branches/gcc-4_8-branch)
 
10711
@@ -0,0 +1,68 @@
 
10712
+/* Functional tests for the function hotpatching feature.  */
 
10713
+
 
10714
+/* { dg-do run } */
 
10715
+/* { dg-options "-O3 -mzarch -mno-hotpatch" } */
 
10716
+
 
10717
+#include <stdio.h>
 
10718
+
 
10719
+__attribute__ ((hotpatch))
 
10720
+void hp1(void)
 
10721
+{
 
10722
+  printf("hello, world!\n");
 
10723
+}
 
10724
+
 
10725
+__attribute__ ((hotpatch))
 
10726
+inline void hp2(void)
 
10727
+{
 
10728
+  printf("hello, world!\n");
 
10729
+}
 
10730
+
 
10731
+__attribute__ ((hotpatch))
 
10732
+__attribute__ ((always_inline))
 
10733
+void hp3(void) /* { dg-warning "always_inline function might not be inlinable" } */
 
10734
+{
 
10735
+  printf("hello, world!\n");
 
10736
+} /* { dg-warning "function 'hp3' with the 'always_inline' attribute is not hotpatchable" } */
 
10737
+
 
10738
+__attribute__ ((hotpatch(0)))
 
10739
+void hp4(void)
 
10740
+{
 
10741
+  printf("hello, world!\n");
 
10742
+}
 
10743
+
 
10744
+__attribute__ ((hotpatch(0)))
 
10745
+inline void hp5(void)
 
10746
+{
 
10747
+  printf("hello, world!\n");
 
10748
+}
 
10749
+
 
10750
+__attribute__ ((hotpatch(0)))
 
10751
+__attribute__ ((always_inline))
 
10752
+void hp6(void) /* { dg-warning "always_inline function might not be inlinable" } */
 
10753
+{
 
10754
+  printf("hello, world!\n");
 
10755
+} /* { dg-warning "function 'hp6' with the 'always_inline' attribute is not hotpatchable" } */
 
10756
+
 
10757
+__attribute__ ((hotpatch(1)))
 
10758
+void hp7(void)
 
10759
+{
 
10760
+  printf("hello, world!\n");
 
10761
+}
 
10762
+
 
10763
+__attribute__ ((hotpatch(1)))
 
10764
+inline void hp8(void)
 
10765
+{
 
10766
+  printf("hello, world!\n");
 
10767
+}
 
10768
+
 
10769
+__attribute__ ((hotpatch(1)))
 
10770
+__attribute__ ((always_inline))
 
10771
+void hp9(void) /* { dg-warning "always_inline function might not be inlinable" } */
 
10772
+{
 
10773
+  printf("hello, world!\n");
 
10774
+} /* { dg-warning "function 'hp9' with the 'always_inline' attribute is not hotpatchable" } */
 
10775
+
 
10776
+int main (void)
 
10777
+{
 
10778
+  return 0;
 
10779
+}
 
10780
Index: gcc/testsuite/gcc.target/s390/htm-builtins-compile-2.c
 
10781
===================================================================
 
10782
--- a/src/gcc/testsuite/gcc.target/s390/htm-builtins-compile-2.c        (.../tags/gcc_4_8_2_release)
 
10783
+++ b/src/gcc/testsuite/gcc.target/s390/htm-builtins-compile-2.c        (.../branches/gcc-4_8-branch)
 
10784
@@ -0,0 +1,13 @@
 
10785
+/* { dg-do compile } */
 
10786
+/* { dg-require-effective-target htm } */
 
10787
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
 
10788
+
 
10789
+void must_not_compile1 (void)
 
10790
+{
 
10791
+  __builtin_tabort (0); /* { dg-error "Invalid transaction abort code:" } */
 
10792
+}
 
10793
+
 
10794
+void must_not_compile2 (void)
 
10795
+{
 
10796
+  __builtin_tabort (255); /* { dg-error "Invalid transaction abort code:" } */
 
10797
+}
 
10798
Index: gcc/testsuite/gcc.target/s390/hotpatch-compile-8.c
 
10799
===================================================================
 
10800
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-8.c    (.../tags/gcc_4_8_2_release)
 
10801
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-compile-8.c    (.../branches/gcc-4_8-branch)
 
10802
@@ -0,0 +1,23 @@
 
10803
+/* Functional tests for the function hotpatching feature.  */
 
10804
+
 
10805
+/* { dg-do run } */
 
10806
+/* { dg-options "-O3 -mzarch -mhotpatch" } */
 
10807
+
 
10808
+#include <stdio.h>
 
10809
+
 
10810
+int hp1(void)
 
10811
+{
 
10812
+  int nested1(void) /* { dg-warning "hotpatching is not compatible with nested functions" } */
 
10813
+  { return 1; }
 
10814
+
 
10815
+  __attribute__ ((hotpatch))
 
10816
+  int nested2(void) /* { dg-warning "hotpatching is not compatible with nested functions" } */
 
10817
+  { return 1; }
 
10818
+
 
10819
+  return nested1() - nested2();
 
10820
+}
 
10821
+
 
10822
+int main (void)
 
10823
+{
 
10824
+  return hp1();
 
10825
+}
 
10826
Index: gcc/testsuite/gcc.target/s390/htm-builtins-compile-3.c
 
10827
===================================================================
 
10828
--- a/src/gcc/testsuite/gcc.target/s390/htm-builtins-compile-3.c        (.../tags/gcc_4_8_2_release)
 
10829
+++ b/src/gcc/testsuite/gcc.target/s390/htm-builtins-compile-3.c        (.../branches/gcc-4_8-branch)
 
10830
@@ -0,0 +1,37 @@
 
10831
+/* This checks the availability of the XL compiler intrinsics for
 
10832
+   transactional execution with the expected prototypes.  */
 
10833
+
 
10834
+/* { dg-do compile } */
 
10835
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
 
10836
+
 
10837
+#include <htmxlintrin.h>
 
10838
+
 
10839
+int a = 0;
 
10840
+unsigned long g;
 
10841
+
 
10842
+int
 
10843
+foo ()
 
10844
+{
 
10845
+  struct __htm_tdb *tdb_struct;
 
10846
+  void * const tdb = tdb_struct;
 
10847
+  long result;
 
10848
+  unsigned char code;
 
10849
+
 
10850
+  result = __TM_simple_begin ();
 
10851
+  result = __TM_begin (tdb);
 
10852
+  result = __TM_end ();
 
10853
+  __TM_abort ();
 
10854
+  __TM_named_abort (42);
 
10855
+  __TM_non_transactional_store (&g, 42);
 
10856
+  result = __TM_nesting_depth (tdb);
 
10857
+
 
10858
+  result = __TM_is_user_abort (tdb);
 
10859
+  result = __TM_is_named_user_abort (tdb, &code);
 
10860
+  result = __TM_is_illegal (tdb);
 
10861
+  result = __TM_is_footprint_exceeded (tdb);
 
10862
+  result = __TM_is_nested_too_deep (tdb);
 
10863
+  result = __TM_is_conflict (tdb);
 
10864
+  result = __TM_is_failure_persistent (result);
 
10865
+  result = __TM_failure_address (tdb);
 
10866
+  result = __TM_failure_code (tdb);
 
10867
+}
 
10868
Index: gcc/testsuite/gcc.target/s390/s390.exp
 
10869
===================================================================
 
10870
--- a/src/gcc/testsuite/gcc.target/s390/s390.exp        (.../tags/gcc_4_8_2_release)
 
10871
+++ b/src/gcc/testsuite/gcc.target/s390/s390.exp        (.../branches/gcc-4_8-branch)
 
10872
@@ -24,6 +24,19 @@
 
10873
 # Load support procs.
 
10874
 load_lib gcc-dg.exp
 
10875
 
 
10876
+# Return 1 if htm (etnd - extract nesting depth) instructions can be
 
10877
+# compiled.
 
10878
+proc check_effective_target_htm { } {
 
10879
+    if { ![check_runtime s390_check_htm [subst {
 
10880
+       int main (void)
 
10881
+       {
 
10882
+           unsigned int nd = 77;
 
10883
+           asm (".insn rre,0xb2ec0000,%0,0" : "=d" (nd));
 
10884
+           return nd;
 
10885
+       }
 
10886
+    }]] } { return 0 } else { return 1 }
 
10887
+}
 
10888
+
 
10889
 # If a testcase doesn't have special options, use these.
 
10890
 global DEFAULT_CFLAGS
 
10891
 if ![info exists DEFAULT_CFLAGS] then {
 
10892
Index: gcc/testsuite/gcc.target/s390/hotpatch-1.c
 
10893
===================================================================
 
10894
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-1.c    (.../tags/gcc_4_8_2_release)
 
10895
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-1.c    (.../branches/gcc-4_8-branch)
 
10896
@@ -0,0 +1,20 @@
 
10897
+/* Functional tests for the function hotpatching feature.  */
 
10898
+
 
10899
+/* { dg-do run } */
 
10900
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
 
10901
+
 
10902
+#include <stdio.h>
 
10903
+
 
10904
+void hp1(void)
 
10905
+{
 
10906
+  printf("hello, world!\n");
 
10907
+}
 
10908
+
 
10909
+int main (void)
 
10910
+{
 
10911
+  return 0;
 
10912
+}
 
10913
+
 
10914
+/* Check number of occurences of certain instructions.  */
 
10915
+/* { dg-final { scan-assembler-times "nopr\t%r7" 12 } } */
 
10916
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
 
10917
Index: gcc/testsuite/gcc.target/s390/hotpatch-2.c
 
10918
===================================================================
 
10919
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-2.c    (.../tags/gcc_4_8_2_release)
 
10920
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-2.c    (.../branches/gcc-4_8-branch)
 
10921
@@ -0,0 +1,20 @@
 
10922
+/* Functional tests for the function hotpatching feature.  */
 
10923
+
 
10924
+/* { dg-do run } */
 
10925
+/* { dg-options "-O3 -mzarch -mhotpatch=1 --save-temps" } */
 
10926
+
 
10927
+#include <stdio.h>
 
10928
+
 
10929
+void hp1(void)
 
10930
+{
 
10931
+  printf("hello, world!\n");
 
10932
+}
 
10933
+
 
10934
+int main (void)
 
10935
+{
 
10936
+  return 0;
 
10937
+}
 
10938
+
 
10939
+/* Check number of occurences of certain instructions.  */
 
10940
+/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
 
10941
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
 
10942
Index: gcc/testsuite/gcc.target/s390/hotpatch-3.c
 
10943
===================================================================
 
10944
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-3.c    (.../tags/gcc_4_8_2_release)
 
10945
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-3.c    (.../branches/gcc-4_8-branch)
 
10946
@@ -0,0 +1,20 @@
 
10947
+/* Functional tests for the function hotpatching feature.  */
 
10948
+
 
10949
+/* { dg-do run } */
 
10950
+/* { dg-options "-O3 -mzarch -mhotpatch=0 --save-temps" } */
 
10951
+
 
10952
+#include <stdio.h>
 
10953
+
 
10954
+void hp1(void)
 
10955
+{
 
10956
+  printf("hello, world!\n");
 
10957
+}
 
10958
+
 
10959
+int main (void)
 
10960
+{
 
10961
+  return 0;
 
10962
+}
 
10963
+
 
10964
+/* Check number of occurences of certain instructions.  */
 
10965
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
 
10966
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
 
10967
Index: gcc/testsuite/gcc.target/s390/hotpatch-4.c
 
10968
===================================================================
 
10969
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-4.c    (.../tags/gcc_4_8_2_release)
 
10970
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-4.c    (.../branches/gcc-4_8-branch)
 
10971
@@ -0,0 +1,26 @@
 
10972
+/* Functional tests for the function hotpatching feature.  */
 
10973
+
 
10974
+/* { dg-do run } */
 
10975
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
 
10976
+
 
10977
+#include <stdio.h>
 
10978
+
 
10979
+inline void hp1(void)
 
10980
+{
 
10981
+  printf("hello, world!\n");
 
10982
+}
 
10983
+
 
10984
+__attribute__ ((always_inline))
 
10985
+void hp2(void) /* { dg-warning "always_inline function might not be inlinable" } */
 
10986
+{
 
10987
+  printf("hello, world!\n");
 
10988
+} /* { dg-warning "function 'hp2' with the 'always_inline' attribute is not hotpatchable" } */
 
10989
+
 
10990
+int main (void)
 
10991
+{
 
10992
+  return 0;
 
10993
+}
 
10994
+
 
10995
+/* Check number of occurences of certain instructions.  */
 
10996
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
 
10997
+/* { dg-final { scan-assembler-not "nop\t0" } } */
 
10998
Index: gcc/testsuite/gcc.target/s390/hotpatch-5.c
 
10999
===================================================================
 
11000
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-5.c    (.../tags/gcc_4_8_2_release)
 
11001
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-5.c    (.../branches/gcc-4_8-branch)
 
11002
@@ -0,0 +1,21 @@
 
11003
+/* Functional tests for the function hotpatching feature.  */
 
11004
+
 
11005
+/* { dg-do run } */
 
11006
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
 
11007
+
 
11008
+#include <stdio.h>
 
11009
+
 
11010
+__attribute__ ((hotpatch))
 
11011
+void hp1(void)
 
11012
+{
 
11013
+  printf("hello, world!\n");
 
11014
+}
 
11015
+
 
11016
+int main (void)
 
11017
+{
 
11018
+  return 0;
 
11019
+}
 
11020
+
 
11021
+/* Check number of occurences of certain instructions.  */
 
11022
+/* { dg-final { scan-assembler-times "nopr\t%r7" 12 } } */
 
11023
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
 
11024
Index: gcc/testsuite/gcc.target/s390/hotpatch-6.c
 
11025
===================================================================
 
11026
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-6.c    (.../tags/gcc_4_8_2_release)
 
11027
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-6.c    (.../branches/gcc-4_8-branch)
 
11028
@@ -0,0 +1,21 @@
 
11029
+/* Functional tests for the function hotpatching feature.  */
 
11030
+
 
11031
+/* { dg-do run } */
 
11032
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
 
11033
+
 
11034
+#include <stdio.h>
 
11035
+
 
11036
+__attribute__ ((hotpatch(1)))
 
11037
+void hp1(void)
 
11038
+{
 
11039
+  printf("hello, world!\n");
 
11040
+}
 
11041
+
 
11042
+int main (void)
 
11043
+{
 
11044
+  return 0;
 
11045
+}
 
11046
+
 
11047
+/* Check number of occurences of certain instructions.  */
 
11048
+/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
 
11049
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
 
11050
Index: gcc/testsuite/gcc.target/s390/htm-builtins-1.c
 
11051
===================================================================
 
11052
--- a/src/gcc/testsuite/gcc.target/s390/htm-builtins-1.c        (.../tags/gcc_4_8_2_release)
 
11053
+++ b/src/gcc/testsuite/gcc.target/s390/htm-builtins-1.c        (.../branches/gcc-4_8-branch)
 
11054
@@ -0,0 +1,1073 @@
 
11055
+/* Functional tests of the htm __builtin_... macros.  */
 
11056
+
 
11057
+/* { dg-do run } */
 
11058
+/* { dg-require-effective-target htm } */
 
11059
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
 
11060
+
 
11061
+/* ---------------------------- included header files ---------------------- */
 
11062
+
 
11063
+#include <stdio.h>
 
11064
+#include <string.h>
 
11065
+#include <stdint.h>
 
11066
+#include <htmintrin.h>
 
11067
+
 
11068
+/* ---------------------------- local definitions -------------------------- */
 
11069
+
 
11070
+#define DEFAULT_MAX_REPETITIONS 5
 
11071
+#define DEFAULT_REQUIRED_QUORUM ((DEFAULT_MAX_REPETITIONS) - 1)
 
11072
+#define NUM_WARMUP_RUNS 10
 
11073
+
 
11074
+/* ---------------------------- local macros ------------------------------- */
 
11075
+
 
11076
+#define TEST_DF_REP(name) \
 
11077
+  { #name, name, DEFAULT_MAX_REPETITIONS, DEFAULT_REQUIRED_QUORUM }
 
11078
+#define TEST_NO_REP(name) { #name, name, 1, 1 }
 
11079
+
 
11080
+/* ---------------------------- local types -------------------------------- */
 
11081
+
 
11082
+typedef int (*test_func_t)(void);
 
11083
+
 
11084
+typedef struct
 
11085
+{
 
11086
+  const char *name;
 
11087
+  test_func_t test_func;
 
11088
+  int max_repetitions;
 
11089
+  int required_quorum;
 
11090
+} test_table_entry_t;
 
11091
+
 
11092
+/* ---------------------------- local variables ---------------------------- */
 
11093
+
 
11094
+__attribute__ ((aligned(256))) static struct __htm_tdb local_tdb256;
 
11095
+static struct __htm_tdb local_tdb;
 
11096
+static int do_dump_tdb = 0;
 
11097
+
 
11098
+/* ---------------------------- exported variables (globals) --------------- */
 
11099
+
 
11100
+__attribute__ ((aligned(256))) struct
 
11101
+{
 
11102
+  float float_1;
 
11103
+  float float_2;
 
11104
+  float float_3;
 
11105
+} global = { 1.0, 2.5, 0.0 };
 
11106
+
 
11107
+__attribute__ ((aligned(256))) struct
 
11108
+{
 
11109
+  volatile uint64_t c1;
 
11110
+  volatile uint64_t c2;
 
11111
+  volatile uint64_t c3;
 
11112
+} counters = { 0, 0, 0 };
 
11113
+
 
11114
+/* ---------------------------- local helper functions --------------------- */
 
11115
+
 
11116
+static void dump_tdb (struct __htm_tdb *tdb)
 
11117
+{
 
11118
+  unsigned char *p;
 
11119
+  int i;
 
11120
+  int j;
 
11121
+
 
11122
+  if (do_dump_tdb == 0)
 
11123
+    {
 
11124
+      return;
 
11125
+    }
 
11126
+  p = (unsigned char *)tdb;
 
11127
+  for (i = 0; i < 16; i++)
 
11128
+    {
 
11129
+      fprintf (stderr, "0x%02x  ", i * 16);
 
11130
+      for (j = 0; j < 16; j++)
 
11131
+       {
 
11132
+         fprintf (stderr, "%02x", (int)p[i * 16 + j]);
 
11133
+         if (j < 15)
 
11134
+           {
 
11135
+             fprintf (stderr, " ");
 
11136
+           }
 
11137
+         if (j == 7)
 
11138
+           {
 
11139
+             fprintf (stderr, " ");
 
11140
+           }
 
11141
+       }
 
11142
+      fprintf (stderr, "\n");
 
11143
+    }
 
11144
+
 
11145
+  return;
 
11146
+}
 
11147
+
 
11148
+/* ---------------------------- local test functions ----------------------- */
 
11149
+
 
11150
+/* Check values of the constants defined in htmintrin.h.  */
 
11151
+static int test_constants (void)
 
11152
+{
 
11153
+  if (_HTM_TBEGIN_STARTED != 0)
 
11154
+    {
 
11155
+      return 100 * _HTM_TBEGIN_STARTED + 1;
 
11156
+    }
 
11157
+  if (_HTM_TBEGIN_INDETERMINATE != 1)
 
11158
+    {
 
11159
+      return 100 * _HTM_TBEGIN_INDETERMINATE + 2;
 
11160
+    }
 
11161
+  if (_HTM_TBEGIN_TRANSIENT != 2)
 
11162
+    {
 
11163
+      return 100 * _HTM_TBEGIN_TRANSIENT + 3;
 
11164
+    }
 
11165
+  if (_HTM_TBEGIN_PERSISTENT != 3)
 
11166
+    {
 
11167
+      return 100 * _HTM_TBEGIN_PERSISTENT + 4;
 
11168
+    }
 
11169
+
 
11170
+  return 0;
 
11171
+}
 
11172
+
 
11173
+static int test_tbegin_ntstg_tend (void)
 
11174
+{
 
11175
+  int rc;
 
11176
+
 
11177
+  counters.c1 = 0;
 
11178
+  counters.c2 = 0;
 
11179
+  if ((rc = __builtin_tbegin ((void *)0)) == 0)
 
11180
+    {
 
11181
+      __builtin_non_tx_store ((uint64_t *)&counters.c1, 1);
 
11182
+      counters.c2 = 2;
 
11183
+      rc = __builtin_tend ();
 
11184
+      if (rc != 0)
 
11185
+       {
 
11186
+         return 100 * rc + 5;
 
11187
+       }
 
11188
+      if (counters.c1 != 1)
 
11189
+       {
 
11190
+         return 100 * counters.c1 + 2;
 
11191
+       }
 
11192
+      if (counters.c2 != 2)
 
11193
+       {
 
11194
+         return 100 * counters.c2 + 3;
 
11195
+       }
 
11196
+    }
 
11197
+  else
 
11198
+    {
 
11199
+      return 100 * rc + 4;
 
11200
+    }
 
11201
+
 
11202
+  return 0;
 
11203
+}
 
11204
+
 
11205
+static int test_tbegin_ntstg_tabort (void)
 
11206
+{
 
11207
+  float f;
 
11208
+
 
11209
+  counters.c1 = 0;
 
11210
+  counters.c2 = 0;
 
11211
+  f = 0;
 
11212
+  if (__builtin_tbegin ((void *)0) == 0)
 
11213
+    {
 
11214
+      __builtin_non_tx_store ((uint64_t *)&counters.c1, 1);
 
11215
+      counters.c2 = 2;
 
11216
+      f = 1;
 
11217
+      __builtin_tabort (256);
 
11218
+      return 1;
 
11219
+    }
 
11220
+  if (counters.c1 != 1)
 
11221
+    {
 
11222
+      return 100 * counters.c1 + 2;
 
11223
+    }
 
11224
+  if (counters.c2 != 0)
 
11225
+    {
 
11226
+      return 100 * counters.c2 + 3;
 
11227
+    }
 
11228
+  if (f != 0)
 
11229
+    {
 
11230
+      return 100 * f + 4;
 
11231
+    }
 
11232
+
 
11233
+  return 0;
 
11234
+}
 
11235
+
 
11236
+static int test_tbegin_nofloat (void)
 
11237
+{
 
11238
+  int rc;
 
11239
+
 
11240
+  counters.c1 = 0;
 
11241
+  counters.c2 = 0;
 
11242
+  if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
 
11243
+    {
 
11244
+      __builtin_non_tx_store ((uint64_t *)&counters.c1, 1);
 
11245
+      counters.c2 = 2;
 
11246
+      rc = __builtin_tend ();
 
11247
+      if (rc != 0)
 
11248
+       {
 
11249
+         return 100 * rc + 5;
 
11250
+       }
 
11251
+      if (counters.c1 != 1)
 
11252
+       {
 
11253
+         return 100 * counters.c1 + 2;
 
11254
+       }
 
11255
+      if (counters.c2 != 2)
 
11256
+       {
 
11257
+         return 100 * counters.c2 + 3;
 
11258
+       }
 
11259
+    }
 
11260
+  else
 
11261
+    {
 
11262
+      return 100 * rc + 4;
 
11263
+    }
 
11264
+
 
11265
+  return 0;
 
11266
+}
 
11267
+
 
11268
+static int test_tbegin_retry (void)
 
11269
+{
 
11270
+  int rc;
 
11271
+
 
11272
+  counters.c1 = 0;
 
11273
+  counters.c2 = 0;
 
11274
+  counters.c3 = 0;
 
11275
+  if ((rc = __builtin_tbegin_retry ((void *)0, 5)) == 0)
 
11276
+    {
 
11277
+      int do_abort;
 
11278
+
 
11279
+      do_abort = (counters.c1 == 0) ? 1 : 0;
 
11280
+      __builtin_non_tx_store (
 
11281
+                            (uint64_t *)&counters.c1, counters.c1 + 1);
 
11282
+      if (do_abort == 1)
 
11283
+       {
 
11284
+         __builtin_tabort (256);
 
11285
+       }
 
11286
+      counters.c2 = counters.c2 + 10;
 
11287
+      __builtin_non_tx_store ((uint64_t *)&counters.c3, 3);
 
11288
+      rc = __builtin_tend ();
 
11289
+      if (rc != 0)
 
11290
+       {
 
11291
+         return 100 * rc + 5;
 
11292
+       }
 
11293
+      if (counters.c1 != 2)
 
11294
+       {
 
11295
+         return 100 * counters.c1 + 2;
 
11296
+       }
 
11297
+      if (counters.c2 != 10)
 
11298
+       {
 
11299
+         return 100 * counters.c2 + 3;
 
11300
+       }
 
11301
+      if (counters.c3 != 3)
 
11302
+       {
 
11303
+         return 100 * counters.c3 + 6;
 
11304
+       }
 
11305
+    }
 
11306
+  else
 
11307
+    {
 
11308
+      return 100 * rc + 4;
 
11309
+    }
 
11310
+
 
11311
+  return 0;
 
11312
+}
 
11313
+
 
11314
+static int test_tbegin_retry_nofloat (void)
 
11315
+{
 
11316
+  int rc;
 
11317
+
 
11318
+  counters.c1 = 0;
 
11319
+  counters.c2 = 0;
 
11320
+  counters.c3 = 0;
 
11321
+  if ((rc = __builtin_tbegin_retry_nofloat ((void *)0, 5)) == 0)
 
11322
+    {
 
11323
+      int do_abort;
 
11324
+
 
11325
+      do_abort = (counters.c1 == 0) ? 1 : 0;
 
11326
+      __builtin_non_tx_store (
 
11327
+                            (uint64_t *)&counters.c1, counters.c1 + 1);
 
11328
+      if (do_abort == 1)
 
11329
+       {
 
11330
+         __builtin_tabort (256);
 
11331
+       }
 
11332
+      counters.c2 = counters.c2 + 10;
 
11333
+      __builtin_non_tx_store ((uint64_t *)&counters.c3, 3);
 
11334
+      rc = __builtin_tend ();
 
11335
+      if (rc != 0)
 
11336
+       {
 
11337
+         return 100 * rc + 5;
 
11338
+       }
 
11339
+      if (counters.c1 != 2)
 
11340
+       {
 
11341
+         return 100 * counters.c1 + 2;
 
11342
+       }
 
11343
+      if (counters.c2 != 10)
 
11344
+       {
 
11345
+         return 100 * counters.c2 + 3;
 
11346
+       }
 
11347
+      if (counters.c3 != 3)
 
11348
+       {
 
11349
+         return 100 * counters.c3 + 6;
 
11350
+       }
 
11351
+    }
 
11352
+  else
 
11353
+    {
 
11354
+      return 100 * rc + 4;
 
11355
+    }
 
11356
+
 
11357
+  return 0;
 
11358
+}
 
11359
+
 
11360
+static int test_tbegin_aborts (void)
 
11361
+{
 
11362
+  float f;
 
11363
+  int rc;
 
11364
+
 
11365
+  f = 77;
 
11366
+  if ((rc = __builtin_tbegin ((void *)0)) == 0)
 
11367
+    {
 
11368
+      f = 88;
 
11369
+      __builtin_tabort (256);
 
11370
+      return 2;
 
11371
+    }
 
11372
+  else if (rc != 2)
 
11373
+    {
 
11374
+      return 3;
 
11375
+    }
 
11376
+  if (f != 77)
 
11377
+    {
 
11378
+      return 4;
 
11379
+    }
 
11380
+  f = 66;
 
11381
+  if ((rc = __builtin_tbegin ((void *)0)) == 0)
 
11382
+    {
 
11383
+      f = 99;
 
11384
+      __builtin_tabort (257);
 
11385
+      return 5;
 
11386
+    }
 
11387
+  else if (rc != 3)
 
11388
+    {
 
11389
+      return 100 * rc + 6;
 
11390
+    }
 
11391
+  if (f != 66)
 
11392
+    {
 
11393
+      return 100 * f + 7;
 
11394
+    }
 
11395
+  if ((rc = __builtin_tbegin ((void *)0)) == 0)
 
11396
+    {
 
11397
+      global.float_3 = global.float_1 + global.float_2;
 
11398
+      rc = __builtin_tend ();
 
11399
+      if (rc != 0)
 
11400
+       {
 
11401
+         return 100 * rc + 8;
 
11402
+       }
 
11403
+    }
 
11404
+  else
 
11405
+    {
 
11406
+      return 100 * rc + 9;
 
11407
+    }
 
11408
+  if (global.float_3 != global.float_1 + global.float_2)
 
11409
+    {
 
11410
+      return 100 * rc + 10;
 
11411
+    }
 
11412
+
 
11413
+  return 0;
 
11414
+}
 
11415
+
 
11416
+static __attribute__((noinline)) void indirect_abort(int abort_code)
 
11417
+{
 
11418
+  __builtin_tabort (abort_code);
 
11419
+
 
11420
+  return;
 
11421
+}
 
11422
+
 
11423
+static int test_tbegin_indirect_aborts (void)
 
11424
+{
 
11425
+  float f;
 
11426
+  int rc;
 
11427
+
 
11428
+  f = 77;
 
11429
+  if ((rc = __builtin_tbegin ((void *)0)) == 0)
 
11430
+    {
 
11431
+      f = 88;
 
11432
+      indirect_abort(256);
 
11433
+      return 2;
 
11434
+    }
 
11435
+  else if (rc != 2)
 
11436
+    {
 
11437
+      return 100 * rc + 3;
 
11438
+    }
 
11439
+  if (f != 77)
 
11440
+    {
 
11441
+      return 100 * rc + 4;
 
11442
+    }
 
11443
+  f = 66;
 
11444
+  if ((rc = __builtin_tbegin ((void *)0)) == 0)
 
11445
+    {
 
11446
+      f = 99;
 
11447
+      indirect_abort(257);
 
11448
+      return 5;
 
11449
+    }
 
11450
+  else if (rc != 3)
 
11451
+    {
 
11452
+      return 100 * rc + 6;
 
11453
+    }
 
11454
+  if (f != 66)
 
11455
+    {
 
11456
+      return 100 * f + 7;
 
11457
+    }
 
11458
+
 
11459
+  return 0;
 
11460
+}
 
11461
+
 
11462
+static int test_tbegin_nofloat_aborts (void)
 
11463
+{
 
11464
+  int rc;
 
11465
+
 
11466
+  if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
 
11467
+    {
 
11468
+      __builtin_tabort (256);
 
11469
+      return 2;
 
11470
+    }
 
11471
+  if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
 
11472
+    {
 
11473
+      __builtin_tabort (257);
 
11474
+      return 1005;
 
11475
+    }
 
11476
+  else if (rc != 3)
 
11477
+    {
 
11478
+      return 1000 * rc + 6;
 
11479
+    }
 
11480
+
 
11481
+  return 0;
 
11482
+}
 
11483
+
 
11484
+static int test_tbegin_nofloat_indirect_aborts (void)
 
11485
+{
 
11486
+  int rc;
 
11487
+
 
11488
+  if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
 
11489
+    {
 
11490
+      indirect_abort (256);
 
11491
+      return 2;
 
11492
+    }
 
11493
+  if ((rc = __builtin_tbegin_nofloat ((void *)0)) == 0)
 
11494
+    {
 
11495
+      indirect_abort (257);
 
11496
+      return 1005;
 
11497
+    }
 
11498
+  else if (rc != 3)
 
11499
+    {
 
11500
+      return 1000 * rc + 6;
 
11501
+    }
 
11502
+
 
11503
+  return 0;
 
11504
+}
 
11505
+
 
11506
+static
 
11507
+int _test_tbegin_retry_aborts (int retries, uint64_t abort_code)
 
11508
+{
 
11509
+  int rc;
 
11510
+
 
11511
+  counters.c1 = 0;
 
11512
+  if ((rc = __builtin_tbegin_retry ((void *)0, retries)) == 0)
 
11513
+    {
 
11514
+      __builtin_non_tx_store ((uint64_t *)&counters.c1, counters.c1 + 1);
 
11515
+      __builtin_tabort (abort_code);
 
11516
+      return 2;
 
11517
+    }
 
11518
+  else
 
11519
+    {
 
11520
+      if ((abort_code & 1) == 0)
 
11521
+       {
 
11522
+         if (rc != 2)
 
11523
+           {
 
11524
+             return 100 * rc + 2003;
 
11525
+           }
 
11526
+         else if (counters.c1 != (uint64_t)retries + 1)
 
11527
+           {
 
11528
+             return 1000 * counters.c1 + 100 * retries + 4;
 
11529
+           }
 
11530
+       }
 
11531
+      else
 
11532
+       {
 
11533
+         if (rc != 3)
 
11534
+           {
 
11535
+             return 100 * rc + 3005;
 
11536
+           }
 
11537
+         else if (counters.c1 != 1)
 
11538
+           {
 
11539
+             return 1000 * counters.c1 + 100 * retries + 6;
 
11540
+           }
 
11541
+       }
 
11542
+    }
 
11543
+
 
11544
+  return 0;
 
11545
+}
 
11546
+
 
11547
+static int test_tbegin_retry_aborts (void)
 
11548
+{
 
11549
+  int rc;
 
11550
+  int retries;
 
11551
+
 
11552
+  for (retries = 1; retries <= 3; retries++)
 
11553
+    {
 
11554
+      rc = _test_tbegin_retry_aborts (retries, 256);
 
11555
+      if (rc != 0)
 
11556
+       {
 
11557
+         return 10000 + rc;
 
11558
+       }
 
11559
+    }
 
11560
+  for (retries = 1; retries <= 3; retries++)
 
11561
+    {
 
11562
+      rc = _test_tbegin_retry_aborts (retries, 257);
 
11563
+      if (rc != 0)
 
11564
+       {
 
11565
+         return 20000 + rc;
 
11566
+       }
 
11567
+    }
 
11568
+  if ((rc = __builtin_tbegin_retry ((void *)0, 5)) == 0)
 
11569
+    {
 
11570
+      global.float_3 = global.float_1 + global.float_2;
 
11571
+      rc = __builtin_tend ();
 
11572
+      if (rc != 0)
 
11573
+       {
 
11574
+         return 30000 + 100 * rc + 6;
 
11575
+       }
 
11576
+    }
 
11577
+  else
 
11578
+    {
 
11579
+      return 30000 + 100 * rc + 7;
 
11580
+    }
 
11581
+
 
11582
+  return 0;
 
11583
+}
 
11584
+
 
11585
+static int _test_tbegin_retry_nofloat_aborts (int retries, uint64_t abort_code)
 
11586
+{
 
11587
+  int rc;
 
11588
+
 
11589
+  counters.c1 = 0;
 
11590
+  if ((rc = __builtin_tbegin_retry_nofloat ((void *)0, retries)) == 0)
 
11591
+    {
 
11592
+      __builtin_non_tx_store ((uint64_t *)&counters.c1, counters.c1 + 1);
 
11593
+      __builtin_tabort (abort_code);
 
11594
+      return 2;
 
11595
+    }
 
11596
+  else
 
11597
+    {
 
11598
+      if ((abort_code & 1) == 0)
 
11599
+       {
 
11600
+         if (rc != 2)
 
11601
+           {
 
11602
+             return 100 * rc + 2003;
 
11603
+           }
 
11604
+         else if (counters.c1 != (uint64_t)retries + 1)
 
11605
+           {
 
11606
+             return 1000 * counters.c1 + 100 * retries + 4;
 
11607
+           }
 
11608
+       }
 
11609
+      else
 
11610
+       {
 
11611
+         if (rc != 3)
 
11612
+           {
 
11613
+             return 100 * rc + 3005;
 
11614
+           }
 
11615
+         else if (counters.c1 != 1)
 
11616
+           {
 
11617
+             return 1000 * counters.c1 + 100 * retries + 6;
 
11618
+           }
 
11619
+       }
 
11620
+    }
 
11621
+
 
11622
+  return 0;
 
11623
+}
 
11624
+
 
11625
+static int test_tbegin_retry_nofloat_aborts (void)
 
11626
+{
 
11627
+  int rc;
 
11628
+  int retries;
 
11629
+
 
11630
+  for (retries = 1; retries <= 3; retries++)
 
11631
+    {
 
11632
+      rc = _test_tbegin_retry_nofloat_aborts (retries, 256);
 
11633
+      if (rc != 0)
 
11634
+       {
 
11635
+         return 10 * retries + rc;
 
11636
+       }
 
11637
+    }
 
11638
+  for (retries = 1; retries <= 3; retries++)
 
11639
+    {
 
11640
+      rc = _test_tbegin_retry_nofloat_aborts (retries, 257);
 
11641
+      if (rc != 0)
 
11642
+       {
 
11643
+         return 10000 + 10 * retries + rc;
 
11644
+       }
 
11645
+    }
 
11646
+
 
11647
+  return 0;
 
11648
+}
 
11649
+
 
11650
+static int test_tbegin_tdb (void)
 
11651
+{
 
11652
+  int rc;
 
11653
+
 
11654
+  local_tdb.format = 0;
 
11655
+  if ((rc = __builtin_tbegin (&local_tdb)) == 0)
 
11656
+    {
 
11657
+      rc = __builtin_tend ();
 
11658
+      if (rc != 0)
 
11659
+       {
 
11660
+         return 100 * rc + 1;
 
11661
+       }
 
11662
+      if (local_tdb.format != 0)
 
11663
+       {
 
11664
+         dump_tdb (&local_tdb);
 
11665
+         return 100 * local_tdb.format + 2;
 
11666
+       }
 
11667
+    }
 
11668
+  else
 
11669
+    {
 
11670
+      return 100 * rc + 3;
 
11671
+    }
 
11672
+  local_tdb.format = 0;
 
11673
+  if ((rc = __builtin_tbegin (&local_tdb)) == 0)
 
11674
+    {
 
11675
+      __builtin_tabort (257);
 
11676
+      return 4;
 
11677
+    }
 
11678
+  else
 
11679
+    {
 
11680
+      if (rc != 3)
 
11681
+       {
 
11682
+         return 100 * rc + 5;
 
11683
+       }
 
11684
+      if (local_tdb.format != 1)
 
11685
+       {
 
11686
+         dump_tdb (&local_tdb);
 
11687
+         return 100 * local_tdb.format + 6;
 
11688
+       }
 
11689
+    }
 
11690
+  local_tdb256.format = 0;
 
11691
+  if ((rc = __builtin_tbegin (&local_tdb256)) == 0)
 
11692
+    {
 
11693
+      rc = __builtin_tend ();
 
11694
+      if (rc != 0)
 
11695
+       {
 
11696
+         return 1100 * rc + 1;
 
11697
+       }
 
11698
+      if (local_tdb256.format != 0)
 
11699
+       {
 
11700
+         dump_tdb (&local_tdb256);
 
11701
+         return 1100 * local_tdb256.format + 2;
 
11702
+       }
 
11703
+    }
 
11704
+  else
 
11705
+    {
 
11706
+      return 1100 * rc + 3;
 
11707
+    }
 
11708
+  local_tdb256.format = 0;
 
11709
+  if ((rc = __builtin_tbegin (&local_tdb256)) == 0)
 
11710
+    {
 
11711
+      __builtin_tabort (257);
 
11712
+      return 2004;
 
11713
+    }
 
11714
+  else
 
11715
+    {
 
11716
+      if (rc != 3)
 
11717
+       {
 
11718
+         return 2100 * rc + 5;
 
11719
+       }
 
11720
+      if (local_tdb256.format != 1)
 
11721
+       {
 
11722
+         dump_tdb (&local_tdb256);
 
11723
+         return 2100 * local_tdb256.format + 6;
 
11724
+       }
 
11725
+    }
 
11726
+
 
11727
+  return 0;
 
11728
+}
 
11729
+
 
11730
+static int test_tbegin_nofloat_tdb (void)
 
11731
+{
 
11732
+  int rc;
 
11733
+
 
11734
+  local_tdb.format = 0;
 
11735
+  if ((rc = __builtin_tbegin_nofloat (&local_tdb)) == 0)
 
11736
+    {
 
11737
+      rc = __builtin_tend ();
 
11738
+      if (rc != 0)
 
11739
+       {
 
11740
+         return 100 * rc + 1;
 
11741
+       }
 
11742
+      if (local_tdb.format != 0)
 
11743
+       {
 
11744
+         dump_tdb (&local_tdb);
 
11745
+         return 100 * local_tdb.format + 2;
 
11746
+       }
 
11747
+    }
 
11748
+  else
 
11749
+    {
 
11750
+      return 3;
 
11751
+    }
 
11752
+  local_tdb.format = 0;
 
11753
+  if ((rc = __builtin_tbegin_nofloat (&local_tdb)) == 0)
 
11754
+    {
 
11755
+      __builtin_tabort (257);
 
11756
+      return 4;
 
11757
+    }
 
11758
+  else
 
11759
+    {
 
11760
+      if (rc != 3)
 
11761
+       {
 
11762
+         return 100 * rc + 5;
 
11763
+       }
 
11764
+      if (local_tdb.format != 1)
 
11765
+       {
 
11766
+         dump_tdb (&local_tdb);
 
11767
+         return 100 * local_tdb.format + 6;
 
11768
+       }
 
11769
+    }
 
11770
+  local_tdb256.format = 0;
 
11771
+  if ((rc = __builtin_tbegin_nofloat (&local_tdb256)) == 0)
 
11772
+    {
 
11773
+      rc = __builtin_tend ();
 
11774
+      if (rc != 0)
 
11775
+       {
 
11776
+         return 1100 * rc + 1;
 
11777
+       }
 
11778
+      if (local_tdb256.format != 0)
 
11779
+       {
 
11780
+         dump_tdb (&local_tdb256);
 
11781
+         return 1100 * local_tdb256.format + 2;
 
11782
+       }
 
11783
+    }
 
11784
+  else
 
11785
+    {
 
11786
+      return 1003;
 
11787
+    }
 
11788
+  local_tdb256.format = 0;
 
11789
+  if ((rc = __builtin_tbegin_nofloat (&local_tdb256)) == 0)
 
11790
+    {
 
11791
+      __builtin_tabort (257);
 
11792
+      return 2004;
 
11793
+    }
 
11794
+  else
 
11795
+    {
 
11796
+      if (rc != 3)
 
11797
+       {
 
11798
+         return 2100 * rc + 5;
 
11799
+       }
 
11800
+      if (local_tdb256.format != 1)
 
11801
+       {
 
11802
+         dump_tdb (&local_tdb256);
 
11803
+         return 2100 * local_tdb256.format + 6;
 
11804
+       }
 
11805
+    }
 
11806
+
 
11807
+  return 0;
 
11808
+}
 
11809
+
 
11810
+static int test_tbegin_retry_tdb (void)
 
11811
+{
 
11812
+  int rc;
 
11813
+
 
11814
+  local_tdb256.format = 0;
 
11815
+  if ((rc = __builtin_tbegin_retry (&local_tdb256, 2)) == 0)
 
11816
+    {
 
11817
+      rc = __builtin_tend ();
 
11818
+      if (rc != 0)
 
11819
+       {
 
11820
+         return 1100 * rc + 1;
 
11821
+       }
 
11822
+      if (local_tdb256.format != 0)
 
11823
+       {
 
11824
+         dump_tdb (&local_tdb256);
 
11825
+         return 1100 * local_tdb256.format + 2;
 
11826
+       }
 
11827
+    }
 
11828
+  else
 
11829
+    {
 
11830
+      return 1003;
 
11831
+    }
 
11832
+  local_tdb256.format = 0;
 
11833
+  if ((rc = __builtin_tbegin_retry (&local_tdb256, 2)) == 0)
 
11834
+    {
 
11835
+      __builtin_tabort (257);
 
11836
+      return 2004;
 
11837
+    }
 
11838
+  else
 
11839
+    {
 
11840
+      if (rc != 3)
 
11841
+       {
 
11842
+         return 2100 * rc + 5;
 
11843
+       }
 
11844
+      if (local_tdb256.format != 1)
 
11845
+       {
 
11846
+         dump_tdb (&local_tdb256);
 
11847
+         return 2100 * local_tdb256.format + 6;
 
11848
+       }
 
11849
+    }
 
11850
+
 
11851
+  return 0;
 
11852
+}
 
11853
+
 
11854
+static int test_tbegin_retry_nofloat_tdb (void)
 
11855
+{
 
11856
+  int rc;
 
11857
+
 
11858
+  local_tdb.format = 0;
 
11859
+  if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb, 2)) == 0)
 
11860
+    {
 
11861
+      rc = __builtin_tend ();
 
11862
+      if (rc != 0)
 
11863
+       {
 
11864
+         return 100 * rc + 1;
 
11865
+       }
 
11866
+      if (local_tdb.format != 0)
 
11867
+       {
 
11868
+         dump_tdb (&local_tdb);
 
11869
+         return 100 * local_tdb.format + 2;
 
11870
+       }
 
11871
+    }
 
11872
+  else
 
11873
+    {
 
11874
+      return 100 * rc + 3;
 
11875
+    }
 
11876
+  local_tdb.format = 0;
 
11877
+  if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb, 2)) == 0)
 
11878
+    {
 
11879
+      __builtin_tabort (257);
 
11880
+      return 4;
 
11881
+    }
 
11882
+  else
 
11883
+    {
 
11884
+      if (rc != 3)
 
11885
+       {
 
11886
+         return 100 * rc + 5;
 
11887
+       }
 
11888
+      if (local_tdb.format != 1)
 
11889
+       {
 
11890
+         dump_tdb (&local_tdb);
 
11891
+         return 100 * local_tdb.format + 6;
 
11892
+       }
 
11893
+    }
 
11894
+  local_tdb256.format = 0;
 
11895
+  if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb256, 2)) == 0)
 
11896
+    {
 
11897
+      rc = __builtin_tend ();
 
11898
+      if (rc != 0)
 
11899
+       {
 
11900
+         return 1100 * rc + 1;
 
11901
+       }
 
11902
+      if (local_tdb256.format != 0)
 
11903
+       {
 
11904
+         dump_tdb (&local_tdb256);
 
11905
+         return 1100 * local_tdb256.format + 2;
 
11906
+       }
 
11907
+    }
 
11908
+  else
 
11909
+    {
 
11910
+      return 1100 * rc + 3;
 
11911
+    }
 
11912
+  local_tdb256.format = 0;
 
11913
+  if ((rc = __builtin_tbegin_retry_nofloat (&local_tdb256, 2)) == 0)
 
11914
+    {
 
11915
+      __builtin_tabort (257);
 
11916
+      return 2004;
 
11917
+    }
 
11918
+  else
 
11919
+    {
 
11920
+      if (rc != 3)
 
11921
+       {
 
11922
+         return 2100 * rc + 5;
 
11923
+       }
 
11924
+      if (local_tdb256.format != 1)
 
11925
+       {
 
11926
+         dump_tdb (&local_tdb256);
 
11927
+         return 2100 * local_tdb256.format + 6;
 
11928
+       }
 
11929
+    }
 
11930
+
 
11931
+  return 0;
 
11932
+}
 
11933
+
 
11934
+static int test_etnd (void)
 
11935
+{
 
11936
+  int rc;
 
11937
+
 
11938
+  counters.c1 = 0;
 
11939
+  counters.c2 = 0;
 
11940
+  counters.c3 = 0;
 
11941
+  if ((rc = __builtin_tbegin ((void *)0)) == 0)
 
11942
+    {
 
11943
+      counters.c1 = __builtin_tx_nesting_depth ();
 
11944
+      if (__builtin_tbegin ((void *)0) == 0)
 
11945
+       {
 
11946
+         counters.c2 = __builtin_tx_nesting_depth ();
 
11947
+         if (__builtin_tbegin ((void *)0) == 0)
 
11948
+           {
 
11949
+             counters.c3 = __builtin_tx_nesting_depth ();
 
11950
+             __builtin_tend ();
 
11951
+           }
 
11952
+         __builtin_tend ();
 
11953
+       }
 
11954
+      __builtin_tend ();
 
11955
+    }
 
11956
+  else
 
11957
+    {
 
11958
+      return 100 * rc + 1;
 
11959
+    }
 
11960
+  if (counters.c1 != 1)
 
11961
+    {
 
11962
+      return 100 * counters.c1 + 2;
 
11963
+    }
 
11964
+  if (counters.c2 != 2)
 
11965
+    {
 
11966
+      return 100 * counters.c2 + 3;
 
11967
+    }
 
11968
+  if (counters.c3 != 3)
 
11969
+    {
 
11970
+      return 100 * counters.c3 + 4;
 
11971
+    }
 
11972
+
 
11973
+  return 0;
 
11974
+}
 
11975
+
 
11976
+static int test_tbeginc (void)
 
11977
+{
 
11978
+  int rc;
 
11979
+
 
11980
+  counters.c1 = 0;
 
11981
+  __builtin_tbeginc ();
 
11982
+  counters.c1 = 1;
 
11983
+  rc = __builtin_tend ();
 
11984
+  if (rc != 0)
 
11985
+    {
 
11986
+      return 10000 * rc + 1;
 
11987
+    }
 
11988
+  if (counters.c1 != 1)
 
11989
+    {
 
11990
+      return 100000 * counters.c1 + 3;
 
11991
+    }
 
11992
+
 
11993
+  return 0;
 
11994
+}
 
11995
+
 
11996
+/* ---------------------------- local testing framework functions ---------- */
 
11997
+
 
11998
+static int run_one_test (const test_table_entry_t *test_entry)
 
11999
+{
 
12000
+  int do_print_passes;
 
12001
+  int succeeded;
 
12002
+  int rc;
 
12003
+  int i;
 
12004
+
 
12005
+  /* Warmup run to get all necessary data and instruction pages into the page
 
12006
+   * tables.  */
 
12007
+  {
 
12008
+    int run;
 
12009
+
 
12010
+    do_dump_tdb = 0;
 
12011
+    for (run = 0; run < NUM_WARMUP_RUNS; run++)
 
12012
+      {
 
12013
+       test_entry->test_func ();
 
12014
+      }
 
12015
+    do_dump_tdb = 1;
 
12016
+  }
 
12017
+  do_print_passes = (
 
12018
+                    test_entry->required_quorum != 1 ||
 
12019
+                    test_entry->max_repetitions != 1);
 
12020
+  printf ("RRR RUN  %s\n", test_entry->name);
 
12021
+  if (do_print_passes == 1)
 
12022
+    {
 
12023
+      printf (
 
12024
+            "         (requires %d successful out of %d runs)\n",
 
12025
+            test_entry->required_quorum,
 
12026
+            test_entry->max_repetitions);
 
12027
+    }
 
12028
+  succeeded = 0;
 
12029
+  rc = 0;
 
12030
+  for (rc = 0, i = 0; i < test_entry->max_repetitions; i++)
 
12031
+    {
 
12032
+      if (do_print_passes == 1)
 
12033
+       {
 
12034
+         if (i == 0)
 
12035
+           {
 
12036
+             printf ("        ");
 
12037
+           }
 
12038
+         else
 
12039
+           {
 
12040
+             printf (",");
 
12041
+           }
 
12042
+       }
 
12043
+      rc = test_entry->test_func ();
 
12044
+      if (rc == 0)
 
12045
+       {
 
12046
+         if (do_print_passes == 1)
 
12047
+           {
 
12048
+             printf (" success");
 
12049
+           }
 
12050
+         succeeded++;
 
12051
+         if (succeeded >= test_entry->required_quorum)
 
12052
+           {
 
12053
+             break;
 
12054
+           }
 
12055
+       }
 
12056
+      else
 
12057
+       {
 
12058
+         printf (" failed (rc = %d)", rc);
 
12059
+       }
 
12060
+    }
 
12061
+  if (do_print_passes == 1 || rc != 0)
 
12062
+    {
 
12063
+      printf ("\n");
 
12064
+    }
 
12065
+  if (succeeded >= test_entry->required_quorum)
 
12066
+    {
 
12067
+      printf ("+++ OK   %s\n", test_entry->name);
 
12068
+
 
12069
+      return 0;
 
12070
+    }
 
12071
+  else
 
12072
+    {
 
12073
+      printf ("--- FAIL %s\n", test_entry->name);
 
12074
+
 
12075
+      return (rc != 0) ? rc : -1;
 
12076
+    }
 
12077
+}
 
12078
+
 
12079
+static int run_all_tests (const test_table_entry_t *test_table)
 
12080
+{
 
12081
+  const test_table_entry_t *test;
 
12082
+  int rc;
 
12083
+
 
12084
+  for (
 
12085
+       rc = 0, test = &test_table[0];
 
12086
+       test->test_func != NULL && rc == 0; test++)
 
12087
+    {
 
12088
+      rc = run_one_test (test);
 
12089
+    }
 
12090
+
 
12091
+  return rc;
 
12092
+}
 
12093
+
 
12094
+/* ---------------------------- interface functions ------------------------ */
 
12095
+
 
12096
+int main (void)
 
12097
+{
 
12098
+  const test_table_entry_t test_table[] = {
 
12099
+    TEST_NO_REP (test_constants),
 
12100
+    TEST_DF_REP (test_tbegin_ntstg_tend),
 
12101
+    TEST_DF_REP (test_tbegin_ntstg_tabort),
 
12102
+    TEST_DF_REP (test_tbegin_nofloat),
 
12103
+    TEST_NO_REP (test_tbegin_retry),
 
12104
+    TEST_NO_REP (test_tbegin_retry_nofloat),
 
12105
+    TEST_DF_REP (test_tbegin_aborts),
 
12106
+    TEST_DF_REP (test_tbegin_indirect_aborts),
 
12107
+    TEST_DF_REP (test_tbegin_nofloat_aborts),
 
12108
+    TEST_DF_REP (test_tbegin_nofloat_indirect_aborts),
 
12109
+    TEST_NO_REP (test_tbegin_retry_aborts),
 
12110
+    TEST_NO_REP (test_tbegin_retry_nofloat_aborts),
 
12111
+    TEST_DF_REP (test_tbegin_tdb),
 
12112
+    TEST_DF_REP (test_tbegin_nofloat_tdb),
 
12113
+    TEST_NO_REP (test_tbegin_retry_tdb),
 
12114
+    TEST_NO_REP (test_tbegin_retry_nofloat_tdb),
 
12115
+    TEST_DF_REP (test_etnd),
 
12116
+    TEST_DF_REP (test_tbeginc),
 
12117
+    { (void *)0, 0, 0 }
 
12118
+  };
 
12119
+
 
12120
+  {
 
12121
+    int rc;
 
12122
+
 
12123
+    rc = run_all_tests (test_table);
 
12124
+
 
12125
+    return rc;
 
12126
+  }
 
12127
+}
 
12128
Index: gcc/testsuite/gcc.target/s390/hotpatch-7.c
 
12129
===================================================================
 
12130
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-7.c    (.../tags/gcc_4_8_2_release)
 
12131
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-7.c    (.../branches/gcc-4_8-branch)
 
12132
@@ -0,0 +1,21 @@
 
12133
+/* Functional tests for the function hotpatching feature.  */
 
12134
+
 
12135
+/* { dg-do run } */
 
12136
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
 
12137
+
 
12138
+#include <stdio.h>
 
12139
+
 
12140
+__attribute__ ((hotpatch(0)))
 
12141
+void hp1(void)
 
12142
+{
 
12143
+  printf("hello, world!\n");
 
12144
+}
 
12145
+
 
12146
+int main (void)
 
12147
+{
 
12148
+  return 0;
 
12149
+}
 
12150
+
 
12151
+/* Check number of occurences of certain instructions.  */
 
12152
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
 
12153
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
 
12154
Index: gcc/testsuite/gcc.target/s390/htm-builtins-2.c
 
12155
===================================================================
 
12156
--- a/src/gcc/testsuite/gcc.target/s390/htm-builtins-2.c        (.../tags/gcc_4_8_2_release)
 
12157
+++ b/src/gcc/testsuite/gcc.target/s390/htm-builtins-2.c        (.../branches/gcc-4_8-branch)
 
12158
@@ -0,0 +1,682 @@
 
12159
+/* Functional tests of the htm __TM_... macros.  */
 
12160
+
 
12161
+/* { dg-do run } */
 
12162
+/* { dg-require-effective-target htm } */
 
12163
+/* { dg-options "-O3 -march=zEC12 -mzarch" } */
 
12164
+
 
12165
+/* ---------------------------- included header files ---------------------- */
 
12166
+
 
12167
+#include <stdio.h>
 
12168
+#include <string.h>
 
12169
+#include <inttypes.h>
 
12170
+#include <htmxlintrin.h>
 
12171
+
 
12172
+/* ---------------------------- local definitions -------------------------- */
 
12173
+
 
12174
+#define DEFAULT_MAX_REPETITIONS 5
 
12175
+#define DEFAULT_REQUIRED_QUORUM ((DEFAULT_MAX_REPETITIONS) - 1)
 
12176
+#define DEFAULT_ABORT_ADDRESS (0x12345678u)
 
12177
+
 
12178
+/* ---------------------------- local macros ------------------------------- */
 
12179
+
 
12180
+#define TEST_DF_REP(name) \
 
12181
+  { #name, name, DEFAULT_MAX_REPETITIONS, DEFAULT_REQUIRED_QUORUM }
 
12182
+#define TEST_NO_REP(name) { #name, name, 1, 1 }
 
12183
+
 
12184
+/* ---------------------------- local types -------------------------------- */
 
12185
+
 
12186
+typedef int (*test_func_t)(void);
 
12187
+
 
12188
+typedef struct
 
12189
+{
 
12190
+  const char *name;
 
12191
+  test_func_t test_func;
 
12192
+  int max_repetitions;
 
12193
+  int required_quorum;
 
12194
+} test_table_entry_t;
 
12195
+
 
12196
+typedef enum
 
12197
+{
 
12198
+  ABORT_T_SYSTEM = 0,
 
12199
+  ABORT_T_USER = 1,
 
12200
+} abort_user_t;
 
12201
+
 
12202
+typedef enum
 
12203
+{
 
12204
+  ABORT_T_NONE = 0,
 
12205
+  ABORT_T_ILLEGAL,
 
12206
+  ABORT_T_FOOTPRINT_EXCEEDED,
 
12207
+  ABORT_T_NESTED_TOO_DEEP,
 
12208
+  ABORT_T_CONFLICT,
 
12209
+
 
12210
+  ABORT_T_INVALID_ABORT_CODE
 
12211
+} abort_t;
 
12212
+
 
12213
+/* ---------------------------- local variables ---------------------------- */
 
12214
+
 
12215
+__attribute__ ((aligned(256))) static struct __htm_tdb local_tdb256;
 
12216
+static struct __htm_tdb local_tdb;
 
12217
+
 
12218
+static abort_t const abort_classes[] =
 
12219
+{
 
12220
+  ABORT_T_INVALID_ABORT_CODE,
 
12221
+  ABORT_T_NONE,
 
12222
+  ABORT_T_NONE,
 
12223
+  ABORT_T_NONE,
 
12224
+
 
12225
+  ABORT_T_ILLEGAL,
 
12226
+  ABORT_T_NONE,
 
12227
+  ABORT_T_NONE,
 
12228
+  ABORT_T_FOOTPRINT_EXCEEDED,
 
12229
+
 
12230
+  ABORT_T_FOOTPRINT_EXCEEDED,
 
12231
+  ABORT_T_CONFLICT,
 
12232
+  ABORT_T_CONFLICT,
 
12233
+  ABORT_T_ILLEGAL,
 
12234
+
 
12235
+  ABORT_T_NONE,
 
12236
+  ABORT_T_NESTED_TOO_DEEP,
 
12237
+  ABORT_T_NONE,
 
12238
+  ABORT_T_NONE,
 
12239
+
 
12240
+  ABORT_T_NONE
 
12241
+};
 
12242
+
 
12243
+static size_t num_abort_classes = sizeof(abort_classes) / sizeof(abort_t);
 
12244
+
 
12245
+/* ---------------------------- exported variables (globals) --------------- */
 
12246
+
 
12247
+int global_int = 0;
 
12248
+uint64_t global_u64 = 0;
 
12249
+float global_float_1 = 1.0;
 
12250
+float global_float_2 = 2.5;
 
12251
+float global_float_3 = 0.0;
 
12252
+__attribute__ ((aligned(256))) struct
 
12253
+{
 
12254
+  volatile uint64_t c1;
 
12255
+  volatile uint64_t c2;
 
12256
+  volatile uint64_t c3;
 
12257
+} counters = { 0, 0, 0 };
 
12258
+
 
12259
+/* ---------------------------- local helper functions --------------------- */
 
12260
+
 
12261
+static void dump_tdb(struct __htm_tdb *tdb)
 
12262
+{
 
12263
+  unsigned char *p;
 
12264
+  int i;
 
12265
+  int j;
 
12266
+
 
12267
+  p = (unsigned char *)tdb;
 
12268
+  for (i = 0; i < 16; i++)
 
12269
+    {
 
12270
+      fprintf(stderr, "0x%02x  ", i * 16);
 
12271
+      for (j = 0; j < 16; j++)
 
12272
+       {
 
12273
+         fprintf(stderr, "%02x", (int)p[i * 16 + j]);
 
12274
+         if (j < 15)
 
12275
+           {
 
12276
+             fprintf(stderr, " ");
 
12277
+           }
 
12278
+         if (j == 7)
 
12279
+           {
 
12280
+             fprintf(stderr, " ");
 
12281
+           }
 
12282
+       }
 
12283
+      fprintf(stderr, "\n");
 
12284
+    }
 
12285
+
 
12286
+  return;
 
12287
+}
 
12288
+
 
12289
+static void make_fake_tdb(struct __htm_tdb *tdb)
 
12290
+{
 
12291
+  memset(tdb, 0, sizeof(*tdb));
 
12292
+  tdb->format = 1;
 
12293
+  tdb->nesting_depth = 1;
 
12294
+  tdb->atia = DEFAULT_ABORT_ADDRESS;
 
12295
+  tdb->abort_code = 11;
 
12296
+
 
12297
+  return;
 
12298
+}
 
12299
+
 
12300
+static int check_abort_code_in_tdb(struct __htm_tdb *tdb, uint64_t abort_code)
 
12301
+{
 
12302
+  long expect_rc;
 
12303
+  long rc;
 
12304
+
 
12305
+  if (abort_code != 0)
 
12306
+    {
 
12307
+      long addr;
 
12308
+
 
12309
+      addr = __TM_failure_address(&local_tdb);
 
12310
+      if (addr != DEFAULT_ABORT_ADDRESS)
 
12311
+       {
 
12312
+         return 11;
 
12313
+       }
 
12314
+    }
 
12315
+  {
 
12316
+    long long tdb_abort_code;
 
12317
+
 
12318
+    tdb_abort_code = __TM_failure_code(tdb);
 
12319
+    if ((uint64_t)tdb_abort_code != abort_code)
 
12320
+      {
 
12321
+       fprintf(
 
12322
+               stderr, "tm_ac %" PRIu64 ", ac %" PRIu64
 
12323
+               ", tdb_ac %" PRIu64 "\n",
 
12324
+               (uint64_t)tdb_abort_code, abort_code,
 
12325
+               (uint64_t)tdb->abort_code);
 
12326
+       return 10;
 
12327
+      }
 
12328
+  }
 
12329
+  expect_rc = (abort_code >= 256) ? 1 : 0;
 
12330
+  rc = __TM_is_user_abort(tdb);
 
12331
+  if (rc != expect_rc)
 
12332
+    {
 
12333
+      fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
 
12334
+      return 1;
 
12335
+    }
 
12336
+  {
 
12337
+    unsigned char code;
 
12338
+
 
12339
+    code = 0xffu;
 
12340
+    rc = __TM_is_named_user_abort(tdb, &code);
 
12341
+    if (rc != expect_rc)
 
12342
+      {
 
12343
+       fprintf(
 
12344
+               stderr, "rc %ld, expect_rc %ld\n", rc,
 
12345
+               expect_rc);
 
12346
+       return 2;
 
12347
+      }
 
12348
+    if (expect_rc == 1 && code != abort_code - 256)
 
12349
+      {
 
12350
+       return 3;
 
12351
+      }
 
12352
+  }
 
12353
+  if (abort_code > (uint64_t)num_abort_classes)
 
12354
+    {
 
12355
+      abort_code = (uint64_t)num_abort_classes;
 
12356
+    }
 
12357
+  expect_rc = (abort_classes[abort_code] == ABORT_T_ILLEGAL) ? 1 : 0;
 
12358
+  rc = __TM_is_illegal(tdb);
 
12359
+  if (rc != expect_rc)
 
12360
+    {
 
12361
+      dump_tdb(tdb);
 
12362
+      fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
 
12363
+      return 4;
 
12364
+    }
 
12365
+  expect_rc =
 
12366
+    (abort_classes[abort_code] == ABORT_T_FOOTPRINT_EXCEEDED) ?
 
12367
+    1 : 0;
 
12368
+  rc = __TM_is_footprint_exceeded(tdb);
 
12369
+  if (rc != expect_rc)
 
12370
+    {
 
12371
+      dump_tdb(tdb);
 
12372
+      fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
 
12373
+      return 5;
 
12374
+    }
 
12375
+  expect_rc =
 
12376
+    (abort_classes[abort_code] == ABORT_T_NESTED_TOO_DEEP) ? 1 : 0;
 
12377
+  rc = __TM_is_nested_too_deep(tdb);
 
12378
+  if (rc != expect_rc)
 
12379
+    {
 
12380
+      dump_tdb(tdb);
 
12381
+      fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
 
12382
+      return 6;
 
12383
+    }
 
12384
+  expect_rc = (abort_classes[abort_code] == ABORT_T_CONFLICT) ? 1 : 0;
 
12385
+  rc = __TM_is_conflict(tdb);
 
12386
+  if (rc != expect_rc)
 
12387
+    {
 
12388
+      dump_tdb(tdb);
 
12389
+      fprintf(stderr, "rc %ld, expect_rc %ld\n", rc, expect_rc);
 
12390
+      return 7;
 
12391
+    }
 
12392
+
 
12393
+  return 0;
 
12394
+}
 
12395
+
 
12396
+/* ---------------------------- local test functions ----------------------- */
 
12397
+
 
12398
+/* Not a test; make sure that the involved global cachelines are reserved for
 
12399
+ * writing.  */
 
12400
+static int init_cache(void)
 
12401
+{
 
12402
+  make_fake_tdb(&local_tdb);
 
12403
+  make_fake_tdb(&local_tdb256);
 
12404
+  global_int = 0;
 
12405
+  global_u64 = 0;
 
12406
+  global_float_1 = 1.0;
 
12407
+  global_float_2 = 2.5;
 
12408
+  global_float_3 = 0.0;
 
12409
+  counters.c1 = 0;
 
12410
+  counters.c2 = 0;
 
12411
+  counters.c3 = 0;
 
12412
+
 
12413
+  return 0;
 
12414
+}
 
12415
+
 
12416
+static int test_abort_classification(void)
 
12417
+{
 
12418
+  int i;
 
12419
+
 
12420
+  make_fake_tdb(&local_tdb);
 
12421
+  for (i = 0; i <= 256; i++)
 
12422
+    {
 
12423
+      int rc;
 
12424
+
 
12425
+      local_tdb.abort_code = (uint64_t)i;
 
12426
+      rc = check_abort_code_in_tdb(&local_tdb, (uint64_t)i);
 
12427
+      if (rc != 0)
 
12428
+       {
 
12429
+         return 100 * i + rc;
 
12430
+       }
 
12431
+    }
 
12432
+
 
12433
+  return 0;
 
12434
+}
 
12435
+
 
12436
+static int test_cc_classification(void)
 
12437
+{
 
12438
+  long rc;
 
12439
+
 
12440
+  rc = __TM_is_failure_persistent(0);
 
12441
+  if (rc != 0)
 
12442
+    {
 
12443
+      return 1;
 
12444
+    }
 
12445
+  rc = __TM_is_failure_persistent(1);
 
12446
+  if (rc != 0)
 
12447
+    {
 
12448
+      return 2;
 
12449
+    }
 
12450
+  rc = __TM_is_failure_persistent(2);
 
12451
+  if (rc != 0)
 
12452
+    {
 
12453
+      return 3;
 
12454
+    }
 
12455
+  rc = __TM_is_failure_persistent(3);
 
12456
+  if (rc != 1)
 
12457
+    {
 
12458
+      return 4;
 
12459
+    }
 
12460
+
 
12461
+  return 0;
 
12462
+}
 
12463
+
 
12464
+static int test_tbegin_ntstg_tend(void)
 
12465
+{
 
12466
+  long rc;
 
12467
+
 
12468
+  counters.c1 = 0;
 
12469
+  counters.c2 = 0;
 
12470
+  if ((rc = __TM_simple_begin()) == 0)
 
12471
+    {
 
12472
+      __TM_non_transactional_store((uint64_t *)&counters.c1, 1);
 
12473
+      counters.c2 = 2;
 
12474
+      rc = __TM_end();
 
12475
+      if (rc != 0)
 
12476
+       {
 
12477
+         return 100 * rc + 5;
 
12478
+       }
 
12479
+      if (counters.c1 != 1)
 
12480
+       {
 
12481
+         return 100 * counters.c1 + 2;
 
12482
+       }
 
12483
+      if (counters.c2 != 2)
 
12484
+       {
 
12485
+         return 100 * counters.c2 + 3;
 
12486
+       }
 
12487
+    }
 
12488
+  else
 
12489
+    {
 
12490
+      return 100 * rc + 4;
 
12491
+    }
 
12492
+
 
12493
+  return 0;
 
12494
+}
 
12495
+
 
12496
+static int test_tbegin_ntstg_tabort(void)
 
12497
+{
 
12498
+  register float f;
 
12499
+
 
12500
+  counters.c1 = 0;
 
12501
+  counters.c2 = 0;
 
12502
+  f = 0;
 
12503
+  if (__TM_simple_begin() == 0)
 
12504
+    {
 
12505
+      __TM_non_transactional_store((uint64_t *)&counters.c1, 1);
 
12506
+      counters.c2 = 2;
 
12507
+      f = 1;
 
12508
+      __TM_named_abort(0);
 
12509
+      return 1;
 
12510
+    }
 
12511
+  if (counters.c1 != 1)
 
12512
+    {
 
12513
+      return 100 * counters.c1 + 2;
 
12514
+    }
 
12515
+  if (counters.c2 != 0)
 
12516
+    {
 
12517
+      return 100 * counters.c2 + 3;
 
12518
+    }
 
12519
+  if (f != 0)
 
12520
+    {
 
12521
+      return 100 * f + 4;
 
12522
+    }
 
12523
+
 
12524
+  return 0;
 
12525
+}
 
12526
+
 
12527
+static int test_tbegin_aborts(void)
 
12528
+{
 
12529
+  float f;
 
12530
+  long rc;
 
12531
+
 
12532
+  f = 77;
 
12533
+  if ((rc = __TM_simple_begin()) == 0)
 
12534
+    {
 
12535
+      f = 88;
 
12536
+      __TM_abort();
 
12537
+      return 2;
 
12538
+    }
 
12539
+  else if (rc != 2)
 
12540
+    {
 
12541
+      return 3;
 
12542
+    }
 
12543
+  if (f != 77)
 
12544
+    {
 
12545
+      return 4;
 
12546
+    }
 
12547
+  f = 66;
 
12548
+  if ((rc = __TM_simple_begin()) == 0)
 
12549
+    {
 
12550
+      f = 99;
 
12551
+      __TM_named_abort(3);
 
12552
+      return 5;
 
12553
+    }
 
12554
+  else if (rc != 3)
 
12555
+    {
 
12556
+      return 100 * rc + 6;
 
12557
+    }
 
12558
+  if (f != 66)
 
12559
+    {
 
12560
+      return 100 * f + 7;
 
12561
+    }
 
12562
+  if ((rc = __TM_simple_begin()) == 0)
 
12563
+    {
 
12564
+      global_float_3 = global_float_1 + global_float_2;
 
12565
+      rc = __TM_end();
 
12566
+      if (rc != 0)
 
12567
+       {
 
12568
+         return 100 * rc + 8;
 
12569
+       }
 
12570
+    }
 
12571
+  else
 
12572
+    {
 
12573
+      return 100 * rc + 9;
 
12574
+    }
 
12575
+  if (global_float_3 != global_float_1 + global_float_2)
 
12576
+    {
 
12577
+      return 100 * rc + 10;
 
12578
+    }
 
12579
+
 
12580
+  return 0;
 
12581
+}
 
12582
+
 
12583
+static int test_tbegin_tdb(void)
 
12584
+{
 
12585
+  long rc;
 
12586
+
 
12587
+  local_tdb.format = 0;
 
12588
+  if ((rc = __TM_begin(&local_tdb)) == 0)
 
12589
+    {
 
12590
+      rc = __TM_end();
 
12591
+      if (rc != 0)
 
12592
+       {
 
12593
+         return 100 * rc + 1;
 
12594
+       }
 
12595
+      if (local_tdb.format != 0)
 
12596
+       {
 
12597
+         dump_tdb(&local_tdb);
 
12598
+         return 100 * local_tdb.format + 2;
 
12599
+       }
 
12600
+    }
 
12601
+  else
 
12602
+    {
 
12603
+      return 100 * rc + 3;
 
12604
+    }
 
12605
+  local_tdb.format = 0;
 
12606
+  if ((rc = __TM_begin(&local_tdb)) == 0)
 
12607
+    {
 
12608
+      __TM_named_abort(1);
 
12609
+      return 4;
 
12610
+    }
 
12611
+  else
 
12612
+    {
 
12613
+      if (rc != 3)
 
12614
+       {
 
12615
+         return 100 * rc + 5;
 
12616
+       }
 
12617
+      if (local_tdb.format != 1)
 
12618
+       {
 
12619
+         dump_tdb(&local_tdb);
 
12620
+         return 100 * local_tdb.format + 6;
 
12621
+       }
 
12622
+    }
 
12623
+  local_tdb256.format = 0;
 
12624
+  if ((rc = __TM_begin(&local_tdb256)) == 0)
 
12625
+    {
 
12626
+      rc = __TM_end();
 
12627
+      if (rc != 0)
 
12628
+       {
 
12629
+         return 1100 * rc + 1;
 
12630
+       }
 
12631
+      if (local_tdb256.format != 0)
 
12632
+       {
 
12633
+         dump_tdb(&local_tdb256);
 
12634
+         return 1100 * local_tdb256.format + 2;
 
12635
+       }
 
12636
+    }
 
12637
+  else
 
12638
+    {
 
12639
+      return 1100 * rc + 3;
 
12640
+    }
 
12641
+#if 1 /*!!!does not work*/
 
12642
+  local_tdb256.format = 0;
 
12643
+  if ((rc = __TM_begin(&local_tdb256)) == 0)
 
12644
+    {
 
12645
+      __TM_named_abort(1);
 
12646
+      return 2004;
 
12647
+    }
 
12648
+  else
 
12649
+    {
 
12650
+      if (rc != 3)
 
12651
+       {
 
12652
+         return 2100 * rc + 5;
 
12653
+       }
 
12654
+      if (local_tdb256.format != 1)
 
12655
+       {
 
12656
+         dump_tdb(&local_tdb256);
 
12657
+         return 2100 * local_tdb256.format + 6;
 
12658
+       }
 
12659
+    }
 
12660
+#endif
 
12661
+
 
12662
+  return 0;
 
12663
+}
 
12664
+
 
12665
+static int test_etnd(void)
 
12666
+{
 
12667
+  long rc;
 
12668
+
 
12669
+  {
 
12670
+    long nd;
 
12671
+
 
12672
+    make_fake_tdb(&local_tdb);
 
12673
+    local_tdb.nesting_depth = 0;
 
12674
+    nd = __TM_nesting_depth(&local_tdb);
 
12675
+    if (nd != 0)
 
12676
+      {
 
12677
+       return 1;
 
12678
+      }
 
12679
+    local_tdb.nesting_depth = 7;
 
12680
+    nd = __TM_nesting_depth(&local_tdb);
 
12681
+    if (nd != 7)
 
12682
+      {
 
12683
+       return 7;
 
12684
+      }
 
12685
+    local_tdb.format = 0;
 
12686
+    nd = __TM_nesting_depth(&local_tdb);
 
12687
+    if (nd != 0)
 
12688
+      {
 
12689
+       return 2;
 
12690
+      }
 
12691
+  }
 
12692
+  counters.c1 = 0;
 
12693
+  counters.c1 = 0;
 
12694
+  counters.c2 = 0;
 
12695
+  counters.c3 = 0;
 
12696
+  if ((rc = __TM_simple_begin()) == 0)
 
12697
+    {
 
12698
+      counters.c1 = __TM_nesting_depth(0);
 
12699
+      if (__TM_simple_begin() == 0)
 
12700
+       {
 
12701
+         counters.c2 = __TM_nesting_depth(0);
 
12702
+         if (__TM_simple_begin() == 0)
 
12703
+           {
 
12704
+             counters.c3 = __TM_nesting_depth(0);
 
12705
+             __TM_end();
 
12706
+           }
 
12707
+         __TM_end();
 
12708
+       }
 
12709
+      __TM_end();
 
12710
+    }
 
12711
+  else
 
12712
+    {
 
12713
+      return 100 * rc + 1;
 
12714
+    }
 
12715
+  if (counters.c1 != 1)
 
12716
+    {
 
12717
+      return 100 * counters.c1 + 2;
 
12718
+    }
 
12719
+  if (counters.c2 != 2)
 
12720
+    {
 
12721
+      return 100 * counters.c2 + 3;
 
12722
+    }
 
12723
+  if (counters.c3 != 3)
 
12724
+    {
 
12725
+      return 100 * counters.c3 + 4;
 
12726
+    }
 
12727
+
 
12728
+  return 0;
 
12729
+}
 
12730
+
 
12731
+/* ---------------------------- local testing framework functions ---------- */
 
12732
+
 
12733
+static int run_one_test(const test_table_entry_t *test_entry)
 
12734
+{
 
12735
+  int do_print_passes;
 
12736
+  int succeeded;
 
12737
+  int rc;
 
12738
+  int i;
 
12739
+
 
12740
+  do_print_passes = (
 
12741
+                    test_entry->required_quorum != 1 ||
 
12742
+                    test_entry->max_repetitions != 1);
 
12743
+  printf("RRR RUN  %s\n", test_entry->name);
 
12744
+  if (do_print_passes == 1)
 
12745
+    {
 
12746
+      printf(
 
12747
+            "         (requires %d successful out of %d runs)\n",
 
12748
+            test_entry->required_quorum,
 
12749
+            test_entry->max_repetitions);
 
12750
+    }
 
12751
+  succeeded = 0;
 
12752
+  rc = 0;
 
12753
+  for (rc = 0, i = 0; i < test_entry->max_repetitions; i++)
 
12754
+    {
 
12755
+      if (do_print_passes == 1)
 
12756
+       {
 
12757
+         if (i == 0)
 
12758
+           {
 
12759
+             printf("        ");
 
12760
+           }
 
12761
+         else
 
12762
+           {
 
12763
+             printf(",");
 
12764
+           }
 
12765
+       }
 
12766
+      rc = test_entry->test_func();
 
12767
+      if (rc == 0)
 
12768
+       {
 
12769
+         if (do_print_passes == 1)
 
12770
+           {
 
12771
+             printf(" success");
 
12772
+           }
 
12773
+         succeeded++;
 
12774
+         if (succeeded >= test_entry->required_quorum)
 
12775
+           {
 
12776
+             break;
 
12777
+           }
 
12778
+       }
 
12779
+      else
 
12780
+       {
 
12781
+         printf(" failed (rc = %d)", rc);
 
12782
+       }
 
12783
+    }
 
12784
+  if (do_print_passes == 1 || rc != 0)
 
12785
+    {
 
12786
+      printf("\n");
 
12787
+    }
 
12788
+  if (succeeded >= test_entry->required_quorum)
 
12789
+    {
 
12790
+      printf("+++ OK   %s\n", test_entry->name);
 
12791
+
 
12792
+      return 0;
 
12793
+    }
 
12794
+  else
 
12795
+    {
 
12796
+      printf("--- FAIL %s\n", test_entry->name);
 
12797
+
 
12798
+      return (rc != 0) ? rc : -1;
 
12799
+    }
 
12800
+}
 
12801
+
 
12802
+static int run_all_tests(const test_table_entry_t *test_table)
 
12803
+{
 
12804
+  const test_table_entry_t *test;
 
12805
+  int rc;
 
12806
+
 
12807
+  for (
 
12808
+       rc = 0, test = &test_table[0];
 
12809
+       test->test_func != NULL && rc == 0; test++)
 
12810
+    {
 
12811
+      rc = run_one_test(test);
 
12812
+    }
 
12813
+
 
12814
+  return rc;
 
12815
+}
 
12816
+
 
12817
+/* ---------------------------- interface functions ------------------------ */
 
12818
+
 
12819
+int main(void)
 
12820
+{
 
12821
+  const test_table_entry_t test_table[] = {
 
12822
+    TEST_NO_REP(init_cache),
 
12823
+    TEST_NO_REP(test_abort_classification),
 
12824
+    TEST_NO_REP(test_cc_classification),
 
12825
+    TEST_DF_REP(test_tbegin_ntstg_tend),
 
12826
+    TEST_DF_REP(test_tbegin_ntstg_tabort),
 
12827
+    TEST_DF_REP(test_tbegin_aborts),
 
12828
+    TEST_DF_REP(test_tbegin_tdb),
 
12829
+    TEST_DF_REP(test_etnd),
 
12830
+    { (void *)0, 0, 0 }
 
12831
+  };
 
12832
+
 
12833
+  {
 
12834
+    int rc;
 
12835
+
 
12836
+    rc = run_all_tests(test_table);
 
12837
+
 
12838
+    return rc;
 
12839
+  }
 
12840
+}
 
12841
Index: gcc/testsuite/gcc.target/s390/hotpatch-8.c
 
12842
===================================================================
 
12843
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-8.c    (.../tags/gcc_4_8_2_release)
 
12844
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-8.c    (.../branches/gcc-4_8-branch)
 
12845
@@ -0,0 +1,28 @@
 
12846
+/* Functional tests for the function hotpatching feature.  */
 
12847
+
 
12848
+/* { dg-do run } */
 
12849
+/* { dg-options "-O3 -mzarch -mhotpatch --save-temps" } */
 
12850
+
 
12851
+#include <stdio.h>
 
12852
+
 
12853
+__attribute__ ((hotpatch))
 
12854
+inline void hp1(void)
 
12855
+{
 
12856
+  printf("hello, world!\n");
 
12857
+}
 
12858
+
 
12859
+__attribute__ ((hotpatch))
 
12860
+__attribute__ ((always_inline))
 
12861
+void hp2(void) /* { dg-warning "always_inline function might not be inlinable" } */
 
12862
+{
 
12863
+  printf("hello, world!\n");
 
12864
+} /* { dg-warning "function 'hp2' with the 'always_inline' attribute is not hotpatchable" } */
 
12865
+
 
12866
+int main (void)
 
12867
+{
 
12868
+  return 0;
 
12869
+}
 
12870
+
 
12871
+/* Check number of occurences of certain instructions.  */
 
12872
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
 
12873
+/* { dg-final { scan-assembler-not "nop\t0" } } */
 
12874
Index: gcc/testsuite/gcc.target/s390/hotpatch-9.c
 
12875
===================================================================
 
12876
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-9.c    (.../tags/gcc_4_8_2_release)
 
12877
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-9.c    (.../branches/gcc-4_8-branch)
 
12878
@@ -0,0 +1,21 @@
 
12879
+/* Functional tests for the function hotpatching feature.  */
 
12880
+
 
12881
+/* { dg-do run } */
 
12882
+/* { dg-options "-O3 -mzarch -mhotpatch=1 --save-temps" } */
 
12883
+
 
12884
+#include <stdio.h>
 
12885
+
 
12886
+__attribute__ ((hotpatch(2)))
 
12887
+void hp1(void)
 
12888
+{
 
12889
+  printf("hello, world!\n");
 
12890
+}
 
12891
+
 
12892
+int main (void)
 
12893
+{
 
12894
+  return 0;
 
12895
+}
 
12896
+
 
12897
+/* Check number of occurences of certain instructions.  */
 
12898
+/* { dg-final { scan-assembler-times "nopr\t%r7" 2 } } */
 
12899
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
 
12900
Index: gcc/testsuite/gcc.target/s390/hotpatch-10.c
 
12901
===================================================================
 
12902
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-10.c   (.../tags/gcc_4_8_2_release)
 
12903
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-10.c   (.../branches/gcc-4_8-branch)
 
12904
@@ -0,0 +1,21 @@
 
12905
+/* Functional tests for the function hotpatching feature.  */
 
12906
+
 
12907
+/* { dg-do run } */
 
12908
+/* { dg-options "-O3 -mzarch -mno-hotpatch --save-temps" } */
 
12909
+
 
12910
+#include <stdio.h>
 
12911
+
 
12912
+__attribute__ ((hotpatch(2)))
 
12913
+void hp1(void)
 
12914
+{
 
12915
+  printf("hello, world!\n");
 
12916
+}
 
12917
+
 
12918
+int main (void)
 
12919
+{
 
12920
+  return 0;
 
12921
+}
 
12922
+
 
12923
+/* Check number of occurences of certain instructions.  */
 
12924
+/* { dg-final { scan-assembler-times "nopr\t%r7" 2 } } */
 
12925
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
 
12926
Index: gcc/testsuite/gcc.target/s390/hotpatch-11.c
 
12927
===================================================================
 
12928
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-11.c   (.../tags/gcc_4_8_2_release)
 
12929
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-11.c   (.../branches/gcc-4_8-branch)
 
12930
@@ -0,0 +1,20 @@
 
12931
+/* Functional tests for the function hotpatching feature.  */
 
12932
+
 
12933
+/* { dg-do run } */
 
12934
+/* { dg-options "-O3 -mzarch -mhotpatch -mno-hotpatch --save-temps" } */
 
12935
+
 
12936
+#include <stdio.h>
 
12937
+
 
12938
+void hp1(void)
 
12939
+{
 
12940
+  printf("hello, world!\n");
 
12941
+}
 
12942
+
 
12943
+int main (void)
 
12944
+{
 
12945
+  return 0;
 
12946
+}
 
12947
+
 
12948
+/* Check number of occurences of certain instructions.  */
 
12949
+/* { dg-final { scan-assembler-not "nopr\t%r7" } } */
 
12950
+/* { dg-final { scan-assembler-not "nop\t0" } } */
 
12951
Index: gcc/testsuite/gcc.target/s390/hotpatch-12.c
 
12952
===================================================================
 
12953
--- a/src/gcc/testsuite/gcc.target/s390/hotpatch-12.c   (.../tags/gcc_4_8_2_release)
 
12954
+++ b/src/gcc/testsuite/gcc.target/s390/hotpatch-12.c   (.../branches/gcc-4_8-branch)
 
12955
@@ -0,0 +1,20 @@
 
12956
+/* Functional tests for the function hotpatching feature.  */
 
12957
+
 
12958
+/* { dg-do run } */
 
12959
+/* { dg-options "-O3 -mzarch -mno-hotpatch -mhotpatch=1 --save-temps" } */
 
12960
+
 
12961
+#include <stdio.h>
 
12962
+
 
12963
+void hp1(void)
 
12964
+{
 
12965
+  printf("hello, world!\n");
 
12966
+}
 
12967
+
 
12968
+int main (void)
 
12969
+{
 
12970
+  return 0;
 
12971
+}
 
12972
+
 
12973
+/* Check number of occurences of certain instructions.  */
 
12974
+/* { dg-final { scan-assembler-times "nopr\t%r7" 1 } } */
 
12975
+/* { dg-final { scan-assembler-times "nop\t0" 1 } } */
 
12976
Index: gcc/testsuite/gcc.target/mips/bswap-1.c
 
12977
===================================================================
 
12978
--- a/src/gcc/testsuite/gcc.target/mips/bswap-1.c       (.../tags/gcc_4_8_2_release)
 
12979
+++ b/src/gcc/testsuite/gcc.target/mips/bswap-1.c       (.../branches/gcc-4_8-branch)
 
12980
@@ -0,0 +1,10 @@
 
12981
+/* { dg-options "isa_rev>=2" } */
 
12982
+/* { dg-skip-if "bswap recognition needs expensive optimizations" { *-*-* } { "-O0" "-O1" } { "" } } */
 
12983
+
 
12984
+NOMIPS16 unsigned short
 
12985
+foo (unsigned short x)
 
12986
+{
 
12987
+  return ((x << 8) & 0xff00) | ((x >> 8) & 0xff);
 
12988
+}
 
12989
+
 
12990
+/* { dg-final { scan-assembler "\twsbh\t" } } */
 
12991
Index: gcc/testsuite/gcc.target/mips/bswap-2.c
 
12992
===================================================================
 
12993
--- a/src/gcc/testsuite/gcc.target/mips/bswap-2.c       (.../tags/gcc_4_8_2_release)
 
12994
+++ b/src/gcc/testsuite/gcc.target/mips/bswap-2.c       (.../branches/gcc-4_8-branch)
 
12995
@@ -0,0 +1,9 @@
 
12996
+/* { dg-options "isa_rev>=2" } */
 
12997
+
 
12998
+NOMIPS16 unsigned short
 
12999
+foo (unsigned short x)
 
13000
+{
 
13001
+  return __builtin_bswap16 (x);
 
13002
+}
 
13003
+
 
13004
+/* { dg-final { scan-assembler "\twsbh\t" } } */
 
13005
Index: gcc/testsuite/gcc.target/mips/pr59137.c
 
13006
===================================================================
 
13007
--- a/src/gcc/testsuite/gcc.target/mips/pr59137.c       (.../tags/gcc_4_8_2_release)
 
13008
+++ b/src/gcc/testsuite/gcc.target/mips/pr59137.c       (.../branches/gcc-4_8-branch)
 
13009
@@ -0,0 +1,34 @@
 
13010
+/* { dg-do run } */
 
13011
+/* { dg-options "-mno-plt" } */
 
13012
+
 
13013
+extern void abort (void);
 
13014
+
 
13015
+struct lispstruct
 
13016
+{
 
13017
+  int e;
 
13018
+  int t;
 
13019
+};
 
13020
+
 
13021
+struct lispstruct Cnil_body;
 
13022
+struct lispstruct Ct_body;
 
13023
+int nvalues;
 
13024
+
 
13025
+struct lispstruct * __attribute__ ((noinline))
 
13026
+fLlistp (struct lispstruct *x0)
 
13027
+{
 
13028
+  if (x0 == &Cnil_body
 
13029
+      || (((unsigned long) x0 >= 0x80000000) ? 0
 
13030
+         : (!x0->e ? (x0 != &Cnil_body) : x0->t)))
 
13031
+    x0 = &Ct_body;
 
13032
+  else
 
13033
+    x0 = &Cnil_body;
 
13034
+  nvalues = 1;
 
13035
+  return x0;
 
13036
+}
 
13037
+
 
13038
+int main ()
 
13039
+{
 
13040
+  if (fLlistp ((struct lispstruct *) 0xa0000001) != &Cnil_body)
 
13041
+    abort ();
 
13042
+  return 0;
 
13043
+}
 
13044
Index: gcc/testsuite/gcc.target/mips/bswap-3.c
 
13045
===================================================================
 
13046
--- a/src/gcc/testsuite/gcc.target/mips/bswap-3.c       (.../tags/gcc_4_8_2_release)
 
13047
+++ b/src/gcc/testsuite/gcc.target/mips/bswap-3.c       (.../branches/gcc-4_8-branch)
 
13048
@@ -0,0 +1,14 @@
 
13049
+/* { dg-options "isa_rev>=2" } */
 
13050
+/* { dg-skip-if "bswap recognition needs expensive optimizations" { *-*-* } { "-O0" "-O1" } { "" } } */
 
13051
+
 
13052
+NOMIPS16 unsigned int
 
13053
+foo (unsigned int x)
 
13054
+{
 
13055
+  return (((x << 24) & 0xff000000)
 
13056
+         | ((x << 8) & 0xff0000)
 
13057
+         | ((x >> 8) & 0xff00)
 
13058
+         | ((x >> 24) & 0xff));
 
13059
+}
 
13060
+
 
13061
+/* { dg-final { scan-assembler "\twsbh\t" } } */
 
13062
+/* { dg-final { scan-assembler "\tror\t" } } */
 
13063
Index: gcc/testsuite/gcc.target/mips/bswap-4.c
 
13064
===================================================================
 
13065
--- a/src/gcc/testsuite/gcc.target/mips/bswap-4.c       (.../tags/gcc_4_8_2_release)
 
13066
+++ b/src/gcc/testsuite/gcc.target/mips/bswap-4.c       (.../branches/gcc-4_8-branch)
 
13067
@@ -0,0 +1,10 @@
 
13068
+/* { dg-options "isa_rev>=2" } */
 
13069
+
 
13070
+NOMIPS16 unsigned int
 
13071
+foo (unsigned int x)
 
13072
+{
 
13073
+  return __builtin_bswap32 (x);
 
13074
+}
 
13075
+
 
13076
+/* { dg-final { scan-assembler "\twsbh\t" } } */
 
13077
+/* { dg-final { scan-assembler "\tror\t" } } */
 
13078
Index: gcc/testsuite/gcc.target/mips/bswap-5.c
 
13079
===================================================================
 
13080
--- a/src/gcc/testsuite/gcc.target/mips/bswap-5.c       (.../tags/gcc_4_8_2_release)
 
13081
+++ b/src/gcc/testsuite/gcc.target/mips/bswap-5.c       (.../branches/gcc-4_8-branch)
 
13082
@@ -0,0 +1,20 @@
 
13083
+/* { dg-options "isa_rev>=2 -mgp64" } */
 
13084
+/* { dg-skip-if "bswap recognition needs expensive optimizations" { *-*-* } { "-O0" "-O1" } { "" } } */
 
13085
+
 
13086
+typedef unsigned long long uint64_t;
 
13087
+
 
13088
+NOMIPS16 uint64_t
 
13089
+foo (uint64_t x)
 
13090
+{
 
13091
+  return (((x << 56) & 0xff00000000000000ull)
 
13092
+         | ((x << 40) & 0xff000000000000ull)
 
13093
+         | ((x << 24) & 0xff0000000000ull)
 
13094
+         | ((x << 8) & 0xff00000000ull)
 
13095
+         | ((x >> 8) & 0xff000000)
 
13096
+         | ((x >> 24) & 0xff0000)
 
13097
+         | ((x >> 40) & 0xff00)
 
13098
+         | ((x >> 56) & 0xff));
 
13099
+}
 
13100
+
 
13101
+/* { dg-final { scan-assembler "\tdsbh\t" } } */
 
13102
+/* { dg-final { scan-assembler "\tdshd\t" } } */
 
13103
Index: gcc/testsuite/gcc.target/mips/bswap-6.c
 
13104
===================================================================
 
13105
--- a/src/gcc/testsuite/gcc.target/mips/bswap-6.c       (.../tags/gcc_4_8_2_release)
 
13106
+++ b/src/gcc/testsuite/gcc.target/mips/bswap-6.c       (.../branches/gcc-4_8-branch)
 
13107
@@ -0,0 +1,12 @@
 
13108
+/* { dg-options "isa_rev>=2 -mgp64" } */
 
13109
+
 
13110
+typedef unsigned long long uint64_t;
 
13111
+
 
13112
+NOMIPS16 uint64_t
 
13113
+foo (uint64_t x)
 
13114
+{
 
13115
+  return __builtin_bswap64 (x);
 
13116
+}
 
13117
+
 
13118
+/* { dg-final { scan-assembler "\tdsbh\t" } } */
 
13119
+/* { dg-final { scan-assembler "\tdshd\t" } } */
 
13120
Index: gcc/testsuite/gcc.target/sh/pr51244-19.c
 
13121
===================================================================
 
13122
--- a/src/gcc/testsuite/gcc.target/sh/pr51244-19.c      (.../tags/gcc_4_8_2_release)
 
13123
+++ b/src/gcc/testsuite/gcc.target/sh/pr51244-19.c      (.../branches/gcc-4_8-branch)
 
13124
@@ -22,11 +22,16 @@
 
13125
    unwanted sequences.  Thus, if we see any movt insns, something is not
 
13126
    working as expected.  This test requires -O2 because the T bit stores
 
13127
    in question will be eliminated in additional insn split passes after
 
13128
-   reload.  */
 
13129
+   reload.
 
13130
+
 
13131
+   Notice: When this test case was initially added, the T bit optimization
 
13132
+           was buggy and this test case resulted in wrong code.  The movt
 
13133
+           instructions actually have to be present in this case to get
 
13134
+           correct code.  */
 
13135
 /* { dg-do compile { target "sh*-*-*" } } */
 
13136
 /* { dg-options "-O2" } */
 
13137
 /* { dg-skip-if "" { "sh*-*-*" } { "-m5*" } { "" } } */
 
13138
-/* { dg-final { scan-assembler-not "movt" } } */
 
13139
+/* { dg-final { scan-assembler "movt" } } */
 
13140
 
 
13141
 struct request
 
13142
 {
 
13143
Index: gcc/testsuite/gcc.target/sh/pr54089-3.c
 
13144
===================================================================
 
13145
--- a/src/gcc/testsuite/gcc.target/sh/pr54089-3.c       (.../tags/gcc_4_8_2_release)
 
13146
+++ b/src/gcc/testsuite/gcc.target/sh/pr54089-3.c       (.../branches/gcc-4_8-branch)
 
13147
@@ -5,7 +5,7 @@
 
13148
 /* { dg-options "-O1" } */
 
13149
 /* { dg-skip-if "" { "sh*-*-*" } { "*" } { "-m1*" "-m2" "-m2e*" } } */
 
13150
 /* { dg-final { scan-assembler-not "and" } } */
 
13151
-/* { dg-final { scan-assembler-not "31" } } */
 
13152
+/* { dg-final { scan-assembler-not "#31" } } */
 
13153
 
 
13154
 int
 
13155
 test00 (unsigned int a, int* b, int c, int* d, unsigned int e)
 
13156
Index: gcc/testsuite/go.test/go-test.exp
 
13157
===================================================================
 
13158
--- a/src/gcc/testsuite/go.test/go-test.exp     (.../tags/gcc_4_8_2_release)
 
13159
+++ b/src/gcc/testsuite/go.test/go-test.exp     (.../branches/gcc-4_8-branch)
 
13160
@@ -333,17 +333,16 @@
 
13161
        }
 
13162
 
 
13163
        if { ( [file tail $test] == "select2.go" \
 
13164
-                  || [file tail $test] == "stack.go" ) \
 
13165
+                  || [file tail $test] == "stack.go" \
 
13166
+                  || [file tail $test] == "peano.go" ) \
 
13167
                 && ! [check_effective_target_split_stack] } {
 
13168
-           # chan/select2.go fails on targets without split stack,
 
13169
-           # because they allocate a large stack segment that blows
 
13170
-           # out the memory calculations.
 
13171
+           # These tests fails on targets without split stack.
 
13172
            untested $name
 
13173
            continue
 
13174
        }
 
13175
 
 
13176
-       if { [file tail $test] == "rotate.go" } {
 
13177
-           # This test produces a temporary file that takes too long
 
13178
+       if [string match "*go.test/test/rotate\[0123\].go" $test] {
 
13179
+           # These tests produces a temporary file that takes too long
 
13180
            # to compile--5 minutes on my laptop without optimization.
 
13181
            # When compiling without optimization it tests nothing
 
13182
            # useful, since the point of the test is to see whether
 
13183
Index: gcc/testsuite/gfortran.dg/shape_8.f90
 
13184
===================================================================
 
13185
--- a/src/gcc/testsuite/gfortran.dg/shape_8.f90 (.../tags/gcc_4_8_2_release)
 
13186
+++ b/src/gcc/testsuite/gfortran.dg/shape_8.f90 (.../branches/gcc-4_8-branch)
 
13187
@@ -0,0 +1,10 @@
 
13188
+! { dg-do compile }
 
13189
+!
 
13190
+! PR 60450: [4.7/4.8 Regression] ICE with SHAPE intrinsic
 
13191
+!
 
13192
+! Contributed by Dave Allured <dave.allured@noaa.gov>
 
13193
+
 
13194
+  real, allocatable :: x(:,:)
 
13195
+  allocate (x(3,2), source=99.)
 
13196
+  print *, shape (x / 10.0)
 
13197
+end
 
13198
Index: gcc/testsuite/gfortran.dg/proc_ptr_comp_38.f90
 
13199
===================================================================
 
13200
--- a/src/gcc/testsuite/gfortran.dg/proc_ptr_comp_38.f90        (.../tags/gcc_4_8_2_release)
 
13201
+++ b/src/gcc/testsuite/gfortran.dg/proc_ptr_comp_38.f90        (.../branches/gcc-4_8-branch)
 
13202
@@ -0,0 +1,12 @@
 
13203
+! { dg-do compile }
 
13204
+!
 
13205
+! PR fortran/58803
 
13206
+!
 
13207
+! Contributed by Vittorio Zecca
 
13208
+!
 
13209
+! Was before ICEing due to a double free
 
13210
+!
 
13211
+      type t
 
13212
+       procedure(real), pointer, nopass  :: f1, f2
 
13213
+      end type
 
13214
+      end
 
13215
Index: gcc/testsuite/gfortran.dg/gomp/pr59467.f90
 
13216
===================================================================
 
13217
--- a/src/gcc/testsuite/gfortran.dg/gomp/pr59467.f90    (.../tags/gcc_4_8_2_release)
 
13218
+++ b/src/gcc/testsuite/gfortran.dg/gomp/pr59467.f90    (.../branches/gcc-4_8-branch)
 
13219
@@ -0,0 +1,24 @@
 
13220
+! PR libgomp/59467
 
13221
+! { dg-do compile }
 
13222
+! { dg-options "-fopenmp" }
 
13223
+  FUNCTION t()
 
13224
+    INTEGER :: a, b, t
 
13225
+    a = 0
 
13226
+    b = 0
 
13227
+    !$OMP PARALLEL REDUCTION(+:b)
 
13228
+      !$OMP SINGLE     ! { dg-error "is not threadprivate or private in outer context" }
 
13229
+        !$OMP ATOMIC WRITE
 
13230
+        a = 6
 
13231
+      !$OMP END SINGLE COPYPRIVATE (a)
 
13232
+      b = a
 
13233
+    !$OMP END PARALLEL
 
13234
+    t = b
 
13235
+    b = 0
 
13236
+    !$OMP PARALLEL REDUCTION(+:b)
 
13237
+      !$OMP SINGLE
 
13238
+        !$OMP ATOMIC WRITE
 
13239
+        b = 6
 
13240
+      !$OMP END SINGLE COPYPRIVATE (b)
 
13241
+    !$OMP END PARALLEL
 
13242
+    t = t + b
 
13243
+  END FUNCTION
 
13244
Index: gcc/testsuite/gfortran.dg/allocate_class_3.f90
 
13245
===================================================================
 
13246
--- a/src/gcc/testsuite/gfortran.dg/allocate_class_3.f90        (.../tags/gcc_4_8_2_release)
 
13247
+++ b/src/gcc/testsuite/gfortran.dg/allocate_class_3.f90        (.../branches/gcc-4_8-branch)
 
13248
@@ -0,0 +1,107 @@
 
13249
+! { dg-do run }
 
13250
+! Tests the fix for PR59414, comment #3, in which the allocate
 
13251
+! expressions were not correctly being stripped to provide the
 
13252
+! vpointer as an lhs to the pointer assignment of the vptr from
 
13253
+! the SOURCE expression.
 
13254
+!
 
13255
+! Contributed by Antony Lewis  <antony@cosmologist.info>
 
13256
+!
 
13257
+module ObjectLists
 
13258
+  implicit none
 
13259
+
 
13260
+  type :: t
 
13261
+    integer :: i
 
13262
+  end type
 
13263
+
 
13264
+  type Object_array_pointer
 
13265
+    class(t), pointer :: p(:)
 
13266
+  end type
 
13267
+
 
13268
+contains
 
13269
+
 
13270
+  subroutine AddArray1 (P, Pt)
 
13271
+    class(t) :: P(:)
 
13272
+    class(Object_array_pointer) :: Pt
 
13273
+
 
13274
+    select type (Pt)
 
13275
+    class is (Object_array_pointer)
 
13276
+      if (associated (Pt%P)) deallocate (Pt%P)
 
13277
+      allocate(Pt%P(1:SIZE(P)), source=P)
 
13278
+    end select
 
13279
+  end subroutine
 
13280
+
 
13281
+  subroutine AddArray2 (P, Pt)
 
13282
+    class(t) :: P(:)
 
13283
+    class(Object_array_pointer) :: Pt
 
13284
+
 
13285
+    select type (Pt)
 
13286
+    type is (Object_array_pointer)
 
13287
+      if (associated (Pt%P)) deallocate (Pt%P)
 
13288
+      allocate(Pt%P(1:SIZE(P)), source=P)
 
13289
+    end select
 
13290
+  end subroutine
 
13291
+
 
13292
+  subroutine AddArray3 (P, Pt)
 
13293
+    class(t) :: P
 
13294
+    class(Object_array_pointer) :: Pt
 
13295
+
 
13296
+    select type (Pt)
 
13297
+    class is (Object_array_pointer)
 
13298
+      if (associated (Pt%P)) deallocate (Pt%P)
 
13299
+      allocate(Pt%P(1:4), source=P)
 
13300
+    end select
 
13301
+  end subroutine
 
13302
+
 
13303
+  subroutine AddArray4 (P, Pt)
 
13304
+    type(t) :: P(:)
 
13305
+    class(Object_array_pointer) :: Pt
 
13306
+
 
13307
+    select type (Pt)
 
13308
+    class is (Object_array_pointer)
 
13309
+      if (associated (Pt%P)) deallocate (Pt%P)
 
13310
+      allocate(Pt%P(1:SIZE(P)), source=P)
 
13311
+    end select
 
13312
+  end subroutine
 
13313
+end module
 
13314
+
 
13315
+  use ObjectLists
 
13316
+  type(Object_array_pointer), pointer :: Pt
 
13317
+  class(t), pointer :: P(:)
 
13318
+
 
13319
+  allocate (P(2), source = [t(1),t(2)])
 
13320
+  allocate (Pt, source = Object_array_pointer(NULL()))
 
13321
+  call AddArray1 (P, Pt)
 
13322
+  select type (x => Pt%p)
 
13323
+    type is (t)
 
13324
+      if (any (x%i .ne. [1,2])) call abort
 
13325
+  end select
 
13326
+  deallocate (P)
 
13327
+  deallocate (pt)
 
13328
+
 
13329
+  allocate (P(3), source = [t(3),t(4),t(5)])
 
13330
+  allocate (Pt, source = Object_array_pointer(NULL()))
 
13331
+  call AddArray2 (P, Pt)
 
13332
+  select type (x => Pt%p)
 
13333
+    type is (t)
 
13334
+      if (any (x%i .ne. [3,4,5])) call abort
 
13335
+  end select
 
13336
+  deallocate (P)
 
13337
+  deallocate (pt)
 
13338
+
 
13339
+  allocate (Pt, source = Object_array_pointer(NULL()))
 
13340
+  call AddArray3 (t(6), Pt)
 
13341
+  select type (x => Pt%p)
 
13342
+    type is (t)
 
13343
+      if (any (x%i .ne. [6,6,6,6])) call abort
 
13344
+  end select
 
13345
+  deallocate (pt)
 
13346
+
 
13347
+  allocate (Pt, source = Object_array_pointer(NULL()))
 
13348
+  call AddArray4 ([t(7), t(8)], Pt)
 
13349
+  select type (x => Pt%p)
 
13350
+    type is (t)
 
13351
+      if (any (x%i .ne. [7,8])) call abort
 
13352
+  end select
 
13353
+  deallocate (pt)
 
13354
+ end
 
13355
+
 
13356
Index: gcc/testsuite/gfortran.dg/reshape_6.f90
 
13357
===================================================================
 
13358
--- a/src/gcc/testsuite/gfortran.dg/reshape_6.f90       (.../tags/gcc_4_8_2_release)
 
13359
+++ b/src/gcc/testsuite/gfortran.dg/reshape_6.f90       (.../branches/gcc-4_8-branch)
 
13360
@@ -0,0 +1,19 @@
 
13361
+! { dg-do compile }
 
13362
+! PR fortran/58989
 
13363
+!
 
13364
+program test
 
13365
+
 
13366
+  real(8), dimension(4,4) :: fluxes
 
13367
+  real(8), dimension(2,2,2,2) :: f
 
13368
+  integer, dimension(3) :: dmmy 
 
13369
+  integer, parameter :: indx(4)=(/2,2,2,2/)
 
13370
+
 
13371
+  fluxes = 1
 
13372
+
 
13373
+  dmmy = (/2,2,2/)
 
13374
+
 
13375
+  f = reshape(fluxes,(/dmmy,2/))  ! Caused an ICE
 
13376
+  f = reshape(fluxes,(/2,2,2,2/)) ! Works as expected
 
13377
+  f = reshape(fluxes,indx)        ! Works as expected
 
13378
+
 
13379
+end program test
 
13380
Index: gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90
 
13381
===================================================================
 
13382
--- a/src/gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90      (.../tags/gcc_4_8_2_release)
 
13383
+++ b/src/gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90      (.../branches/gcc-4_8-branch)
 
13384
@@ -0,0 +1,36 @@
 
13385
+! { dg-do compile }
 
13386
+!
 
13387
+! PR fortran/58007
 
13388
+! Unresolved fiixup while loading a module.
 
13389
+!
 
13390
+! This tests that the specification expression A%MAX_DEGREE in module BSR is
 
13391
+! correctly loaded and resolved in program MAIN.
 
13392
+!
 
13393
+! Original testcase from Daniel Shapiro <shapero@uw.edu>
 
13394
+
 
13395
+module matrix
 
13396
+  type :: sparse_matrix
 
13397
+    integer :: max_degree
 
13398
+  end type
 
13399
+end module
 
13400
+
 
13401
+module bsr
 
13402
+  use matrix
 
13403
+
 
13404
+  type, extends(sparse_matrix) :: bsr_matrix
 
13405
+  end type
 
13406
+
 
13407
+  integer :: i1
 
13408
+  integer :: i2
 
13409
+  integer :: i3
 
13410
+contains
 
13411
+  function get_neighbors (A)
 
13412
+    type(bsr_matrix), intent(in) :: A
 
13413
+    integer :: get_neighbors(A%max_degree)
 
13414
+  end function
 
13415
+end module
 
13416
+
 
13417
+program main
 
13418
+  use matrix
 
13419
+  use bsr
 
13420
+end
 
13421
Index: gcc/testsuite/gfortran.dg/init_flag_12.f90
 
13422
===================================================================
 
13423
--- a/src/gcc/testsuite/gfortran.dg/init_flag_12.f90    (.../tags/gcc_4_8_2_release)
 
13424
+++ b/src/gcc/testsuite/gfortran.dg/init_flag_12.f90    (.../branches/gcc-4_8-branch)
 
13425
@@ -0,0 +1,13 @@
 
13426
+! { dg-do compile }
 
13427
+! { dg-options "-fno-automatic -finit-local-zero" }
 
13428
+!
 
13429
+! PR 55907: [4.7/4.8/4.9 Regression] ICE with -fno-automatic -finit-local-zero
 
13430
+!
 
13431
+! Contributed by J.R. Garcia <garcia.espinosa.jr@gmail.com>
 
13432
+
 
13433
+subroutine cchaine (i)
 
13434
+  implicit none
 
13435
+  integer :: i
 
13436
+  character(len=i) :: chaine
 
13437
+  write(*,*) chaine
 
13438
+end subroutine 
 
13439
Index: gcc/testsuite/gfortran.dg/derived_external_function_1.f90
 
13440
===================================================================
 
13441
--- a/src/gcc/testsuite/gfortran.dg/derived_external_function_1.f90     (.../tags/gcc_4_8_2_release)
 
13442
+++ b/src/gcc/testsuite/gfortran.dg/derived_external_function_1.f90     (.../branches/gcc-4_8-branch)
 
13443
@@ -0,0 +1,27 @@
 
13444
+! { dg-do run }
 
13445
+!
 
13446
+! PR fortran/58771
 
13447
+!
 
13448
+! Contributed by Vittorio Secca  <zeccav@gmail.com>
 
13449
+!
 
13450
+! ICEd on the write statement with f() because the derived type backend
 
13451
+! declaration not built.
 
13452
+!
 
13453
+module m
 
13454
+  type t
 
13455
+    integer(4) g
 
13456
+  end type
 
13457
+end
 
13458
+
 
13459
+type(t) function f() result(ff)
 
13460
+  use m
 
13461
+  ff%g = 42
 
13462
+end
 
13463
+
 
13464
+  use m
 
13465
+  character (20) :: line1, line2
 
13466
+  type(t)  f
 
13467
+  write (line1, *) f()
 
13468
+  write (line2, *) 42_4
 
13469
+  if (line1 .ne. line2) call abort
 
13470
+end
 
13471
Index: gcc/testsuite/gfortran.dg/implicit_pure_4.f90
 
13472
===================================================================
 
13473
--- a/src/gcc/testsuite/gfortran.dg/implicit_pure_4.f90 (.../tags/gcc_4_8_2_release)
 
13474
+++ b/src/gcc/testsuite/gfortran.dg/implicit_pure_4.f90 (.../branches/gcc-4_8-branch)
 
13475
@@ -0,0 +1,22 @@
 
13476
+! { dg-do compile }
 
13477
+!
 
13478
+! PR fortran/60543
 
13479
+! PR fortran/60283
 
13480
+!
 
13481
+module m
 
13482
+contains
 
13483
+  REAL(8) FUNCTION random()
 
13484
+    CALL RANDOM_NUMBER(random)
 
13485
+  END FUNCTION random
 
13486
+  REAL(8) FUNCTION random2()
 
13487
+    block
 
13488
+      block
 
13489
+        block
 
13490
+          CALL RANDOM_NUMBER(random2)
 
13491
+        end block
 
13492
+      end block
 
13493
+    end block
 
13494
+  END FUNCTION random2
 
13495
+end module m
 
13496
+
 
13497
+! { dg-final { scan-module-absence "m" "IMPLICIT_PURE" } }
 
13498
Index: gcc/testsuite/gfortran.dg/null_6.f90
 
13499
===================================================================
 
13500
--- a/src/gcc/testsuite/gfortran.dg/null_6.f90  (.../tags/gcc_4_8_2_release)
 
13501
+++ b/src/gcc/testsuite/gfortran.dg/null_6.f90  (.../branches/gcc-4_8-branch)
 
13502
@@ -30,5 +30,5 @@
 
13503
 
 
13504
 subroutine test_PR34547_3 ()
 
13505
   integer, allocatable :: i(:)
 
13506
-  print *, NULL(i)
 
13507
+  print *, NULL(i)    ! { dg-error "Invalid context for NULL" }
 
13508
 end subroutine test_PR34547_3
 
13509
Index: gcc/testsuite/gfortran.dg/fmt_en.f90
 
13510
===================================================================
 
13511
--- a/src/gcc/testsuite/gfortran.dg/fmt_en.f90  (.../tags/gcc_4_8_2_release)
 
13512
+++ b/src/gcc/testsuite/gfortran.dg/fmt_en.f90  (.../branches/gcc-4_8-branch)
 
13513
@@ -0,0 +1,141 @@
 
13514
+! { dg-do run }
 
13515
+! PR60128 Invalid outputs with EN descriptors
 
13516
+! Test case provided by Walt Brainerd.
 
13517
+program pr60128
 
13518
+implicit none
 
13519
+    integer :: n_tst = 0, n_cnt = 0
 
13520
+
 
13521
+! Original test.
 
13522
+    call checkfmt("(en15.2)", -.44444,    "    -444.44E-03")
 
13523
+
 
13524
+! Test for the bug in comment 6.
 
13525
+    call checkfmt("(en15.0)", 1.0,        "         1.E+00")
 
13526
+    call checkfmt("(en15.0)", 1.00000012, "         1.E+00")
 
13527
+    call checkfmt("(en15.0)", 0.99999994, "         1.E+00")
 
13528
+    call checkfmt("(en15.0)", 10.0,       "        10.E+00")
 
13529
+    call checkfmt("(en15.0)", 10.0000010, "        10.E+00")
 
13530
+    call checkfmt("(en15.0)", 9.99999905, "        10.E+00")
 
13531
+    call checkfmt("(en15.0)", 100.0,      "       100.E+00")
 
13532
+    call checkfmt("(en15.0)", 100.000008, "       100.E+00")
 
13533
+    call checkfmt("(en15.0)", 99.9999924, "       100.E+00")
 
13534
+    call checkfmt("(en15.0)", 1000.0,     "         1.E+03")
 
13535
+    call checkfmt("(en15.0)", 1000.00006, "         1.E+03")
 
13536
+    call checkfmt("(en15.0)", 999.999939, "         1.E+03")
 
13537
+    call checkfmt("(en15.0)", 9.5,        "        10.E+00")
 
13538
+    call checkfmt("(en15.0)", 9.50000095, "        10.E+00")
 
13539
+    call checkfmt("(en15.0)", 9.49999905, "         9.E+00")
 
13540
+    call checkfmt("(en15.0)", 99.5,       "       100.E+00")
 
13541
+    call checkfmt("(en15.0)", 99.5000076, "       100.E+00")
 
13542
+    call checkfmt("(en15.0)", 99.4999924, "        99.E+00")
 
13543
+    call checkfmt("(en15.0)", 999.5,      "         1.E+03")
 
13544
+    call checkfmt("(en15.0)", 999.500061, "         1.E+03")
 
13545
+    call checkfmt("(en15.0)", 999.499939, "       999.E+00")
 
13546
+    call checkfmt("(en15.0)", 9500.0,     "        10.E+03")
 
13547
+    call checkfmt("(en15.0)", 9500.00098, "        10.E+03")
 
13548
+    call checkfmt("(en15.0)", 9499.99902, "         9.E+03")
 
13549
+    call checkfmt("(en15.1)", 9950.0,     "       10.0E+03")
 
13550
+    call checkfmt("(en15.2)", 9995.0,     "      10.00E+03")
 
13551
+    call checkfmt("(en15.3)", 9999.5,     "     10.000E+03")
 
13552
+    call checkfmt("(en15.1)", 9.5,        "        9.5E+00")
 
13553
+    call checkfmt("(en15.1)", 9.50000095, "        9.5E+00")
 
13554
+    call checkfmt("(en15.1)", 9.49999905, "        9.5E+00")
 
13555
+    call checkfmt("(en15.1)", 0.099951,   "      100.0E-03")
 
13556
+    call checkfmt("(en15.1)", 0.009951,   "       10.0E-03")
 
13557
+    call checkfmt("(en15.1)", 0.000999951,"        1.0E-03")
 
13558
+
 
13559
+    call checkfmt("(en15.0)", -1.0,        "        -1.E+00")
 
13560
+    call checkfmt("(en15.0)", -1.00000012, "        -1.E+00")
 
13561
+    call checkfmt("(en15.0)", -0.99999994, "        -1.E+00")
 
13562
+    call checkfmt("(en15.0)", -10.0,       "       -10.E+00")
 
13563
+    call checkfmt("(en15.0)", -10.0000010, "       -10.E+00")
 
13564
+    call checkfmt("(en15.0)", -9.99999905, "       -10.E+00")
 
13565
+    call checkfmt("(en15.0)", -100.0,      "      -100.E+00")
 
13566
+    call checkfmt("(en15.0)", -100.000008, "      -100.E+00")
 
13567
+    call checkfmt("(en15.0)", -99.9999924, "      -100.E+00")
 
13568
+    call checkfmt("(en15.0)", -1000.0,     "        -1.E+03")
 
13569
+    call checkfmt("(en15.0)", -1000.00006, "        -1.E+03")
 
13570
+    call checkfmt("(en15.0)", -999.999939, "        -1.E+03")
 
13571
+    call checkfmt("(en15.0)", -9.5,        "       -10.E+00")
 
13572
+    call checkfmt("(en15.0)", -9.50000095, "       -10.E+00")
 
13573
+    call checkfmt("(en15.0)", -9.49999905, "        -9.E+00")
 
13574
+    call checkfmt("(en15.0)", -99.5,       "      -100.E+00")
 
13575
+    call checkfmt("(en15.0)", -99.5000076, "      -100.E+00")
 
13576
+    call checkfmt("(en15.0)", -99.4999924, "       -99.E+00")
 
13577
+    call checkfmt("(en15.0)", -999.5,      "        -1.E+03")
 
13578
+    call checkfmt("(en15.0)", -999.500061, "        -1.E+03")
 
13579
+    call checkfmt("(en15.0)", -999.499939, "      -999.E+00")
 
13580
+    call checkfmt("(en15.0)", -9500.0,     "       -10.E+03")
 
13581
+    call checkfmt("(en15.0)", -9500.00098, "       -10.E+03")
 
13582
+    call checkfmt("(en15.0)", -9499.99902, "        -9.E+03")
 
13583
+    call checkfmt("(en15.1)", -9950.0,     "      -10.0E+03")
 
13584
+    call checkfmt("(en15.2)", -9995.0,     "     -10.00E+03")
 
13585
+    call checkfmt("(en15.3)", -9999.5,     "    -10.000E+03")
 
13586
+    call checkfmt("(en15.1)", -9.5,        "       -9.5E+00")
 
13587
+    call checkfmt("(en15.1)", -9.50000095, "       -9.5E+00")
 
13588
+    call checkfmt("(en15.1)", -9.49999905, "       -9.5E+00")
 
13589
+    call checkfmt("(en15.1)", -0.099951,   "     -100.0E-03")
 
13590
+    call checkfmt("(en15.1)", -0.009951,   "      -10.0E-03")
 
13591
+    call checkfmt("(en15.1)", -0.000999951,"       -1.0E-03")
 
13592
+
 
13593
+    call checkfmt("(en15.1)", 987350.,     "      987.4E+03")
 
13594
+    call checkfmt("(en15.2)", 98735.,      "      98.74E+03")
 
13595
+    call checkfmt("(en15.3)", 9873.5,      "      9.874E+03")
 
13596
+    call checkfmt("(en15.1)", 987650.,     "      987.6E+03")
 
13597
+    call checkfmt("(en15.2)", 98765.,      "      98.76E+03")
 
13598
+    call checkfmt("(en15.3)", 9876.5,      "      9.876E+03")
 
13599
+    call checkfmt("(en15.1)", 3.125E-02,   "       31.2E-03")
 
13600
+    call checkfmt("(en15.1)", 9.375E-02,   "       93.8E-03")
 
13601
+    call checkfmt("(en15.2)", 1.5625E-02,  "      15.62E-03")
 
13602
+    call checkfmt("(en15.2)", 4.6875E-02,  "      46.88E-03")
 
13603
+    call checkfmt("(en15.3)", 7.8125E-03,  "      7.812E-03")
 
13604
+    call checkfmt("(en15.3)", 2.34375E-02, "     23.438E-03")
 
13605
+    call checkfmt("(en15.3)", 9.765625E-04,"    976.562E-06")
 
13606
+    call checkfmt("(en15.6)", 2.9296875E-03,"   2.929688E-03")
 
13607
+
 
13608
+    call checkfmt("(en15.1)", -987350.,     "     -987.4E+03")
 
13609
+    call checkfmt("(en15.2)", -98735.,      "     -98.74E+03")
 
13610
+    call checkfmt("(en15.3)", -9873.5,      "     -9.874E+03")
 
13611
+    call checkfmt("(en15.1)", -987650.,     "     -987.6E+03")
 
13612
+    call checkfmt("(en15.2)", -98765.,      "     -98.76E+03")
 
13613
+    call checkfmt("(en15.3)", -9876.5,      "     -9.876E+03")
 
13614
+    call checkfmt("(en15.1)", -3.125E-02,   "      -31.2E-03")
 
13615
+    call checkfmt("(en15.1)", -9.375E-02,   "      -93.8E-03")
 
13616
+    call checkfmt("(en15.2)", -1.5625E-02,  "     -15.62E-03")
 
13617
+    call checkfmt("(en15.2)", -4.6875E-02,  "     -46.88E-03")
 
13618
+    call checkfmt("(en15.3)", -7.8125E-03,  "     -7.812E-03")
 
13619
+    call checkfmt("(en15.3)", -2.34375E-02, "    -23.438E-03")
 
13620
+    call checkfmt("(en15.3)", -9.765625E-04,"   -976.562E-06")
 
13621
+    call checkfmt("(en15.6)", -2.9296875E-03,"  -2.929688E-03")
 
13622
+
 
13623
+    !print *, n_tst, n_cnt
 
13624
+    if (n_cnt /= 0) call abort
 
13625
+
 
13626
+contains
 
13627
+    subroutine checkfmt(fmt, x, cmp)
 
13628
+        use ISO_FORTRAN_ENV
 
13629
+        implicit none
 
13630
+        integer, parameter :: j(size(real_kinds)+4)=[REAL_KINDS, [4, 4, 4, 4]]
 
13631
+        integer :: i
 
13632
+        character(len=*), intent(in) :: fmt
 
13633
+        real, intent(in) :: x
 
13634
+        character(len=*), intent(in) :: cmp
 
13635
+        character(len=20) :: s
 
13636
+        do i=1,size(real_kinds)
 
13637
+          if (i == 1) then
 
13638
+            write(s, fmt) real(x,kind=j(1))
 
13639
+          else if (i == 2) then
 
13640
+            write(s, fmt) real(x,kind=j(2))
 
13641
+          else if (i == 3) then
 
13642
+            write(s, fmt) real(x,kind=j(3))
 
13643
+          else if (i == 4) then
 
13644
+            write(s, fmt) real(x,kind=j(4))
 
13645
+          end if
 
13646
+          n_tst = n_tst + 1
 
13647
+          if (s /= cmp) then
 
13648
+             print "(a,1x,a,' expected: ',1x,a)", fmt, s, cmp
 
13649
+             n_cnt = n_cnt + 1
 
13650
+           end if
 
13651
+        end do
 
13652
+        
 
13653
+    end subroutine
 
13654
+end program
 
13655
Index: gcc/testsuite/gfortran.dg/constructor_9.f90
 
13656
===================================================================
 
13657
--- a/src/gcc/testsuite/gfortran.dg/constructor_9.f90   (.../tags/gcc_4_8_2_release)
 
13658
+++ b/src/gcc/testsuite/gfortran.dg/constructor_9.f90   (.../branches/gcc-4_8-branch)
 
13659
@@ -0,0 +1,22 @@
 
13660
+! { dg-do compile }
 
13661
+! { dg-options "-Wall" }
 
13662
+!
 
13663
+! PR 58471: [4.8/4.9 Regression] ICE on invalid with missing type constructor and -Wall
 
13664
+!
 
13665
+! Contributed by Andrew Benson <abensonca@gmail.com>
 
13666
+
 
13667
+module cf
 
13668
+  implicit none
 
13669
+  type :: cfmde
 
13670
+  end type
 
13671
+  interface cfmde
 
13672
+     module procedure mdedc   ! { dg-error "is neither function nor subroutine" }
 
13673
+  end interface
 
13674
+contains
 
13675
+  subroutine cfi()
 
13676
+    type(cfmde), pointer :: cfd
 
13677
+    cfd=cfmde()                  ! { dg-error "Can't convert" }
 
13678
+  end subroutine
 
13679
+end module
 
13680
+
 
13681
+! { dg-final { cleanup-modules "cf" } }
 
13682
Index: gcc/testsuite/gfortran.dg/round_3.f08
 
13683
===================================================================
 
13684
--- a/src/gcc/testsuite/gfortran.dg/round_3.f08 (.../tags/gcc_4_8_2_release)
 
13685
+++ b/src/gcc/testsuite/gfortran.dg/round_3.f08 (.../branches/gcc-4_8-branch)
 
13686
@@ -16,19 +16,44 @@
 
13687
     call checkfmt("(RU,1P,G6.0E2)", 2.0,  "2.E+00")
 
13688
     call checkfmt("(RU,1P,G10.4E2)", 2.3456e5,  "2.3456E+05")
 
13689
 
 
13690
-    call checkfmt("(RU,F2.0)",     0.09,  "1.")     ! 0.
 
13691
+    call checkfmt("(RC,G10.2)", 99.5,   "  0.10E+03") ! pr59774
 
13692
+    call checkfmt("(RC,G10.2)", 995.,   "  0.10E+04") ! pr59774
 
13693
+    call checkfmt("(RC,G10.3)", 999.5,  " 0.100E+04") ! pr59774
 
13694
+    call checkfmt("(RC,G10.3)", 9995.,  " 0.100E+05") ! pr59774
 
13695
+    call checkfmt("(RU,G10.2)", .099,   "  0.10    ") ! pr59774
 
13696
+    call checkfmt("(RC,G10.1)", .095,   "   0.1    ") ! pr59774
 
13697
+    call checkfmt("(RU,G10.3)", .0999,  " 0.100    ") ! pr59774
 
13698
+    call checkfmt("(RC,G10.2)", .0995,  "  0.10    ") ! pr59774
 
13699
+
 
13700
+    call checkfmt("(RU,G9.3)",  891.1,  " 892.")      ! pr59836
 
13701
+    call checkfmt("(RD,G9.3)", -891.1,  "-892.")      ! pr59836
 
13702
+    
 
13703
+    call checkfmt("(RU,F6.4)",     0.00006,  "0.0001")! 0.
 
13704
+    call checkfmt("(RU,F5.3)",     0.0007,  "0.001")  ! 0.
 
13705
+    call checkfmt("(RU,F4.2)",     0.008,  "0.01")    ! 0.
 
13706
+    call checkfmt("(RU,F3.1)",     0.09,  "0.1")      ! 0.
 
13707
+
 
13708
+    call checkfmt("(RU,F2.0)",     0.09,  "1.")       ! 0.
 
13709
     call checkfmt("(RD,F3.0)",     -0.09,  "-1.")     ! -0.
 
13710
-    call checkfmt("(RU,F2.0)",      2.0,  "2.")     ! 3.
 
13711
-    call checkfmt("(RD,F3.0)",     -2.0,  "-2.")     ! -3.
 
13712
-    call checkfmt("(RU,F6.4)",      2.0,  "2.0000")     ! 2.0001
 
13713
-    call checkfmt("(RD,F7.4)",     -2.0,  "-2.0000")     ! -2.0001
 
13714
-    call checkfmt("(RU,1P,E6.0E2)", 2.0,  "2.E+00") ! 3.E+00
 
13715
+    call checkfmt("(RU,F2.0)",     0.9,  "1.")        ! pr59836
 
13716
+    call checkfmt("(RC,F2.0)",     0.4,  "0.")        ! pr59836
 
13717
+    call checkfmt("(RC,F2.0)",     0.5,  "1.")        ! pr59836
 
13718
+    call checkfmt("(RC,F2.0)",     0.6,  "1.")        ! pr59836
 
13719
+    call checkfmt("(RD,F3.0)",     -0.9,  "-1.")      ! pr59836
 
13720
+    call checkfmt("(RC,F3.0)",     -0.4,  "-0.")      ! pr59836
 
13721
+    call checkfmt("(RC,F3.0)",     -0.5,  "-1.")      ! pr59836
 
13722
+    call checkfmt("(RC,F3.0)",     -0.6,  "-1.")      ! pr59836
 
13723
+    call checkfmt("(RU,F2.0)",      2.0,  "2.")       ! 3.
 
13724
+    call checkfmt("(RD,F3.0)",     -2.0,  "-2.")      ! -3.
 
13725
+    call checkfmt("(RU,F6.4)",      2.0,  "2.0000")   ! 2.0001
 
13726
+    call checkfmt("(RD,F7.4)",     -2.0,  "-2.0000")  ! -2.0001
 
13727
+    call checkfmt("(RU,1P,E6.0E2)", 2.0,  "2.E+00")   ! 3.E+00
 
13728
     call checkfmt("(RD,1P,E7.0E2)", -2.0,  "-2.E+00") ! -3.E+00
 
13729
-    call checkfmt("(RU,1P,E7.1E2)", 2.5,  "2.5E+00") ! 2.6E+00
 
13730
+    call checkfmt("(RU,1P,E7.1E2)", 2.5,  "2.5E+00")  ! 2.6E+00
 
13731
     call checkfmt("(RD,1P,E8.1E2)", -2.5,  "-2.5E+00") ! -2.6E+00
 
13732
     call checkfmt("(RU,1P,E10.4E2)", 2.5,  "2.5000E+00") ! 2.5001E+00
 
13733
     call checkfmt("(RD,1P,E11.4E2)", -2.5,  "-2.5000E+00") ! -2.5001E+00
 
13734
-    call checkfmt("(RU,1P,G6.0E2)", 2.0,  "2.E+00") ! 3.E+00
 
13735
+    call checkfmt("(RU,1P,G6.0E2)", 2.0,  "2.E+00")   ! 3.E+00
 
13736
     call checkfmt("(RD,1P,G7.0E2)", -2.0,  "-2.E+00") ! -3.E+00
 
13737
     call checkfmt("(RU,1P,G10.4E2)", 2.3456e5,  "2.3456E+05") ! 2.3457E+05
 
13738
     call checkfmt("(RD,1P,G11.4E2)", -2.3456e5,  "-2.3456E+05") ! -2.3457E+05
 
13739
Index: gcc/testsuite/gfortran.dg/default_initialization_7.f90
 
13740
===================================================================
 
13741
--- a/src/gcc/testsuite/gfortran.dg/default_initialization_7.f90        (.../tags/gcc_4_8_2_release)
 
13742
+++ b/src/gcc/testsuite/gfortran.dg/default_initialization_7.f90        (.../branches/gcc-4_8-branch)
 
13743
@@ -0,0 +1,22 @@
 
13744
+! { dg-do compile }
 
13745
+!
 
13746
+! PR fortran/57033
 
13747
+! ICE on a structure constructor of an extended derived type whose parent
 
13748
+! type last component has a default initializer
 
13749
+!
 
13750
+! Contributed by Tilo Schwarz <tilo@tilo-schwarz.de>
 
13751
+
 
13752
+program ice
 
13753
+
 
13754
+type m
 
13755
+    integer i
 
13756
+    logical :: f = .false.
 
13757
+end type m
 
13758
+
 
13759
+type, extends(m) :: me
 
13760
+end type me
 
13761
+
 
13762
+type(me) meo
 
13763
+
 
13764
+meo = me(1)              ! ICE
 
13765
+end program ice
 
13766
Index: gcc/testsuite/gfortran.dg/proc_ptr_46.f90
 
13767
===================================================================
 
13768
--- a/src/gcc/testsuite/gfortran.dg/proc_ptr_46.f90     (.../tags/gcc_4_8_2_release)
 
13769
+++ b/src/gcc/testsuite/gfortran.dg/proc_ptr_46.f90     (.../branches/gcc-4_8-branch)
 
13770
@@ -0,0 +1,14 @@
 
13771
+! { dg-do compile }
 
13772
+!
 
13773
+! PR fortran/49397
 
13774
+!
 
13775
+! Invalid per IR F08/0060 and F2008Corr2, C729
 
13776
+!
 
13777
+
 
13778
+!  Print *,f() ! << Valid when uncommented
 
13779
+Contains
 
13780
+  Subroutine s
 
13781
+    Procedure(Real),Pointer :: p
 
13782
+    p => f  ! { dg-error "Procedure pointer target 'f' at .1. must be either an intrinsic, host or use associated, referenced or have the EXTERNAL attribute" }
 
13783
+  End Subroutine
 
13784
+End
 
13785
Index: gcc/testsuite/gfortran.dg/pr52370.f90
 
13786
===================================================================
 
13787
--- a/src/gcc/testsuite/gfortran.dg/pr52370.f90 (.../tags/gcc_4_8_2_release)
 
13788
+++ b/src/gcc/testsuite/gfortran.dg/pr52370.f90 (.../branches/gcc-4_8-branch)
 
13789
@@ -0,0 +1,21 @@
 
13790
+! PR fortran/52370
 
13791
+! { dg-do compile }
 
13792
+! { dg-options "-O1 -Wall" }
 
13793
+
 
13794
+module pr52370
 
13795
+contains
 
13796
+  subroutine foo(a,b)
 
13797
+    real, intent(out) :: a
 
13798
+    real, dimension(:), optional, intent(out) :: b
 
13799
+    a=0.5
 
13800
+    if (present(b)) then
 
13801
+      b=1.0
 
13802
+    end if
 
13803
+  end subroutine foo
 
13804
+end module pr52370
 
13805
+
 
13806
+program prg52370
 
13807
+  use pr52370
 
13808
+  real :: a
 
13809
+  call foo(a)
 
13810
+end program prg52370
 
13811
Index: gcc/testsuite/gfortran.dg/str_comp_optimize_1.f90
 
13812
===================================================================
 
13813
--- a/src/gcc/testsuite/gfortran.dg/str_comp_optimize_1.f90     (.../tags/gcc_4_8_2_release)
 
13814
+++ b/src/gcc/testsuite/gfortran.dg/str_comp_optimize_1.f90     (.../branches/gcc-4_8-branch)
 
13815
@@ -0,0 +1,22 @@
 
13816
+! { dg-do compile }
 
13817
+! { dg-options "-ffrontend-optimize" }
 
13818
+!
 
13819
+! PR fortran/60341
 
13820
+! An unguarded union access was wrongly enabling a frontend optimization on a
 
13821
+! string comparison, leading to an ICE.
 
13822
+!
 
13823
+! Original testcase from Steve Chapel  <steve.chapel@a2pg.com>.
 
13824
+! Reduced by Steven G. Kargl  <kargl@gcc.gnu.org>.
 
13825
+!
 
13826
+
 
13827
+      subroutine modelg(ncm)
 
13828
+      implicit none
 
13829
+      integer, parameter :: pc = 30, pm = pc - 1
 
13830
+      integer i
 
13831
+      character*4 catt(pm,2)
 
13832
+      integer ncm,iatt(pm,pc)
 
13833
+      do i=1,ncm
 
13834
+         if (catt(i,1)//catt(i,2).eq.'central') exit
 
13835
+      end do
 
13836
+      iatt(i,4)=1
 
13837
+      end
 
13838
Index: gcc/testsuite/gfortran.dg/list_read_12.f90
 
13839
===================================================================
 
13840
--- a/src/gcc/testsuite/gfortran.dg/list_read_12.f90    (.../tags/gcc_4_8_2_release)
 
13841
+++ b/src/gcc/testsuite/gfortran.dg/list_read_12.f90    (.../branches/gcc-4_8-branch)
 
13842
@@ -0,0 +1,11 @@
 
13843
+! { dg-do run }
 
13844
+! PR58324 Bogus end of file condition
 
13845
+integer :: i, ios
 
13846
+open(99, access='stream', form='unformatted')
 
13847
+write(99) "5 a"
 
13848
+close(99)
 
13849
+
 
13850
+open(99, access='sequential', form='formatted')
 
13851
+read(99, *, iostat=ios) i
 
13852
+if (ios /= 0) call abort
 
13853
+end
 
13854
Index: gcc/testsuite/gfortran.dg/generic_28.f90
 
13855
===================================================================
 
13856
--- a/src/gcc/testsuite/gfortran.dg/generic_28.f90      (.../tags/gcc_4_8_2_release)
 
13857
+++ b/src/gcc/testsuite/gfortran.dg/generic_28.f90      (.../branches/gcc-4_8-branch)
 
13858
@@ -0,0 +1,18 @@
 
13859
+! { dg-do compile }
 
13860
+!
 
13861
+! PR 58998: [4.8/4.9 Regression] Generic interface problem with gfortran
 
13862
+!
 
13863
+! Contributed by Paul van Delst
 
13864
+
 
13865
+  interface iargc
 
13866
+    procedure iargc_8
 
13867
+  end interface
 
13868
+  
 
13869
+contains
 
13870
+
 
13871
+  integer(8) function iargc_8()
 
13872
+    integer(4) iargc
 
13873
+    iargc_8 = iargc()
 
13874
+  end function
 
13875
+  
 
13876
+end
 
13877
Index: gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90
 
13878
===================================================================
 
13879
--- a/src/gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90      (.../tags/gcc_4_8_2_release)
 
13880
+++ b/src/gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90      (.../branches/gcc-4_8-branch)
 
13881
@@ -0,0 +1,44 @@
 
13882
+! { dg-do compile }
 
13883
+!
 
13884
+! PR fortran/58007
 
13885
+! Unresolved fixup while loading a module.
 
13886
+!
 
13887
+! This tests that the specification expression A%MAX_DEGREE in module BSR is
 
13888
+! correctly loaded and resolved in program MAIN.
 
13889
+!
 
13890
+! Original testcase from Daniel Shapiro <shapero@uw.edu>
 
13891
+! Reduced by Tobias Burnus <burnus@net-b.de> and Janus Weil <janus@gcc.gnu.org>
 
13892
+
 
13893
+module matrix
 
13894
+  type :: sparse_matrix
 
13895
+    integer :: max_degree
 
13896
+  end type
 
13897
+contains
 
13898
+  subroutine init_interface (A)
 
13899
+    class(sparse_matrix), intent(in) :: A
 
13900
+  end subroutine
 
13901
+  real function get_value_interface()
 
13902
+  end function
 
13903
+end module
 
13904
+
 
13905
+module ellpack
 
13906
+  use matrix
 
13907
+end module
 
13908
+
 
13909
+module bsr
 
13910
+  use matrix
 
13911
+  type, extends(sparse_matrix) :: bsr_matrix
 
13912
+  contains
 
13913
+    procedure :: get_neighbors
 
13914
+  end type
 
13915
+contains
 
13916
+  function get_neighbors (A)
 
13917
+    class(bsr_matrix), intent(in) :: A
 
13918
+    integer :: get_neighbors(A%max_degree)
 
13919
+  end function
 
13920
+end module
 
13921
+
 
13922
+program main
 
13923
+  use ellpack
 
13924
+  use bsr
 
13925
+end
 
13926
Index: gcc/testsuite/gfortran.dg/null_5.f90
 
13927
===================================================================
 
13928
--- a/src/gcc/testsuite/gfortran.dg/null_5.f90  (.../tags/gcc_4_8_2_release)
 
13929
+++ b/src/gcc/testsuite/gfortran.dg/null_5.f90  (.../branches/gcc-4_8-branch)
 
13930
@@ -34,7 +34,7 @@
 
13931
 end subroutine test_PR34547_1
 
13932
 
 
13933
 subroutine test_PR34547_2 ()
 
13934
-  print *, null () ! { dg-error "in data transfer statement requires MOLD" }
 
13935
+  print *, null () ! { dg-error "Invalid context" }
 
13936
 end subroutine test_PR34547_2
 
13937
 
 
13938
 subroutine test_PR34547_3 ()
 
13939
Index: gcc/testsuite/gfortran.dg/proc_ptr_43.f90
 
13940
===================================================================
 
13941
--- a/src/gcc/testsuite/gfortran.dg/proc_ptr_43.f90     (.../tags/gcc_4_8_2_release)
 
13942
+++ b/src/gcc/testsuite/gfortran.dg/proc_ptr_43.f90     (.../branches/gcc-4_8-branch)
 
13943
@@ -0,0 +1,19 @@
 
13944
+! { dg-do compile }
 
13945
+!
 
13946
+! PR 58099: [4.8/4.9 Regression] [F03] over-zealous procedure-pointer error checking
 
13947
+!
 
13948
+! Contributed by Daniel Price <daniel.price@monash.edu>
 
13949
+
 
13950
+  implicit none
 
13951
+  procedure(real), pointer :: wfunc
 
13952
+
 
13953
+  wfunc => w_cubic 
 
13954
 
13955
+contains
 
13956
+
 
13957
+  pure real function w_cubic(q2)
 
13958
+    real, intent(in) :: q2
 
13959
+    w_cubic = 0.
 
13960
+  end function
 
13961
+
 
13962
+end
 
13963
Index: gcc/testsuite/gfortran.dg/typebound_generic_15.f90
 
13964
===================================================================
 
13965
--- a/src/gcc/testsuite/gfortran.dg/typebound_generic_15.f90    (.../tags/gcc_4_8_2_release)
 
13966
+++ b/src/gcc/testsuite/gfortran.dg/typebound_generic_15.f90    (.../branches/gcc-4_8-branch)
 
13967
@@ -0,0 +1,18 @@
 
13968
+! { dg-do compile }
 
13969
+!
 
13970
+! PR 60231: [4.8/4.9 Regression] ICE on undefined generic
 
13971
+!
 
13972
+! Contributed by Antony Lewis <antony@cosmologist.info>
 
13973
+
 
13974
+module Objects
 
13975
+
 
13976
+  Type TObjectList
 
13977
+  contains
 
13978
+    procedure :: Add1             ! { dg-error "must be a module procedure" }
 
13979
+    procedure :: Add2             ! { dg-error "must be a module procedure" }
 
13980
+    generic :: Add => Add1, Add2  ! { dg-error "are ambiguous" }
 
13981
+  end Type
 
13982
+
 
13983
+end module
 
13984
+
 
13985
+! { dg-final { cleanup-modules "Objects" } }
 
13986
Index: gcc/testsuite/gfortran.dg/extends_15.f90
 
13987
===================================================================
 
13988
--- a/src/gcc/testsuite/gfortran.dg/extends_15.f90      (.../tags/gcc_4_8_2_release)
 
13989
+++ b/src/gcc/testsuite/gfortran.dg/extends_15.f90      (.../branches/gcc-4_8-branch)
 
13990
@@ -0,0 +1,16 @@
 
13991
+! { dg-do compile }
 
13992
+!
 
13993
+! PR 58355: [4.7/4.8/4.9 Regression] [F03] ICE with TYPE, EXTENDS before parent TYPE defined
 
13994
+!
 
13995
+! Contributed by Andrew Benson <abensonca@gmail.com>
 
13996
+
 
13997
+module ct
 
13998
+  public :: t1
 
13999
+
 
14000
+  type, extends(t1) :: t2   ! { dg-error "has not been previously defined" }
 
14001
+
 
14002
+  type :: t1
 
14003
+  end type
 
14004
+end
 
14005
+
 
14006
+! { dg-final { cleanup-modules "ct" } }
 
14007
Index: gcc/testsuite/gfortran.dg/optional_class_1.f90
 
14008
===================================================================
 
14009
--- a/src/gcc/testsuite/gfortran.dg/optional_class_1.f90        (.../tags/gcc_4_8_2_release)
 
14010
+++ b/src/gcc/testsuite/gfortran.dg/optional_class_1.f90        (.../branches/gcc-4_8-branch)
 
14011
@@ -0,0 +1,45 @@
 
14012
+! { dg-do run }
 
14013
+!
 
14014
+! PR fortran/57445
 
14015
+!
 
14016
+! Contributed by Tobias Burnus  <burnus@gcc.gnu.org>
 
14017
+!
 
14018
+! Spurious assert was added at revision 192495
 
14019
+!
 
14020
+module m
 
14021
+  implicit none
 
14022
+  type t
 
14023
+    integer :: i
 
14024
+  end type t
 
14025
+contains
 
14026
+  subroutine opt(xa, xc, xaa, xca)
 
14027
+    type(t),  allocatable, intent(out), optional :: xa
 
14028
+    class(t), allocatable, intent(out), optional :: xc
 
14029
+    type(t),  allocatable, intent(out), optional :: xaa(:)
 
14030
+    class(t), allocatable, intent(out), optional :: xca(:)
 
14031
+    if (present (xca)) call foo_opt(xca=xca)
 
14032
+  end subroutine opt
 
14033
+  subroutine foo_opt(xa, xc, xaa, xca)
 
14034
+    type(t),  allocatable, intent(out), optional :: xa
 
14035
+    class(t), allocatable, intent(out), optional :: xc
 
14036
+    type(t),  allocatable, intent(out), optional :: xaa(:)
 
14037
+    class(t), allocatable, intent(out), optional :: xca(:)
 
14038
+    if (present (xca)) then
 
14039
+      if (allocated (xca)) deallocate (xca)
 
14040
+      allocate (xca(3), source = [t(9),t(99),t(999)])
 
14041
+    end if
 
14042
+  end subroutine foo_opt
 
14043
+end module m
 
14044
+  use m
 
14045
+  class(t), allocatable :: xca(:)
 
14046
+  allocate (xca(1), source = t(42))
 
14047
+  select type (xca)
 
14048
+    type is (t)
 
14049
+      if (any (xca%i .ne. [42])) call abort
 
14050
+  end select
 
14051
+  call opt (xca = xca)
 
14052
+  select type (xca)
 
14053
+    type is (t)
 
14054
+      if (any (xca%i .ne. [9,99,999])) call abort
 
14055
+  end select
 
14056
+end
 
14057
Index: gcc/testsuite/gfortran.dg/dynamic_dispatch_12.f90
 
14058
===================================================================
 
14059
--- a/src/gcc/testsuite/gfortran.dg/dynamic_dispatch_12.f90     (.../tags/gcc_4_8_2_release)
 
14060
+++ b/src/gcc/testsuite/gfortran.dg/dynamic_dispatch_12.f90     (.../branches/gcc-4_8-branch)
 
14061
@@ -0,0 +1,74 @@
 
14062
+! { dg-do run }
 
14063
+!
 
14064
+! PR 59654: [4.8/4.9 Regression] [OOP] Broken function table with complex OO use case
 
14065
+!
 
14066
+! Contributed by Thomas Clune <Thomas.L.Clune@nasa.gov>
 
14067
+
 
14068
+module TestResult_mod
 
14069
+  implicit none
 
14070
+
 
14071
+  type TestResult
 
14072
+    integer :: numRun = 0
 
14073
+  contains
 
14074
+    procedure :: run
 
14075
+    procedure, nopass :: getNumRun
 
14076
+  end type
 
14077
+
 
14078
+contains
 
14079
+
 
14080
+  subroutine run (this)
 
14081
+    class (TestResult) :: this
 
14082
+    this%numRun = this%numRun + 1
 
14083
+  end subroutine
 
14084
+
 
14085
+  subroutine getNumRun()
 
14086
+   end subroutine
 
14087
+
 
14088
+end module
 
14089
+
 
14090
+
 
14091
+module BaseTestRunner_mod
 
14092
+  implicit none
 
14093
+
 
14094
+  type :: BaseTestRunner
 
14095
+  contains
 
14096
+    procedure, nopass :: norun
 
14097
+  end type
 
14098
+
 
14099
+contains
 
14100
+
 
14101
+  function norun () result(result)
 
14102
+    use TestResult_mod, only: TestResult
 
14103
+    type (TestResult) :: result
 
14104
+  end function
 
14105
+
 
14106
+end module
 
14107
+
 
14108
+
 
14109
+module TestRunner_mod
 
14110
+  use BaseTestRunner_mod, only: BaseTestRunner
 
14111
+  implicit none
 
14112
+end module
 
14113
+
 
14114
+
 
14115
+program main
 
14116
+  use TestRunner_mod, only: BaseTestRunner
 
14117
+  use TestResult_mod, only: TestResult
 
14118
+  implicit none
 
14119
+
 
14120
+  type (TestResult) :: result
 
14121
+
 
14122
+  call runtest (result)
 
14123
+  
 
14124
+contains
 
14125
+
 
14126
+  subroutine runtest (result)
 
14127
+    use TestResult_mod, only: TestResult
 
14128
+    class (TestResult) :: result
 
14129
+    call result%run()
 
14130
+    if (result%numRun /= 1) call abort()
 
14131
+  end subroutine
 
14132
+
 
14133
+end
 
14134
+
 
14135
+! { dg-final { cleanup-modules "TestResult_mod BaseTestRunner_mod TestRunner_mod" } }
 
14136
Index: gcc/testsuite/gfortran.dg/proc_ptr_45.f90
 
14137
===================================================================
 
14138
--- a/src/gcc/testsuite/gfortran.dg/proc_ptr_45.f90     (.../tags/gcc_4_8_2_release)
 
14139
+++ b/src/gcc/testsuite/gfortran.dg/proc_ptr_45.f90     (.../branches/gcc-4_8-branch)
 
14140
@@ -0,0 +1,24 @@
 
14141
+! { dg-do compile }
 
14142
+!
 
14143
+! PR fortran/49397
 
14144
+!
 
14145
+! Valid per IR F08/0060 and F2008Corr2, C729
 
14146
+!
 
14147
+Program m5
 
14148
+  Print *,f()
 
14149
+Contains
 
14150
+  Subroutine s
 
14151
+    Procedure(Real),Pointer :: p
 
14152
+    Print *,g()
 
14153
+    p => f                           ! (1)
 
14154
+    Print *,p()
 
14155
+    p => g                           ! (2)
 
14156
+    Print *,p()
 
14157
+  End Subroutine
 
14158
+End Program
 
14159
+Function f()
 
14160
+  f = 1
 
14161
+End Function
 
14162
+Function g()
 
14163
+  g = 2
 
14164
+End Function
 
14165
Index: gcc/testsuite/gfortran.dg/pr59700.f90
 
14166
===================================================================
 
14167
--- a/src/gcc/testsuite/gfortran.dg/pr59700.f90 (.../tags/gcc_4_8_2_release)
 
14168
+++ b/src/gcc/testsuite/gfortran.dg/pr59700.f90 (.../branches/gcc-4_8-branch)
 
14169
@@ -0,0 +1,40 @@
 
14170
+! { dg-do run }
 
14171
+! PR59700 Test case by Steve Kargl
 
14172
+program foo
 
14173
+
 
14174
+   implicit none
 
14175
+
 
14176
+   character(len=80) msg
 
14177
+   integer, parameter :: fd = 10
 
14178
+   integer i1, i2, i3, i4
 
14179
+   real    x1, x2, x3, x4
 
14180
+   complex c1, c2
 
14181
+   logical a
 
14182
+
 
14183
+   open(unit=fd, status='scratch')
 
14184
+   write(fd, '(A)') '1 2 3.4 q'
 
14185
+
 
14186
+   rewind(fd)
 
14187
+   msg = 'ok'
 
14188
+   read(fd, *, err=10, iomsg=msg) i1, i2, i3, i4
 
14189
+10 if (msg /= 'Bad integer for item 3 in list input') call abort
 
14190
+   rewind(fd)
 
14191
+   msg = 'ok'
 
14192
+   read(fd, *, err=20, iomsg=msg) x1, x2, x3, x4
 
14193
+20 if (msg /= 'Bad real number in item 4 of list input') call abort
 
14194
+   rewind(fd)
 
14195
+   msg = 'ok'
 
14196
+   read(fd, *, err=30, iomsg=msg) i1, x2, x1, a
 
14197
+30 if (msg /= 'Bad logical value while reading item 4') call abort
 
14198
+   rewind(fd)
 
14199
+   read(fd, *, err=31, iomsg=msg) i1, x2, a, x1
 
14200
+31 if (msg /= 'Bad repeat count in item 3 of list input') call abort
 
14201
+   close(fd)
 
14202
+   open(unit=fd, status='scratch')
 
14203
+   write(fd, '(A)') '(1, 2) (3.4, q)'
 
14204
+   rewind(fd)
 
14205
+   msg = 'ok'
 
14206
+   read(fd, *, err=40, iomsg=msg) c1, c2
 
14207
+40 if (msg /= 'Bad floating point number for item 2') call abort
 
14208
+   close(fd)
 
14209
+end program foo
 
14210
Index: gcc/testsuite/gfortran.dg/ichar_3.f90
 
14211
===================================================================
 
14212
--- a/src/gcc/testsuite/gfortran.dg/ichar_3.f90 (.../tags/gcc_4_8_2_release)
 
14213
+++ b/src/gcc/testsuite/gfortran.dg/ichar_3.f90 (.../branches/gcc-4_8-branch)
 
14214
@@ -0,0 +1,13 @@
 
14215
+! { dg-do compile }
 
14216
+!
 
14217
+! PR fortran/59599
 
14218
+! The call to ichar was triggering an ICE.
 
14219
+!
 
14220
+! Original testcase from Fran Martinez Fadrique <fmartinez@gmv.com>
 
14221
+
 
14222
+character(1) cpk(2)
 
14223
+integer res(2)
 
14224
+cpk = 'a'
 
14225
+res = ichar( cpk, kind=1 )
 
14226
+print *, ichar( cpk, kind=1 )
 
14227
+end
 
14228
Index: gcc/testsuite/gfortran.dg/unlimited_polymorphic_15.f90
 
14229
===================================================================
 
14230
--- a/src/gcc/testsuite/gfortran.dg/unlimited_polymorphic_15.f90        (.../tags/gcc_4_8_2_release)
 
14231
+++ b/src/gcc/testsuite/gfortran.dg/unlimited_polymorphic_15.f90        (.../branches/gcc-4_8-branch)
 
14232
@@ -0,0 +1,17 @@
 
14233
+! { dg-do compile }
 
14234
+!
 
14235
+! PR 59493: [OOP] ICE: Segfault on Class(*) pointer association
 
14236
+!
 
14237
+! Contributed by Hossein Talebi <talebi.hossein@gmail.com>
 
14238
+
 
14239
+  implicit none
 
14240
+
 
14241
+  type ty_mytype1
 
14242
+  end type
 
14243
+
 
14244
+  class(ty_mytype1), allocatable, target:: cla1
 
14245
+  class(*), pointer :: ptr
 
14246
+
 
14247
+  ptr => cla1
 
14248
+
 
14249
+end
 
14250
Index: gcc/testsuite/gfortran.dg/fmt_g_1.f90
 
14251
===================================================================
 
14252
--- a/src/gcc/testsuite/gfortran.dg/fmt_g_1.f90 (.../tags/gcc_4_8_2_release)
 
14253
+++ b/src/gcc/testsuite/gfortran.dg/fmt_g_1.f90 (.../branches/gcc-4_8-branch)
 
14254
@@ -0,0 +1,11 @@
 
14255
+! { dg-do run }
 
14256
+! PR59771 Cleanup handling of Gw.0 and Gw.0Ee format
 
14257
+! Test case prepared by Dominique d'Humieres <dominiq@lps.ens.fr>
 
14258
+       PROGRAM FOO
 
14259
+       character(len=60) :: buffer, buffer1
 
14260
+
 
14261
+       write (buffer ,'(6(1X,1PG9.0e2))') 0.0, 0.04, 0.06, 0.4, 0.6, 243.0
 
14262
+       write (buffer1,'(6(1X,1PE9.0e2))') 0.0, 0.04, 0.06, 0.4, 0.6, 243.0
 
14263
+
 
14264
+       if (buffer /= buffer1) call abort
 
14265
+       end
 
14266
Index: gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90
 
14267
===================================================================
 
14268
--- a/src/gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90  (.../tags/gcc_4_8_2_release)
 
14269
+++ b/src/gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90  (.../branches/gcc-4_8-branch)
 
14270
@@ -0,0 +1,39 @@
 
14271
+! { dg-do run }
 
14272
+!
 
14273
+! PR fortran/59906
 
14274
+!
 
14275
+! Contributed by H Anlauf  <anlauf@gmx.de>
 
14276
+!
 
14277
+! Failed generate character scalar for scalarized loop for elemantal call.
 
14278
+!
 
14279
+program x
 
14280
+  implicit none
 
14281
+  call y('bbb')
 
14282
+contains
 
14283
+
 
14284
+  subroutine y(str)
 
14285
+    character(len=*), intent(in) :: str
 
14286
+    character(len=len_trim(str)) :: str_aux
 
14287
+    character(len=3) :: str3 = 'abc'
 
14288
+
 
14289
+    str_aux = str
 
14290
+
 
14291
+    ! Compiled but did not give correct result
 
14292
+    if (any (str_cmp((/'aaa','bbb'/), str) .neqv. [.FALSE.,.TRUE.])) call abort
 
14293
+
 
14294
+    ! Did not compile
 
14295
+    if (any (str_cmp((/'bbb', 'aaa'/), str_aux) .neqv. [.TRUE.,.FALSE.])) call abort
 
14296
+
 
14297
+    ! Verify patch
 
14298
+    if (any (str_cmp((/'bbb', 'aaa'/), str3) .neqv. [.FALSE.,.FALSE.])) call abort
 
14299
+    if (any (str_cmp((/'bbb', 'aaa'/), 'aaa') .neqv. [.FALSE.,.TRUE.])) call abort
 
14300
+
 
14301
+  end subroutine y
 
14302
+
 
14303
+  elemental logical function str_cmp(str1, str2)
 
14304
+    character(len=*), intent(in) :: str1
 
14305
+    character(len=*), intent(in) :: str2
 
14306
+    str_cmp = (str1 == str2)
 
14307
+  end function str_cmp
 
14308
+
 
14309
+end program x
 
14310
Index: gcc/testsuite/gcc.c-torture/execute/20140212-1.c
 
14311
===================================================================
 
14312
--- a/src/gcc/testsuite/gcc.c-torture/execute/20140212-1.c      (.../tags/gcc_4_8_2_release)
 
14313
+++ b/src/gcc/testsuite/gcc.c-torture/execute/20140212-1.c      (.../branches/gcc-4_8-branch)
 
14314
@@ -0,0 +1,37 @@
 
14315
+/* PR rtl-optimization/60116 */
 
14316
+/* Reported by Zhendong Su <su@cs.ucdavis.edu> */
 
14317
+
 
14318
+extern void abort (void);
 
14319
+
 
14320
+int a, b, c, d = 1, e, f = 1, h, i, k;
 
14321
+char g, j;
 
14322
+
 
14323
+void
 
14324
+fn1 (void)
 
14325
+{
 
14326
+  int l;
 
14327
+  e = 0;
 
14328
+  c = 0;
 
14329
+  for (;;)
 
14330
+    {
 
14331
+      k = a && b;
 
14332
+      j = k * 54;
 
14333
+      g = j * 147;
 
14334
+      l = ~g + (long long) e && 1;
 
14335
+      if (d)
 
14336
+       c = l;
 
14337
+      else
 
14338
+       h = i = l * 9UL;
 
14339
+      if (f)
 
14340
+       return;
 
14341
+    }
 
14342
+}
 
14343
+
 
14344
+int
 
14345
+main (void)
 
14346
+{
 
14347
+  fn1 ();
 
14348
+  if (c != 1)
 
14349
+    abort ();
 
14350
+  return 0;
 
14351
+}
 
14352
Index: gcc/testsuite/gcc.c-torture/execute/pr58984.c
 
14353
===================================================================
 
14354
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr58984.c (.../tags/gcc_4_8_2_release)
 
14355
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr58984.c (.../branches/gcc-4_8-branch)
 
14356
@@ -0,0 +1,57 @@
 
14357
+/* PR tree-optimization/58984 */
 
14358
+
 
14359
+struct S { int f0 : 8; int : 6; int f1 : 5; };
 
14360
+struct T { char f0; int : 6; int f1 : 5; };
 
14361
+
 
14362
+int a, *c = &a, e, n, b, m;
 
14363
+
 
14364
+static int
 
14365
+foo (struct S p)
 
14366
+{
 
14367
+  const unsigned short *f[36];
 
14368
+  for (; e < 2; e++)
 
14369
+    {
 
14370
+      const unsigned short **i = &f[0];
 
14371
+      *c ^= 1;
 
14372
+      if (p.f1)
 
14373
+       {
 
14374
+         *i = 0;
 
14375
+         return b;
 
14376
+       }
 
14377
+    }
 
14378
+  return 0;
 
14379
+}
 
14380
+
 
14381
+static int
 
14382
+bar (struct T p)
 
14383
+{
 
14384
+  const unsigned short *f[36];
 
14385
+  for (; e < 2; e++)
 
14386
+    {
 
14387
+      const unsigned short **i = &f[0];
 
14388
+      *c ^= 1;
 
14389
+      if (p.f1)
 
14390
+       {
 
14391
+         *i = 0;
 
14392
+         return b;
 
14393
+       }
 
14394
+    }
 
14395
+  return 0;
 
14396
+}
 
14397
+
 
14398
+int
 
14399
+main ()
 
14400
+{
 
14401
+  struct S o = { 1, 1 };
 
14402
+  foo (o);
 
14403
+  m = n || o.f0;
 
14404
+  if (a != 1)
 
14405
+    __builtin_abort ();
 
14406
+  e = 0;
 
14407
+  struct T p = { 1, 1 };
 
14408
+  bar (p);
 
14409
+  m |= n || p.f0;
 
14410
+  if (a != 0)
 
14411
+    __builtin_abort ();
 
14412
+  return 0;
 
14413
+}
 
14414
Index: gcc/testsuite/gcc.c-torture/execute/pr60454.c
 
14415
===================================================================
 
14416
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr60454.c (.../tags/gcc_4_8_2_release)
 
14417
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr60454.c (.../branches/gcc-4_8-branch)
 
14418
@@ -0,0 +1,31 @@
 
14419
+#ifdef __UINT32_TYPE__
 
14420
+typedef __UINT32_TYPE__ uint32_t;
 
14421
+#else
 
14422
+typedef unsigned uint32_t;
 
14423
+#endif
 
14424
+
 
14425
+#define __fake_const_swab32(x) ((uint32_t)(                          \
 
14426
+        (((uint32_t)(x) & (uint32_t)0x000000ffUL) << 24) |            \
 
14427
+        (((uint32_t)(x) & (uint32_t)0x0000ff00UL) <<  8) |            \
 
14428
+        (((uint32_t)(x) & (uint32_t)0x000000ffUL) <<  8) |            \
 
14429
+        (((uint32_t)(x) & (uint32_t)0x0000ff00UL)      ) |            \
 
14430
+        (((uint32_t)(x) & (uint32_t)0xff000000UL) >> 24)))
 
14431
+
 
14432
+/* Previous version of bswap optimization would detect byte swap when none
 
14433
+   happen. This test aims at catching such wrong detection to avoid
 
14434
+   regressions.  */
 
14435
+
 
14436
+__attribute__ ((noinline, noclone)) uint32_t
 
14437
+fake_swap32 (uint32_t in)
 
14438
+{
 
14439
+  return __fake_const_swab32 (in);
 
14440
+}
 
14441
+
 
14442
+int main(void)
 
14443
+{
 
14444
+  if (sizeof (uint32_t) * __CHAR_BIT__ != 32)
 
14445
+    return 0;
 
14446
+  if (fake_swap32 (0x12345678UL) != 0x78567E12UL)
 
14447
+    __builtin_abort ();
 
14448
+  return 0;
 
14449
+}
 
14450
Index: gcc/testsuite/gcc.c-torture/execute/pr60017.c
 
14451
===================================================================
 
14452
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr60017.c (.../tags/gcc_4_8_2_release)
 
14453
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr60017.c (.../branches/gcc-4_8-branch)
 
14454
@@ -0,0 +1,33 @@
 
14455
+/* PR target/60017 */
 
14456
+
 
14457
+extern void abort (void);
 
14458
+
 
14459
+struct S0
 
14460
+{
 
14461
+  short m0;
 
14462
+  short m1;
 
14463
+};
 
14464
+
 
14465
+struct S1
 
14466
+{
 
14467
+  unsigned m0:1;
 
14468
+  char m1[2][2];
 
14469
+  struct S0 m2[2];
 
14470
+};
 
14471
+
 
14472
+struct S1 x = { 1, {{2, 3}, {4, 5}}, {{6, 7}, {8, 9}} };
 
14473
+
 
14474
+struct S1 func (void)
 
14475
+{
 
14476
+  return x;
 
14477
+}
 
14478
+
 
14479
+int main (void)
 
14480
+{
 
14481
+  struct S1 ret = func ();
 
14482
+
 
14483
+  if (ret.m2[1].m1 != 9)
 
14484
+    abort ();
 
14485
+
 
14486
+  return 0;
 
14487
+}
 
14488
Index: gcc/testsuite/gcc.c-torture/execute/20131127-1.c
 
14489
===================================================================
 
14490
--- a/src/gcc/testsuite/gcc.c-torture/execute/20131127-1.c      (.../tags/gcc_4_8_2_release)
 
14491
+++ b/src/gcc/testsuite/gcc.c-torture/execute/20131127-1.c      (.../branches/gcc-4_8-branch)
 
14492
@@ -0,0 +1,34 @@
 
14493
+/* PR middle-end/59138 */
 
14494
+/* Testcase by John Regehr <regehr@cs.utah.edu> */
 
14495
+
 
14496
+extern void abort (void);
 
14497
+
 
14498
+#pragma pack(1)
 
14499
+
 
14500
+struct S0 {
 
14501
+  int f0;
 
14502
+  int f1;
 
14503
+  int f2;
 
14504
+  short f3;
 
14505
+};
 
14506
+
 
14507
+short a = 1;
 
14508
+
 
14509
+struct S0 b = { 1 }, c, d, e;
 
14510
+
 
14511
+struct S0 fn1() { return c; }
 
14512
+
 
14513
+void fn2 (void)
 
14514
+{
 
14515
+  b = fn1 ();
 
14516
+  a = 0;
 
14517
+  d = e;
 
14518
+}
 
14519
+
 
14520
+int main (void)
 
14521
+{
 
14522
+  fn2 ();
 
14523
+  if (a != 0)
 
14524
+    abort ();
 
14525
+  return 0;
 
14526
+}
 
14527
Index: gcc/testsuite/gcc.c-torture/execute/pr59358.c
 
14528
===================================================================
 
14529
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr59358.c (.../tags/gcc_4_8_2_release)
 
14530
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr59358.c (.../branches/gcc-4_8-branch)
 
14531
@@ -0,0 +1,44 @@
 
14532
+/* PR tree-optimization/59358 */
 
14533
+
 
14534
+__attribute__((noinline, noclone)) int
 
14535
+foo (int *x, int y)
 
14536
+{
 
14537
+  int z = *x;
 
14538
+  if (y > z && y <= 16)
 
14539
+    while (y > z)
 
14540
+      z *= 2;
 
14541
+  return z;
 
14542
+}
 
14543
+
 
14544
+int
 
14545
+main ()
 
14546
+{
 
14547
+  int i;
 
14548
+  for (i = 1; i < 17; i++)
 
14549
+    {
 
14550
+      int j = foo (&i, 16);
 
14551
+      int k;
 
14552
+      if (i >= 8 && i <= 15)
 
14553
+       k = 16 + (i - 8) * 2;
 
14554
+      else if (i >= 4 && i <= 7)
 
14555
+       k = 16 + (i - 4) * 4;
 
14556
+      else if (i == 3)
 
14557
+       k = 24;
 
14558
+      else
 
14559
+       k = 16;
 
14560
+      if (j != k)
 
14561
+       __builtin_abort ();
 
14562
+      j = foo (&i, 7);
 
14563
+      if (i >= 7)
 
14564
+       k = i;
 
14565
+      else if (i >= 4)
 
14566
+       k = 8 + (i - 4) * 2;
 
14567
+      else if (i == 3)
 
14568
+       k = 12;
 
14569
+      else
 
14570
+       k = 8;
 
14571
+      if (j != k)
 
14572
+       __builtin_abort ();
 
14573
+    }
 
14574
+  return 0;
 
14575
+}
 
14576
Index: gcc/testsuite/gcc.c-torture/execute/pr60062.c
 
14577
===================================================================
 
14578
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr60062.c (.../tags/gcc_4_8_2_release)
 
14579
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr60062.c (.../branches/gcc-4_8-branch)
 
14580
@@ -0,0 +1,25 @@
 
14581
+/* PR target/60062 */
 
14582
+
 
14583
+int a;
 
14584
+
 
14585
+static void
 
14586
+foo (const char *p1, int p2)
 
14587
+{
 
14588
+  if (__builtin_strcmp (p1, "hello") != 0)
 
14589
+    __builtin_abort ();
 
14590
+}
 
14591
+
 
14592
+static void
 
14593
+bar (const char *p1)
 
14594
+{
 
14595
+  if (__builtin_strcmp (p1, "hello") != 0)
 
14596
+    __builtin_abort ();
 
14597
+}
 
14598
+
 
14599
+__attribute__((optimize (0))) int
 
14600
+main ()
 
14601
+{
 
14602
+  foo ("hello", a);
 
14603
+  bar ("hello");
 
14604
+  return 0;
 
14605
+}
 
14606
Index: gcc/testsuite/gcc.c-torture/execute/pr59014-2.c
 
14607
===================================================================
 
14608
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr59014-2.c       (.../tags/gcc_4_8_2_release)
 
14609
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr59014-2.c       (.../branches/gcc-4_8-branch)
 
14610
@@ -0,0 +1,23 @@
 
14611
+/* PR tree-optimization/59014 */
 
14612
+
 
14613
+__attribute__((noinline, noclone)) long long int
 
14614
+foo (long long int x, long long int y)
 
14615
+{
 
14616
+  if (((int) x | (int) y) != 0)
 
14617
+    return 6;
 
14618
+  return x + y;
 
14619
+}
 
14620
+
 
14621
+int
 
14622
+main ()
 
14623
+{
 
14624
+  if (sizeof (long long) == sizeof (int))
 
14625
+    return 0;
 
14626
+  int shift_half = sizeof (int) * __CHAR_BIT__ / 2;
 
14627
+  long long int x = (3LL << shift_half) << shift_half;
 
14628
+  long long int y = (5LL << shift_half) << shift_half;
 
14629
+  long long int z = foo (x, y);
 
14630
+  if (z != ((8LL << shift_half) << shift_half))
 
14631
+    __builtin_abort ();
 
14632
+  return 0;
 
14633
+}
 
14634
Index: gcc/testsuite/gcc.c-torture/execute/pr59101.c
 
14635
===================================================================
 
14636
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr59101.c (.../tags/gcc_4_8_2_release)
 
14637
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr59101.c (.../branches/gcc-4_8-branch)
 
14638
@@ -0,0 +1,15 @@
 
14639
+/* PR target/59101 */
 
14640
+
 
14641
+__attribute__((noinline, noclone)) int
 
14642
+foo (int a)
 
14643
+{
 
14644
+  return (~a & 4102790424LL) > 0 | 6;
 
14645
+}
 
14646
+
 
14647
+int
 
14648
+main ()
 
14649
+{
 
14650
+  if (foo (0) != 7)
 
14651
+    __builtin_abort ();
 
14652
+  return 0;
 
14653
+}
 
14654
Index: gcc/testsuite/gcc.c-torture/execute/pr58831.c
 
14655
===================================================================
 
14656
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr58831.c (.../tags/gcc_4_8_2_release)
 
14657
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr58831.c (.../branches/gcc-4_8-branch)
 
14658
@@ -0,0 +1,40 @@
 
14659
+#include <assert.h>
 
14660
+
 
14661
+int a, *b, c, d, f, **i, p, q, *r;
 
14662
+short o, j;
 
14663
+
 
14664
+static int __attribute__((noinline, noclone))
 
14665
+fn1 (int *p1, int **p2)
 
14666
+{
 
14667
+  int **e = &b;
 
14668
+  for (; p; p++)
 
14669
+    *p1 = 1;
 
14670
+  *e = *p2 = &d;
 
14671
+
 
14672
+  assert (r);
 
14673
+
 
14674
+  return c;
 
14675
+}
 
14676
+
 
14677
+static int ** __attribute__((noinline, noclone))
 
14678
+fn2 (void)
 
14679
+{
 
14680
+  for (f = 0; f != 42; f++)
 
14681
+    {
 
14682
+      int *g[3] = {0, 0, 0};
 
14683
+      for (o = 0; o; o--)
 
14684
+        for (; a > 1;)
 
14685
+          {
 
14686
+            int **h[1] = { &g[2] };
 
14687
+          }
 
14688
+    }
 
14689
+  return &r;
 
14690
+}
 
14691
+
 
14692
+int
 
14693
+main (void)
 
14694
+{
 
14695
+  i = fn2 ();
 
14696
+  fn1 (b, i);
 
14697
+  return 0;
 
14698
+}
 
14699
Index: gcc/testsuite/gcc.c-torture/execute/pr58726.c
 
14700
===================================================================
 
14701
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr58726.c (.../tags/gcc_4_8_2_release)
 
14702
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr58726.c (.../branches/gcc-4_8-branch)
 
14703
@@ -0,0 +1,26 @@
 
14704
+/* PR rtl-optimization/58726 */
 
14705
+
 
14706
+int a, c;
 
14707
+union { int f1; int f2 : 1; } b;
 
14708
+
 
14709
+short
 
14710
+foo (short p)
 
14711
+{
 
14712
+  return p < 0 ? p : a;
 
14713
+}
 
14714
+
 
14715
+int
 
14716
+main ()
 
14717
+{
 
14718
+  if (sizeof (short) * __CHAR_BIT__ != 16
 
14719
+      || sizeof (int) * __CHAR_BIT__ != 32)
 
14720
+    return 0;
 
14721
+  b.f1 = 56374;
 
14722
+  unsigned short d;
 
14723
+  int e = b.f2;
 
14724
+  d = e == 0 ? b.f1 : 0;
 
14725
+  c = foo (d);
 
14726
+  if (c != (short) 56374)
 
14727
+    __builtin_abort ();
 
14728
+  return 0;
 
14729
+}
 
14730
Index: gcc/testsuite/gcc.c-torture/execute/pr59014.c
 
14731
===================================================================
 
14732
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr59014.c (.../tags/gcc_4_8_2_release)
 
14733
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr59014.c (.../branches/gcc-4_8-branch)
 
14734
@@ -0,0 +1,25 @@
 
14735
+/* PR tree-optimization/59014 */
 
14736
+
 
14737
+int a = 2, b, c, d;
 
14738
+
 
14739
+int
 
14740
+foo ()
 
14741
+{
 
14742
+  for (;; c++)
 
14743
+    if ((b > 0) | (a & 1))
 
14744
+      ;
 
14745
+    else
 
14746
+      {
 
14747
+       d = a;
 
14748
+       return 0;
 
14749
+      }
 
14750
+}
 
14751
+
 
14752
+int
 
14753
+main ()
 
14754
+{
 
14755
+  foo ();
 
14756
+  if (d != 2)
 
14757
+    __builtin_abort ();
 
14758
+  return 0;
 
14759
+}
 
14760
Index: gcc/testsuite/gcc.c-torture/execute/pr60072.c
 
14761
===================================================================
 
14762
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr60072.c (.../tags/gcc_4_8_2_release)
 
14763
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr60072.c (.../branches/gcc-4_8-branch)
 
14764
@@ -0,0 +1,16 @@
 
14765
+/* PR target/60072 */
 
14766
+
 
14767
+int c = 1;
 
14768
+
 
14769
+__attribute__ ((optimize (1)))
 
14770
+static int *foo (int *p)
 
14771
+{
 
14772
+  return p;
 
14773
+}
 
14774
+
 
14775
+int
 
14776
+main ()
 
14777
+{
 
14778
+  *foo (&c) = 2;
 
14779
+  return c - 2;
 
14780
+}
 
14781
Index: gcc/testsuite/gcc.c-torture/execute/pr59388.c
 
14782
===================================================================
 
14783
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr59388.c (.../tags/gcc_4_8_2_release)
 
14784
+++ b/src/gcc/testsuite/gcc.c-torture/execute/pr59388.c (.../branches/gcc-4_8-branch)
 
14785
@@ -0,0 +1,11 @@
 
14786
+/* PR tree-optimization/59388 */
 
14787
+
 
14788
+int a;
 
14789
+struct S { unsigned int f:1; } b;
 
14790
+
 
14791
+int
 
14792
+main ()
 
14793
+{
 
14794
+  a = (0 < b.f) | b.f;
 
14795
+  return a;
 
14796
+}
 
14797
Index: gcc/testsuite/gcc.c-torture/compile/pr58970-1.c
 
14798
===================================================================
 
14799
--- a/src/gcc/testsuite/gcc.c-torture/compile/pr58970-1.c       (.../tags/gcc_4_8_2_release)
 
14800
+++ b/src/gcc/testsuite/gcc.c-torture/compile/pr58970-1.c       (.../branches/gcc-4_8-branch)
 
14801
@@ -0,0 +1,11 @@
 
14802
+/* PR middle-end/58970 */
 
14803
+
 
14804
+struct T { int b : 1; };
 
14805
+struct S { struct T t[1]; };
 
14806
+
 
14807
+void
 
14808
+foo (int x, struct S *s)
 
14809
+{
 
14810
+  if (x == -1)
 
14811
+    s->t[x].b = 0;
 
14812
+}
 
14813
Index: gcc/testsuite/gcc.c-torture/compile/pr59803.c
 
14814
===================================================================
 
14815
--- a/src/gcc/testsuite/gcc.c-torture/compile/pr59803.c (.../tags/gcc_4_8_2_release)
 
14816
+++ b/src/gcc/testsuite/gcc.c-torture/compile/pr59803.c (.../branches/gcc-4_8-branch)
 
14817
@@ -0,0 +1,27 @@
 
14818
+/* PR target/59803 */
 
14819
+
 
14820
+extern void baz (void) __attribute__ ((__noreturn__));
 
14821
+struct A { int g, h; };
 
14822
+extern struct A a;
 
14823
+struct B { unsigned char i, j, k, l, m; };
 
14824
+int c, d, e;
 
14825
+static int f;
 
14826
+
 
14827
+void
 
14828
+foo (void)
 
14829
+{
 
14830
+  f = 1;
 
14831
+}
 
14832
+
 
14833
+void
 
14834
+bar (struct B *x)
 
14835
+{
 
14836
+  x->i = e;
 
14837
+  x->k = c;
 
14838
+  x->l = d;
 
14839
+  x->j = a.h;
 
14840
+  x->m = f;
 
14841
+  if (x->i != e) baz ();
 
14842
+  if (x->k != c) baz ();
 
14843
+  if (x->j != a.h) baz ();
 
14844
+}
 
14845
Index: gcc/testsuite/gcc.c-torture/compile/pr58997.c
 
14846
===================================================================
 
14847
--- a/src/gcc/testsuite/gcc.c-torture/compile/pr58997.c (.../tags/gcc_4_8_2_release)
 
14848
+++ b/src/gcc/testsuite/gcc.c-torture/compile/pr58997.c (.../branches/gcc-4_8-branch)
 
14849
@@ -0,0 +1,19 @@
 
14850
+/* PR rtl-optimization/58997 */
 
14851
+
 
14852
+int a, b, c, e;
 
14853
+short d;
 
14854
+char h;
 
14855
+
 
14856
+void
 
14857
+foo ()
 
14858
+{
 
14859
+  while (b)
 
14860
+    {
 
14861
+      d = a ? c : 1 % a;
 
14862
+      c = d;
 
14863
+      h = d;
 
14864
+      if (!h)
 
14865
+       while (e)
 
14866
+         ;
 
14867
+    }
 
14868
+}
 
14869
Index: gcc/testsuite/gcc.c-torture/compile/pr58970-2.c
 
14870
===================================================================
 
14871
--- a/src/gcc/testsuite/gcc.c-torture/compile/pr58970-2.c       (.../tags/gcc_4_8_2_release)
 
14872
+++ b/src/gcc/testsuite/gcc.c-torture/compile/pr58970-2.c       (.../branches/gcc-4_8-branch)
 
14873
@@ -0,0 +1,11 @@
 
14874
+/* PR middle-end/58970 */
 
14875
+
 
14876
+struct T { char a : 8; char b : 1; };
 
14877
+struct S { char x; struct T t[1]; };
 
14878
+
 
14879
+void
 
14880
+foo (int x, struct S *s)
 
14881
+{
 
14882
+  if (x == -1)
 
14883
+    s->t[x].b = 0;
 
14884
+}
 
14885
Index: gcc/testsuite/gcc.c-torture/compile/pr59362.c
 
14886
===================================================================
 
14887
--- a/src/gcc/testsuite/gcc.c-torture/compile/pr59362.c (.../tags/gcc_4_8_2_release)
 
14888
+++ b/src/gcc/testsuite/gcc.c-torture/compile/pr59362.c (.../branches/gcc-4_8-branch)
 
14889
@@ -0,0 +1,21 @@
 
14890
+/* PR tree-optimization/59362 */
 
14891
+
 
14892
+char *
 
14893
+foo (char *r, int s)
 
14894
+{
 
14895
+  r = __builtin___stpcpy_chk (r, "abc", __builtin_object_size (r, 1));
 
14896
+  if (s)
 
14897
+    r = __builtin___stpcpy_chk (r, "d", __builtin_object_size (r, 1));
 
14898
+  return r;
 
14899
+}
 
14900
+
 
14901
+char *a;
 
14902
+long int b;
 
14903
+
 
14904
+void
 
14905
+bar (void)
 
14906
+{
 
14907
+  b = __builtin_object_size (0, 0);
 
14908
+  a = __builtin___stpcpy_chk (0, "", b);
 
14909
+  b = __builtin_object_size (a, 0);
 
14910
+}
 
14911
Index: gcc/testsuite/gnat.dg/opt32.adb
 
14912
===================================================================
 
14913
--- a/src/gcc/testsuite/gnat.dg/opt32.adb       (.../tags/gcc_4_8_2_release)
 
14914
+++ b/src/gcc/testsuite/gnat.dg/opt32.adb       (.../branches/gcc-4_8-branch)
 
14915
@@ -0,0 +1,37 @@
 
14916
+-- { dg-do compile }
 
14917
+-- { dg-options "-O2" }
 
14918
+
 
14919
+with Ada.Containers; use Ada.Containers;
 
14920
+with Ada.Containers.Vectors;
 
14921
+
 
14922
+function Opt32 return Natural is
 
14923
+
 
14924
+   package My_Vectors
 
14925
+      is new Vectors (Index_Type => Natural, Element_Type => Integer);
 
14926
+   use My_Vectors;
 
14927
+
 
14928
+   V : Vector;
 
14929
+
 
14930
+   function Sign_Changes return Natural is
 
14931
+      Cur      : Cursor := To_Cursor (V, 0);
 
14932
+      R        : Natural := 0;
 
14933
+      Negative : Boolean;
 
14934
+   begin
 
14935
+      Negative := Element (Cur) < 0;
 
14936
+
 
14937
+      loop
 
14938
+         Cur := Next (Cur);
 
14939
+         exit when R > 100;
 
14940
+
 
14941
+         if (Element (Cur) < 0) /= Negative then
 
14942
+            Negative := not Negative;
 
14943
+            R := R + 1;
 
14944
+         end if;
 
14945
+      end loop;
 
14946
+
 
14947
+      return R;
 
14948
+   end;
 
14949
+
 
14950
+begin
 
14951
+   return Sign_Changes;
 
14952
+end;
 
14953
Index: gcc/testsuite/gcc.dg/pr58668.c
 
14954
===================================================================
 
14955
--- a/src/gcc/testsuite/gcc.dg/pr58668.c        (.../tags/gcc_4_8_2_release)
 
14956
+++ b/src/gcc/testsuite/gcc.dg/pr58668.c        (.../branches/gcc-4_8-branch)
 
14957
@@ -0,0 +1,25 @@
 
14958
+/* PR rtl-optimization/58668 */
 
14959
+/* { dg-do compile } */
 
14960
+/* { dg-options "-O2" } */
 
14961
+/* { dg-additional-options "-mthumb" { target { { arm*-*-* } && arm_thumb2_ok } } } */
 
14962
+
 
14963
+void *fn1 (void *);
 
14964
+void *fn2 (void *, const char *);
 
14965
+void fn3 (void *);
 
14966
+void fn4 (void *, int);
 
14967
+
 
14968
+void *
 
14969
+test (void *x)
 
14970
+{
 
14971
+  void *a, *b;
 
14972
+  if (!(a = fn1 (x)))
 
14973
+    return (void *) 0;
 
14974
+  if (!(b = fn2 (a, "w")))
 
14975
+    {
 
14976
+      fn3 (a);
 
14977
+      return (void *) 0;
 
14978
+    }
 
14979
+  fn3 (a);
 
14980
+  fn4 (b, 1);
 
14981
+  return b;
 
14982
+}
 
14983
Index: gcc/testsuite/gcc.dg/pr57518.c
 
14984
===================================================================
 
14985
--- a/src/gcc/testsuite/gcc.dg/pr57518.c        (.../tags/gcc_4_8_2_release)
 
14986
+++ b/src/gcc/testsuite/gcc.dg/pr57518.c        (.../branches/gcc-4_8-branch)
 
14987
@@ -1,8 +1,8 @@
 
14988
-/* PR rtl-optimization/57130 */
 
14989
+/* PR rtl-optimization/57518 */
 
14990
 
 
14991
 /* { dg-do compile } */
 
14992
 /* { dg-options "-O2 -fdump-rtl-ira" } */
 
14993
-/* { dg-final { scan-rtl-dump-not "REG_EQUIV.*mem.*\"ip\"" "ira" } } */
 
14994
+/* { dg-final { scan-rtl-dump-not "REG_EQUIV\[^\n\]*mem\[^\n\]*\"ip\".*subreg" "ira" } } */
 
14995
 
 
14996
 char ip[10];
 
14997
 int total;
 
14998
Index: gcc/testsuite/gcc.dg/builtin-object-size-14.c
 
14999
===================================================================
 
15000
--- a/src/gcc/testsuite/gcc.dg/builtin-object-size-14.c (.../tags/gcc_4_8_2_release)
 
15001
+++ b/src/gcc/testsuite/gcc.dg/builtin-object-size-14.c (.../branches/gcc-4_8-branch)
 
15002
@@ -0,0 +1,28 @@
 
15003
+/* { dg-do run } */
 
15004
+/* { dg-options "-O2" } */
 
15005
+
 
15006
+extern void abort (void);
 
15007
+extern char *strncpy(char *, const char *, __SIZE_TYPE__);
 
15008
+
 
15009
+union u {
 
15010
+    struct {
 
15011
+       char vi[8];
 
15012
+       char pi[16];
 
15013
+    };
 
15014
+    char all[8+16+4];
 
15015
+};
 
15016
+
 
15017
+void __attribute__((noinline,noclone))
 
15018
+f(union u *u)
 
15019
+{
 
15020
+  char vi[8+1];
 
15021
+  __builtin_strncpy(vi, u->vi, sizeof(u->vi));
 
15022
+  if (__builtin_object_size (u->all, 1) != -1)
 
15023
+    abort ();
 
15024
+}
 
15025
+int main()
 
15026
+{
 
15027
+  union u u;
 
15028
+  f (&u);
 
15029
+  return 0;
 
15030
+}
 
15031
Index: gcc/testsuite/gcc.dg/gomp/pr58809.c
 
15032
===================================================================
 
15033
--- a/src/gcc/testsuite/gcc.dg/gomp/pr58809.c   (.../tags/gcc_4_8_2_release)
 
15034
+++ b/src/gcc/testsuite/gcc.dg/gomp/pr58809.c   (.../branches/gcc-4_8-branch)
 
15035
@@ -0,0 +1,13 @@
 
15036
+/* PR middle-end/58809 */
 
15037
+/* { dg-do compile } */
 
15038
+/* { dg-options "-fopenmp -O" } */
 
15039
+
 
15040
+int i;
 
15041
+#pragma omp threadprivate (i)
 
15042
+
 
15043
+void foo()
 
15044
+{
 
15045
+  _Complex int j;
 
15046
+#pragma omp parallel copyin (i) reduction (&&:j)
 
15047
+  ;
 
15048
+}
 
15049
Index: gcc/testsuite/gcc.dg/20050922-1.c
 
15050
===================================================================
 
15051
--- a/src/gcc/testsuite/gcc.dg/20050922-1.c     (.../tags/gcc_4_8_2_release)
 
15052
+++ b/src/gcc/testsuite/gcc.dg/20050922-1.c     (.../branches/gcc-4_8-branch)
 
15053
@@ -4,7 +4,7 @@
 
15054
 /* { dg-do run } */
 
15055
 /* { dg-options "-O1 -std=c99" } */
 
15056
 
 
15057
-#include <stdlib.h>
 
15058
+extern void abort (void);
 
15059
 
 
15060
 #if __INT_MAX__ == 2147483647
 
15061
 typedef unsigned int uint32_t;
 
15062
Index: gcc/testsuite/gcc.dg/pr46309.c
 
15063
===================================================================
 
15064
--- a/src/gcc/testsuite/gcc.dg/pr46309.c        (.../tags/gcc_4_8_2_release)
 
15065
+++ b/src/gcc/testsuite/gcc.dg/pr46309.c        (.../branches/gcc-4_8-branch)
 
15066
@@ -1,5 +1,5 @@
 
15067
 /* PR tree-optimization/46309 */
 
15068
-/* { dg-do compile } */
 
15069
+/* { dg-do compile { target { ! { cris*-*-* } } } } */
 
15070
 /* { dg-options "-O2 -fdump-tree-reassoc-details" } */
 
15071
 /* The transformation depends on BRANCH_COST being greater than 1
 
15072
    (see the notes in the PR), so try to force that.  */
 
15073
Index: gcc/testsuite/gcc.dg/pr60485-2.c
 
15074
===================================================================
 
15075
--- a/src/gcc/testsuite/gcc.dg/pr60485-2.c      (.../tags/gcc_4_8_2_release)
 
15076
+++ b/src/gcc/testsuite/gcc.dg/pr60485-2.c      (.../branches/gcc-4_8-branch)
 
15077
@@ -0,0 +1,38 @@
 
15078
+/* { dg-do run } */
 
15079
+/* { dg-options "-O2" } */
 
15080
+
 
15081
+extern void abort (void);
 
15082
+struct S {
 
15083
+    int *i[4];
 
15084
+    int *p1;
 
15085
+    int *p2;
 
15086
+    int *p3;
 
15087
+    int *p4;
 
15088
+    int **x;
 
15089
+};
 
15090
+int **b;
 
15091
+int main()
 
15092
+{
 
15093
+  int i = 1;
 
15094
+  struct S s;
 
15095
+  s.p3 = &i;
 
15096
+  int **p;
 
15097
+  if (b)
 
15098
+    p = b;
 
15099
+  else
 
15100
+    p = &s.i[2];
 
15101
+  p += 4;
 
15102
+  /* prevert fowrprop from creating an offsetted sd constraint and
 
15103
+     preserve the pointer offsetting constraint.  */
 
15104
+  s.x = p;
 
15105
+  p = s.x;
 
15106
+  if (!b)
 
15107
+    {
 
15108
+      int *z = *p;
 
15109
+      /* z should point to i (and non-local/escaped).  */
 
15110
+      *z = 0;
 
15111
+    }
 
15112
+  if (i != 0)
 
15113
+    abort ();
 
15114
+  return i;
 
15115
+}
 
15116
Index: gcc/testsuite/gcc.dg/atomic-store-6.c
 
15117
===================================================================
 
15118
--- a/src/gcc/testsuite/gcc.dg/atomic-store-6.c (.../tags/gcc_4_8_2_release)
 
15119
+++ b/src/gcc/testsuite/gcc.dg/atomic-store-6.c (.../branches/gcc-4_8-branch)
 
15120
@@ -0,0 +1,13 @@
 
15121
+/* { dg-do run } */
 
15122
+/* { dg-require-effective-target sync_int_128_runtime } */
 
15123
+/* { dg-options "-mcx16" { target { i?86-*-* x86_64-*-* } } } */
 
15124
+
 
15125
+__int128_t i;
 
15126
+
 
15127
+int main()
 
15128
+{
 
15129
+  __atomic_store_16(&i, -1, 0);
 
15130
+  if (i != -1)
 
15131
+    __builtin_abort();
 
15132
+  return 0;
 
15133
+}
 
15134
Index: gcc/testsuite/gcc.dg/guality/pr59776.c
 
15135
===================================================================
 
15136
--- a/src/gcc/testsuite/gcc.dg/guality/pr59776.c        (.../tags/gcc_4_8_2_release)
 
15137
+++ b/src/gcc/testsuite/gcc.dg/guality/pr59776.c        (.../branches/gcc-4_8-branch)
 
15138
@@ -0,0 +1,29 @@
 
15139
+/* PR debug/59776 */
 
15140
+/* { dg-do run } */
 
15141
+/* { dg-options "-g" } */
 
15142
+
 
15143
+#include "../nop.h"
 
15144
+
 
15145
+struct S { float f, g; };
 
15146
+
 
15147
+__attribute__((noinline, noclone)) void
 
15148
+foo (struct S *p)
 
15149
+{
 
15150
+  struct S s1, s2;                     /* { dg-final { gdb-test pr59776.c:17 "s1.f" "5.0" } } */
 
15151
+  s1 = *p;                             /* { dg-final { gdb-test pr59776.c:17 "s1.g" "6.0" } } */
 
15152
+  s2 = s1;                             /* { dg-final { gdb-test pr59776.c:17 "s2.f" "0.0" } } */
 
15153
+  *(int *) &s2.f = 0;                  /* { dg-final { gdb-test pr59776.c:17 "s2.g" "6.0" } } */
 
15154
+  asm volatile (NOP : : : "memory");   /* { dg-final { gdb-test pr59776.c:20 "s1.f" "5.0" } } */
 
15155
+  asm volatile (NOP : : : "memory");   /* { dg-final { gdb-test pr59776.c:20 "s1.g" "6.0" } } */
 
15156
+  s2 = s1;                             /* { dg-final { gdb-test pr59776.c:20 "s2.f" "5.0" } } */
 
15157
+  asm volatile (NOP : : : "memory");   /* { dg-final { gdb-test pr59776.c:20 "s2.g" "6.0" } } */
 
15158
+  asm volatile (NOP : : : "memory");
 
15159
+}
 
15160
+
 
15161
+int
 
15162
+main ()
 
15163
+{
 
15164
+  struct S x = { 5.0f, 6.0f };
 
15165
+  foo (&x);
 
15166
+  return 0;
 
15167
+}
 
15168
Index: gcc/testsuite/gcc.dg/pr59827.c
 
15169
===================================================================
 
15170
--- a/src/gcc/testsuite/gcc.dg/pr59827.c        (.../tags/gcc_4_8_2_release)
 
15171
+++ b/src/gcc/testsuite/gcc.dg/pr59827.c        (.../branches/gcc-4_8-branch)
 
15172
@@ -0,0 +1,15 @@
 
15173
+/* PR middle-end/59827 */
 
15174
+/* { dg-do compile } */
 
15175
+
 
15176
+int
 
15177
+foo (int p[2][]) /* { dg-error "array type has incomplete element type" } */
 
15178
+{
 
15179
+  return p[0][0];
 
15180
+}
 
15181
+
 
15182
+void
 
15183
+bar (void)
 
15184
+{
 
15185
+  int p[2][1];
 
15186
+  foo (p); /* { dg-error "type of formal parameter 1 is incomplete" } */
 
15187
+}
 
15188
Index: gcc/testsuite/gcc.dg/strlenopt-4gf.c
 
15189
===================================================================
 
15190
--- a/src/gcc/testsuite/gcc.dg/strlenopt-4gf.c  (.../tags/gcc_4_8_2_release)
 
15191
+++ b/src/gcc/testsuite/gcc.dg/strlenopt-4gf.c  (.../branches/gcc-4_8-branch)
 
15192
@@ -7,13 +7,13 @@
 
15193
 #include "strlenopt-4.c"
 
15194
 
 
15195
 /* { dg-final { scan-tree-dump-times "strlen \\(" 1 "strlen" } } */
 
15196
-/* { dg-final { scan-tree-dump-times "__memcpy_chk \\(" 4 "strlen" } } */
 
15197
-/* { dg-final { scan-tree-dump-times "__strcpy_chk \\(" 1 "strlen" } } */
 
15198
+/* { dg-final { scan-tree-dump-times "__memcpy_chk \\(" 0 "strlen" } } */
 
15199
+/* { dg-final { scan-tree-dump-times "__strcpy_chk \\(" 0 "strlen" } } */
 
15200
 /* { dg-final { scan-tree-dump-times "__strcat_chk \\(" 0 "strlen" } } */
 
15201
 /* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
 
15202
-/* { dg-final { scan-tree-dump-times "__stpcpy_chk \\(" 5 "strlen" } } */
 
15203
-/* { dg-final { scan-tree-dump-times "memcpy \\(" 0 "strlen" } } */
 
15204
-/* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen" } } */
 
15205
+/* { dg-final { scan-tree-dump-times "__stpcpy_chk \\(" 0 "strlen" } } */
 
15206
+/* { dg-final { scan-tree-dump-times "memcpy \\(" 4 "strlen" } } */
 
15207
+/* { dg-final { scan-tree-dump-times "strcpy \\(" 1 "strlen" } } */
 
15208
 /* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */
 
15209
-/* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
 
15210
+/* { dg-final { scan-tree-dump-times "stpcpy \\(" 5 "strlen" } } */
 
15211
 /* { dg-final { cleanup-tree-dump "strlen" } } */
 
15212
Index: gcc/testsuite/gcc.dg/pr59351.c
 
15213
===================================================================
 
15214
--- a/src/gcc/testsuite/gcc.dg/pr59351.c        (.../tags/gcc_4_8_2_release)
 
15215
+++ b/src/gcc/testsuite/gcc.dg/pr59351.c        (.../branches/gcc-4_8-branch)
 
15216
@@ -0,0 +1,8 @@
 
15217
+/* { dg-do compile } */
 
15218
+/* { dg-options "-std=c99 -Wpedantic" } */
 
15219
+
 
15220
+unsigned int
 
15221
+foo (void)
 
15222
+{
 
15223
+  return sizeof ((int[]) {}); /* { dg-warning "ISO C forbids empty initializer braces" } */
 
15224
+}
 
15225
Index: gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c
 
15226
===================================================================
 
15227
--- a/src/gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c       (.../tags/gcc_4_8_2_release)
 
15228
+++ b/src/gcc/testsuite/gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c       (.../branches/gcc-4_8-branch)
 
15229
@@ -1,6 +1,7 @@
 
15230
 /* { dg-do compile } */
 
15231
 /* { dg-options "-O2 -Wall" } */
 
15232
 /* { dg-options "-O2 -Wall -mabi=altivec" { target { { powerpc*-*-linux* } && ilp32 } } } */
 
15233
+/* { dg-options "-O2 -Wall -msse2" { target { i?86-*-* x86_64-*-* } } } */
 
15234
 
 
15235
 typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__));
 
15236
 
 
15237
Index: gcc/testsuite/gcc.dg/builtin-object-size-8.c
 
15238
===================================================================
 
15239
--- a/src/gcc/testsuite/gcc.dg/builtin-object-size-8.c  (.../tags/gcc_4_8_2_release)
 
15240
+++ b/src/gcc/testsuite/gcc.dg/builtin-object-size-8.c  (.../branches/gcc-4_8-branch)
 
15241
@@ -1,4 +1,4 @@
 
15242
-/* { dg-do run { xfail *-*-* } } */
 
15243
+/* { dg-do run } */
 
15244
 /* { dg-options "-O2" } */
 
15245
 
 
15246
 typedef __SIZE_TYPE__ size_t;
 
15247
Index: gcc/testsuite/gcc.dg/20050922-2.c
 
15248
===================================================================
 
15249
--- a/src/gcc/testsuite/gcc.dg/20050922-2.c     (.../tags/gcc_4_8_2_release)
 
15250
+++ b/src/gcc/testsuite/gcc.dg/20050922-2.c     (.../branches/gcc-4_8-branch)
 
15251
@@ -4,7 +4,8 @@
 
15252
 /* { dg-do run } */
 
15253
 /* { dg-options "-O1 -std=c99" } */
 
15254
 
 
15255
-#include <stdlib.h>
 
15256
+extern void abort (void);
 
15257
+extern void exit (int);
 
15258
 
 
15259
 #if __INT_MAX__ == 2147483647
 
15260
 typedef unsigned int uint32_t;
 
15261
Index: gcc/testsuite/gcc.dg/pr59860.c
 
15262
===================================================================
 
15263
--- a/src/gcc/testsuite/gcc.dg/pr59860.c        (.../tags/gcc_4_8_2_release)
 
15264
+++ b/src/gcc/testsuite/gcc.dg/pr59860.c        (.../branches/gcc-4_8-branch)
 
15265
@@ -0,0 +1,15 @@
 
15266
+/* { dg-do compile } */
 
15267
+/* { dg-options "-O" } */
 
15268
+
 
15269
+extern __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) __attribute__ ((__artificial__)) char * __attribute__ ((__nothrow__ , __leaf__))
 
15270
+strcat (char *__restrict __dest, const char *__restrict __src)
 
15271
+{
 
15272
+  return __builtin___strcat_chk (__dest, __src, __builtin_object_size (__dest, 2 > 1));
 
15273
+}
 
15274
+static char raw_decode;
 
15275
+void foo (char **argv, char *outfilename)
 
15276
+{
 
15277
+  if (**argv == 'r')
 
15278
+    raw_decode = 1;
 
15279
+  strcat (outfilename, raw_decode ? ".raw" : ".wav");
 
15280
+}
 
15281
Index: gcc/testsuite/gcc.dg/pr59011.c
 
15282
===================================================================
 
15283
--- a/src/gcc/testsuite/gcc.dg/pr59011.c        (.../tags/gcc_4_8_2_release)
 
15284
+++ b/src/gcc/testsuite/gcc.dg/pr59011.c        (.../branches/gcc-4_8-branch)
 
15285
@@ -0,0 +1,22 @@
 
15286
+/* PR middle-end/59011 */
 
15287
+/* { dg-do compile } */
 
15288
+/* { dg-options "-std=gnu99" } */
 
15289
+
 
15290
+void
 
15291
+foo (int m)
 
15292
+{
 
15293
+  int a[m];
 
15294
+  void
 
15295
+  bar (void)
 
15296
+  {
 
15297
+    {
 
15298
+      int
 
15299
+      baz (void)
 
15300
+      {
 
15301
+       return a[0];
 
15302
+      }
 
15303
+    }
 
15304
+    a[0] = 42;
 
15305
+  }
 
15306
+  bar ();
 
15307
+}
 
15308
Index: gcc/testsuite/gcc.dg/pr58805.c
 
15309
===================================================================
 
15310
--- a/src/gcc/testsuite/gcc.dg/pr58805.c        (.../tags/gcc_4_8_2_release)
 
15311
+++ b/src/gcc/testsuite/gcc.dg/pr58805.c        (.../branches/gcc-4_8-branch)
 
15312
@@ -0,0 +1,24 @@
 
15313
+/* { dg-do compile } */
 
15314
+/* { dg-options "-O2 -ftree-tail-merge -fdump-tree-pre" } */
 
15315
+
 
15316
+/* Type that matches the 'p' constraint.  */
 
15317
+#define TYPE void *
 
15318
+
 
15319
+static inline
 
15320
+void bar (TYPE *r)
 
15321
+{
 
15322
+  TYPE t;
 
15323
+  __asm__ ("" : "=&p" (t), "=p" (*r));
 
15324
+}
 
15325
+
 
15326
+void
 
15327
+foo (int n, TYPE *x, TYPE *y)
 
15328
+{
 
15329
+  if (n == 0)
 
15330
+    bar (x);
 
15331
+  else
 
15332
+    bar (y);
 
15333
+}
 
15334
+
 
15335
+/* { dg-final { scan-tree-dump-times "__asm__" 2 "pre"} } */
 
15336
+/* { dg-final { cleanup-tree-dump "pre" } } */
 
15337
Index: gcc/testsuite/gcc.dg/strlenopt-14gf.c
 
15338
===================================================================
 
15339
--- a/src/gcc/testsuite/gcc.dg/strlenopt-14gf.c (.../tags/gcc_4_8_2_release)
 
15340
+++ b/src/gcc/testsuite/gcc.dg/strlenopt-14gf.c (.../branches/gcc-4_8-branch)
 
15341
@@ -11,14 +11,14 @@
 
15342
    memcpy.  */
 
15343
 /* { dg-final { scan-tree-dump-times "strlen \\(" 4 "strlen" } } */
 
15344
 /* { dg-final { scan-tree-dump-times "__memcpy_chk \\(" 0 "strlen" } } */
 
15345
-/* { dg-final { scan-tree-dump-times "__mempcpy_chk \\(" 2 "strlen" } } */
 
15346
+/* { dg-final { scan-tree-dump-times "__mempcpy_chk \\(" 0 "strlen" } } */
 
15347
 /* { dg-final { scan-tree-dump-times "__strcpy_chk \\(" 0 "strlen" } } */
 
15348
 /* { dg-final { scan-tree-dump-times "__strcat_chk \\(" 0 "strlen" } } */
 
15349
 /* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
 
15350
-/* { dg-final { scan-tree-dump-times "__stpcpy_chk \\(" 3 "strlen" } } */
 
15351
-/* { dg-final { scan-tree-dump-times "memcpy \\(" 0 "strlen" } } */
 
15352
-/* { dg-final { scan-tree-dump-times "mempcpy \\(" 0 "strlen" } } */
 
15353
+/* { dg-final { scan-tree-dump-times "__stpcpy_chk \\(" 0 "strlen" } } */
 
15354
+/* { dg-final { scan-tree-dump-times "memcpy \\(" 1 "strlen" } } */
 
15355
+/* { dg-final { scan-tree-dump-times "mempcpy \\(" 2 "strlen" } } */
 
15356
 /* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen" } } */
 
15357
 /* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */
 
15358
-/* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
 
15359
+/* { dg-final { scan-tree-dump-times "stpcpy \\(" 2 "strlen" } } */
 
15360
 /* { dg-final { cleanup-tree-dump "strlen" } } */
 
15361
Index: gcc/testsuite/gcc.dg/torture/pr57425-2.c
 
15362
===================================================================
 
15363
--- a/src/gcc/testsuite/gcc.dg/torture/pr57425-2.c      (.../tags/gcc_4_8_2_release)
 
15364
+++ b/src/gcc/testsuite/gcc.dg/torture/pr57425-2.c      (.../branches/gcc-4_8-branch)
 
15365
@@ -0,0 +1,31 @@
 
15366
+/* { dg-do run } */
 
15367
+
 
15368
+extern void abort (void) __attribute__((noreturn));
 
15369
+
 
15370
+int
 
15371
+main ()
 
15372
+{
 
15373
+  int sum = 0;
 
15374
+  {
 
15375
+    int a[20];
 
15376
+    int *c;
 
15377
+    c = a;
 
15378
+    asm ("": "=r" (c):"0" (c));
 
15379
+    *c = 0;
 
15380
+    asm ("": "=r" (c):"0" (c));
 
15381
+    sum += *c;
 
15382
+  }
 
15383
+  {
 
15384
+    long b[10];
 
15385
+    long *c;
 
15386
+    c = b;
 
15387
+    asm ("": "=r" (c):"0" (c));
 
15388
+    *c = 1;
 
15389
+    asm ("": "=r" (c):"0" (c));
 
15390
+    sum += *c;
 
15391
+  }
 
15392
+
 
15393
+  if (sum != 1)
 
15394
+    abort();
 
15395
+  return 0;
 
15396
+}
 
15397
Index: gcc/testsuite/gcc.dg/torture/pr57425-3.c
 
15398
===================================================================
 
15399
--- a/src/gcc/testsuite/gcc.dg/torture/pr57425-3.c      (.../tags/gcc_4_8_2_release)
 
15400
+++ b/src/gcc/testsuite/gcc.dg/torture/pr57425-3.c      (.../branches/gcc-4_8-branch)
 
15401
@@ -0,0 +1,31 @@
 
15402
+/* { dg-do run } */
 
15403
+
 
15404
+extern void abort (void) __attribute__((noreturn));
 
15405
+
 
15406
+int
 
15407
+main ()
 
15408
+{
 
15409
+  int sum = 0;
 
15410
+  {
 
15411
+    long a[20];
 
15412
+    long *c;
 
15413
+    c = a;
 
15414
+    asm ("": "=r" (c):"0" (c));
 
15415
+    *c = 0;
 
15416
+    asm ("": "=r" (c):"0" (c));
 
15417
+    sum += *c;
 
15418
+  }
 
15419
+  {
 
15420
+    long long b[10];
 
15421
+    long long *c;
 
15422
+    c = b;
 
15423
+    asm ("": "=r" (c):"0" (c));
 
15424
+    *c = 1;
 
15425
+    asm ("": "=r" (c):"0" (c));
 
15426
+    sum += *c;
 
15427
+  }
 
15428
+
 
15429
+  if (sum != 1)
 
15430
+    abort();
 
15431
+  return 0;
 
15432
+}
 
15433
Index: gcc/testsuite/gcc.dg/torture/pr59047.c
 
15434
===================================================================
 
15435
--- a/src/gcc/testsuite/gcc.dg/torture/pr59047.c        (.../tags/gcc_4_8_2_release)
 
15436
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59047.c        (.../branches/gcc-4_8-branch)
 
15437
@@ -0,0 +1,39 @@
 
15438
+/* { dg-do run } */
 
15439
+
 
15440
+extern void abort (void);
 
15441
+
 
15442
+struct
 
15443
+{
 
15444
+  int f0;
 
15445
+  int f1:1;
 
15446
+  int f2:2;
 
15447
+} a = {0, 0, 1};
 
15448
+
 
15449
+int b, c, *d, e, f;
 
15450
+
 
15451
+int
 
15452
+fn1 ()
 
15453
+{
 
15454
+  for (; b < 1; ++b)
 
15455
+    {
 
15456
+      for (e = 0; e < 1; e = 1)
 
15457
+       {
 
15458
+         int **g = &d;
 
15459
+         *g = &c;
 
15460
+       } 
 
15461
+      *d = 0;
 
15462
+      f = a.f1;
 
15463
+      if (f)
 
15464
+       return 0;
 
15465
+    }
 
15466
+  return 0;
 
15467
+}
 
15468
+
 
15469
+int
 
15470
+main ()
 
15471
+{
 
15472
+  fn1 ();
 
15473
+  if (b != 1)
 
15474
+    abort ();
 
15475
+  return 0;
 
15476
+}
 
15477
Index: gcc/testsuite/gcc.dg/torture/pr58956.c
 
15478
===================================================================
 
15479
--- a/src/gcc/testsuite/gcc.dg/torture/pr58956.c        (.../tags/gcc_4_8_2_release)
 
15480
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58956.c        (.../branches/gcc-4_8-branch)
 
15481
@@ -0,0 +1,30 @@
 
15482
+/* { dg-do run } */
 
15483
+
 
15484
+extern void abort (void);
 
15485
+
 
15486
+struct S
 
15487
+{
 
15488
+  int f0;
 
15489
+} a = {1}, b, g, *c = &b, **f = &c;
 
15490
+
 
15491
+int *d, **e = &d, h;
 
15492
+
 
15493
+struct S
 
15494
+foo ()
 
15495
+{
 
15496
+  *e = &h;
 
15497
+  if (!d) 
 
15498
+    __builtin_unreachable ();
 
15499
+  *f = &g;
 
15500
+  return a;
 
15501
+}
 
15502
+
 
15503
+int
 
15504
+main ()
 
15505
+{
 
15506
+  struct S *i = c;
 
15507
+  *i = foo ();
 
15508
+  if (b.f0 != 1)
 
15509
+    abort ();
 
15510
+  return 0;
 
15511
+}
 
15512
Index: gcc/testsuite/gcc.dg/torture/pr60183.c
 
15513
===================================================================
 
15514
--- a/src/gcc/testsuite/gcc.dg/torture/pr60183.c        (.../tags/gcc_4_8_2_release)
 
15515
+++ b/src/gcc/testsuite/gcc.dg/torture/pr60183.c        (.../branches/gcc-4_8-branch)
 
15516
@@ -0,0 +1,38 @@
 
15517
+/* { dg-do run } */
 
15518
+
 
15519
+/* Large so an out-of-bound read will crash.  */
 
15520
+unsigned char c[0x30001] = { 1 };
 
15521
+int j = 2;
 
15522
+
 
15523
+static void
 
15524
+foo (unsigned long *x, unsigned char *y)
 
15525
+{
 
15526
+  int i;
 
15527
+  unsigned long w = x[0];
 
15528
+  for (i = 0; i < j; i++)
 
15529
+    {
 
15530
+      w += *y;
 
15531
+      y += 0x10000;
 
15532
+      w += *y;
 
15533
+      y += 0x10000;
 
15534
+    }
 
15535
+  x[1] = w;
 
15536
+}
 
15537
+
 
15538
+__attribute__ ((noinline, noclone)) void
 
15539
+bar (unsigned long *x)
 
15540
+{
 
15541
+  foo (x, c);
 
15542
+}
 
15543
+
 
15544
+int
 
15545
+main ()
 
15546
+{
 
15547
+  unsigned long a[2] = { 0, -1UL };
 
15548
+  asm volatile (""::"r" (c):"memory");
 
15549
+  c[0] = 0;
 
15550
+  bar (a);
 
15551
+  if (a[1] != 0)
 
15552
+    __builtin_abort ();
 
15553
+  return 0;
 
15554
+}
 
15555
Index: gcc/testsuite/gcc.dg/torture/pr57517.c
 
15556
===================================================================
 
15557
--- a/src/gcc/testsuite/gcc.dg/torture/pr57517.c        (.../tags/gcc_4_8_2_release)
 
15558
+++ b/src/gcc/testsuite/gcc.dg/torture/pr57517.c        (.../branches/gcc-4_8-branch)
 
15559
@@ -0,0 +1,16 @@
 
15560
+/* { dg-do compile } */
 
15561
+
 
15562
+int x[1024], y[1024], z[1024], w[1024];
 
15563
+void foo (void)
 
15564
+{
 
15565
+  int i;
 
15566
+  for (i = 1; i < 1024; ++i)
 
15567
+    {
 
15568
+      int a = x[i];
 
15569
+      int b = y[i];
 
15570
+      int c = x[i-1];
 
15571
+      int d = y[i-1];
 
15572
+      if (w[i])
 
15573
+       z[i] = (a + b) + (c + d);
 
15574
+    }
 
15575
+}
 
15576
Index: gcc/testsuite/gcc.dg/torture/pr59891.c
 
15577
===================================================================
 
15578
--- a/src/gcc/testsuite/gcc.dg/torture/pr59891.c        (.../tags/gcc_4_8_2_release)
 
15579
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59891.c        (.../branches/gcc-4_8-branch)
 
15580
@@ -0,0 +1,9 @@
 
15581
+/* PR c/59891 */
 
15582
+
 
15583
+unsigned int a;
 
15584
+
 
15585
+int
 
15586
+main ()
 
15587
+{
 
15588
+  return (0 ? a : 0) ? : 0 % 0; /* { dg-warning "division by zero" } */
 
15589
+}
 
15590
Index: gcc/testsuite/gcc.dg/torture/pr59164.c
 
15591
===================================================================
 
15592
--- a/src/gcc/testsuite/gcc.dg/torture/pr59164.c        (.../tags/gcc_4_8_2_release)
 
15593
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59164.c        (.../branches/gcc-4_8-branch)
 
15594
@@ -0,0 +1,21 @@
 
15595
+/* { dg-do compile } */
 
15596
+
 
15597
+int a, d, e;
 
15598
+long b[10];
 
15599
+int c[10][8];
 
15600
+
 
15601
+int fn1(p1)
 
15602
+{ 
 
15603
+  return 1 >> p1; 
 
15604
+}
 
15605
+
 
15606
+void fn2(void)
 
15607
+{
 
15608
+  int f;
 
15609
+  for (a=1; a <= 4; a++)
 
15610
+    {
 
15611
+      f = fn1(0 < c[a][0]);
 
15612
+      if (f || d)
 
15613
+       e = b[a] = 1;
 
15614
+    }
 
15615
+}
 
15616
Index: gcc/testsuite/gcc.dg/torture/pr58779.c
 
15617
===================================================================
 
15618
--- a/src/gcc/testsuite/gcc.dg/torture/pr58779.c        (.../tags/gcc_4_8_2_release)
 
15619
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58779.c        (.../branches/gcc-4_8-branch)
 
15620
@@ -0,0 +1,12 @@
 
15621
+/* { dg-do run } */
 
15622
+
 
15623
+int a, c;
 
15624
+
 
15625
+int main ()
 
15626
+{
 
15627
+  int e = -1;
 
15628
+  short d = (c <= 0) ^ e;
 
15629
+  if ((unsigned int) a - (a || d) <= (unsigned int) a)
 
15630
+    __builtin_abort ();
 
15631
+  return 0;
 
15632
+}
 
15633
Index: gcc/testsuite/gcc.dg/torture/pr59139.c
 
15634
===================================================================
 
15635
--- a/src/gcc/testsuite/gcc.dg/torture/pr59139.c        (.../tags/gcc_4_8_2_release)
 
15636
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59139.c        (.../branches/gcc-4_8-branch)
 
15637
@@ -0,0 +1,20 @@
 
15638
+/* { dg-do compile } */
 
15639
+
 
15640
+int a, b, c, d, e;
 
15641
+int fn1(p1, p2) { return p2 == 0 ? p1 : 1 % p2; }
 
15642
+
 
15643
+void fn2()
 
15644
+{
 
15645
+  c = 0;
 
15646
+  for (;; c = (unsigned short)c)
 
15647
+    {
 
15648
+      b = 2;
 
15649
+      for (; b; b = a)
 
15650
+       {
 
15651
+         e = fn1(2, c && 1);
 
15652
+         d = c == 0 ? e : c;
 
15653
+         if (d)
 
15654
+           return;
 
15655
+       }
 
15656
+    }
 
15657
+}
 
15658
Index: gcc/testsuite/gcc.dg/torture/pr58079.c
 
15659
===================================================================
 
15660
--- a/src/gcc/testsuite/gcc.dg/torture/pr58079.c        (.../tags/gcc_4_8_2_release)
 
15661
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58079.c        (.../branches/gcc-4_8-branch)
 
15662
@@ -0,0 +1,107 @@
 
15663
+/* { dg-options "-mlong-calls" { target mips*-*-* } } */
 
15664
+
 
15665
+typedef unsigned char u8;
 
15666
+typedef unsigned short u16;
 
15667
+typedef unsigned int __kernel_size_t;
 
15668
+typedef __kernel_size_t size_t;
 
15669
+struct list_head {
 
15670
+ struct list_head *next;
 
15671
+};
 
15672
+
 
15673
+struct dmx_ts_feed {
 
15674
+ int is_filtering;
 
15675
+};
 
15676
+struct dmx_section_feed {
 
15677
+ u16 secbufp;
 
15678
+ u16 seclen;
 
15679
+ u16 tsfeedp;
 
15680
+};
 
15681
+
 
15682
+typedef int (*dmx_ts_cb) (
 
15683
+       const u8 * buffer1,
 
15684
+      size_t buffer1_length,
 
15685
+      const u8 * buffer2,
 
15686
+      size_t buffer2_length
 
15687
+);
 
15688
+
 
15689
+struct dvb_demux_feed {
 
15690
+ union {
 
15691
+  struct dmx_ts_feed ts;
 
15692
+  struct dmx_section_feed sec;
 
15693
+ } feed;
 
15694
+ union {
 
15695
+  dmx_ts_cb ts;
 
15696
+ } cb;
 
15697
+ int type;
 
15698
+ u16 pid;
 
15699
+ int ts_type;
 
15700
+ struct list_head list_head;
 
15701
+};
 
15702
+
 
15703
+struct dvb_demux {
 
15704
+ int (*stop_feed)(struct dvb_demux_feed *feed);
 
15705
+ struct list_head feed_list;
 
15706
+};
 
15707
+
 
15708
+
 
15709
+static
 
15710
+inline
 
15711
+__attribute__((always_inline))
 
15712
+u8
 
15713
+payload(const u8 *tsp)
 
15714
+{
 
15715
+ if (tsp[3] & 0x20) {
 
15716
+   return 184 - 1 - tsp[4];
 
15717
+ }
 
15718
+ return 184;
 
15719
+}
 
15720
+
 
15721
+static
 
15722
+inline
 
15723
+__attribute__((always_inline))
 
15724
+int
 
15725
+dvb_dmx_swfilter_payload(struct dvb_demux_feed *feed, const u8 *buf)
 
15726
+{
 
15727
+ int count = payload(buf);
 
15728
+ int p;
 
15729
+ if (count == 0)
 
15730
+  return -1;
 
15731
+ return feed->cb.ts(&buf[p], count, ((void *)0), 0);
 
15732
+}
 
15733
+
 
15734
+static
 
15735
+inline
 
15736
+__attribute__((always_inline))
 
15737
+void
 
15738
+dvb_dmx_swfilter_packet_type(struct dvb_demux_feed *feed, const u8 *buf)
 
15739
+{
 
15740
+ switch (feed->type) {
 
15741
+ case 0:
 
15742
+  if (feed->ts_type & 1) {
 
15743
+    dvb_dmx_swfilter_payload(feed, buf);
 
15744
+  }
 
15745
+  if (dvb_dmx_swfilter_section_packet(feed, buf) < 0)
 
15746
+   feed->feed.sec.seclen = feed->feed.sec.secbufp = 0;
 
15747
+ }
 
15748
+}
 
15749
+
 
15750
+static
 
15751
+void
 
15752
+dvb_dmx_swfilter_packet(struct dvb_demux *demux, const u8 *buf)
 
15753
+{
 
15754
+ struct dvb_demux_feed *feed;
 
15755
+ int dvr_done = 0;
 
15756
+
 
15757
+ for (feed = ({ const typeof( ((typeof(*feed) *)0)->list_head ) *__mptr = ((&demux->feed_list)->next); (typeof(*feed) *)( (char *)__mptr - __builtin_offsetof(typeof(*feed),list_head) );}); __builtin_prefetch(feed->list_head.next), &feed->list_head != (&demux->feed_list); feed = ({ const typeof( ((typeof(*feed) *)0)->list_head ) *__mptr = (feed->list_head.next); (typeof(*feed) *)( (char *)__mptr - __builtin_offsetof(typeof(*feed),list_head) );})) {
 
15758
+  if (((((feed)->type == 0) && ((feed)->feed.ts.is_filtering) && (((feed)->ts_type & (1 | 8)) == 1))) && (dvr_done++))
 
15759
+   dvb_dmx_swfilter_packet_type(feed, buf);
 
15760
+  else if (feed->pid == 0x2000)
 
15761
+   feed->cb.ts(buf, 188, ((void *)0), 0);
 
15762
+ }
 
15763
+}
 
15764
+void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf, size_t count)
 
15765
+{
 
15766
+ while (count--) {
 
15767
+   dvb_dmx_swfilter_packet(demux, buf);
 
15768
+ }
 
15769
+}
 
15770
Index: gcc/testsuite/gcc.dg/torture/pr58830.c
 
15771
===================================================================
 
15772
--- a/src/gcc/testsuite/gcc.dg/torture/pr58830.c        (.../tags/gcc_4_8_2_release)
 
15773
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58830.c        (.../branches/gcc-4_8-branch)
 
15774
@@ -0,0 +1,42 @@
 
15775
+/* { dg-do run } */
 
15776
+/* { dg-additional-options "-ftree-pre -ftree-partial-pre" } */
 
15777
+
 
15778
+extern void abort (void);
 
15779
+
 
15780
+int b, c, d, f, g, h, i, j[6], *l = &b, *m, n, *o, r; 
 
15781
+char k;
 
15782
+
 
15783
+static int
 
15784
+foo ()
 
15785
+{
 
15786
+  char *p = &k;
 
15787
+
 
15788
+  for (; d; d++)
 
15789
+    if (i)
 
15790
+      h = 0;
 
15791
+    else
 
15792
+      h = c || (r = 0);
 
15793
+
 
15794
+  for (f = 0; f < 2; f++)
 
15795
+    {
 
15796
+      unsigned int q;
 
15797
+      *l = 0;
 
15798
+      if (n)
 
15799
+       *m = g;
 
15800
+      if (g)
 
15801
+       o = 0;
 
15802
+      for (q = -8; q >= 5; q++)
 
15803
+       (*p)--;
 
15804
+    }
 
15805
+
 
15806
+  return 0;
 
15807
+}
 
15808
+
 
15809
+int
 
15810
+main ()
 
15811
+{
 
15812
+  foo ();
 
15813
+  if (j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[j[0]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ^ (k & 15)] != 0)
 
15814
+    abort ();
 
15815
+  return 0;
 
15816
+}
 
15817
Index: gcc/testsuite/gcc.dg/torture/pr59715.c
 
15818
===================================================================
 
15819
--- a/src/gcc/testsuite/gcc.dg/torture/pr59715.c        (.../tags/gcc_4_8_2_release)
 
15820
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59715.c        (.../branches/gcc-4_8-branch)
 
15821
@@ -0,0 +1,21 @@
 
15822
+/* { dg-do run } */
 
15823
+
 
15824
+extern void abort (void);
 
15825
+
 
15826
+int a = 2, b;
 
15827
+
 
15828
+int
 
15829
+main ()
 
15830
+{
 
15831
+  int c;
 
15832
+  if (!b)
 
15833
+    {
 
15834
+      b = a;
 
15835
+      c = a == 0 ? 1 : 1 % a;
 
15836
+      if (c)
 
15837
+       b = 0;
 
15838
+    }
 
15839
+  if (b != 0)
 
15840
+    abort ();
 
15841
+  return 0;
 
15842
+}
 
15843
Index: gcc/testsuite/gcc.dg/torture/pr60115.c
 
15844
===================================================================
 
15845
--- a/src/gcc/testsuite/gcc.dg/torture/pr60115.c        (.../tags/gcc_4_8_2_release)
 
15846
+++ b/src/gcc/testsuite/gcc.dg/torture/pr60115.c        (.../branches/gcc-4_8-branch)
 
15847
@@ -0,0 +1,14 @@
 
15848
+/* { dg-do run } */
 
15849
+
 
15850
+int a, b[2];
 
15851
+
 
15852
+int
 
15853
+main ()
 
15854
+{
 
15855
+lbl:
 
15856
+  for (; a; a--)
 
15857
+    if (b[10000])
 
15858
+      goto lbl;
 
15859
+
 
15860
+  return 0;
 
15861
+}
 
15862
Index: gcc/testsuite/gcc.dg/torture/pr59903.c
 
15863
===================================================================
 
15864
--- a/src/gcc/testsuite/gcc.dg/torture/pr59903.c        (.../tags/gcc_4_8_2_release)
 
15865
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59903.c        (.../branches/gcc-4_8-branch)
 
15866
@@ -0,0 +1,56 @@
 
15867
+/* { dg-do compile } */
 
15868
+
 
15869
+int a, b, c, d, e, f, g, h, i[3], l, m, n, o, p, q, r;
 
15870
+
 
15871
+struct S0
 
15872
+{
 
15873
+  int f0;
 
15874
+  int f1;
 
15875
+  int f2;
 
15876
+  int f3;
 
15877
+} j;
 
15878
+
 
15879
+static int
 
15880
+fn1 (int p1)
 
15881
+{
 
15882
+  return p1 || ((p1 > 0) > (e << 1)); 
 
15883
+}
 
15884
+
 
15885
+static struct S0
 
15886
+fn2 (struct S0 p1)
 
15887
+{
 
15888
+  char s;
 
15889
+  struct S0 t = {0,0,0,0};
 
15890
+  int u = 2;
 
15891
+  for (;;)
 
15892
+    {
 
15893
+      if (i[0])
 
15894
+       break;
 
15895
+      for (m = 0; m < 4; m++)
 
15896
+       for (p1.f0 = 0; p1.f0 < 3; p1.f0++)
 
15897
+         {
 
15898
+           j = t;
 
15899
+           t.f3 = i[p1.f0];
 
15900
+           o = b || 1 >> b ? 0 : a < 0;
 
15901
+           q = 1 % d;
 
15902
+           if ((g < fn1 ((1 ^ (q & 1)) | n)) ^ u)
 
15903
+             j.f3 |= p % 2;
 
15904
+           s = j.f3 > 0 ? j.f3 : j.f3 << 1;
 
15905
+           r = l = s && p1.f1 * c;
 
15906
+           h = p1.f1;
 
15907
+         }
 
15908
+    }
 
15909
+  return p1;
 
15910
+}
 
15911
+
 
15912
+int
 
15913
+main ()
 
15914
+{
 
15915
+  for (;f;)
 
15916
+    {
 
15917
+      struct S0 v = {0,0,0,0};
 
15918
+      fn2 (v);
 
15919
+      j.f3 = 0;
 
15920
+    }
 
15921
+  return 0;
 
15922
+}
 
15923
Index: gcc/testsuite/gcc.dg/torture/pr58143-1.c
 
15924
===================================================================
 
15925
--- a/src/gcc/testsuite/gcc.dg/torture/pr58143-1.c      (.../tags/gcc_4_8_2_release)
 
15926
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58143-1.c      (.../branches/gcc-4_8-branch)
 
15927
@@ -0,0 +1,51 @@
 
15928
+/* { dg-do run } */
 
15929
+/* { dg-additional-options "-fstrict-overflow" } */
 
15930
+
 
15931
+extern void abort (void);
 
15932
+
 
15933
+int a, b, c, d, e, f, g, h = 1, i;
 
15934
+
 
15935
+int foo (int p)
 
15936
+{
 
15937
+  return p < 0 && a < - __INT_MAX__ - 1 - p ? 0 : 1;
 
15938
+}
 
15939
+
 
15940
+int *bar ()
 
15941
+{
 
15942
+  int j; 
 
15943
+  i = h ? 0 : 1 % h;
 
15944
+  for (j = 0; j < 1; j++)
 
15945
+    for (d = 0; d; d++)
 
15946
+      for (e = 1; e;)
 
15947
+       return 0;
 
15948
+  return 0;
 
15949
+}
 
15950
+
 
15951
+int baz ()
 
15952
+{
 
15953
+  for (; b >= 0; b--)
 
15954
+    for (c = 1; c >= 0; c--)
 
15955
+      {
 
15956
+       int *k = &c;
 
15957
+       for (;;)
 
15958
+         {
 
15959
+           for (f = 0; f < 1; f++)
 
15960
+             {
 
15961
+               g = foo (*k);
 
15962
+               bar ();
 
15963
+             }
 
15964
+           if (*k)
 
15965
+             break;
 
15966
+           return 0;
 
15967
+         }
 
15968
+      }
 
15969
+  return 0;
 
15970
+}
 
15971
+
 
15972
+int main ()
 
15973
+{
 
15974
+  baz ();
 
15975
+  if (b != 0)
 
15976
+    abort ();
 
15977
+  return 0;
 
15978
+}
 
15979
Index: gcc/testsuite/gcc.dg/torture/pr58143-2.c
 
15980
===================================================================
 
15981
--- a/src/gcc/testsuite/gcc.dg/torture/pr58143-2.c      (.../tags/gcc_4_8_2_release)
 
15982
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58143-2.c      (.../branches/gcc-4_8-branch)
 
15983
@@ -0,0 +1,34 @@
 
15984
+/* { dg-do run } */
 
15985
+/* { dg-additional-options "-fstrict-overflow" } */
 
15986
+
 
15987
+int a, b, d, e, f, *g, h, i;
 
15988
+volatile int c;
 
15989
+
 
15990
+char foo (unsigned char p)
 
15991
+{
 
15992
+  return p + 1;
 
15993
+}
 
15994
+
 
15995
+int bar () 
 
15996
+{
 
15997
+  for (h = 0; h < 3; h = foo (h))
 
15998
+    {
 
15999
+      c;
 
16000
+      for (f = 0; f < 1; f++)
 
16001
+       {
 
16002
+         i = a && 0 < -__INT_MAX__ - h ? 0 : 1;
 
16003
+         if (e)
 
16004
+           for (; d;)
 
16005
+             b = 0;
 
16006
+         else
 
16007
+           g = 0;
 
16008
+       }
 
16009
+    }
 
16010
+  return 0;
 
16011
+}
 
16012
+
 
16013
+int main ()
 
16014
+{
 
16015
+  bar ();
 
16016
+  return 0;
 
16017
+}
 
16018
Index: gcc/testsuite/gcc.dg/torture/pr58941.c
 
16019
===================================================================
 
16020
--- a/src/gcc/testsuite/gcc.dg/torture/pr58941.c        (.../tags/gcc_4_8_2_release)
 
16021
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58941.c        (.../branches/gcc-4_8-branch)
 
16022
@@ -0,0 +1,33 @@
 
16023
+/* { dg-do run } */
 
16024
+
 
16025
+extern void abort (void);
 
16026
+
 
16027
+typedef struct {
 
16028
+    int msgLength;
 
16029
+    unsigned char data[1000];
 
16030
+} SMsg;
 
16031
+
 
16032
+typedef struct {
 
16033
+    int dummy;
 
16034
+    int d[0];
 
16035
+} SData;
 
16036
+
 
16037
+int condition = 3;
 
16038
+
 
16039
+int main()
 
16040
+{
 
16041
+  SMsg msg;
 
16042
+  SData *pData = (SData*)(msg.data);
 
16043
+  unsigned int i = 0;
 
16044
+  for (i = 0; i < 1; i++)
 
16045
+    {
 
16046
+      pData->d[i] = 0;
 
16047
+      if(condition & 1)
 
16048
+       pData->d[i] |= 0x55;
 
16049
+      if(condition & 2)
 
16050
+       pData->d[i] |= 0xaa;
 
16051
+    }
 
16052
+  if (pData->d[0] != 0xff)
 
16053
+    abort ();
 
16054
+  return 0;
 
16055
+}
 
16056
Index: gcc/testsuite/gcc.dg/torture/pr57488.c
 
16057
===================================================================
 
16058
--- a/src/gcc/testsuite/gcc.dg/torture/pr57488.c        (.../tags/gcc_4_8_2_release)
 
16059
+++ b/src/gcc/testsuite/gcc.dg/torture/pr57488.c        (.../branches/gcc-4_8-branch)
 
16060
@@ -0,0 +1,58 @@
 
16061
+/* { dg-do run } */
 
16062
+
 
16063
+extern void abort (void);
 
16064
+
 
16065
+int i, j, *pj = &j, **ppj = &pj;
 
16066
+int x, *px = &x;
 
16067
+
 
16068
+short s, *ps = &s, k;
 
16069
+
 
16070
+unsigned short u, *pu = &u, **ppu = &pu;
 
16071
+
 
16072
+char c, *pc = &c;
 
16073
+
 
16074
+unsigned char v = 48;
 
16075
+
 
16076
+static int
 
16077
+bar (int p)
 
16078
+{
 
16079
+  p = k;
 
16080
+  *px = **ppu = i;
 
16081
+  *ppj = &p;
 
16082
+  if (**ppj)
 
16083
+    *pj = p;
 
16084
+  return p;
 
16085
+}
 
16086
+
 
16087
+void __attribute__((noinline))
 
16088
+foo ()
 
16089
+{
 
16090
+  for (; i <= 3; i++)
 
16091
+    for (; j; j--);
 
16092
+
 
16093
+  u ^= bar (*pj);
 
16094
+
 
16095
+  for (k = 1; k >= 0; k--)
 
16096
+    {
 
16097
+      int l;
 
16098
+      bar (0);
 
16099
+      for (l = 1; l < 5; l++)
 
16100
+       {
 
16101
+         int m;
 
16102
+         for (m = 6; m; m--)
 
16103
+           {
 
16104
+             v--;
 
16105
+             *ps = *pc;
 
16106
+           }
 
16107
+       }
 
16108
+    }
 
16109
+}
 
16110
+
 
16111
+int
 
16112
+main ()
 
16113
+{
 
16114
+  foo ();
 
16115
+  if (v != 0)
 
16116
+    abort ();
 
16117
+  return 0;
 
16118
+}
 
16119
Index: gcc/testsuite/gcc.dg/torture/pr57569.c
 
16120
===================================================================
 
16121
--- a/src/gcc/testsuite/gcc.dg/torture/pr57569.c        (.../tags/gcc_4_8_2_release)
 
16122
+++ b/src/gcc/testsuite/gcc.dg/torture/pr57569.c        (.../branches/gcc-4_8-branch)
 
16123
@@ -0,0 +1,37 @@
 
16124
+/* { dg-do run } */
 
16125
+
 
16126
+extern void abort (void) __attribute__((noreturn));
 
16127
+
 
16128
+struct S { int f0; } a; 
 
16129
+
 
16130
+int b, e, *d = &b, f;
 
16131
+
 
16132
+void 
 
16133
+fn1 ()
 
16134
+{
 
16135
+  int **g[9][6];
 
16136
+  int ***h = &g[6][3];
 
16137
+  for (; e < 9; e++) {
 
16138
+    f = 0;
 
16139
+    for (; f < 6; f++)
 
16140
+      g[e][f] = &d;
 
16141
+  }
 
16142
+  ***h = 0;
 
16143
+}
 
16144
+
 
16145
+void
 
16146
+fn2 ()
 
16147
+{
 
16148
+  fn1 ();
 
16149
+  struct S c[4][10] = {};
 
16150
+  a = c[3][9];
 
16151
+}
 
16152
+
 
16153
+int
 
16154
+main ()
 
16155
+{
 
16156
+  fn2 ();
 
16157
+  if (a.f0 != 0)
 
16158
+    abort ();
 
16159
+  return 0;
 
16160
+}
 
16161
Index: gcc/testsuite/gcc.dg/torture/pr58143-3.c
 
16162
===================================================================
 
16163
--- a/src/gcc/testsuite/gcc.dg/torture/pr58143-3.c      (.../tags/gcc_4_8_2_release)
 
16164
+++ b/src/gcc/testsuite/gcc.dg/torture/pr58143-3.c      (.../branches/gcc-4_8-branch)
 
16165
@@ -0,0 +1,18 @@
 
16166
+/* { dg-do run } */
 
16167
+/* { dg-additional-options "-fstrict-overflow" } */
 
16168
+
 
16169
+int a, b, c, d, e;
 
16170
+
 
16171
+int
 
16172
+main ()
 
16173
+{
 
16174
+  for (b = 4; b > -30; b--)
 
16175
+    for (; c;)
 
16176
+      for (;;)
 
16177
+       {
 
16178
+         e = a > __INT_MAX__ - b;
 
16179
+         if (d)
 
16180
+           break;
 
16181
+       }
 
16182
+  return 0;
 
16183
+}
 
16184
Index: gcc/testsuite/gcc.dg/torture/pr59288.c
 
16185
===================================================================
 
16186
--- a/src/gcc/testsuite/gcc.dg/torture/pr59288.c        (.../tags/gcc_4_8_2_release)
 
16187
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59288.c        (.../branches/gcc-4_8-branch)
 
16188
@@ -0,0 +1,9 @@
 
16189
+/* { dg-do compile } */
 
16190
+
 
16191
+void
 
16192
+baz (int *d)
 
16193
+{
 
16194
+  long int i, j, k;
 
16195
+  for (i = 0, j = 0, k = 0; i < 512; i = (int) i + 1, j = (int) j + 1, k = (int) k + 3)
 
16196
+    d[i] = j ^ (i * 3) ^ (2 * k + 2);
 
16197
+}
 
16198
Index: gcc/testsuite/gcc.dg/torture/pr57425-1.c
 
16199
===================================================================
 
16200
--- a/src/gcc/testsuite/gcc.dg/torture/pr57425-1.c      (.../tags/gcc_4_8_2_release)
 
16201
+++ b/src/gcc/testsuite/gcc.dg/torture/pr57425-1.c      (.../branches/gcc-4_8-branch)
 
16202
@@ -0,0 +1,37 @@
 
16203
+/* { dg-do run } */
 
16204
+
 
16205
+extern void abort (void) __attribute__((noreturn));
 
16206
+
 
16207
+union setconflict
 
16208
+{
 
16209
+  int a[20];
 
16210
+  long b[10];
 
16211
+};
 
16212
+
 
16213
+int
 
16214
+main ()
 
16215
+{
 
16216
+  int sum = 0;
 
16217
+  {
 
16218
+    union setconflict a;
 
16219
+    int *c;
 
16220
+    c = a.a;
 
16221
+    asm ("": "=r" (c):"0" (c));
 
16222
+    *c = 0;
 
16223
+    asm ("": "=r" (c):"0" (c));
 
16224
+    sum += *c;
 
16225
+  }
 
16226
+  {
 
16227
+    union setconflict a;
 
16228
+    long *c;
 
16229
+    c = a.b;
 
16230
+    asm ("": "=r" (c):"0" (c));
 
16231
+    *c = 1;
 
16232
+    asm ("": "=r" (c):"0" (c));
 
16233
+    sum += *c;
 
16234
+  }
 
16235
+
 
16236
+  if (sum != 1)
 
16237
+    abort();
 
16238
+  return 0;
 
16239
+}
 
16240
Index: gcc/testsuite/gcc.dg/torture/pr59330.c
 
16241
===================================================================
 
16242
--- a/src/gcc/testsuite/gcc.dg/torture/pr59330.c        (.../tags/gcc_4_8_2_release)
 
16243
+++ b/src/gcc/testsuite/gcc.dg/torture/pr59330.c        (.../branches/gcc-4_8-branch)
 
16244
@@ -0,0 +1,17 @@
 
16245
+/* { dg-do run } */
 
16246
+
 
16247
+void free(void *ptr)
 
16248
+{
 
16249
+}
 
16250
+
 
16251
+void *foo(void)
 
16252
+{
 
16253
+  return 0;
 
16254
+}
 
16255
+
 
16256
+int main(void)
 
16257
+{
 
16258
+  void *p = foo();
 
16259
+  free(p);
 
16260
+  return 0;
 
16261
+}
 
16262
Index: gcc/testsuite/gcc.dg/tree-ssa/predcom-6.c
 
16263
===================================================================
 
16264
--- a/src/gcc/testsuite/gcc.dg/tree-ssa/predcom-6.c     (.../tags/gcc_4_8_2_release)
 
16265
+++ b/src/gcc/testsuite/gcc.dg/tree-ssa/predcom-6.c     (.../branches/gcc-4_8-branch)
 
16266
@@ -0,0 +1,14 @@
 
16267
+/* { dg-do run } */
 
16268
+/* { dg-options "-O3" } */
 
16269
+
 
16270
+int a, c, e[5][2]; 
 
16271
+unsigned int d;
 
16272
+
 
16273
+int
 
16274
+main ()
 
16275
+{
 
16276
+  for (d = 0; d < 2; d++)
 
16277
+    if (a ? 0 : e[c + 3][d] & e[c + 4][d])
 
16278
+      break;
 
16279
+  return 0;
 
16280
+}
 
16281
Index: gcc/testsuite/gcc.dg/tree-ssa/predcom-7.c
 
16282
===================================================================
 
16283
--- a/src/gcc/testsuite/gcc.dg/tree-ssa/predcom-7.c     (.../tags/gcc_4_8_2_release)
 
16284
+++ b/src/gcc/testsuite/gcc.dg/tree-ssa/predcom-7.c     (.../branches/gcc-4_8-branch)
 
16285
@@ -0,0 +1,18 @@
 
16286
+/* { dg-do run } */
 
16287
+/* { dg-options "-O3 -fdump-tree-pcom-details" } */
 
16288
+
 
16289
+int b, f, d[5][2];
 
16290
+unsigned int c;
 
16291
+
 
16292
+int
 
16293
+main ()
 
16294
+{
 
16295
+  for (c = 0; c < 2; c++)
 
16296
+    if (d[b + 3][c] & d[b + 4][c])
 
16297
+      if (f)
 
16298
+       break;
 
16299
+  return 0;
 
16300
+}
 
16301
+
 
16302
+/* { dg-final { scan-tree-dump "Executing predictive commoning" "pcom" } } */
 
16303
+/* { dg-final { cleanup-tree-dump "pcom" } } */
 
16304
Index: gcc/testsuite/gcc.dg/strlenopt-4.c
 
16305
===================================================================
 
16306
--- a/src/gcc/testsuite/gcc.dg/strlenopt-4.c    (.../tags/gcc_4_8_2_release)
 
16307
+++ b/src/gcc/testsuite/gcc.dg/strlenopt-4.c    (.../branches/gcc-4_8-branch)
 
16308
@@ -66,16 +66,10 @@
 
16309
   return 0;
 
16310
 }
 
16311
 
 
16312
-/* For targets providing a movstr pattern strcat is already decomposed
 
16313
-   into strlen + strcpy by fold_builtin_strcat.  */
 
16314
-
 
16315
-/* { dg-final { scan-tree-dump-times "strlen \\(" 3 "strlen" { target { ! s390*-*-* } } } } */
 
16316
-/* { dg-final { scan-tree-dump-times "strlen \\(" 6 "strlen" { target s390*-*-* } } } */
 
16317
+/* { dg-final { scan-tree-dump-times "strlen \\(" 3 "strlen" } } */
 
16318
 /* { dg-final { scan-tree-dump-times "memcpy \\(" 4 "strlen" } } */
 
16319
-/* { dg-final { scan-tree-dump-times "strcpy \\(" 3 "strlen" { target { ! s390*-*-* } } } } */
 
16320
-/* { dg-final { scan-tree-dump-times "strcpy \\(" 6 "strlen" { target s390*-*-* } } } */
 
16321
-/* { dg-final { scan-tree-dump-times "strcat \\(" 3 "strlen" { target { ! s390*-*-* } } } } */
 
16322
-/* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" { target s390*-*-* } } } */
 
16323
+/* { dg-final { scan-tree-dump-times "strcpy \\(" 3 "strlen" } } */
 
16324
+/* { dg-final { scan-tree-dump-times "strcat \\(" 3 "strlen" } } */
 
16325
 /* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
 
16326
 /* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
 
16327
 /* { dg-final { cleanup-tree-dump "strlen" } } */
 
16328
Index: gcc/testsuite/gcc.dg/pr56824.c
 
16329
===================================================================
 
16330
--- a/src/gcc/testsuite/gcc.dg/pr56824.c        (.../tags/gcc_4_8_2_release)
 
16331
+++ b/src/gcc/testsuite/gcc.dg/pr56824.c        (.../branches/gcc-4_8-branch)
 
16332
@@ -0,0 +1,18 @@
 
16333
+/* PR preprocessor/56824 */
 
16334
+/* { dg-do compile } */
 
16335
+/* { dg-options "-Waggregate-return" } */
 
16336
+
 
16337
+struct S { int i; };
 
16338
+struct S foo (void);
 
16339
+
 
16340
+#pragma GCC diagnostic push
 
16341
+#pragma GCC diagnostic ignored "-Waggregate-return"
 
16342
+
 
16343
+int
 
16344
+main ()
 
16345
+{
 
16346
+  foo ();
 
16347
+  return 0;
 
16348
+}
 
16349
+
 
16350
+#pragma GCC diagnostic pop
 
16351
Index: gcc/testsuite/gcc.dg/ipa/pr55260.c
 
16352
===================================================================
 
16353
--- a/src/gcc/testsuite/gcc.dg/ipa/pr55260.c    (.../tags/gcc_4_8_2_release)
 
16354
+++ b/src/gcc/testsuite/gcc.dg/ipa/pr55260.c    (.../branches/gcc-4_8-branch)
 
16355
@@ -0,0 +1,38 @@
 
16356
+/* { dg-do compile } */
 
16357
+/* { dg-options "-O2 -fno-inline -fipa-cp-clone"  } */
 
16358
+
 
16359
+typedef struct {
 
16360
+  int *ptr;
 
16361
+  int len;
 
16362
+} string;
 
16363
+typedef struct {
 
16364
+  string nantstr;
 
16365
+  int *nant;
 
16366
+} malv;
 
16367
+typedef struct {
 
16368
+  int *nor;
 
16369
+} list_heads;
 
16370
+int b;
 
16371
+list_heads *fn1(string, int *, unsigned);
 
16372
+void fn2(malv *p1, list_heads *p2, unsigned p3) {
 
16373
+  string a = p1->nantstr;
 
16374
+  fn1(a, p1->nant, p3);
 
16375
+}
 
16376
+
 
16377
+void fn3(unsigned p1) { fn2(0, 0, p1); }
 
16378
+
 
16379
+list_heads *fn1(string p1, int *p2, unsigned p3) {
 
16380
+  while (1) {
 
16381
+    if (p3)
 
16382
+      fn3(1);
 
16383
+    if (b)
 
16384
+      return 0;
 
16385
+    fn3(1);
 
16386
+  }
 
16387
+}
 
16388
+
 
16389
+void fn5() {
 
16390
+  list_heads c;
 
16391
+  c.nor = 0;
 
16392
+  fn2(0, &c, 1);
 
16393
+}
 
16394
Index: gcc/testsuite/gcc.dg/ipa/pr59610.c
 
16395
===================================================================
 
16396
--- a/src/gcc/testsuite/gcc.dg/ipa/pr59610.c    (.../tags/gcc_4_8_2_release)
 
16397
+++ b/src/gcc/testsuite/gcc.dg/ipa/pr59610.c    (.../branches/gcc-4_8-branch)
 
16398
@@ -0,0 +1,11 @@
 
16399
+/* { dg-do compile } */
 
16400
+/* { dg-options "-O2" } */
 
16401
+
 
16402
+struct A { int a; };
 
16403
+extern void *y;
 
16404
+
 
16405
+__attribute__((optimize (0))) void
 
16406
+foo (void *p, struct A x)
 
16407
+{
 
16408
+  foo (y, x);
 
16409
+}
 
16410
Index: gcc/testsuite/gcc.dg/pr60485-1.c
 
16411
===================================================================
 
16412
--- a/src/gcc/testsuite/gcc.dg/pr60485-1.c      (.../tags/gcc_4_8_2_release)
 
16413
+++ b/src/gcc/testsuite/gcc.dg/pr60485-1.c      (.../branches/gcc-4_8-branch)
 
16414
@@ -0,0 +1,29 @@
 
16415
+/* { dg-do run } */
 
16416
+/* { dg-options "-O2" } */
 
16417
+
 
16418
+extern void abort (void);
 
16419
+struct S {
 
16420
+    int *i[4];
 
16421
+    int *p1;
 
16422
+    int *p2;
 
16423
+    int *p3;
 
16424
+    int *p4;
 
16425
+};
 
16426
+int **b;
 
16427
+int main()
 
16428
+{
 
16429
+  int i = 1;
 
16430
+  struct S s;
 
16431
+  s.p3 = &i;
 
16432
+  int **p;
 
16433
+  if (b)
 
16434
+    p = b;
 
16435
+  else
 
16436
+    p = &s.i[2];
 
16437
+  p += 4;
 
16438
+  if (!b)
 
16439
+    **p = 0;
 
16440
+  if (i != 0)
 
16441
+    abort ();
 
16442
+  return i;
 
16443
+}
 
16444
Index: gcc/testsuite/gcc.dg/strlenopt-1f.c
 
16445
===================================================================
 
16446
--- a/src/gcc/testsuite/gcc.dg/strlenopt-1f.c   (.../tags/gcc_4_8_2_release)
 
16447
+++ b/src/gcc/testsuite/gcc.dg/strlenopt-1f.c   (.../branches/gcc-4_8-branch)
 
16448
@@ -6,13 +6,13 @@
 
16449
 #include "strlenopt-1.c"
 
16450
 
 
16451
 /* { dg-final { scan-tree-dump-times "strlen \\(" 2 "strlen" } } */
 
16452
-/* { dg-final { scan-tree-dump-times "__memcpy_chk \\(" 3 "strlen" } } */
 
16453
-/* { dg-final { scan-tree-dump-times "__strcpy_chk \\(" 1 "strlen" } } */
 
16454
+/* { dg-final { scan-tree-dump-times "__memcpy_chk \\(" 0 "strlen" } } */
 
16455
+/* { dg-final { scan-tree-dump-times "__strcpy_chk \\(" 0 "strlen" } } */
 
16456
 /* { dg-final { scan-tree-dump-times "__strcat_chk \\(" 0 "strlen" } } */
 
16457
 /* { dg-final { scan-tree-dump-times "strchr \\(" 0 "strlen" } } */
 
16458
 /* { dg-final { scan-tree-dump-times "__stpcpy_chk \\(" 0 "strlen" } } */
 
16459
-/* { dg-final { scan-tree-dump-times "memcpy \\(" 0 "strlen" } } */
 
16460
-/* { dg-final { scan-tree-dump-times "strcpy \\(" 0 "strlen" } } */
 
16461
+/* { dg-final { scan-tree-dump-times "memcpy \\(" 3 "strlen" } } */
 
16462
+/* { dg-final { scan-tree-dump-times "strcpy \\(" 1 "strlen" } } */
 
16463
 /* { dg-final { scan-tree-dump-times "strcat \\(" 0 "strlen" } } */
 
16464
 /* { dg-final { scan-tree-dump-times "stpcpy \\(" 0 "strlen" } } */
 
16465
 /* { dg-final { cleanup-tree-dump "strlen" } } */
 
16466
Index: gcc/testsuite/gcc.dg/vect/pr60382.c
 
16467
===================================================================
 
16468
--- a/src/gcc/testsuite/gcc.dg/vect/pr60382.c   (.../tags/gcc_4_8_2_release)
 
16469
+++ b/src/gcc/testsuite/gcc.dg/vect/pr60382.c   (.../branches/gcc-4_8-branch)
 
16470
@@ -0,0 +1,32 @@
 
16471
+#include "tree-vect.h"
 
16472
+
 
16473
+int a, b, c, e, f;
 
16474
+
 
16475
+void
 
16476
+foo ()
 
16477
+{
 
16478
+  for (b = 0; b < 3; b++)
 
16479
+    if (e)
 
16480
+      {
 
16481
+       for (c = 0; c < 4; c++)
 
16482
+         {
 
16483
+           if (b)
 
16484
+             continue;
 
16485
+           f = 1;
 
16486
+           for (a = 0; a < 2; a++)
 
16487
+             f |= 1;
 
16488
+         }
 
16489
+       for (;;)
 
16490
+         ;
 
16491
+      }
 
16492
+}
 
16493
+
 
16494
+int
 
16495
+main ()
 
16496
+{
 
16497
+  check_vect ();
 
16498
+  foo ();
 
16499
+  return 0;
 
16500
+}
 
16501
+
 
16502
+/* { dg-final { cleanup-tree-dump "vect" } } */
 
16503
Index: gcc/testsuite/gcc.dg/vect/pr60276.c
 
16504
===================================================================
 
16505
--- a/src/gcc/testsuite/gcc.dg/vect/pr60276.c   (.../tags/gcc_4_8_2_release)
 
16506
+++ b/src/gcc/testsuite/gcc.dg/vect/pr60276.c   (.../branches/gcc-4_8-branch)
 
16507
@@ -0,0 +1,52 @@
 
16508
+/* { dg-do run } */
 
16509
+
 
16510
+extern void abort (void);
 
16511
+
 
16512
+static void 
 
16513
+foo (int *out, const int *lp, unsigned samples)
 
16514
+{
 
16515
+  int x, target;
 
16516
+  for (x = 0, target = 0; x < (int)samples; x += 2, target++)
 
16517
+    {
 
16518
+      out[x] = lp[target];
 
16519
+      out[x - 1] = out[x - 2] + out[x];
 
16520
+    }
 
16521
+}
 
16522
+
 
16523
+static void 
 
16524
+foo_novec (int *out, const int *lp, unsigned samples)
 
16525
+{
 
16526
+  int x, target;
 
16527
+  for (x = 0, target = 0; x < (int)samples; x += 2, target++)
 
16528
+    {
 
16529
+      out[x] = lp[target];
 
16530
+      out[x - 1] = out[x - 2] + out[x];
 
16531
+      __asm__ volatile ("" : : : "memory");
 
16532
+    }
 
16533
+}
 
16534
+
 
16535
+int main(void)
 
16536
+{
 
16537
+  const int lp[25] = {
 
16538
+      0, 2, 4, 6, 8,
 
16539
+      10, 12, 14, 16,
 
16540
+      18, 20, 22, 24,
 
16541
+      26, 28, 30, 32,
 
16542
+      34, 36, 38, 40,
 
16543
+      42, 44, 46, 48,
 
16544
+  };
 
16545
+  int out[49] = {0};
 
16546
+  int out2[49] = {0};
 
16547
+  int s;
 
16548
+
 
16549
+  foo (out + 2, lp + 1, 48);
 
16550
+  foo_novec (out2 + 2, lp + 1, 48);
 
16551
+
 
16552
+  for (s = 0; s < 49; s++)
 
16553
+    if (out[s] != out2[s])
 
16554
+      abort ();
 
16555
+
 
16556
+  return 0;
 
16557
+}
 
16558
+
 
16559
+/* { dg-final { cleanup-tree-dump "vect" } } */
 
16560
Index: gcc/testsuite/gcc.dg/pr53060.c
 
16561
===================================================================
 
16562
--- a/src/gcc/testsuite/gcc.dg/pr53060.c        (.../tags/gcc_4_8_2_release)
 
16563
+++ b/src/gcc/testsuite/gcc.dg/pr53060.c        (.../branches/gcc-4_8-branch)
 
16564
@@ -25,3 +25,4 @@
 
16565
 
 
16566
 /* Ignore a warning that is irrelevant to the purpose of this test.  */
 
16567
 /* { dg-prune-output ".*GCC vector returned by reference.*" } */
 
16568
+/* { dg-prune-output "changes the ABI" } */
 
16569
Index: gcc/testsuite/ChangeLog
 
16570
===================================================================
 
16571
--- a/src/gcc/testsuite/ChangeLog       (.../tags/gcc_4_8_2_release)
 
16572
+++ b/src/gcc/testsuite/ChangeLog       (.../branches/gcc-4_8-branch)
 
16573
@@ -1,3 +1,1036 @@
 
16574
+2014-03-20  Tobias Burnus  <burnus@net-b.de>
 
16575
+
 
16576
+       PR fortran/60543
 
16577
+       PR fortran/60283
 
16578
+       * gfortran.dg/implicit_pure_4.f90: New.
 
16579
+
 
16580
+2014-03-17  Mikael Pettersson  <mikpelinux@gmail.com>
 
16581
+           Committed by Bill Schmidt  <wschmidt@linux.vnet.ibm.com>
 
16582
+
 
16583
+       Backport from mainline:
 
16584
+
 
16585
+       2013-06-16  Joern Rennecke <joern.rennecke@embecosm.com>
 
16586
+
 
16587
+       PR rtl-optimization/57425
 
16588
+       PR rtl-optimization/57569
 
16589
+       * gcc.dg/torture/pr57425-1.c, gcc.dg/torture/pr57425-2.c: New files.
 
16590
+       * gcc.dg/torture/pr57425-3.c, gcc.dg/torture/pr57569.c: Likewise.
 
16591
+
 
16592
+2014-03-17  Richard Biener  <rguenther@suse.de>
 
16593
+
 
16594
+       Backport from mainline
 
16595
+       2014-03-11  Richard Biener  <rguenther@suse.de>
 
16596
+
 
16597
+       PR tree-optimization/60429
 
16598
+       PR tree-optimization/60485
 
16599
+       * gcc.dg/pr60485-1.c: New testcase.
 
16600
+       * gcc.dg/pr60485-2.c: Likewise.
 
16601
+
 
16602
+2014-03-15  Dominique d'Humieres  <dominiq@lps.ens.fr>
 
16603
+
 
16604
+       Backport from mainline
 
16605
+       PR libfortran/60128
 
16606
+       * gfortran.dg/fmt_en.f90: New test.
 
16607
+
 
16608
+2014-03-15  Jerry DeLisle  <jvdelisle@gcc.gnu>
 
16609
+
 
16610
+       Backport from mainline
 
16611
+       PR libfortran/58324
 
16612
+       * gfortran.dg/list_read_12.f90: New test.
 
16613
+
 
16614
+2014-03-13  Joey Ye  <joey.ye@arm.com>
 
16615
+
 
16616
+       Backport from mainline
 
16617
+       2014-03-12  Thomas Preud'homme  <thomas.preudhomme@arm.com>
 
16618
+
 
16619
+       PR tree-optimization/60454
 
16620
+       * gcc.c-torture/execute/pr60454.c: New test.
 
16621
+
 
16622
+2014-03-08  Janus Weil  <janus@gcc.gnu.org>
 
16623
+
 
16624
+       PR fortran/60450
 
16625
+       * gfortran.dg/shape_8.f90: New.
 
16626
+
 
16627
+2014-03-06  Jakub Jelinek  <jakub@redhat.com>
 
16628
+
 
16629
+       Backport from mainline
 
16630
+       2014-02-19  Jakub Jelinek  <jakub@redhat.com>
 
16631
+
 
16632
+       PR c/37743
 
16633
+       * g++.dg/ext/builtin-bswap1.C: New test.
 
16634
+       * c-c++-common/pr37743.c: New test.
 
16635
+
 
16636
+       PR preprocessor/58844
 
16637
+       * c-c++-common/cpp/pr58844-1.c: New test.
 
16638
+       * c-c++-common/cpp/pr58844-2.c: New test.
 
16639
+
 
16640
+       2014-02-13  Jakub Jelinek  <jakub@redhat.com>
 
16641
+
 
16642
+       PR target/43546
 
16643
+       * gcc.target/i386/pr43546.c: New test.
 
16644
+
 
16645
+       2014-02-12  Jakub Jelinek  <jakub@redhat.com>
 
16646
+
 
16647
+       PR c/60101
 
16648
+       * c-c++-common/pr60101.c: New test.
 
16649
+
 
16650
+       2014-02-11  Jakub Jelinek  <jakub@redhat.com>
 
16651
+
 
16652
+       PR fortran/52370
 
16653
+       * gfortran.dg/pr52370.f90: New test.
 
16654
+
 
16655
+       PR debug/59776
 
16656
+       * gcc.dg/guality/pr59776.c: New test.
 
16657
+
 
16658
+       2014-02-07  Jakub Jelinek  <jakub@redhat.com>
 
16659
+
 
16660
+       PR preprocessor/56824
 
16661
+       * gcc.dg/pr56824.c: New test.
 
16662
+
 
16663
+       2014-02-06  Jakub Jelinek  <jakub@redhat.com>
 
16664
+
 
16665
+       PR target/60062
 
16666
+       * gcc.c-torture/execute/pr60062.c: New test.
 
16667
+       * gcc.c-torture/execute/pr60072.c: New test.
 
16668
+
 
16669
+       2014-02-04  Jakub Jelinek  <jakub@redhat.com>
 
16670
+
 
16671
+       PR ipa/60026
 
16672
+       * c-c++-common/torture/pr60026.c: New test.
 
16673
+
 
16674
+       2014-02-05  Jakub Jelinek  <jakub@redhat.com>
 
16675
+
 
16676
+       PR middle-end/57499
 
16677
+       * g++.dg/torture/pr57499.C: New test.
 
16678
+
 
16679
+       2014-03-03  Jakub Jelinek  <jakub@redhat.com>
 
16680
+
 
16681
+       PR preprocessor/60400
 
16682
+       * c-c++-common/cpp/pr60400.c: New test.
 
16683
+       * c-c++-common/cpp/pr60400-1.h: New file.
 
16684
+       * c-c++-common/cpp/pr60400-2.h: New file.
 
16685
+
 
16686
+2014-03-04  Richard Biener  <rguenther@suse.de>
 
16687
+
 
16688
+       PR tree-optimization/60382
 
16689
+       * gcc.dg/vect/pr60382.c: New testcase.
 
16690
+
 
16691
+2014-03-02  Mikael Morin  <mikael@gcc.gnu.org>
 
16692
+
 
16693
+       PR fortran/60341
 
16694
+       * gfortran.dg/str_comp_optimize_1.f90: New test.
 
16695
+
 
16696
+2014-02-25  Richard Biener  <rguenther@suse.de>
 
16697
+
 
16698
+       Backport from mainline
 
16699
+       2014-02-21  Richard Biener  <rguenther@suse.de>
 
16700
+
 
16701
+       PR tree-optimization/60276
 
16702
+       * gcc.dg/vect/pr60276.c: New testcase.
 
16703
+
 
16704
+2014-02-25  Richard Biener  <rguenther@suse.de>
 
16705
+
 
16706
+       Backport from mainline
 
16707
+       2014-02-14  Richard Biener  <rguenther@suse.de>
 
16708
+
 
16709
+       PR tree-optimization/60183
 
16710
+       * gcc.dg/torture/pr60183.c: New testcase.
 
16711
+
 
16712
+2014-02-24  Fabien Chêne  <fabien@gcc.gnu.org>
 
16713
+
 
16714
+       PR c++/37140
 
16715
+       * g++.dg/template/using27.C: New.
 
16716
+       * g++.dg/template/using28.C: New.
 
16717
+       * g++.dg/template/using29.C: New.
 
16718
+
 
16719
+2014-02-23  David Holsgrove <david.holsgrove@xilinx.com>
 
16720
+
 
16721
+       * gcc/testsuite/gcc.target/microblaze/others/mem_reload.c: New test.
 
16722
+
 
16723
+2014-02-22  Mikael Morin  <mikael@gcc.gnu.org>
 
16724
+
 
16725
+       PR fortran/59599
 
16726
+       * gfortran.dg/ichar_3.f90: New test.
 
16727
+
 
16728
+2014-02-21  Steven G. Kargl  <kargl@gcc.gnu.org>
 
16729
+
 
16730
+       Backport from mainline
 
16731
+       PR fortran/59700
 
16732
+       * gfortran.dg/pr59700.f90: New test.
 
16733
+
 
16734
+2014-02-21  Martin Jambor  <mjambor@suse.cz>
 
16735
+
 
16736
+       PR ipa/55260
 
16737
+       * gcc.dg/ipa/pr55260.c: New test.
 
16738
+
 
16739
+2014-02-19  Tobias Burnus  <burnus@net-b.de>
 
16740
+
 
16741
+       PR fortran/49397
 
16742
+       * gfortran.dg/proc_ptr_45.f90: New.
 
16743
+       * gfortran.dg/proc_ptr_46.f90: New.
 
16744
+
 
16745
+2014-02-19  Uros Bizjak  <ubizjak@gmail.com>
 
16746
+
 
16747
+       Backport from mainline
 
16748
+       2014-02-19  Uros Bizjak  <ubizjak@gmail.com>
 
16749
+
 
16750
+       PR target/59794
 
16751
+       * gcc.target/i386/pr39162.c: Add dg-prune-output.
 
16752
+       (dg-options): Remove -Wno-psabi.
 
16753
+       * gcc.target/i386/pr59794-2.c: Ditto.
 
16754
+       * gcc.target/i386/sse-5.c: Ditto.
 
16755
+
 
16756
+2014-02-19  Janus Weil  <janus@gcc.gnu.org>
 
16757
+
 
16758
+       Backports from mainline:
 
16759
+       2014-02-17  Janus Weil  <janus@gcc.gnu.org>
 
16760
+
 
16761
+       PR fortran/55907
 
16762
+       * gfortran.dg/init_flag_12.f90: New.
 
16763
+
 
16764
+       2014-02-18  Janus Weil  <janus@gcc.gnu.org>
 
16765
+
 
16766
+       PR fortran/60231
 
16767
+       * gfortran.dg/typebound_generic_15.f90: New.
 
16768
+
 
16769
+2014-02-18  Kai Tietz  <ktietz@redhat.com>
 
16770
+
 
16771
+       PR target/60193
 
16772
+       * gcc.target/i386/nest-1.c: New testcase.
 
16773
+
 
16774
+2014-02-18  Eric Botcazou  <ebotcazou@adacore.com>
 
16775
+
 
16776
+       * gnat.dg/opt32.adb: New test.
 
16777
+
 
16778
+2014-02-15  Jerry DeLisle  <jvdelisle@gcc.gnu>
 
16779
+           Dominique d'Humieres  <dominiq@lps.ens.fr>
 
16780
+
 
16781
+       Backport from mainline
 
16782
+       PR libfortran/59771
 
16783
+       PR libfortran/59774
 
16784
+       PR libfortran/59836
 
16785
+       * gfortran.dg/fmt_g_1.f90: New test.
 
16786
+       * gfortran.dg/round_3.f08: New cases added.
 
16787
+
 
16788
+2014-02-13  Dominik Vogt  <vogt@linux.vnet.ibm.com>
 
16789
+
 
16790
+       * gcc.target/s390/hotpatch-compile-8.c: New test.
 
16791
+
 
16792
+2014-02-12  Eric Botcazou  <ebotcazou@adacore.com>
 
16793
+
 
16794
+       * gcc.c-torture/execute/20140212-1.c: New test.
 
16795
+
 
16796
+2014-02-10  Richard Biener  <rguenther@suse.de>
 
16797
+
 
16798
+       Backport from mainline
 
16799
+       2014-01-30  Richard Biener  <rguenther@suse.de>
 
16800
+
 
16801
+       PR tree-optimization/59903
 
16802
+       * gcc.dg/torture/pr59903.c: New testcase.
 
16803
+
 
16804
+       2014-02-10  Richard Biener  <rguenther@suse.de>
 
16805
+
 
16806
+       PR tree-optimization/60115
 
16807
+       * gcc.dg/torture/pr60115.c: New testcase.
 
16808
+
 
16809
+2014-02-09  Janus Weil  <janus@gcc.gnu.org>
 
16810
+
 
16811
+       Backport from mainline
 
16812
+       2013-10-21  Tobias Burnus  <burnus@net-b.de>
 
16813
+
 
16814
+       PR fortran/58803
 
16815
+       PR fortran/59395
 
16816
+       * gfortran.dg/proc_ptr_comp_38.f90: New.
 
16817
+
 
16818
+2014-02-08  Mikael Morin  <mikael@gcc.gnu.org>
 
16819
+
 
16820
+       PR fortran/57033
 
16821
+       * gfortran.dg/default_initialization_7.f90: New test.
 
16822
+
 
16823
+2014-02-07  Paul Thomas  <pault@gcc.gnu.org>
 
16824
+
 
16825
+       PR fortran/59906
 
16826
+       * gfortran.dg/elemental_subroutine_9.f90 : New test
 
16827
+
 
16828
+2014-02-04  Uros Bizjak  <ubizjak@gmail.com>
 
16829
+
 
16830
+       Backport from mainline
 
16831
+       2014-02-02  Uros Bizjak  <ubizjak@gmail.com>
 
16832
+
 
16833
+       PR target/60017
 
16834
+       * gcc.c-torture/execute/pr60017.c: New test.
 
16835
+
 
16836
+2014-02-01  Paul Thomas  <pault@gcc.gnu.org>
 
16837
+
 
16838
+       PR fortran/59414
 
16839
+       * gfortran.dg/allocate_class_3.f90 : New test
 
16840
+
 
16841
+2014-01-30  David Holsgrove <david.holsgrove@xilinx.com>
 
16842
+
 
16843
+       Backport from mainline.
 
16844
+       * gcc.target/microblaze/isa/fcmp4.c: New.
 
16845
+
 
16846
+2014-01-26  Mikael Morin  <mikael@gcc.gnu.org>
 
16847
+
 
16848
+       PR fortran/58007
 
16849
+       * gfortran.dg/unresolved_fixup_1.f90: New test.
 
16850
+       * gfortran.dg/unresolved_fixup_2.f90: New test.
 
16851
+
 
16852
+2014-01-24  H.J. Lu  <hongjiu.lu@intel.com>
 
16853
+
 
16854
+       Backport from mainline.
 
16855
+       2014-01-23  H.J. Lu  <hongjiu.lu@intel.com>
 
16856
+
 
16857
+       PR target/59929
 
16858
+       * gcc.target/i386/pr59929.c: New test.
 
16859
+
 
16860
+2014-01-24  Paolo Carlini  <paolo.carlini@oracle.com>
 
16861
+
 
16862
+       PR c++/57524
 
16863
+       * g++.dg/ext/timevar2.C: New.
 
16864
+
 
16865
+2014-01-23  David Holsgrove <david.holsgrove@xilinx.com>
 
16866
+
 
16867
+       Backport from mainline.
 
16868
+       * gcc.target/microblaze/others/builtin-trap.c: New test.
 
16869
+
 
16870
+2014-01-23  Marek Polacek  <polacek@redhat.com>
 
16871
+
 
16872
+       Backport from mainline
 
16873
+       2013-10-21  Marek Polacek  <polacek@redhat.com>
 
16874
+
 
16875
+       PR middle-end/58809
 
16876
+       * gcc.dg/gomp/pr58809.c: New test.
 
16877
+
 
16878
+2014-01-23  Jakub Jelinek  <jakub@redhat.com>
 
16879
+
 
16880
+       PR middle-end/58809
 
16881
+       * c-c++-common/gomp/pr58809.c: New test.
 
16882
+
 
16883
+2014-01-22  Marek Polacek  <polacek@redhat.com>
 
16884
+
 
16885
+       Backport from mainline
 
16886
+       2014-01-22  Marek Polacek  <polacek@redhat.com>
 
16887
+
 
16888
+       PR c/59891
 
16889
+       * gcc.dg/torture/pr59891.c: New test.
 
16890
+
 
16891
+2014-01-21  Jakub Jelinek  <jakub@redhat.com>
 
16892
+
 
16893
+       PR middle-end/59860
 
16894
+       * gcc.dg/strlenopt-4.c: Expect the same counts on s390*-* as on all
 
16895
+       other targets.
 
16896
+
 
16897
+2014-01-20  Richard Biener  <rguenther@suse.de>
 
16898
+
 
16899
+       PR middle-end/59860
 
16900
+       * gcc.dg/pr59860.c: New testcase.
 
16901
+
 
16902
+2014-01-20  Marek Polacek  <polacek@redhat.com>
 
16903
+
 
16904
+       Backported from mainline
 
16905
+       2014-01-17  Marek Polacek  <polacek@redhat.com>
 
16906
+
 
16907
+       PR c++/59838
 
16908
+       * g++.dg/diagnostic/pr59838.C: New test.
 
16909
+
 
16910
+2014-01-19  Paul Thomas  <pault@gcc.gnu.org>
 
16911
+
 
16912
+       Backport from mainline
 
16913
+       2013-12-01  Paul Thomas  <pault@gcc.gnu.org>
 
16914
+
 
16915
+       PR fortran/34547
 
16916
+       * gfortran.dg/null_5.f90 : Include new error.
 
16917
+       * gfortran.dg/null_6.f90 : Include new error.
 
16918
+
 
16919
+2014-01-17  H.J. Lu  <hongjiu.lu@intel.com>
 
16920
+
 
16921
+       Backport from mainline
 
16922
+       2014-01-15  H.J. Lu  <hongjiu.lu@intel.com>
 
16923
+
 
16924
+       PR target/59794
 
16925
+       * c-c++-common/convert-vec-1.c: Also prune ABI change for
 
16926
+       Linux/x86.
 
16927
+       * g++.dg/cpp0x/constexpr-53094-2.C: Likewise.
 
16928
+       * g++.dg/ext/attribute-test-1.C: Likewise.
 
16929
+       * g++.dg/ext/attribute-test-2.C: Likewise.
 
16930
+       * g++.dg/ext/attribute-test-3.C: Likewise.
 
16931
+       * g++.dg/ext/attribute-test-4.C: Likewise.
 
16932
+       * g++.dg/torture/pr38565.C: Likewise.
 
16933
+       * gcc.dg/pr53060.c: Likewise.
 
16934
+       * c-c++-common/scal-to-vec2.c: Add -msse2 for x86.
 
16935
+       * c-c++-common/vector-compare-2.c: Likewise.
 
16936
+       * gcc.dg/Wstrict-aliasing-bogus-ref-all-2.c: Likewise.
 
16937
+       * g++.dg/conversion/simd1.C: Add -msse2 for x86.  Adjust
 
16938
+       dg-message line number.
 
16939
+
 
16940
+2014-01-17  H.J. Lu  <hongjiu.lu@intel.com>
 
16941
+
 
16942
+       Backport from mainline
 
16943
+       2014-01-14  H.J. Lu  <hongjiu.lu@intel.com>
 
16944
+
 
16945
+       PR target/59794
 
16946
+       * gcc.target/i386/pr39162.c (y): New __m256i variable.
 
16947
+       (bar): Change return type to void.  Set y to x.
 
16948
+       * gcc.target/i386/pr59794-1.c: New testcase.
 
16949
+       * gcc.target/i386/pr59794-2.c: Likewise.
 
16950
+       * gcc.target/i386/pr59794-3.c: Likewise.
 
16951
+       * gcc.target/i386/pr59794-4.c: Likewise.
 
16952
+       * gcc.target/i386/pr59794-5.c: Likewise.
 
16953
+       * gcc.target/i386/pr59794-6.c: Likewise.
 
16954
+       * gcc.target/i386/pr59794-7.c: Likewise.
 
16955
+
 
16956
+2014-01-17  Matthias Klose  <doko@ubuntu.com>
 
16957
+
 
16958
+       Backport from the trunk:
 
16959
+       2014-01-09  Uros Bizjak  <ubizjak@gmail.com>
 
16960
+       * go.test/go-test.exp (go-gc-tests): Don't run peano.go on systems
 
16961
+       which don't support -fsplit-stack.  Skip rotate[0123].go tests.
 
16962
+
 
16963
+2014-01-15  Kugan Vivekanandarajah  <kuganv@linaro.org>
 
16964
+
 
16965
+       Backport from mainline
 
16966
+       2014-01-15  Matthew Gretton-Dann  <matthew.gretton-dann@linaro.org>
 
16967
+           Kugan Vivekanandarajah  <kuganv@linaro.org>
 
16968
+
 
16969
+       PR target/59695
 
16970
+       * g++.dg/pr59695.C: New testcase.
 
16971
+
 
16972
+2014-01-17  Terry Guo  <terry.guo@arm.com>
 
16973
+
 
16974
+       * gcc.target/arm/pr59826.c: New test.
 
16975
+
 
16976
+2014-01-16  Jakub Jelinek  <jakub@redhat.com>
 
16977
+
 
16978
+       PR target/59839
 
16979
+       * gcc.target/i386/pr59839.c: New test.
 
16980
+
 
16981
+       PR debug/54694
 
16982
+       * gcc.target/i386/pr9771-1.c (main): Rename to...
 
16983
+       (real_main): ... this.  Add __asm name "main".
 
16984
+       (ASMNAME, ASMNAME2, STRING): Define.
 
16985
+
 
16986
+2014-01-16  Marek Polacek  <polacek@redhat.com>
 
16987
+
 
16988
+       Backported from mainline
 
16989
+       2014-01-16  Marek Polacek  <polacek@redhat.com>
 
16990
+
 
16991
+       PR middle-end/59827
 
16992
+       * gcc.dg/pr59827.c: New test.
 
16993
+
 
16994
+2014-01-15  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
16995
+
 
16996
+       PR target/59803
 
16997
+       * gcc.c-torture/compile/pr59803.c: New testcase.
 
16998
+
 
16999
+2014-01-10  Yufeng Zhang  <yufeng.zhang@arm.com>
 
17000
+
 
17001
+       * gcc.target/arm/neon/vst1Q_laneu64-1.c: New test.
 
17002
+
 
17003
+2014-01-10  Hans-Peter Nilsson  <hp@axis.com>
 
17004
+
 
17005
+       * gcc.dg/pr46309.c: Disable for cris*-*-*.
 
17006
+
 
17007
+2014-01-10  Paolo Carlini  <paolo.carlini@oracle.com>
 
17008
+
 
17009
+       PR c++/56060
 
17010
+       PR c++/59730
 
17011
+       * g++.dg/cpp0x/variadic144.C: New.
 
17012
+       * g++.dg/cpp0x/variadic145.C: Likewise.
 
17013
+
 
17014
+2014-01-10  Richard Biener  <rguenther@suse.de>
 
17015
+
 
17016
+       PR tree-optimization/59715
 
17017
+       * gcc.dg/torture/pr59715.c: New testcase.
 
17018
+
 
17019
+2014-01-09  Richard Sandiford  <rdsandiford@googlemail.com>
 
17020
+
 
17021
+       * gcc.target/mips/bswap-1.c, gcc.target/mips/bswap-2.c,
 
17022
+       gcc.target/mips/bswap-3.c, gcc.target/mips/bswap-4.c,
 
17023
+       gcc.target/mips/bswap-5.c, gcc.target/mips/bswap-6.c: New tests.
 
17024
+
 
17025
+2014-01-09  Richard Sandiford  <rdsandiford@googlemail.com>
 
17026
+
 
17027
+       PR rtl-optimization/59137
 
17028
+       * gcc.target/mips/pr59137.c: New test.
 
17029
+
 
17030
+2014-01-09  Richard Biener  <rguenther@suse.de>
 
17031
+
 
17032
+       Backport from mainline
 
17033
+       2013-11-18  Richard Biener  <rguenther@suse.de>
 
17034
+
 
17035
+       PR tree-optimization/59125
 
17036
+       PR tree-optimization/54570
 
17037
+       * gcc.dg/builtin-object-size-8.c: Un-xfail.
 
17038
+       * gcc.dg/builtin-object-size-14.c: New testcase.
 
17039
+       * gcc.dg/strlenopt-14gf.c: Adjust.
 
17040
+       * gcc.dg/strlenopt-1f.c: Likewise.
 
17041
+       * gcc.dg/strlenopt-4gf.c: Likewise.
 
17042
+
 
17043
+       2013-12-03  Jakub Jelinek  <jakub@redhat.com>
 
17044
+
 
17045
+       PR tree-optimization/59362
 
17046
+       * gcc.c-torture/compile/pr59362.c: New test.
 
17047
+
 
17048
+2014-01-09  Richard Earnshaw  <rearnsha@arm.com>
 
17049
+
 
17050
+       PR rtl-optimization/54300
 
17051
+       * gcc.target/arm/pr54300.C: New test.
 
17052
+
 
17053
+2014-01-08  Martin Jambor  <mjambor@suse.cz>
 
17054
+
 
17055
+       PR ipa/59610
 
17056
+       * gcc.dg/ipa/pr59610.c: New test.
 
17057
+
 
17058
+2014-01-07  Jakub Jelinek  <jakub@redhat.com>
 
17059
+
 
17060
+       PR rtl-optimization/58668
 
17061
+       * gcc.dg/pr58668.c: New test.
 
17062
+
 
17063
+       Backported from mainline
 
17064
+       2013-12-16  Jakub Jelinek  <jakub@redhat.com>
 
17065
+
 
17066
+       PR middle-end/58956
 
17067
+       PR middle-end/59470
 
17068
+       * gcc.target/i386/pr59470.c: New test.
 
17069
+
 
17070
+2014-01-04  Janus Weil  <janus@gcc.gnu.org>
 
17071
+
 
17072
+       Backport from mainline
 
17073
+       2014-01-02  Janus Weil  <janus@gcc.gnu.org>
 
17074
+
 
17075
+       PR fortran/59654
 
17076
+       * gfortran.dg/dynamic_dispatch_12.f90: New.
 
17077
+
 
17078
+2014-01-03  Joseph Myers  <joseph@codesourcery.com>
 
17079
+
 
17080
+       * gcc.target/powerpc/rs6000-ldouble-3.c: New test.
 
17081
+
 
17082
+2014-01-03  Jakub Jelinek  <jakub@redhat.com>
 
17083
+
 
17084
+       PR target/59625
 
17085
+       * gcc.target/i386/pr59625.c: New test.
 
17086
+
 
17087
+2014-01-01  Jakub Jelinek  <jakub@redhat.com>
 
17088
+
 
17089
+       PR rtl-optimization/59647
 
17090
+       * g++.dg/opt/pr59647.C: New test.
 
17091
+
 
17092
+2013-12-31  Janus Weil  <janus@gcc.gnu.org>
 
17093
+
 
17094
+       Backport from mainline
 
17095
+       2013-12-30  Janus Weil  <janus@gcc.gnu.org>
 
17096
+
 
17097
+       PR fortran/58998
 
17098
+       * gfortran.dg/generic_28.f90: New.
 
17099
+
 
17100
+2013-12-20  Jakub Jelinek  <jakub@redhat.com>
 
17101
+
 
17102
+       PR c++/59255
 
17103
+       * g++.dg/tree-prof/pr59255.C: New test.
 
17104
+
 
17105
+2013-12-19  James Greenhalgh  <james.greenhalgh@arm.com>
 
17106
+
 
17107
+       Backport from Mainline
 
17108
+       2013-05-01  James Greenhalgh  <james.greenhalgh@arm.com>
 
17109
+
 
17110
+       * gcc.target/aarch64/scalar_intrinsics.c (force_simd): New.
 
17111
+       (test_vceqd_s64): Force arguments to SIMD registers.
 
17112
+       (test_vceqzd_s64): Likewise.
 
17113
+       (test_vcged_s64): Likewise.
 
17114
+       (test_vcled_s64): Likewise.
 
17115
+       (test_vcgezd_s64): Likewise.
 
17116
+       (test_vcged_u64): Likewise.
 
17117
+       (test_vcgtd_s64): Likewise.
 
17118
+       (test_vcltd_s64): Likewise.
 
17119
+       (test_vcgtzd_s64): Likewise.
 
17120
+       (test_vcgtd_u64): Likewise.
 
17121
+       (test_vclezd_s64): Likewise.
 
17122
+       (test_vcltzd_s64): Likewise.
 
17123
+       (test_vtst_s64): Likewise.
 
17124
+       (test_vtst_u64): Likewise.
 
17125
+
 
17126
+2013-12-19  Dominik Vogt  <vogt@linux.vnet.ibm.com>
 
17127
+           Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
17128
+
 
17129
+       Backport from mainline
 
17130
+       2013-12-19  Dominik Vogt  <vogt@linux.vnet.ibm.com>
 
17131
+       * gcc/testsuite/gcc.target/s390/hotpatch-1.c: New test
 
17132
+       * gcc/testsuite/gcc.target/s390/hotpatch-2.c: New test
 
17133
+       * gcc/testsuite/gcc.target/s390/hotpatch-3.c: New test
 
17134
+       * gcc/testsuite/gcc.target/s390/hotpatch-4.c: New test
 
17135
+       * gcc/testsuite/gcc.target/s390/hotpatch-5.c: New test
 
17136
+       * gcc/testsuite/gcc.target/s390/hotpatch-6.c: New test
 
17137
+       * gcc/testsuite/gcc.target/s390/hotpatch-7.c: New test
 
17138
+       * gcc/testsuite/gcc.target/s390/hotpatch-8.c: New test
 
17139
+       * gcc/testsuite/gcc.target/s390/hotpatch-9.c: New test
 
17140
+       * gcc/testsuite/gcc.target/s390/hotpatch-10.c: New test
 
17141
+       * gcc/testsuite/gcc.target/s390/hotpatch-11.c: New test
 
17142
+       * gcc/testsuite/gcc.target/s390/hotpatch-12.c: New test
 
17143
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-1.c: New test
 
17144
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-2.c: New test
 
17145
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-3.c: New test
 
17146
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-4.c: New test
 
17147
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-5.c: New test
 
17148
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-6.c: New test
 
17149
+       * gcc/testsuite/gcc.target/s390/hotpatch-compile-7.c: New test
 
17150
+
 
17151
+2013-12-18  Janus Weil  <janus@gcc.gnu.org>
 
17152
+
 
17153
+       Backport from mainline
 
17154
+       2013-12-15  Janus Weil  <janus@gcc.gnu.org>
 
17155
+
 
17156
+       PR fortran/59493
 
17157
+       * gfortran.dg/unlimited_polymorphic_15.f90: New.
 
17158
+
 
17159
+2013-12-15  Uros Bizjak  <ubizjak@gmail.com>
 
17160
+
 
17161
+       PR testsuite/58630
 
17162
+       * gcc.target/i386/pr43662.c (dg-options):
 
17163
+       Add -maccumulate-outgoing-args.
 
17164
+       * gcc.target/i386/pr43869.c (dg-options): Ditto.
 
17165
+       * gcc.target/i386/pr57003.c (dg-options): Ditto.
 
17166
+       * gcc.target/i386/avx-vzeroupper-16.c (dg-options):
 
17167
+       Remove -mtune=generic and add -maccumulate-outgoing-args instead.
 
17168
+       * gcc.target/i386/avx-vzeroupper-17.c (dg-options): Ditto.
 
17169
+       * gcc.target/i386/avx-vzeroupper-18.c (dg-options): Ditto.
 
17170
+       * gcc.target/x86_64/abi/callabi/func-1.c (dg-options):
 
17171
+       Add -maccumulate-outgoing-args.
 
17172
+       * gcc.target/x86_64/abi/callabi/func-2a.c (dg-options): Ditto.
 
17173
+       * gcc.target/x86_64/abi/callabi/func-2b.c (dg-options): Ditto.
 
17174
+       * gcc.target/x86_64/abi/callabi/func-indirect.c (dg-options): Ditto.
 
17175
+       * gcc.target/x86_64/abi/callabi/func-indirect-2a.c (dg-options): Ditto.
 
17176
+       * gcc.target/x86_64/abi/callabi/func-indirect-2b.c (dg-options): Ditto.
 
17177
+       * gcc.target/x86_64/abi/callabi/leaf-1.c (dg-options): Ditto.
 
17178
+       * gcc.target/x86_64/abi/callabi/leaf-2.c (dg-options): Ditto.
 
17179
+       * gcc.target/x86_64/abi/callabi/pr38891.c (dg-options): Ditto.
 
17180
+       * gcc.target/x86_64/abi/callabi/vaarg-1.c (dg-options): Ditto.
 
17181
+       * gcc.target/x86_64/abi/callabi/vaarg-2.c (dg-options): Ditto.
 
17182
+       * gcc.target/x86_64/abi/callabi/vaarg-3.c (dg-options): Ditto.
 
17183
+       * gcc.target/x86_64/abi/callabi/vaarg-4a.c (dg-options): Ditto.
 
17184
+       * gcc.target/x86_64/abi/callabi/vaarg-4b.c (dg-options): Ditto.
 
17185
+       * gcc.target/x86_64/abi/callabi/vaarg-5a.c (dg-options): Ditto.
 
17186
+       * gcc.target/x86_64/abi/callabi/vaarg-5b.c (dg-options): Ditto.
 
17187
+
 
17188
+2013-12-12  Jakub Jelinek  <jakub@redhat.com>
 
17189
+
 
17190
+       PR middle-end/59470
 
17191
+       * g++.dg/opt/pr59470.C: New test.
 
17192
+
 
17193
+       PR libgomp/59467
 
17194
+       * gfortran.dg/gomp/pr59467.f90: New test.
 
17195
+       * c-c++-common/gomp/pr59467.c: New test.
 
17196
+
 
17197
+2013-12-12  Uros Bizjak  <ubizjak@gmail.com>
 
17198
+
 
17199
+       Backport from mainline
 
17200
+       2013-12-12  Ryan Mansfield  <rmansfield@qnx.com>
 
17201
+
 
17202
+       PR testsuite/59442
 
17203
+       * gcc.target/i386/sse2-movapd-1.c: Fix alignment attributes.
 
17204
+       * gcc.target/i386/sse2-movapd-2.c: Likewise.
 
17205
+       * gcc.target/i386/avx-vmovapd-256-1.c: Likewise.
 
17206
+       * gcc.target/i386/avx-vmovapd-256-2.c: Likewise.
 
17207
+
 
17208
+2013-12-08  Uros Bizjak  <ubizjak@gmail.com>
 
17209
+
 
17210
+       Backport from mainline
 
17211
+       2013-12-06  Uros Bizjak  <ubizjak@gmail.com>
 
17212
+
 
17213
+       PR target/59405
 
17214
+       * gcc.target/i386/pr59405.c: New test.
 
17215
+
 
17216
+2013-12-06  Jakub Jelinek  <jakub@redhat.com>
 
17217
+
 
17218
+       PR tree-optimization/59388
 
17219
+       * gcc.c-torture/execute/pr59388.c: New test.
 
17220
+
 
17221
+2013-12-06  Richard Biener  <rguenther@suse.de>
 
17222
+
 
17223
+       Backport from mainline
 
17224
+       2013-11-28  Richard Biener  <rguenther@suse.de>
 
17225
+
 
17226
+       PR tree-optimization/59330
 
17227
+       * gcc.dg/torture/pr59330.c: New testcase.
 
17228
+
 
17229
+2013-12-06  Richard Biener  <rguenther@suse.de>
 
17230
+
 
17231
+       Backport from mainline
 
17232
+       2013-11-27  Richard Biener  <rguenther@suse.de>
 
17233
+
 
17234
+       PR tree-optimization/59288
 
17235
+       * gcc.dg/torture/pr59288.c: New testcase.
 
17236
+
 
17237
+       2013-11-19  Richard Biener  <rguenther@suse.de>
 
17238
+
 
17239
+       PR tree-optimization/59164
 
17240
+       * gcc.dg/torture/pr59164.c: New testcase.
 
17241
+
 
17242
+       2013-09-05  Richard Biener  <rguenther@suse.de>
 
17243
+
 
17244
+       PR tree-optimization/58137
 
17245
+       * gcc.target/i386/pr58137.c: New testcase.
 
17246
+
 
17247
+2013-12-06  Oleg Endo  <olegendo@gcc.gnu.org>
 
17248
+
 
17249
+       PR target/51244
 
17250
+       PR target/59343
 
17251
+       * gcc.target/sh/pr51244-19.c: Adjust test case.
 
17252
+
 
17253
+2013-12-05  Richard Biener  <rguenther@suse.de>
 
17254
+
 
17255
+       Backport from mainline
 
17256
+       2013-11-19  Richard Biener  <rguenther@suse.de>
 
17257
+
 
17258
+       PR middle-end/58956
 
17259
+       * gcc.dg/torture/pr58956.c: New testcase.
 
17260
+
 
17261
+2013-12-04  Jakub Jelinek  <jakub@redhat.com>
 
17262
+
 
17263
+       PR c++/59268
 
17264
+       * g++.dg/cpp0x/constexpr-template6.C: New test.
 
17265
+
 
17266
+       PR rtl-optimization/58726
 
17267
+       * gcc.c-torture/execute/pr58726.c: New test.
 
17268
+
 
17269
+       PR target/59163
 
17270
+       * g++.dg/torture/pr59163.C: New test.
 
17271
+
 
17272
+2013-12-03  Marek Polacek  <polacek@redhat.com>
 
17273
+
 
17274
+       Backport from mainline
 
17275
+       2013-12-03  Marek Polacek  <polacek@redhat.com>
 
17276
+
 
17277
+       PR c/59351
 
17278
+       * gcc.dg/pr59351.c: New test.
 
17279
+
 
17280
+2013-12-03  Jakub Jelinek  <jakub@redhat.com>
 
17281
+
 
17282
+       PR middle-end/59011
 
17283
+       * gcc.dg/pr59011.c: New test.
 
17284
+
 
17285
+       PR target/58864
 
17286
+       * g++.dg/opt/pr58864.C: New test.
 
17287
+
 
17288
+2013-12-02  Jakub Jelinek  <jakub@redhat.com>
 
17289
+
 
17290
+       PR tree-optimization/59358
 
17291
+       * gcc.c-torture/execute/pr59358.c: New test.
 
17292
+
 
17293
+2013-12-02  Richard Biener  <rguenther@suse.de>
 
17294
+
 
17295
+       PR tree-optimization/59139
 
17296
+       * gcc.dg/torture/pr59139.c: New testcase.
 
17297
+
 
17298
+2013-11-27  Tom de Vries  <tom@codesourcery.com>
 
17299
+           Marc Glisse  <marc.glisse@inria.fr>
 
17300
+
 
17301
+       PR c++/59032
 
17302
+       * c-c++-common/pr59032.c: New testcase.
 
17303
+
 
17304
+2013-11-27  Tom de Vries  <tom@codesourcery.com>
 
17305
+           Marc Glisse  <marc.glisse@inria.fr>
 
17306
+
 
17307
+       PR middle-end/59037
 
17308
+       * c-c++-common/pr59037.c: New testcase.
 
17309
+
 
17310
+2013-11-30  Paul Thomas  <pault@gcc.gnu.org>
 
17311
+
 
17312
+       Backport from mainline
 
17313
+       2013-11-04  Paul Thomas  <pault@gcc.gnu.org>
 
17314
+
 
17315
+       PR fortran/57445
 
17316
+       * gfortran.dg/optional_class_1.f90 : New test
 
17317
+
 
17318
+2013-11-29  Jakub Jelinek  <jakub@redhat.com>
 
17319
+
 
17320
+       PR c/59280
 
17321
+       * c-c++-common/pr59280.c: New test.
 
17322
+
 
17323
+2013-11-28  Jakub Jelinek  <jakub@redhat.com>
 
17324
+
 
17325
+       PR c++/59297
 
17326
+       * g++.dg/gomp/pr59297.C: New test.
 
17327
+
 
17328
+2013-11-28  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
17329
+
 
17330
+       Backport from mainline
 
17331
+       2013-11-28  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
17332
+
 
17333
+       * gcc.target/arm/vrinta-ce.c: New testcase.
 
17334
+
 
17335
+2013-11-28  Uros Bizjak  <ubizjak@gmail.com>
 
17336
+
 
17337
+       Backport from mainline
 
17338
+       2013-11-23  Uros Bizjak  <ubizjak@gmail.com>
 
17339
+
 
17340
+       PR target/56788
 
17341
+       * config/i386/i386.c (bdesc_multi_arg) <IX86_BUILTIN_VFRCZSS>:
 
17342
+       Declare as MULTI_ARG_1_SF instruction.
 
17343
+       <IX86_BUILTIN_VFRCZSD>: Decleare as MULTI_ARG_1_DF instruction.
 
17344
+       * config/i386/sse.md (*xop_vmfrcz<mode>2): Rename
 
17345
+       from *xop_vmfrcz_<mode>.
 
17346
+       * config/i386/xopintrin.h (_mm_frcz_ss): Use __builtin_ia32_movss
 
17347
+       to merge scalar result with __A.
 
17348
+       (_mm_frcz_sd): Use __builtin_ia32_movsd to merge scalar
 
17349
+       result with __A.
 
17350
+
 
17351
+2013-11-28  Terry Guo  <terry.guo@arm.com>
 
17352
+
 
17353
+       Backport mainline r205391
 
17354
+       2013-11-26  Terry Guo  <terry.guo@arm.com>
 
17355
+
 
17356
+       * gcc.target/arm/thumb1-pic-high-reg.c: New case.
 
17357
+       * gcc.target/arm/thumb1-pic-single-base.c: New case.
 
17358
+
 
17359
+2013-11-27  Jakub Jelinek  <jakub@redhat.com>
 
17360
+
 
17361
+       Backported from mainline
 
17362
+       2013-11-27  Jakub Jelinek  <jakub@redhat.com>
 
17363
+
 
17364
+       PR tree-optimization/59014
 
17365
+       * gcc.c-torture/execute/pr59014-2.c: New test.
 
17366
+
 
17367
+       2013-11-26  Jakub Jelinek  <jakub@redhat.com>
 
17368
+
 
17369
+       PR tree-optimization/59014
 
17370
+       * gcc.c-torture/execute/pr59014.c: New test.
 
17371
+
 
17372
+2013-11-27  Eric Botcazou  <ebotcazou@adacore.com>
 
17373
+
 
17374
+       * gcc.c-torture/execute/20131127-1.c: New test.
 
17375
+
 
17376
+2013-11-25  Vidya Praveen  <vidyapraveen@arm.com>
 
17377
+
 
17378
+       Backport from mainline
 
17379
+       2013-10-21  Vidya Praveen  <vidyapraveen@arm.com>
 
17380
+
 
17381
+       * gcc.dg/20050922-1.c: Remove stdlib.h and declare abort().
 
17382
+       * gcc.dg/20050922-1.c: Remove stdlib.h and declare abort() and exit().
 
17383
+
 
17384
+2013-11-20  Dominik Vogt  <vogt@linux.vnet.ibm.com>
 
17385
+
 
17386
+       Backport from mainline
 
17387
+       * gcc.target/s390/htm-1.c: Rename to ...
 
17388
+       * gcc/testsuite/gcc.target/s390/htm-builtins-compile-1.c: ... this
 
17389
+       one.
 
17390
+       * gcc.target/s390/htm-xl-intrin-1.c: Rename to ...
 
17391
+       * gcc.target/s390/htm-builtins-compile-3.c: ... this one.
 
17392
+       * gcc.target/s390/htm-builtins-compile-2.c: New testcase.
 
17393
+       * gcc.target/s390/htm-builtins-1.c: New testcase.
 
17394
+       * gcc.target/s390/htm-builtins-2.c: New testcase.
 
17395
+       * gcc.target/s390/s390.exp: Add check for htm machine.
 
17396
+
 
17397
+2013-11-19  Richard Biener  <rguenther@suse.de>
 
17398
+
 
17399
+       PR tree-optimization/57517
 
17400
+       * gfortran.fortran-torture/compile/pr57517.f90: New testcase.
 
17401
+       * gcc.dg/torture/pr57517.c: Likewise.
 
17402
+
 
17403
+2013-11-19  Richard Biener  <rguenther@suse.de>
 
17404
+
 
17405
+       Backport from mainline
 
17406
+       2013-11-05  Richard Biener  <rguenther@suse.de>
 
17407
+
 
17408
+       PR middle-end/58941
 
17409
+       * gcc.dg/torture/pr58941.c: New testcase.
 
17410
+
 
17411
+2013-11-18  Richard Biener  <rguenther@suse.de>
 
17412
+
 
17413
+       Backport from mainline
 
17414
+       2013-10-21  Richard Biener  <rguenther@suse.de>
 
17415
+
 
17416
+       PR tree-optimization/58794
 
17417
+       * c-c++-common/torture/pr58794-1.c: New testcase.
 
17418
+       * c-c++-common/torture/pr58794-2.c: Likewise.
 
17419
+
 
17420
+       2013-10-21  Richard Biener  <rguenther@suse.de>
 
17421
+
 
17422
+       PR middle-end/58742
 
17423
+       * c-c++-common/fold-divmul-1.c: New testcase.
 
17424
+
 
17425
+       2013-11-06  Richard Biener  <rguenther@suse.de>
 
17426
+
 
17427
+       PR tree-optimization/58653
 
17428
+       * gcc.dg/tree-ssa/predcom-6.c: New testcase.
 
17429
+       * gcc.dg/tree-ssa/predcom-7.c: Likewise.
 
17430
+
 
17431
+       PR tree-optimization/59047
 
17432
+       * gcc.dg/torture/pr59047.c: New testcase.
 
17433
+
 
17434
+       2013-10-15  Richard Biener  <rguenther@suse.de>
 
17435
+
 
17436
+       PR tree-optimization/58143
 
17437
+       * gcc.dg/torture/pr58143-1.c: New testcase.
 
17438
+       * gcc.dg/torture/pr58143-2.c: Likewise.
 
17439
+       * gcc.dg/torture/pr58143-3.c: Likewise.
 
17440
+
 
17441
+2013-11-17  Janus Weil  <janus@gcc.gnu.org>
 
17442
+
 
17443
+       Backport from mainline
 
17444
+       2013-11-07  Janus Weil  <janus@gcc.gnu.org>
 
17445
+
 
17446
+       PR fortran/58471
 
17447
+       * gfortran.dg/constructor_9.f90: New.
 
17448
+
 
17449
+2013-11-16  Janus Weil  <janus@gcc.gnu.org>
 
17450
+
 
17451
+       Backport from mainline
 
17452
+       2013-09-20  Janus Weil  <janus@gcc.gnu.org>
 
17453
+
 
17454
+       PR fortran/58099
 
17455
+       * gfortran.dg/proc_ptr_43.f90: New.
 
17456
+
 
17457
+2013-11-16  Paul Thomas  <pault@gcc.gnu.org>
 
17458
+
 
17459
+       PR fortran/58771
 
17460
+       * gfortran.dg/derived_external_function_1.f90 : New test
 
17461
+
 
17462
+2013-11-14  Uros Bizjak  <ubizjak@gmail.com>
 
17463
+
 
17464
+       Backport from mainline
 
17465
+       2013-11-06  Uros Bizjak  <ubizjak@gmail.com>
 
17466
+
 
17467
+       PR target/59021
 
17468
+       * gcc.target/i386/pr59021.c: New test.
 
17469
+
 
17470
+2013-11-14  Jakub Jelinek  <jakub@redhat.com>
 
17471
+
 
17472
+       PR target/59101
 
17473
+       * gcc.c-torture/execute/pr59101.c: New test.
 
17474
+
 
17475
+2013-11-11  Jakub Jelinek  <jakub@redhat.com>
 
17476
+
 
17477
+       Backported from mainline
 
17478
+       2013-11-06  Jakub Jelinek  <jakub@redhat.com>
 
17479
+
 
17480
+       PR middle-end/58970
 
17481
+       * gcc.c-torture/compile/pr58970-1.c: New test.
 
17482
+       * gcc.c-torture/compile/pr58970-2.c: New test.
 
17483
+
 
17484
+       2013-11-05  Jakub Jelinek  <jakub@redhat.com>
 
17485
+
 
17486
+       PR rtl-optimization/58997
 
17487
+       * gcc.c-torture/compile/pr58997.c: New test.
 
17488
+
 
17489
+2013-11-10  Wei Mi  <wmi@google.com>
 
17490
+
 
17491
+       * gcc.dg/pr57518.c: Backport regex fix from r200720.
 
17492
+
 
17493
+2013-11-07  H.J. Lu  <hongjiu.lu@intel.com>
 
17494
+
 
17495
+       Backport from mainline
 
17496
+       2013-11-07  H.J. Lu  <hongjiu.lu@intel.com>
 
17497
+
 
17498
+       PR target/59034
 
17499
+       * gcc.target/i386/pr59034-1.c: New test.
 
17500
+       * gcc.target/i386/pr59034-2.c: Likewise.
 
17501
+
 
17502
+2013-11-06  Wei Mi  <wmi@google.com>
 
17503
+
 
17504
+       PR regression/58985
 
17505
+       * gcc.dg/pr57518.c: Add subreg in regexp pattern.
 
17506
+
 
17507
+2013-11-05  Steven G. Kargl <kargl@gcc.gnu.org>
 
17508
+
 
17509
+       PR fortran/58989
 
17510
+       * gfortran.dg/reshape_6.f90: New test.
 
17511
+
 
17512
+2013-11-05  Jakub Jelinek  <jakub@redhat.com>
 
17513
+
 
17514
+       PR tree-optimization/58984
 
17515
+       * gcc.c-torture/execute/pr58984.c: New test.
 
17516
+
 
17517
+2013-11-04  Marek Polacek  <polacek@redhat.com>
 
17518
+
 
17519
+       Backport from mainline
 
17520
+       2013-11-04  Marek Polacek  <polacek@redhat.com>
 
17521
+
 
17522
+       PR c++/58979
 
17523
+       * g++.dg/diagnostic/pr58979.C: New test.
 
17524
+
 
17525
+2013-11-03  H.J. Lu  <hongjiu.lu@intel.com>
 
17526
+
 
17527
+       Backport from mainline
 
17528
+       2013-10-12  H.J. Lu  <hongjiu.lu@intel.com>
 
17529
+
 
17530
+       PR target/58690
 
17531
+       * gcc.target/i386/pr58690.c: New test
 
17532
+
 
17533
+2013-11-02  Janus Weil  <janus@gcc.gnu.org>
 
17534
+
 
17535
+       Backport from mainline
 
17536
+       2013-09-23  Janus Weil  <janus@gcc.gnu.org>
 
17537
+
 
17538
+       PR fortran/58355
 
17539
+       * gfortran.dg/extends_15.f90: New.
 
17540
+
 
17541
+2013-10-29  Uros Bizjak  <ubizjak@gmail.com>
 
17542
+
 
17543
+       Backport from mainline
 
17544
+       2013-08-08  Richard Sandiford  <rdsandiford@googlemail.com>
 
17545
+
 
17546
+       PR rtl-optimization/58079
 
17547
+       * gcc.dg/torture/pr58079.c: New test.
 
17548
+
 
17549
+2013-10-28  Tom de Vries  <tom@codesourcery.com>
 
17550
+
 
17551
+       * gcc.target/arm/require-pic-register-loc.c: New test.
 
17552
+
 
17553
+2013-10-26  Uros Bizjak  <ubizjak@gmail.com>
 
17554
+
 
17555
+       Backport from mainline
 
17556
+       2013-10-22  Uros Bizjak  <ubizjak@gmail.com>
 
17557
+
 
17558
+       PR target/58779
 
17559
+       * gcc.target/i386/pr30315.c: Remove MINUSCC, DECCC, MINUSCCONLY
 
17560
+       and MINUSCCZEXT defines. Update scan-assembler dg directive.
 
17561
+       * gcc.dg/torture/pr58779.c: New test.
 
17562
+
 
17563
+2013-10-25  Richard Henderson  <rth@redhat.com>
 
17564
+
 
17565
+       PR rtl/58542
 
17566
+       * gcc.dg/atomic-store-6.c: New.
 
17567
+
 
17568
+2013-10-25  Tom de Vries  <tom@codesourcery.com>
 
17569
+
 
17570
+       PR c++/58282
 
17571
+       * g++.dg/tm/noexcept-6.C: New test.
 
17572
+
 
17573
+2013-10-25  Eric Botcazou  <ebotcazou@adacore.com>
 
17574
+
 
17575
+       * gcc.c-torture/execute/pr58831.c: New test.
 
17576
+
 
17577
+2013-10-23  Tom de Vries  <tom@codesourcery.com>
 
17578
+
 
17579
+       PR tree-optimization/58805
 
17580
+       * gcc.dg/pr58805.c: New test.
 
17581
+
 
17582
+2013-10-23  Richard Biener  <rguenther@suse.de>
 
17583
+
 
17584
+       * gcc.dg/torture/pr58830.c: New testcase.
 
17585
+
 
17586
+       Backport from mainline
 
17587
+       2013-06-24  Richard Biener  <rguenther@suse.de>
 
17588
+
 
17589
+       PR tree-optimization/57488
 
17590
+       * gcc.dg/torture/pr57488.c: New testcase.
 
17591
+
 
17592
+2013-10-19  Oleg Endo  <olegendo@gcc.gnu.org>
 
17593
+
 
17594
+       * gcc.target/sh/pr54089-3.c: Fix test for load of constant 31.
 
17595
+
 
17596
+2013-10-17  Paolo Carlini  <paolo.carlini@oracle.com>
 
17597
+
 
17598
+       PR c++/58596
 
17599
+       * g++.dg/cpp0x/lambda/lambda-nsdmi5.C: New
 
17600
+
 
17601
+2013-10-16  Paolo Carlini  <paolo.carlini@oracle.com>
 
17602
+
 
17603
+       PR c++/58633
 
17604
+       * g++.dg/cpp0x/decltype57.C: New.
 
17605
+       * g++.dg/cpp0x/enum18.C: Revert r174385 changes.
 
17606
+
 
17607
 2013-10-16  Release Manager
 
17608
 
 
17609
        * GCC 4.8.2 released.
 
17610
@@ -39,9 +1072,9 @@
 
17611
        Backport from mainline
 
17612
        2013-06-27  Andreas Krebbel  <Andreas.Krebbel@de.ibm.com>
 
17613
 
 
17614
-        * gcc.target/s390/htm-1.c: New file.
 
17615
-        * gcc.target/s390/htm-nofloat-1.c: New file.
 
17616
-        * gcc.target/s390/htm-xl-intrin-1.c: New file.
 
17617
+       * gcc.target/s390/htm-1.c: New file.
 
17618
+       * gcc.target/s390/htm-nofloat-1.c: New file.
 
17619
+       * gcc.target/s390/htm-xl-intrin-1.c: New file.
 
17620
 
 
17621
 2013-10-04  Tobias Burnus  <burnus@net-b.de>
 
17622
 
 
17623
@@ -307,8 +1340,8 @@
 
17624
        Backport from mainline
 
17625
        2013-08-12  Perez Read  <netfirewall@gmail.com>
 
17626
 
 
17627
-        PR target/58132
 
17628
-        * gcc.target/i386/movabs-1.c: New test.
 
17629
+       PR target/58132
 
17630
+       * gcc.target/i386/movabs-1.c: New test.
 
17631
 
 
17632
 2013-08-11  Janus Weil  <janus@gcc.gnu.org>
 
17633
 
 
17634
@@ -494,7 +1527,7 @@
 
17635
        2013-06-19  Wei Mi  <wmi@google.com>
 
17636
 
 
17637
        PR rtl-optimization/57518
 
17638
-       * testsuite/gcc.dg/pr57518.c: New test.
 
17639
+       * gcc.dg/pr57518.c: New test.
 
17640
 
 
17641
 2013-06-11  Tobias Burnus  <burnus@net-b.de>
 
17642
 
 
17643
@@ -623,8 +1656,8 @@
 
17644
 
 
17645
 2013-05-09  Martin Jambor  <mjambor@suse.cz>
 
17646
 
 
17647
-        PR middle-end/56988
 
17648
-        * gcc.dg/ipa/pr56988.c: New test.
 
17649
+       PR middle-end/56988
 
17650
+       * gcc.dg/ipa/pr56988.c: New test.
 
17651
 
 
17652
 2013-05-08  Marc Glisse  <marc.glisse@inria.fr>
 
17653
 
 
17654
@@ -701,7 +1734,7 @@
 
17655
        2013-04-25  Marek Polacek  <polacek@redhat.com>
 
17656
 
 
17657
        PR tree-optimization/57066
 
17658
-        * gcc.dg/torture/builtin-logb-1.c: Adjust testcase.
 
17659
+       * gcc.dg/torture/builtin-logb-1.c: Adjust testcase.
 
17660
 
 
17661
 2013-05-02  Jakub Jelinek  <jakub@redhat.com>
 
17662
 
 
17663
@@ -727,8 +1760,8 @@
 
17664
        Backport from mainline
 
17665
        2013-04-24  Vladimir Makarov  <vmakarov@redhat.com>
 
17666
 
 
17667
-        PR rtl-optimizations/57046
 
17668
-        * gcc.target/i386/pr57046.c: New test.
 
17669
+       PR rtl-optimizations/57046
 
17670
+       * gcc.target/i386/pr57046.c: New test.
 
17671
 
 
17672
 2013-05-02  Vladimir Makarov  <vmakarov@redhat.com>
 
17673
 
 
17674
@@ -735,8 +1768,8 @@
 
17675
        Backport from mainline
 
17676
        2013-04-22  Vladimir Makarov  <vmakarov@redhat.com>
 
17677
 
 
17678
-        PR target/57018
 
17679
-        * gcc.target/i386/pr57018.c: New test.
 
17680
+       PR target/57018
 
17681
+       * gcc.target/i386/pr57018.c: New test.
 
17682
 
 
17683
 2013-05-02  Vladimir Makarov  <vmakarov@redhat.com>
 
17684
 
 
17685
@@ -743,8 +1776,8 @@
 
17686
        Backport from mainline
 
17687
        2013-04-18  Jakub Jelinek  <jakub@redhat.com>
 
17688
 
 
17689
-        PR rtl-optimization/56999
 
17690
-        * g++.dg/opt/pr56999.C: New test.
 
17691
+       PR rtl-optimization/56999
 
17692
+       * g++.dg/opt/pr56999.C: New test.
 
17693
 
 
17694
 2013-05-02  Vladimir Makarov  <vmakarov@redhat.com>
 
17695
 
 
17696
@@ -751,8 +1784,8 @@
 
17697
        Backport from mainline
 
17698
        2013-04-19  Vladimir Makarov  <vmakarov@redhat.com>
 
17699
 
 
17700
-        PR rtl-optimization/56847
 
17701
-        * gcc.dg/pr56847.c: New test.
 
17702
+       PR rtl-optimization/56847
 
17703
+       * gcc.dg/pr56847.c: New test.
 
17704
 
 
17705
 2013-05-02  Ian Bolton  <ian.bolton@arm.com>
 
17706
 
 
17707
@@ -1102,7 +2135,7 @@
 
17708
        2013-03-29  Tobias Burnus  <burnus@net-b.de>
 
17709
 
 
17710
        PR fortran/56737
 
17711
-       * testsuite/gfortran.dg/fmt_cache_3.f90: New.
 
17712
+       * gfortran.dg/fmt_cache_3.f90: New.
 
17713
 
 
17714
 2013-04-02  Richard Biener  <rguenther@suse.de>
 
17715
 
 
17716
@@ -1636,7 +2669,7 @@
 
17717
 2013-02-20  Jan Hubicka  <jh@suse.cz>
 
17718
 
 
17719
        PR tree-optimization/56265
 
17720
-       * testsuite/g++.dg/ipa/devirt-11.C: New testcase.
 
17721
+       * g++.dg/ipa/devirt-11.C: New testcase.
 
17722
 
 
17723
 2013-02-20  Richard Biener  <rguenther@suse.de>
 
17724
 
 
17725
@@ -1823,11 +2856,9 @@
 
17726
 
 
17727
        Avoid instrumenting duplicated memory access in the same basic block
 
17728
        * c-c++-common/asan/no-redundant-instrumentation-1.c: New test.
 
17729
-       * testsuite/c-c++-common/asan/no-redundant-instrumentation-2.c:
 
17730
-       Likewise.
 
17731
-       * testsuite/c-c++-common/asan/no-redundant-instrumentation-3.c:
 
17732
-       Likewise.
 
17733
-       * testsuite/c-c++-common/asan/inc.c: Likewise.
 
17734
+       * c-c++-common/asan/no-redundant-instrumentation-2.c: Likewise.
 
17735
+       * c-c++-common/asan/no-redundant-instrumentation-3.c: Likewise.
 
17736
+       * c-c++-common/asan/inc.c: Likewise.
 
17737
 
 
17738
 2013-02-12  Vladimir Makarov  <vmakarov@redhat.com>
 
17739
 
 
17740
Index: gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90
 
17741
===================================================================
 
17742
--- a/src/gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90    (.../tags/gcc_4_8_2_release)
 
17743
+++ b/src/gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90    (.../branches/gcc-4_8-branch)
 
17744
@@ -0,0 +1,13 @@
 
17745
+SUBROUTINE cal_helicity (uh, ph, phb, wavg, ims, ime, its, ite)
 
17746
+  INTEGER, INTENT( IN ) :: ims, ime, its, ite
 
17747
+  REAL, DIMENSION( ims:ime), INTENT( IN ) :: ph, phb, wavg
 
17748
+  REAL, DIMENSION( ims:ime), INTENT( INOUT ) :: uh
 
17749
+  INTEGER :: i
 
17750
+  REAL :: zu
 
17751
+  DO i = its, ite
 
17752
+    zu =  (ph(i ) + phb(i)) + (ph(i-1) + phb(i-1))
 
17753
+    IF (wavg(i) .GT. 0) THEN
 
17754
+      uh(i) = uh(i) + zu 
 
17755
+    ENDIF
 
17756
+  END DO
 
17757
+END SUBROUTINE cal_helicity
 
17758
Index: gcc/testsuite/g++.dg/ext/attribute-test-2.C
 
17759
===================================================================
 
17760
--- a/src/gcc/testsuite/g++.dg/ext/attribute-test-2.C   (.../tags/gcc_4_8_2_release)
 
17761
+++ b/src/gcc/testsuite/g++.dg/ext/attribute-test-2.C   (.../branches/gcc-4_8-branch)
 
17762
@@ -50,3 +50,4 @@
 
17763
 
 
17764
 /* Ignore a warning that is irrelevant to the purpose of this test.  */
 
17765
 /* { dg-prune-output ".*GCC vector returned by reference.*" } */
 
17766
+/* { dg-prune-output "changes the ABI" } */
 
17767
Index: gcc/testsuite/g++.dg/ext/attribute-test-3.C
 
17768
===================================================================
 
17769
--- a/src/gcc/testsuite/g++.dg/ext/attribute-test-3.C   (.../tags/gcc_4_8_2_release)
 
17770
+++ b/src/gcc/testsuite/g++.dg/ext/attribute-test-3.C   (.../branches/gcc-4_8-branch)
 
17771
@@ -52,3 +52,4 @@
 
17772
 
 
17773
 /* Ignore a warning that is irrelevant to the purpose of this test.  */
 
17774
 /* { dg-prune-output ".*GCC vector returned by reference.*" } */
 
17775
+/* { dg-prune-output "changes the ABI" } */
 
17776
Index: gcc/testsuite/g++.dg/ext/traits1.C
 
17777
===================================================================
 
17778
--- a/src/gcc/testsuite/g++.dg/ext/traits1.C    (.../tags/gcc_4_8_2_release)
 
17779
+++ b/src/gcc/testsuite/g++.dg/ext/traits1.C    (.../branches/gcc-4_8-branch)
 
17780
@@ -0,0 +1,4 @@
 
17781
+// PR c++/58504
 
17782
+
 
17783
+template<bool = __has_nothrow_assign(void)> struct A {};
 
17784
+A<> a;
 
17785
Index: gcc/testsuite/g++.dg/ext/attribute-test-4.C
 
17786
===================================================================
 
17787
--- a/src/gcc/testsuite/g++.dg/ext/attribute-test-4.C   (.../tags/gcc_4_8_2_release)
 
17788
+++ b/src/gcc/testsuite/g++.dg/ext/attribute-test-4.C   (.../branches/gcc-4_8-branch)
 
17789
@@ -49,3 +49,4 @@
 
17790
 
 
17791
 /* Ignore a warning that is irrelevant to the purpose of this test.  */
 
17792
 /* { dg-prune-output ".*GCC vector returned by reference.*" } */
 
17793
+/* { dg-prune-output "changes the ABI" } */
 
17794
Index: gcc/testsuite/g++.dg/ext/stmtexpr15.C
 
17795
===================================================================
 
17796
--- a/src/gcc/testsuite/g++.dg/ext/stmtexpr15.C (.../tags/gcc_4_8_2_release)
 
17797
+++ b/src/gcc/testsuite/g++.dg/ext/stmtexpr15.C (.../branches/gcc-4_8-branch)
 
17798
@@ -0,0 +1,7 @@
 
17799
+// PR c++/59097
 
17800
+// { dg-options "" }
 
17801
+
 
17802
+void foo()
 
17803
+{
 
17804
+  int x[({ return; })];                // { dg-error "non-integral" }
 
17805
+}
 
17806
Index: gcc/testsuite/g++.dg/ext/vector25.C
 
17807
===================================================================
 
17808
--- a/src/gcc/testsuite/g++.dg/ext/vector25.C   (.../tags/gcc_4_8_2_release)
 
17809
+++ b/src/gcc/testsuite/g++.dg/ext/vector25.C   (.../branches/gcc-4_8-branch)
 
17810
@@ -0,0 +1,6 @@
 
17811
+volatile int i __attribute__((vector_size(8)));
 
17812
+
 
17813
+void foo()
 
17814
+{
 
17815
+  i += i;
 
17816
+}
 
17817
Index: gcc/testsuite/g++.dg/ext/builtin-bswap1.C
 
17818
===================================================================
 
17819
--- a/src/gcc/testsuite/g++.dg/ext/builtin-bswap1.C     (.../tags/gcc_4_8_2_release)
 
17820
+++ b/src/gcc/testsuite/g++.dg/ext/builtin-bswap1.C     (.../branches/gcc-4_8-branch)
 
17821
@@ -0,0 +1,22 @@
 
17822
+// PR c/37743
 
17823
+// { dg-do compile }
 
17824
+
 
17825
+#if defined(__UINT32_TYPE__) && defined(__INT32_TYPE__)
 
17826
+
 
17827
+void foo (__UINT32_TYPE__);
 
17828
+void foo (__INT32_TYPE__);
 
17829
+
 
17830
+void
 
17831
+bar (__UINT32_TYPE__ x)
 
17832
+{
 
17833
+  foo (__builtin_bswap32 (x));
 
17834
+}
 
17835
+
 
17836
+#else
 
17837
+
 
17838
+void
 
17839
+bar ()
 
17840
+{
 
17841
+}
 
17842
+
 
17843
+#endif
 
17844
Index: gcc/testsuite/g++.dg/ext/attrib48.C
 
17845
===================================================================
 
17846
--- a/src/gcc/testsuite/g++.dg/ext/attrib48.C   (.../tags/gcc_4_8_2_release)
 
17847
+++ b/src/gcc/testsuite/g++.dg/ext/attrib48.C   (.../branches/gcc-4_8-branch)
 
17848
@@ -0,0 +1,6 @@
 
17849
+// PR c++/54652
 
17850
+
 
17851
+typedef unsigned L __attribute__ ((aligned));
 
17852
+typedef unsigned L __attribute__ ((aligned));
 
17853
+
 
17854
+L l;
 
17855
Index: gcc/testsuite/g++.dg/ext/vector27.C
 
17856
===================================================================
 
17857
--- a/src/gcc/testsuite/g++.dg/ext/vector27.C   (.../tags/gcc_4_8_2_release)
 
17858
+++ b/src/gcc/testsuite/g++.dg/ext/vector27.C   (.../branches/gcc-4_8-branch)
 
17859
@@ -0,0 +1,7 @@
 
17860
+// PR c++/58845
 
17861
+
 
17862
+void foo()
 
17863
+{
 
17864
+  int v __attribute__((vector_size(8)));
 
17865
+  v = v || v;                  // { dg-bogus "" "" { xfail *-*-* } }
 
17866
+}
 
17867
Index: gcc/testsuite/g++.dg/ext/timevar2.C
 
17868
===================================================================
 
17869
--- a/src/gcc/testsuite/g++.dg/ext/timevar2.C   (.../tags/gcc_4_8_2_release)
 
17870
+++ b/src/gcc/testsuite/g++.dg/ext/timevar2.C   (.../branches/gcc-4_8-branch)
 
17871
@@ -0,0 +1,14 @@
 
17872
+// PR c++/57524
 
17873
+// { dg-options "-ftime-report" }
 
17874
+// { dg-prune-output "wall" }
 
17875
+// { dg-prune-output "times" }
 
17876
+// { dg-prune-output "TOTAL" }
 
17877
+// { dg-prune-output "checks" }
 
17878
+
 
17879
+namespace detail {
 
17880
+namespace indirect_traits {}
 
17881
+using namespace indirect_traits;
 
17882
+void fn1() {
 
17883
+using namespace detail;
 
17884
+}
 
17885
+}
 
17886
Index: gcc/testsuite/g++.dg/ext/attribute-test-1.C
 
17887
===================================================================
 
17888
--- a/src/gcc/testsuite/g++.dg/ext/attribute-test-1.C   (.../tags/gcc_4_8_2_release)
 
17889
+++ b/src/gcc/testsuite/g++.dg/ext/attribute-test-1.C   (.../branches/gcc-4_8-branch)
 
17890
@@ -36,3 +36,4 @@
 
17891
 
 
17892
 /* Ignore a warning that is irrelevant to the purpose of this test.  */
 
17893
 /* { dg-prune-output ".*GCC vector returned by reference.*" } */
 
17894
+/* { dg-prune-output "changes the ABI" } */
 
17895
Index: gcc/testsuite/g++.dg/opt/pr59647.C
 
17896
===================================================================
 
17897
--- a/src/gcc/testsuite/g++.dg/opt/pr59647.C    (.../tags/gcc_4_8_2_release)
 
17898
+++ b/src/gcc/testsuite/g++.dg/opt/pr59647.C    (.../branches/gcc-4_8-branch)
 
17899
@@ -0,0 +1,32 @@
 
17900
+// PR rtl-optimization/59647
 
17901
+// { dg-do compile }
 
17902
+// { dg-options "-O2 -fno-tree-vrp" }
 
17903
+// { dg-additional-options "-msse2 -mfpmath=sse" { target { { i?86-*-* x86_64-*-* } && ia32 } } }
 
17904
+
 
17905
+void f1 (int);
 
17906
+void f2 ();
 
17907
+double f3 (int);
 
17908
+
 
17909
+struct A
 
17910
+{
 
17911
+  int f4 () const
 
17912
+  {
 
17913
+    if (a == 0)
 
17914
+      return 1;
 
17915
+    return 0;
 
17916
+  }
 
17917
+  unsigned f5 ()
 
17918
+  {
 
17919
+    if (!f4 ())
 
17920
+      f2 ();
 
17921
+    return a;
 
17922
+  }
 
17923
+  int a;
 
17924
+};
 
17925
+
 
17926
+void
 
17927
+f6 (A *x)
 
17928
+{
 
17929
+  unsigned b = x->f5 ();
 
17930
+  f1 (b - 1 - f3 (x->f5 () - 1U));
 
17931
+}
 
17932
Index: gcc/testsuite/g++.dg/opt/pr59470.C
 
17933
===================================================================
 
17934
--- a/src/gcc/testsuite/g++.dg/opt/pr59470.C    (.../tags/gcc_4_8_2_release)
 
17935
+++ b/src/gcc/testsuite/g++.dg/opt/pr59470.C    (.../branches/gcc-4_8-branch)
 
17936
@@ -0,0 +1,188 @@
 
17937
+// PR middle-end/59470
 
17938
+// { dg-do run }
 
17939
+// { dg-options "-O2 -fstack-protector" }
 
17940
+// { dg-additional-options "-fPIC" { target fpic } }
 
17941
+// { dg-require-effective-target fstack_protector }
 
17942
+
 
17943
+struct A
 
17944
+{
 
17945
+  int a1;
 
17946
+  A () throw () : a1 (0) {}
 
17947
+};
 
17948
+
 
17949
+struct B
 
17950
+{
 
17951
+  unsigned int b1 () throw ();
 
17952
+};
 
17953
+
 
17954
+__attribute__((noinline, noclone)) unsigned int
 
17955
+B::b1 () throw ()
 
17956
+{
 
17957
+  asm volatile ("" : : : "memory");
 
17958
+  return 0;
 
17959
+}
 
17960
+
 
17961
+struct C
 
17962
+{
 
17963
+  const A **c1;
 
17964
+  void c2 (const A *, unsigned int);
 
17965
+};
 
17966
+
 
17967
+__attribute__((noinline, noclone)) void
 
17968
+C::c2 (const A *, unsigned int)
 
17969
+{
 
17970
+  asm volatile ("" : : : "memory");
 
17971
+}
 
17972
+
 
17973
+struct D
 
17974
+{
 
17975
+  C *d1;
 
17976
+};
 
17977
+
 
17978
+struct E
 
17979
+{
 
17980
+  int e1;
 
17981
+  int e2;
 
17982
+  D e3;
 
17983
+};
 
17984
+
 
17985
+struct F
 
17986
+{
 
17987
+  virtual int f1 (const char * s, int n);
 
17988
+};
 
17989
+
 
17990
+struct G
 
17991
+{
 
17992
+  F *g1;
 
17993
+  bool g2;
 
17994
+  G & g3 (const char * ws, int len)
 
17995
+  {
 
17996
+    if (__builtin_expect (!g2, true)
 
17997
+       && __builtin_expect (this->g1->f1 (ws, len) != len, false))
 
17998
+      g2 = true;
 
17999
+    return *this;
 
18000
+  }
 
18001
+};
 
18002
+
 
18003
+struct H : public A
 
18004
+{
 
18005
+  const char *h1;
 
18006
+  unsigned int h2;
 
18007
+  bool h3;
 
18008
+  const char *h4;
 
18009
+  char h5;
 
18010
+  char h6;
 
18011
+  char h7[31];
 
18012
+  bool h8;
 
18013
+  H () : h1 (0), h2 (0), h4 (0), h5 (0), h6 (0), h8 (false) {}
 
18014
+  void h9 (const D &) __attribute__((noinline, noclone));
 
18015
+};
 
18016
+
 
18017
+void
 
18018
+H::h9 (const D &)
 
18019
+{
 
18020
+  h3 = true;
 
18021
+  __builtin_memset (h7, 0, sizeof (h7));
 
18022
+  asm volatile ("" : : : "memory");
 
18023
+};
 
18024
+
 
18025
+B b;
 
18026
+
 
18027
+inline const H *
 
18028
+foo (const D &x)
 
18029
+{
 
18030
+  const unsigned int i = b.b1 ();
 
18031
+  const A **j = x.d1->c1;
 
18032
+  if (!j[i])
 
18033
+    {
 
18034
+      H *k = 0;
 
18035
+      try
 
18036
+       {
 
18037
+         k = new H;
 
18038
+         k->h9 (x);
 
18039
+       }
 
18040
+      catch (...)
 
18041
+       {
 
18042
+       }
 
18043
+      x.d1->c2 (k, i);
 
18044
+    }
 
18045
+    return static_cast <const H *>(j[i]);
 
18046
+}
 
18047
+
 
18048
+__attribute__((noinline, noclone)) int
 
18049
+bar (char *x, unsigned long v, const char *y, int z, bool w)
 
18050
+{
 
18051
+  asm volatile ("" : : "r" (x), "r" (v), "r" (y) : "memory");
 
18052
+  asm volatile ("" : : "r" (z), "r" (w) : "memory");
 
18053
+  return 8;
 
18054
+}
 
18055
+
 
18056
+__attribute__((noinline, noclone)) void
 
18057
+baz (void *z, const char *g, unsigned int h, char s, E &e, char *n, char *c, int &l)
 
18058
+{
 
18059
+  asm volatile ("" : : "r" (z), "r" (g), "r" (h) : "memory");
 
18060
+  asm volatile ("" : : "r" (s), "r" (&e), "r" (n) : "memory");
 
18061
+  asm volatile ("" : : "r" (c), "r" (&l) : "memory");
 
18062
+  if (n == c)
 
18063
+    __builtin_abort ();
 
18064
+  int i = 0;
 
18065
+  asm ("" : "+r" (i));
 
18066
+  if (i == 0)
 
18067
+    __builtin_exit (0);
 
18068
+}
 
18069
+
 
18070
+__attribute__((noinline, noclone)) G
 
18071
+test (void *z, G s, E &x, char, long v)
 
18072
+{
 
18073
+  const D &d = x.e3;
 
18074
+  const H *h = foo (d);
 
18075
+  const char *q = h->h7;
 
18076
+  const int f = x.e2;
 
18077
+  const int i = 5 * sizeof (long);
 
18078
+  char *c = static_cast <char *>(__builtin_alloca (i));
 
18079
+  const int b = f & 74;
 
18080
+  const bool e = (b != 64 && b != 8);
 
18081
+  const unsigned long u = ((v > 0 || !e) ? (unsigned long) v : -(unsigned long) v);
 
18082
+  int l = bar (c + i, u, q, f, e);
 
18083
+  c += i - l;
 
18084
+  if (h->h3)
 
18085
+    {
 
18086
+      char *c2 = static_cast <char *>(__builtin_alloca ((l + 1) * 2));
 
18087
+      baz (z, h->h1, h->h2, h->h6, x, c2 + 2, c, l);
 
18088
+      c = c2 + 2;
 
18089
+    }
 
18090
+  if (__builtin_expect (e, true))
 
18091
+    {
 
18092
+    }
 
18093
+  else if ((f & 4096) && v)
 
18094
+    {
 
18095
+      {
 
18096
+       const bool m = f & 176;
 
18097
+       *--c = q[m];
 
18098
+       *--c = q[1];
 
18099
+      }
 
18100
+    }
 
18101
+  const int w = x.e1;
 
18102
+  if (w > l)
 
18103
+    {
 
18104
+      char * c3 = static_cast <char *>(__builtin_alloca (w));
 
18105
+      c = c3;
 
18106
+    }
 
18107
+  return s.g3 (c, l);
 
18108
+}
 
18109
+
 
18110
+int
 
18111
+main ()
 
18112
+{
 
18113
+  H h;
 
18114
+  const A *j[1];
 
18115
+  C c;
 
18116
+  G g;
 
18117
+  E e;
 
18118
+  h.h9 (e.e3);
 
18119
+  j[0] = &h;
 
18120
+  c.c1 = j;
 
18121
+  e.e3.d1 = &c;
 
18122
+  test (0, g, e, 0, 0);
 
18123
+  __builtin_abort ();
 
18124
+}
 
18125
Index: gcc/testsuite/g++.dg/opt/pr58864.C
 
18126
===================================================================
 
18127
--- a/src/gcc/testsuite/g++.dg/opt/pr58864.C    (.../tags/gcc_4_8_2_release)
 
18128
+++ b/src/gcc/testsuite/g++.dg/opt/pr58864.C    (.../branches/gcc-4_8-branch)
 
18129
@@ -0,0 +1,21 @@
 
18130
+// PR target/58864
 
18131
+// { dg-do compile }
 
18132
+// { dg-options "-Os" }
 
18133
+// { dg-additional-options "-march=i686" { target { { i?86-*-* x86_64-*-* } && ia32 } } }
 
18134
+
 
18135
+struct A { A (); ~A (); };
 
18136
+struct B { B (); };
 
18137
+
 
18138
+float d, e;
 
18139
+
 
18140
+void
 
18141
+foo ()
 
18142
+{
 
18143
+  A a;
 
18144
+  float c = d;
 
18145
+  while (1)
 
18146
+    {
 
18147
+      B b;
 
18148
+      e = c ? -c : 0;
 
18149
+    }
 
18150
+}
 
18151
Index: gcc/testsuite/g++.dg/tree-prof/pr59255.C
 
18152
===================================================================
 
18153
--- a/src/gcc/testsuite/g++.dg/tree-prof/pr59255.C      (.../tags/gcc_4_8_2_release)
 
18154
+++ b/src/gcc/testsuite/g++.dg/tree-prof/pr59255.C      (.../branches/gcc-4_8-branch)
 
18155
@@ -0,0 +1,29 @@
 
18156
+// PR c++/59255
 
18157
+// { dg-options "-O2 -std=c++11" }
 
18158
+
 
18159
+struct S
 
18160
+{
 
18161
+  __attribute__((noinline, noclone)) ~S () noexcept (true)
 
18162
+  {
 
18163
+    if (fn)
 
18164
+      fn (1);
 
18165
+  }
 
18166
+  void (*fn) (int);
 
18167
+};
 
18168
+
 
18169
+__attribute__((noinline, noclone)) void
 
18170
+foo (int x)
 
18171
+{
 
18172
+  if (x != 1)
 
18173
+    throw 1;
 
18174
+}
 
18175
+
 
18176
+int
 
18177
+main ()
 
18178
+{
 
18179
+  for (int i = 0; i < 100; i++)
 
18180
+    {
 
18181
+      S s;
 
18182
+      s.fn = foo;
 
18183
+    }
 
18184
+}
 
18185
Index: gcc/testsuite/g++.dg/gomp/for-20.C
 
18186
===================================================================
 
18187
--- a/src/gcc/testsuite/g++.dg/gomp/for-20.C    (.../tags/gcc_4_8_2_release)
 
18188
+++ b/src/gcc/testsuite/g++.dg/gomp/for-20.C    (.../branches/gcc-4_8-branch)
 
18189
@@ -0,0 +1,16 @@
 
18190
+// PR c++/60146
 
18191
+// { dg-do compile }
 
18192
+// { dg-options -fopenmp }
 
18193
+
 
18194
+int foo() { return 0; }
 
18195
+
 
18196
+template<typename T> void bar()
 
18197
+{
 
18198
+#pragma omp parallel for
 
18199
+  for (T i = foo(); i < 8; ++i) {}
 
18200
+}
 
18201
+
 
18202
+void baz()
 
18203
+{
 
18204
+  bar<int>();
 
18205
+}
 
18206
Index: gcc/testsuite/g++.dg/gomp/pr59297.C
 
18207
===================================================================
 
18208
--- a/src/gcc/testsuite/g++.dg/gomp/pr59297.C   (.../tags/gcc_4_8_2_release)
 
18209
+++ b/src/gcc/testsuite/g++.dg/gomp/pr59297.C   (.../branches/gcc-4_8-branch)
 
18210
@@ -0,0 +1,25 @@
 
18211
+// PR c++/59297
 
18212
+// { dg-do compile }
 
18213
+// { dg-options "-fopenmp" }
 
18214
+
 
18215
+template <typename T>
 
18216
+struct A
 
18217
+{
 
18218
+  ~A ();
 
18219
+  const T &operator[] (int) const;
 
18220
+};
 
18221
+
 
18222
+struct B
 
18223
+{
 
18224
+  int &operator () (A <int>);
 
18225
+};
 
18226
+
 
18227
+void
 
18228
+foo (B &x, int &z)
 
18229
+{
 
18230
+  A<A<int> > y;
 
18231
+  #pragma omp atomic
 
18232
+  x (y[0]) += 1;
 
18233
+  #pragma omp atomic
 
18234
+  z += x(y[1]);
 
18235
+}
 
18236
Index: gcc/testsuite/g++.dg/diagnostic/pr59838.C
 
18237
===================================================================
 
18238
--- a/src/gcc/testsuite/g++.dg/diagnostic/pr59838.C     (.../tags/gcc_4_8_2_release)
 
18239
+++ b/src/gcc/testsuite/g++.dg/diagnostic/pr59838.C     (.../branches/gcc-4_8-branch)
 
18240
@@ -0,0 +1,4 @@
 
18241
+// PR c++/59838
 
18242
+// { dg-do compile }
 
18243
+
 
18244
+enum E { a, b = (E) a }; // { dg-error "conversion to incomplete type" }
 
18245
Index: gcc/testsuite/g++.dg/diagnostic/pr58979.C
 
18246
===================================================================
 
18247
--- a/src/gcc/testsuite/g++.dg/diagnostic/pr58979.C     (.../tags/gcc_4_8_2_release)
 
18248
+++ b/src/gcc/testsuite/g++.dg/diagnostic/pr58979.C     (.../branches/gcc-4_8-branch)
 
18249
@@ -0,0 +1,4 @@
 
18250
+// PR c++/58979
 
18251
+// { dg-do compile }
 
18252
+
 
18253
+int i = 0->*0; // { dg-error "invalid type argument of" }
 
18254
Index: gcc/testsuite/g++.dg/conversion/simd1.C
 
18255
===================================================================
 
18256
--- a/src/gcc/testsuite/g++.dg/conversion/simd1.C       (.../tags/gcc_4_8_2_release)
 
18257
+++ b/src/gcc/testsuite/g++.dg/conversion/simd1.C       (.../branches/gcc-4_8-branch)
 
18258
@@ -1,4 +1,5 @@
 
18259
 /* { dg-do compile } */
 
18260
+/* { dg-options "-msse2" { target { i?86-*-* x86_64-*-* } } } */
 
18261
 
 
18262
 /* Test overload resolution of vector types.
 
18263
    From Janis Johnson and Paolo Bonzini, based on PR/16882 */
 
18264
@@ -17,7 +18,7 @@
 
18265
 void foo ()
 
18266
 {
 
18267
   vss = vld(i, vscp);        /* { dg-error "no matching function for call" } */
 
18268
-  // { dg-message "candidate" "candidate note" { target *-*-* } 19 }
 
18269
+  // { dg-message "candidate" "candidate note" { target *-*-* } 20 }
 
18270
   vss = vld(i, vssp);
 
18271
   vss = vld(i, cvssp);
 
18272
 }
 
18273
Index: gcc/testsuite/g++.dg/tls/thread_local8.C
 
18274
===================================================================
 
18275
--- a/src/gcc/testsuite/g++.dg/tls/thread_local8.C      (.../tags/gcc_4_8_2_release)
 
18276
+++ b/src/gcc/testsuite/g++.dg/tls/thread_local8.C      (.../branches/gcc-4_8-branch)
 
18277
@@ -0,0 +1,12 @@
 
18278
+// PR c++/55800
 
18279
+// { dg-options "-std=c++11" }
 
18280
+// { dg-require-alias "" }
 
18281
+// { dg-require-effective-target tls }
 
18282
+// { dg-final { scan-assembler "_ZTH12foo_instance" { target tls_native } } }
 
18283
+
 
18284
+struct foo
 
18285
+{
 
18286
+  foo();
 
18287
+};
 
18288
+
 
18289
+thread_local foo foo_instance;
 
18290
Index: gcc/testsuite/g++.dg/tls/thread_local-ice2.C
 
18291
===================================================================
 
18292
--- a/src/gcc/testsuite/g++.dg/tls/thread_local-ice2.C  (.../tags/gcc_4_8_2_release)
 
18293
+++ b/src/gcc/testsuite/g++.dg/tls/thread_local-ice2.C  (.../branches/gcc-4_8-branch)
 
18294
@@ -0,0 +1,11 @@
 
18295
+// PR c++/58672
 
18296
+// { dg-options "-std=c++11" }
 
18297
+// { dg-require-effective-target tls }
 
18298
+
 
18299
+struct A
 
18300
+{
 
18301
+  A(int);
 
18302
+  i;                           // { dg-error "" }
 
18303
+};
 
18304
+
 
18305
+thread_local A a(0);
 
18306
Index: gcc/testsuite/g++.dg/tm/pr60004.C
 
18307
===================================================================
 
18308
--- a/src/gcc/testsuite/g++.dg/tm/pr60004.C     (.../tags/gcc_4_8_2_release)
 
18309
+++ b/src/gcc/testsuite/g++.dg/tm/pr60004.C     (.../branches/gcc-4_8-branch)
 
18310
@@ -0,0 +1,10 @@
 
18311
+// { dg-do compile }
 
18312
+// { dg-options "-fgnu-tm" }
 
18313
+
 
18314
+int a;
 
18315
+int f() {
 
18316
+    __transaction_atomic {
 
18317
+        if (a == 5)
 
18318
+            return 1;
 
18319
+    }
 
18320
+}
 
18321
Index: gcc/testsuite/g++.dg/tm/noexcept-6.C
 
18322
===================================================================
 
18323
--- a/src/gcc/testsuite/g++.dg/tm/noexcept-6.C  (.../tags/gcc_4_8_2_release)
 
18324
+++ b/src/gcc/testsuite/g++.dg/tm/noexcept-6.C  (.../branches/gcc-4_8-branch)
 
18325
@@ -0,0 +1,23 @@
 
18326
+// { dg-do compile }
 
18327
+// { dg-options "-fno-exceptions -fgnu-tm -O -std=c++0x -fdump-tree-tmlower" }
 
18328
+
 
18329
+struct TrueFalse
 
18330
+{
 
18331
+  static constexpr bool v() { return true; }
 
18332
+};
 
18333
+
 
18334
+int global;
 
18335
+
 
18336
+template<typename T> int foo()
 
18337
+{
 
18338
+  return __transaction_atomic noexcept(T::v()) (global + 1);
 
18339
+}
 
18340
+
 
18341
+int f1()
 
18342
+{
 
18343
+  return foo<TrueFalse>();
 
18344
+}
 
18345
+
 
18346
+/* { dg-final { scan-tree-dump-times "eh_must_not_throw" 0 "tmlower" } } */
 
18347
+/* { dg-final { scan-tree-dump-times "__transaction_atomic" 1 "tmlower" } } */
 
18348
+/* { dg-final { cleanup-tree-dump "tmlower" } } */
 
18349
Index: gcc/testsuite/g++.dg/pr59695.C
 
18350
===================================================================
 
18351
--- a/src/gcc/testsuite/g++.dg/pr59695.C        (.../tags/gcc_4_8_2_release)
 
18352
+++ b/src/gcc/testsuite/g++.dg/pr59695.C        (.../branches/gcc-4_8-branch)
 
18353
@@ -0,0 +1,125 @@
 
18354
+
 
18355
+/* PR target/59695 */
 
18356
+/* { dg-do run } */
 
18357
+/* { dg-options "-O0" } */
 
18358
+
 
18359
+#define  DEFINE_VIRTUALS_FNS(i)        virtual void  xxx##i () {} \
 
18360
+  virtual void  foo1_##i ()    {}\
 
18361
+  virtual void  foo2_##i ()    {}\
 
18362
+  virtual void  foo3_##i ()    {}\
 
18363
+  virtual void  foo4_##i ()    {}\
 
18364
+  virtual void  foo5_##i ()    {}\
 
18365
+  virtual void  foo6_##i ()    {}\
 
18366
+  virtual void  foo7_##i ()    {}\
 
18367
+  virtual void  foo8_##i ()    {}\
 
18368
+  virtual void  foo9_##i ()    {}\
 
18369
+  virtual void  foo10_##i ()   {}\
 
18370
+  virtual void  foo11_##i ()   {}\
 
18371
+  virtual void  foo12_##i ()   {}\
 
18372
+  virtual void  foo13_##i ()   {}\
 
18373
+  virtual void  foo14_##i ()   {}\
 
18374
+  virtual void  foo15_##i ()   {}\
 
18375
+  virtual void  foo16_##i ()   {}\
 
18376
+  virtual void  foo17_##i ()   {}\
 
18377
+  virtual void  foo18_##i ()   {}\
 
18378
+  virtual void  foo19_##i ()   {}\
 
18379
+  virtual void  foo20_##i ()   {}\
 
18380
+  virtual void  foo21_##i ()   {}\
 
18381
+  virtual void  foo22_##i ()   {}\
 
18382
+
 
18383
+class base_class_2
 
18384
+{
 
18385
+
 
18386
+public:
 
18387
+  /* Define lots of virtual functions */
 
18388
+  DEFINE_VIRTUALS_FNS (1)
 
18389
+  DEFINE_VIRTUALS_FNS (2)
 
18390
+  DEFINE_VIRTUALS_FNS (3)
 
18391
+  DEFINE_VIRTUALS_FNS (4)
 
18392
+  DEFINE_VIRTUALS_FNS (5)
 
18393
+  DEFINE_VIRTUALS_FNS (6)
 
18394
+  DEFINE_VIRTUALS_FNS (7)
 
18395
+  DEFINE_VIRTUALS_FNS (8)
 
18396
+  DEFINE_VIRTUALS_FNS (9)
 
18397
+  DEFINE_VIRTUALS_FNS (10)
 
18398
+  DEFINE_VIRTUALS_FNS (11)
 
18399
+  DEFINE_VIRTUALS_FNS (12)
 
18400
+  DEFINE_VIRTUALS_FNS (13)
 
18401
+  DEFINE_VIRTUALS_FNS (14)
 
18402
+  DEFINE_VIRTUALS_FNS (15)
 
18403
+  DEFINE_VIRTUALS_FNS (16)
 
18404
+  DEFINE_VIRTUALS_FNS (17)
 
18405
+  DEFINE_VIRTUALS_FNS (18)
 
18406
+  DEFINE_VIRTUALS_FNS (19)
 
18407
+  DEFINE_VIRTUALS_FNS (20)
 
18408
+
 
18409
+  base_class_2();
 
18410
+  virtual ~base_class_2 ();
 
18411
+};
 
18412
+
 
18413
+base_class_2::base_class_2()
 
18414
+{
 
18415
+}
 
18416
+
 
18417
+base_class_2::~base_class_2 ()
 
18418
+{
 
18419
+}
 
18420
+
 
18421
+class base_class_1
 
18422
+{
 
18423
+public:
 
18424
+  virtual ~base_class_1();
 
18425
+  base_class_1();
 
18426
+};
 
18427
+
 
18428
+base_class_1::base_class_1()
 
18429
+{
 
18430
+}
 
18431
+
 
18432
+base_class_1::~base_class_1()
 
18433
+{
 
18434
+}
 
18435
+
 
18436
+class base_Impl_class :
 
18437
+  virtual public base_class_2, public base_class_1
 
18438
+{
 
18439
+public:
 
18440
+  base_Impl_class ();
 
18441
+  virtual ~base_Impl_class ();
 
18442
+};
 
18443
+
 
18444
+base_Impl_class::base_Impl_class ()
 
18445
+{
 
18446
+}
 
18447
+
 
18448
+base_Impl_class::~base_Impl_class ()
 
18449
+{
 
18450
+}
 
18451
+
 
18452
+
 
18453
+class test_cls : public base_Impl_class
 
18454
+{
 
18455
+public:
 
18456
+  test_cls();
 
18457
+  virtual ~test_cls();
 
18458
+};
 
18459
+
 
18460
+test_cls::test_cls()
 
18461
+{
 
18462
+}
 
18463
+
 
18464
+test_cls::~test_cls()
 
18465
+{
 
18466
+}
 
18467
+
 
18468
+int main()
 
18469
+{
 
18470
+  test_cls *test = new test_cls;
 
18471
+  base_class_2 *p1 = test;
 
18472
+
 
18473
+  /* PR59695  destructor thunk offsets are not setup
 
18474
+   correctly resulting in crash.  */
 
18475
+  delete p1;
 
18476
+  return 0;
 
18477
+}
 
18478
+
 
18479
Index: gcc/testsuite/g++.dg/cpp0x/initlist79.C
 
18480
===================================================================
 
18481
--- a/src/gcc/testsuite/g++.dg/cpp0x/initlist79.C       (.../tags/gcc_4_8_2_release)
 
18482
+++ b/src/gcc/testsuite/g++.dg/cpp0x/initlist79.C       (.../branches/gcc-4_8-branch)
 
18483
@@ -0,0 +1,8 @@
 
18484
+// PR c++/59646
 
18485
+// { dg-require-effective-target c++11 }
 
18486
+
 
18487
+#include <initializer_list>
 
18488
+
 
18489
+struct A {};
 
18490
+
 
18491
+std::initializer_list<volatile A> x = {{}};
 
18492
Index: gcc/testsuite/g++.dg/cpp0x/enum_base2.C
 
18493
===================================================================
 
18494
--- a/src/gcc/testsuite/g++.dg/cpp0x/enum_base2.C       (.../tags/gcc_4_8_2_release)
 
18495
+++ b/src/gcc/testsuite/g++.dg/cpp0x/enum_base2.C       (.../branches/gcc-4_8-branch)
 
18496
@@ -0,0 +1,9 @@
 
18497
+// PR c++/60187
 
18498
+// { dg-require-effective-target c++11 }
 
18499
+
 
18500
+template<typename... T> struct A
 
18501
+{
 
18502
+  enum E : T {};               // { dg-error "parameter pack" }
 
18503
+};
 
18504
+
 
18505
+A<int> a;
 
18506
Index: gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C
 
18507
===================================================================
 
18508
--- a/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C     (.../tags/gcc_4_8_2_release)
 
18509
+++ b/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nsdmi5.C     (.../branches/gcc-4_8-branch)
 
18510
@@ -0,0 +1,7 @@
 
18511
+// PR c++/58596
 
18512
+// { dg-do compile { target c++11 } }
 
18513
+
 
18514
+struct A
 
18515
+{
 
18516
+  int i = [] { return decltype(i)(); }();
 
18517
+};
 
18518
Index: gcc/testsuite/g++.dg/cpp0x/variadic149.C
 
18519
===================================================================
 
18520
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic149.C      (.../tags/gcc_4_8_2_release)
 
18521
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic149.C      (.../branches/gcc-4_8-branch)
 
18522
@@ -0,0 +1,11 @@
 
18523
+// PR c++/60248
 
18524
+// { dg-options "-std=c++11 -g -fabi-version=2" }
 
18525
+
 
18526
+template<int...> struct A {};
 
18527
+
 
18528
+template<> struct A<0>
 
18529
+{
 
18530
+  typedef enum { e } B;
 
18531
+};
 
18532
+
 
18533
+A<0> a;
 
18534
Index: gcc/testsuite/g++.dg/cpp0x/constexpr-53094-2.C
 
18535
===================================================================
 
18536
--- a/src/gcc/testsuite/g++.dg/cpp0x/constexpr-53094-2.C        (.../tags/gcc_4_8_2_release)
 
18537
+++ b/src/gcc/testsuite/g++.dg/cpp0x/constexpr-53094-2.C        (.../branches/gcc-4_8-branch)
 
18538
@@ -2,6 +2,7 @@
 
18539
 // { dg-options "-std=gnu++11" }
 
18540
 // Ignore warning on some powerpc-ibm-aix configurations.
 
18541
 // { dg-prune-output "non-standard ABI extension" }
 
18542
+// { dg-prune-output "changes the ABI" }
 
18543
 
 
18544
 typedef float __attribute__ ((vector_size (4 * sizeof (float)))) V4;
 
18545
 constexpr V4 build (float x, float y, float z) { return (V4){ x, y, z, 0 };}
 
18546
Index: gcc/testsuite/g++.dg/cpp0x/defaulted48.C
 
18547
===================================================================
 
18548
--- a/src/gcc/testsuite/g++.dg/cpp0x/defaulted48.C      (.../tags/gcc_4_8_2_release)
 
18549
+++ b/src/gcc/testsuite/g++.dg/cpp0x/defaulted48.C      (.../branches/gcc-4_8-branch)
 
18550
@@ -0,0 +1,17 @@
 
18551
+// PR c++/60108
 
18552
+// { dg-require-effective-target c++11 }
 
18553
+
 
18554
+template<int> struct A
 
18555
+{
 
18556
+  virtual ~A();
 
18557
+};
 
18558
+
 
18559
+template<typename> struct B : A<0>, A<1>
 
18560
+{
 
18561
+  ~B() = default;
 
18562
+};
 
18563
+
 
18564
+struct C : B<bool>
 
18565
+{
 
18566
+  C() {}
 
18567
+};
 
18568
Index: gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C
 
18569
===================================================================
 
18570
--- a/src/gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C    (.../tags/gcc_4_8_2_release)
 
18571
+++ b/src/gcc/testsuite/g++.dg/cpp0x/alias-decl-41.C    (.../branches/gcc-4_8-branch)
 
18572
@@ -0,0 +1,18 @@
 
18573
+// PR c++/60182
 
18574
+// { dg-require-effective-target c++11 }
 
18575
+
 
18576
+class B {};
 
18577
+template <typename> using __allocator_base = B;
 
18578
+template <typename> class F : __allocator_base<int> {};
 
18579
+class C {};
 
18580
+template <typename, typename = F<int> > class G : C {};
 
18581
+template <typename> class D;
 
18582
+class A {
 
18583
+  using Container = G<D<char>>;
 
18584
+  A();
 
18585
+  A(D<char> const &);
 
18586
+  Container m_elements;
 
18587
+};
 
18588
+template <template <class, class> class C, class A = F<D<int>>>
 
18589
+void doSomething(C<D<char>, A> &);
 
18590
+A::A(D<char> const &) : A() { doSomething(m_elements); }
 
18591
Index: gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C
 
18592
===================================================================
 
18593
--- a/src/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C     (.../tags/gcc_4_8_2_release)
 
18594
+++ b/src/gcc/testsuite/g++.dg/cpp0x/nsdmi-union3.C     (.../branches/gcc-4_8-branch)
 
18595
@@ -0,0 +1,10 @@
 
18596
+// PR c++/58965
 
18597
+// { dg-require-effective-target c++11 }
 
18598
+
 
18599
+void foo()
 
18600
+{
 
18601
+  static union
 
18602
+  {
 
18603
+    int i = i;
 
18604
+  };
 
18605
+}
 
18606
Index: gcc/testsuite/g++.dg/cpp0x/variadic144.C
 
18607
===================================================================
 
18608
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic144.C      (.../tags/gcc_4_8_2_release)
 
18609
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic144.C      (.../branches/gcc-4_8-branch)
 
18610
@@ -0,0 +1,15 @@
 
18611
+// PR c++/56060
 
18612
+// { dg-do compile { target c++11 } }
 
18613
+
 
18614
+template<typename T> struct baz { };
 
18615
+template<typename T> T bar();
 
18616
+
 
18617
+template<typename T, typename ... U>
 
18618
+baz<decltype(bar<T>()(bar<U> ...))>  // { dg-error "cannot be used" }
 
18619
+foo();
 
18620
+
 
18621
+int main()
 
18622
+{
 
18623
+  foo<int>();     // { dg-error "no matching" }
 
18624
+  return 0;
 
18625
+}
 
18626
Index: gcc/testsuite/g++.dg/cpp0x/enum18.C
 
18627
===================================================================
 
18628
--- a/src/gcc/testsuite/g++.dg/cpp0x/enum18.C   (.../tags/gcc_4_8_2_release)
 
18629
+++ b/src/gcc/testsuite/g++.dg/cpp0x/enum18.C   (.../branches/gcc-4_8-branch)
 
18630
@@ -4,5 +4,5 @@
 
18631
 int main(void) {
 
18632
   enum e {};
 
18633
   e ev;
 
18634
-  ev.e::~e_u();        // { dg-error "e_u. has not been declared" }
 
18635
+  ev.e::~e_u();        // { dg-error "" }
 
18636
 }
 
18637
Index: gcc/testsuite/g++.dg/cpp0x/noexcept22.C
 
18638
===================================================================
 
18639
--- a/src/gcc/testsuite/g++.dg/cpp0x/noexcept22.C       (.../tags/gcc_4_8_2_release)
 
18640
+++ b/src/gcc/testsuite/g++.dg/cpp0x/noexcept22.C       (.../branches/gcc-4_8-branch)
 
18641
@@ -0,0 +1,21 @@
 
18642
+// PR c++/60046
 
18643
+// { dg-require-effective-target c++11 }
 
18644
+
 
18645
+constexpr bool foo () { return noexcept (true); }
 
18646
+template <typename T>
 
18647
+struct V
 
18648
+{
 
18649
+  void bar (V &) noexcept (foo ()) {}
 
18650
+};
 
18651
+template <typename T>
 
18652
+struct W : public V <int>
 
18653
+{
 
18654
+  void bar (W &x) { V <int>::bar (x); }
 
18655
+};
 
18656
+
 
18657
+int
 
18658
+main ()
 
18659
+{
 
18660
+  W <int> a, b;
 
18661
+  a.bar (b);
 
18662
+}
 
18663
Index: gcc/testsuite/g++.dg/cpp0x/initlist76.C
 
18664
===================================================================
 
18665
--- a/src/gcc/testsuite/g++.dg/cpp0x/initlist76.C       (.../tags/gcc_4_8_2_release)
 
18666
+++ b/src/gcc/testsuite/g++.dg/cpp0x/initlist76.C       (.../branches/gcc-4_8-branch)
 
18667
@@ -0,0 +1,5 @@
 
18668
+// PR c++/58812
 
18669
+// { dg-require-effective-target c++11 }
 
18670
+
 
18671
+int i;
 
18672
+int&& j{{ i }};                        // { dg-error "too many braces" }
 
18673
Index: gcc/testsuite/g++.dg/cpp0x/access02.C
 
18674
===================================================================
 
18675
--- a/src/gcc/testsuite/g++.dg/cpp0x/access02.C (.../tags/gcc_4_8_2_release)
 
18676
+++ b/src/gcc/testsuite/g++.dg/cpp0x/access02.C (.../branches/gcc-4_8-branch)
 
18677
@@ -0,0 +1,39 @@
 
18678
+// PR c++/58954
 
18679
+// { dg-require-effective-target c++11 }
 
18680
+
 
18681
+template<class T>
 
18682
+T&& declval();
 
18683
+
 
18684
+template<class T>
 
18685
+struct foo_argument
 
18686
+{
 
18687
+  template<class Ret, class C, class Arg>
 
18688
+  static Arg test(Ret (C::*)(Arg));
 
18689
+
 
18690
+  typedef decltype(test(&T::template foo<>)) type;
 
18691
+};
 
18692
+
 
18693
+template<class T, class>
 
18694
+struct dependent { typedef T type; };
 
18695
+
 
18696
+template<class T>
 
18697
+struct base
 
18698
+{
 
18699
+  template<class Ignore = void>
 
18700
+  auto foo(int i) -> decltype(declval<
 
18701
+    typename dependent<T&, Ignore>::type
 
18702
+  >().foo_impl(i));
 
18703
+};
 
18704
+
 
18705
+struct derived : base<derived>
 
18706
+{
 
18707
+  friend struct base<derived>;
 
18708
+private:
 
18709
+  int foo_impl(int i);
 
18710
+};
 
18711
+
 
18712
+int main()
 
18713
+{
 
18714
+  foo_argument<derived>::type var = 0;
 
18715
+  return var;
 
18716
+}
 
18717
Index: gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C
 
18718
===================================================================
 
18719
--- a/src/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C      (.../tags/gcc_4_8_2_release)
 
18720
+++ b/src/gcc/testsuite/g++.dg/cpp0x/constexpr-template6.C      (.../branches/gcc-4_8-branch)
 
18721
@@ -0,0 +1,20 @@
 
18722
+// PR c++/59268
 
18723
+// { dg-do compile }
 
18724
+// { dg-options "-std=c++11" }
 
18725
+
 
18726
+template <typename>
 
18727
+struct A
 
18728
+{
 
18729
+  constexpr A (int) {}
 
18730
+  virtual void foo ()
 
18731
+  {
 
18732
+    constexpr A<void> a (0);
 
18733
+  }
 
18734
+};
 
18735
+
 
18736
+void
 
18737
+bar ()
 
18738
+{
 
18739
+  A<int> a (3);
 
18740
+  a.foo ();
 
18741
+}
 
18742
Index: gcc/testsuite/g++.dg/cpp0x/initlist78.C
 
18743
===================================================================
 
18744
--- a/src/gcc/testsuite/g++.dg/cpp0x/initlist78.C       (.../tags/gcc_4_8_2_release)
 
18745
+++ b/src/gcc/testsuite/g++.dg/cpp0x/initlist78.C       (.../branches/gcc-4_8-branch)
 
18746
@@ -0,0 +1,12 @@
 
18747
+// PR c++/58639
 
18748
+// { dg-require-effective-target c++11 }
 
18749
+
 
18750
+struct node {
 
18751
+  node &parent;
 
18752
+};
 
18753
+
 
18754
+struct vector {
 
18755
+  node n;
 
18756
+};
 
18757
+
 
18758
+vector v({});                  // { dg-error "" }
 
18759
Index: gcc/testsuite/g++.dg/cpp0x/variadic148.C
 
18760
===================================================================
 
18761
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic148.C      (.../tags/gcc_4_8_2_release)
 
18762
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic148.C      (.../branches/gcc-4_8-branch)
 
18763
@@ -0,0 +1,6 @@
 
18764
+// PR c++/59989
 
18765
+// { dg-require-effective-target c++11 }
 
18766
+
 
18767
+template<typename T> struct X {};
 
18768
+template<template<typename...> class D, typename ...U> int test(D<U...>*);
 
18769
+int n = test<X, int>(0);       // { dg-error "no match" }
 
18770
Index: gcc/testsuite/g++.dg/cpp0x/nsdmi9.C
 
18771
===================================================================
 
18772
--- a/src/gcc/testsuite/g++.dg/cpp0x/nsdmi9.C   (.../tags/gcc_4_8_2_release)
 
18773
+++ b/src/gcc/testsuite/g++.dg/cpp0x/nsdmi9.C   (.../branches/gcc-4_8-branch)
 
18774
@@ -0,0 +1,13 @@
 
18775
+// PR c++/58162
 
18776
+// { dg-require-effective-target c++11 }
 
18777
+
 
18778
+struct A {
 
18779
+ A();
 
18780
+ A(A&&);
 
18781
+};
 
18782
+
 
18783
+struct B {
 
18784
+ A const a = A();
 
18785
+};
 
18786
+
 
18787
+B b;
 
18788
Index: gcc/testsuite/g++.dg/cpp0x/deleted3.C
 
18789
===================================================================
 
18790
--- a/src/gcc/testsuite/g++.dg/cpp0x/deleted3.C (.../tags/gcc_4_8_2_release)
 
18791
+++ b/src/gcc/testsuite/g++.dg/cpp0x/deleted3.C (.../branches/gcc-4_8-branch)
 
18792
@@ -0,0 +1,11 @@
 
18793
+// PR c++/60216
 
18794
+// { dg-require-effective-target c++11 }
 
18795
+
 
18796
+struct A
 
18797
+{
 
18798
+  template<typename T> A(T) = delete;
 
18799
+};
 
18800
+
 
18801
+template<> A::A<int>(int) {}
 
18802
+
 
18803
+A a(0);
 
18804
Index: gcc/testsuite/g++.dg/cpp0x/variadic150.C
 
18805
===================================================================
 
18806
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic150.C      (.../tags/gcc_4_8_2_release)
 
18807
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic150.C      (.../branches/gcc-4_8-branch)
 
18808
@@ -0,0 +1,9 @@
 
18809
+// PR c++/60219
 
18810
+// { dg-require-effective-target c++11 }
 
18811
+
 
18812
+template<typename..., int> void foo();
 
18813
+
 
18814
+void bar()
 
18815
+{
 
18816
+  foo<0>;                      // { dg-error "" }
 
18817
+}
 
18818
Index: gcc/testsuite/g++.dg/cpp0x/static_assert9.C
 
18819
===================================================================
 
18820
--- a/src/gcc/testsuite/g++.dg/cpp0x/static_assert9.C   (.../tags/gcc_4_8_2_release)
 
18821
+++ b/src/gcc/testsuite/g++.dg/cpp0x/static_assert9.C   (.../branches/gcc-4_8-branch)
 
18822
@@ -0,0 +1,7 @@
 
18823
+// PR c++/58837
 
18824
+// { dg-require-effective-target c++11 }
 
18825
+
 
18826
+void f();
 
18827
+static_assert(f, "");
 
18828
+struct A {};
 
18829
+static_assert(A::~A, "");      // { dg-error "non-static member function" }
 
18830
Index: gcc/testsuite/g++.dg/cpp0x/variadic145.C
 
18831
===================================================================
 
18832
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic145.C      (.../tags/gcc_4_8_2_release)
 
18833
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic145.C      (.../branches/gcc-4_8-branch)
 
18834
@@ -0,0 +1,13 @@
 
18835
+// PR c++/59730
 
18836
+// { dg-do compile { target c++11 } }
 
18837
+
 
18838
+template <typename> void declval();
 
18839
+template <typename> void forward();
 
18840
+template <typename> class D;
 
18841
+template <typename _Functor, typename... _Bound_args>
 
18842
+class D <_Functor(_Bound_args...)> {
 
18843
+  template <typename... _Args, decltype(declval<_Functor>)>
 
18844
+  void operator()(...) {
 
18845
+    0(forward<_Args>...);
 
18846
+  }
 
18847
+};
 
18848
Index: gcc/testsuite/g++.dg/cpp0x/decltype57.C
 
18849
===================================================================
 
18850
--- a/src/gcc/testsuite/g++.dg/cpp0x/decltype57.C       (.../tags/gcc_4_8_2_release)
 
18851
+++ b/src/gcc/testsuite/g++.dg/cpp0x/decltype57.C       (.../branches/gcc-4_8-branch)
 
18852
@@ -0,0 +1,8 @@
 
18853
+// PR c++/58633
 
18854
+// { dg-do compile { target c++11 } }
 
18855
+
 
18856
+void foo(int i)
 
18857
+{
 
18858
+  typedef int I;
 
18859
+  decltype(i.I::~I())* p;
 
18860
+}
 
18861
Index: gcc/testsuite/g++.dg/cpp0x/variadic147.C
 
18862
===================================================================
 
18863
--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic147.C      (.../tags/gcc_4_8_2_release)
 
18864
+++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic147.C      (.../branches/gcc-4_8-branch)
 
18865
@@ -0,0 +1,10 @@
 
18866
+// PR c++/58466
 
18867
+// { dg-require-effective-target c++11 }
 
18868
+
 
18869
+template<char, char...> struct A;
 
18870
+
 
18871
+template<typename> struct B;
 
18872
+
 
18873
+template<char... C> struct B<A<C...>> {};
 
18874
+
 
18875
+B<A<'X'>> b;
 
18876
Index: gcc/testsuite/g++.dg/eh/uncaught1.C
 
18877
===================================================================
 
18878
--- a/src/gcc/testsuite/g++.dg/eh/uncaught1.C   (.../tags/gcc_4_8_2_release)
 
18879
+++ b/src/gcc/testsuite/g++.dg/eh/uncaught1.C   (.../branches/gcc-4_8-branch)
 
18880
@@ -13,7 +13,7 @@
 
18881
 
 
18882
 static Check const data[] = {
 
18883
   { 0, 0, false },     // construct [0]
 
18884
-  { 1, 0, true  },     // [1] = [0]
 
18885
+  { 1, 0, false  },    // [1] = [0]
 
18886
   { 0, 0, true  },     // destruct [0]
 
18887
   { 2, 1, true  },     // [2] = [1]
 
18888
   { 2, 2, true  },      // destruct [2]
 
18889
Index: gcc/testsuite/g++.dg/eh/uncaught4.C
 
18890
===================================================================
 
18891
--- a/src/gcc/testsuite/g++.dg/eh/uncaught4.C   (.../tags/gcc_4_8_2_release)
 
18892
+++ b/src/gcc/testsuite/g++.dg/eh/uncaught4.C   (.../branches/gcc-4_8-branch)
 
18893
@@ -0,0 +1,29 @@
 
18894
+// PR c++/41174
 
18895
+// { dg-do run }
 
18896
+
 
18897
+#include <exception>
 
18898
+
 
18899
+#define assert(E) if (!(E)) __builtin_abort();
 
18900
+
 
18901
+struct e {
 
18902
+  e()
 
18903
+  {
 
18904
+    assert( !std::uncaught_exception() );
 
18905
+    try {
 
18906
+      throw 1;
 
18907
+    } catch (int i) {
 
18908
+      assert( !std::uncaught_exception() );
 
18909
+      throw;
 
18910
+    }
 
18911
+  }
 
18912
+};
 
18913
+
 
18914
+int main()
 
18915
+{
 
18916
+  try {
 
18917
+    throw e();
 
18918
+  } catch (int i) {
 
18919
+    assert( !std::uncaught_exception() );
 
18920
+  }
 
18921
+  assert( !std::uncaught_exception() );
 
18922
+}
 
18923
Index: gcc/testsuite/g++.dg/inherit/virtual11.C
 
18924
===================================================================
 
18925
--- a/src/gcc/testsuite/g++.dg/inherit/virtual11.C      (.../tags/gcc_4_8_2_release)
 
18926
+++ b/src/gcc/testsuite/g++.dg/inherit/virtual11.C      (.../branches/gcc-4_8-branch)
 
18927
@@ -0,0 +1,17 @@
 
18928
+// PR c++/59031
 
18929
+// { dg-do compile }
 
18930
+// { dg-options "-fdump-tree-gimple " }
 
18931
+class B {
 
18932
+ public:
 
18933
+  virtual int add (int a, int b) {return a+ b;}
 
18934
+};
 
18935
+
 
18936
+class D : public B {
 
18937
+};
 
18938
+
 
18939
+int foo (int a, int b) {
 
18940
+  D d;
 
18941
+  return d.add(a, b);
 
18942
+}
 
18943
+// { dg-final { scan-tree-dump-not "OBJ_TYPE_REF" "gimple" } }
 
18944
+// { dg-final { cleanup-tree-dump "gimple" } }
 
18945
Index: gcc/testsuite/g++.dg/torture/pr38565.C
 
18946
===================================================================
 
18947
--- a/src/gcc/testsuite/g++.dg/torture/pr38565.C        (.../tags/gcc_4_8_2_release)
 
18948
+++ b/src/gcc/testsuite/g++.dg/torture/pr38565.C        (.../branches/gcc-4_8-branch)
 
18949
@@ -1,6 +1,7 @@
 
18950
 // { dg-do compile }
 
18951
 // Ignore warning on some powerpc-linux configurations.
 
18952
 // { dg-prune-output "non-standard ABI extension" }
 
18953
+// { dg-prune-output "changes the ABI" }
 
18954
 #define vector __attribute__((vector_size(16) ))
 
18955
 vector unsigned int f(int a)
 
18956
 {
 
18957
Index: gcc/testsuite/g++.dg/torture/pr57499.C
 
18958
===================================================================
 
18959
--- a/src/gcc/testsuite/g++.dg/torture/pr57499.C        (.../tags/gcc_4_8_2_release)
 
18960
+++ b/src/gcc/testsuite/g++.dg/torture/pr57499.C        (.../branches/gcc-4_8-branch)
 
18961
@@ -0,0 +1,14 @@
 
18962
+// PR middle-end/57499
 
18963
+// { dg-do compile }
 
18964
+
 
18965
+struct S
 
18966
+{
 
18967
+  ~S () __attribute__ ((noreturn)) {} // { dg-warning "function does return" }
 
18968
+};
 
18969
+
 
18970
+void
 
18971
+foo ()
 
18972
+{
 
18973
+  S s;
 
18974
+  throw 1;
 
18975
+}
 
18976
Index: gcc/testsuite/g++.dg/torture/pr59163.C
 
18977
===================================================================
 
18978
--- a/src/gcc/testsuite/g++.dg/torture/pr59163.C        (.../tags/gcc_4_8_2_release)
 
18979
+++ b/src/gcc/testsuite/g++.dg/torture/pr59163.C        (.../branches/gcc-4_8-branch)
 
18980
@@ -0,0 +1,30 @@
 
18981
+// PR target/59163
 
18982
+// { dg-do run }
 
18983
+
 
18984
+struct A { float a[4]; };
 
18985
+struct B { int b; A a; };
 
18986
+
 
18987
+__attribute__((noinline, noclone)) void
 
18988
+bar (A &a)
 
18989
+{
 
18990
+  if (a.a[0] != 36.0f || a.a[1] != 42.0f || a.a[2] != 48.0f || a.a[3] != 54.0f)
 
18991
+    __builtin_abort ();
 
18992
+}
 
18993
+
 
18994
+__attribute__((noinline, noclone)) void
 
18995
+foo (A &a)
 
18996
+{
 
18997
+  int i;
 
18998
+  A c = a;
 
18999
+  for (i = 0; i < 4; i++)
 
19000
+    c.a[i] *= 6.0f;
 
19001
+  a = c;
 
19002
+  bar (a);
 
19003
+}
 
19004
+
 
19005
+int
 
19006
+main ()
 
19007
+{
 
19008
+  B b = { 5, { 6, 7, 8, 9 } };
 
19009
+  foo (b.a);
 
19010
+}
 
19011
Index: gcc/testsuite/g++.dg/template/ref7.C
 
19012
===================================================================
 
19013
--- a/src/gcc/testsuite/g++.dg/template/ref7.C  (.../tags/gcc_4_8_2_release)
 
19014
+++ b/src/gcc/testsuite/g++.dg/template/ref7.C  (.../branches/gcc-4_8-branch)
 
19015
@@ -0,0 +1,16 @@
 
19016
+// PR c++/60274
 
19017
+
 
19018
+typedef const char *const&  ProtocolIdType;
 
19019
+
 
19020
+template <ProtocolIdType protocolId>
 
19021
+struct C {
 
19022
+  typedef int ProtocolVersion;
 
19023
+  struct D {
 
19024
+    ProtocolVersion GetProtocolVersion();
 
19025
+  };
 
19026
+};
 
19027
+template <ProtocolIdType protocolId>
 
19028
+typename C<protocolId>::ProtocolVersion C<protocolId>::D::GetProtocolVersion()
 
19029
+{
 
19030
+    return 1;
 
19031
+}
 
19032
Index: gcc/testsuite/g++.dg/template/using28.C
 
19033
===================================================================
 
19034
--- a/src/gcc/testsuite/g++.dg/template/using28.C       (.../tags/gcc_4_8_2_release)
 
19035
+++ b/src/gcc/testsuite/g++.dg/template/using28.C       (.../branches/gcc-4_8-branch)
 
19036
@@ -0,0 +1,17 @@
 
19037
+// PR c++/37140
 
19038
+
 
19039
+struct C
 
19040
+{
 
19041
+  static const int block_size = 1;
 
19042
+};
 
19043
+
 
19044
+template <typename T> struct A {
 
19045
+  typedef C type;
 
19046
+};
 
19047
+
 
19048
+template <typename T> struct B : public A<T> {
 
19049
+  using typename A<T>::type;
 
19050
+  static const int block_size = type::block_size;
 
19051
+};
 
19052
+
 
19053
+template class B<int>;
 
19054
Index: gcc/testsuite/g++.dg/template/shadow1.C
 
19055
===================================================================
 
19056
--- a/src/gcc/testsuite/g++.dg/template/shadow1.C       (.../tags/gcc_4_8_2_release)
 
19057
+++ b/src/gcc/testsuite/g++.dg/template/shadow1.C       (.../branches/gcc-4_8-branch)
 
19058
@@ -0,0 +1,4 @@
 
19059
+// PR c++/58632
 
19060
+
 
19061
+template<template<int I> class A> // { dg-message "shadows" }
 
19062
+class A {};                    // { dg-error "declaration" }
 
19063
Index: gcc/testsuite/g++.dg/template/partial14.C
 
19064
===================================================================
 
19065
--- a/src/gcc/testsuite/g++.dg/template/partial14.C     (.../tags/gcc_4_8_2_release)
 
19066
+++ b/src/gcc/testsuite/g++.dg/template/partial14.C     (.../branches/gcc-4_8-branch)
 
19067
@@ -0,0 +1,16 @@
 
19068
+// PR c++/59044
 
19069
+
 
19070
+template <class T>
 
19071
+class C {
 
19072
+private:
 
19073
+  template <T a, T b>
 
19074
+  struct Implementation {};
 
19075
+public:
 
19076
+  typedef typename Implementation<0, 0>::Typedef Type;
 
19077
+};
 
19078
+
 
19079
+template <class T>
 
19080
+template <T b>
 
19081
+struct C<T>::Implementation<0, b> { typedef void Typedef; };
 
19082
+
 
19083
+template class C<unsigned>;
 
19084
Index: gcc/testsuite/g++.dg/template/using27.C
 
19085
===================================================================
 
19086
--- a/src/gcc/testsuite/g++.dg/template/using27.C       (.../tags/gcc_4_8_2_release)
 
19087
+++ b/src/gcc/testsuite/g++.dg/template/using27.C       (.../branches/gcc-4_8-branch)
 
19088
@@ -0,0 +1,33 @@
 
19089
+// PR c++/37140
 
19090
+
 
19091
+struct X
 
19092
+{
 
19093
+  typedef int nested_type;
 
19094
+};
 
19095
+
 
19096
+template <class T>
 
19097
+struct A
 
19098
+{
 
19099
+  typedef X type;
 
19100
+};
 
19101
+
 
19102
+template <class T>
 
19103
+struct B : A<T>
 
19104
+{
 
19105
+  using typename A<T>::type;
 
19106
+  typename type::nested_type x;
 
19107
+};
 
19108
+
 
19109
+template <class T> 
 
19110
+struct C : B<T>
 
19111
+{
 
19112
+  using typename B<T>::type;
 
19113
+  typename type::nested_type y;
 
19114
+};
 
19115
+
 
19116
+struct D : C<int>
 
19117
+{
 
19118
+  using C<int>::type;
 
19119
+  type::nested_type z;
 
19120
+};
 
19121
+
 
19122
Index: gcc/testsuite/g++.dg/template/using29.C
 
19123
===================================================================
 
19124
--- a/src/gcc/testsuite/g++.dg/template/using29.C       (.../tags/gcc_4_8_2_release)
 
19125
+++ b/src/gcc/testsuite/g++.dg/template/using29.C       (.../branches/gcc-4_8-branch)
 
19126
@@ -0,0 +1,21 @@
 
19127
+// PR c++/58047
 
19128
+
 
19129
+template <int N>
 
19130
+struct print_arg { };
 
19131
+
 
19132
+struct const_holder {
 
19133
+  static const int CONSTANT = 42;
 
19134
+};
 
19135
+
 
19136
+template <typename T>
 
19137
+struct identity {
 
19138
+  typedef T type;
 
19139
+};
 
19140
+
 
19141
+template <class T>
 
19142
+struct test_case : public identity<T> {
 
19143
+  using typename identity<T>::type;
 
19144
+  print_arg<type::CONSTANT> printer;
 
19145
+};
 
19146
+
 
19147
+template struct test_case<const_holder>;
 
19148
Index: gcc/testsuite/g++.dg/template/partial15.C
 
19149
===================================================================
 
19150
--- a/src/gcc/testsuite/g++.dg/template/partial15.C     (.../tags/gcc_4_8_2_release)
 
19151
+++ b/src/gcc/testsuite/g++.dg/template/partial15.C     (.../branches/gcc-4_8-branch)
 
19152
@@ -0,0 +1,19 @@
 
19153
+// PR c++/57043
 
19154
+// { dg-do link }
 
19155
+
 
19156
+template<typename D> struct complex { };
 
19157
+
 
19158
+template<typename Tp>
 
19159
+complex<Tp>
 
19160
+pow(const complex<Tp>& x, const complex<Tp>& y) { return complex<Tp>(); }
 
19161
+
 
19162
+template<typename T, typename U>
 
19163
+struct promote_2 { typedef T type; };
 
19164
+
 
19165
+template<typename Tp, typename Up>
 
19166
+complex<typename promote_2<Tp, Up>::type>
 
19167
+pow(const complex<Tp>& x, const complex<Up>& y);
 
19168
+
 
19169
+complex<double> (*powcc)(const complex<double>&, const complex<double>&) = pow;
 
19170
+
 
19171
+int main() {}
 
19172
Index: gcc/testsuite/c-c++-common/cpp/pr60400-1.h
 
19173
===================================================================
 
19174
--- a/src/gcc/testsuite/c-c++-common/cpp/pr60400-1.h    (.../tags/gcc_4_8_2_release)
 
19175
+++ b/src/gcc/testsuite/c-c++-common/cpp/pr60400-1.h    (.../branches/gcc-4_8-branch)
 
19176
@@ -0,0 +1,3 @@
 
19177
+??=ifndef PR60400_1_H
 
19178
+??=define PR60400_1_H
 
19179
+??=endif
 
19180
Index: gcc/testsuite/c-c++-common/cpp/pr60400-2.h
 
19181
===================================================================
 
19182
--- a/src/gcc/testsuite/c-c++-common/cpp/pr60400-2.h    (.../tags/gcc_4_8_2_release)
 
19183
+++ b/src/gcc/testsuite/c-c++-common/cpp/pr60400-2.h    (.../branches/gcc-4_8-branch)
 
19184
@@ -0,0 +1,4 @@
 
19185
+??=ifndef PR60400_2_H
 
19186
+??=define PR60400_2_H
 
19187
+??=include "pr60400-1.h"
 
19188
+??=endif
 
19189
Index: gcc/testsuite/c-c++-common/cpp/pr60400.c
 
19190
===================================================================
 
19191
--- a/src/gcc/testsuite/c-c++-common/cpp/pr60400.c      (.../tags/gcc_4_8_2_release)
 
19192
+++ b/src/gcc/testsuite/c-c++-common/cpp/pr60400.c      (.../branches/gcc-4_8-branch)
 
19193
@@ -0,0 +1,13 @@
 
19194
+/* PR preprocessor/60400 */
 
19195
+/* { dg-do compile } */
 
19196
+/* { dg-options "-trigraphs -Wtrigraphs" } */
 
19197
+
 
19198
+??=include "pr60400-1.h"
 
19199
+??=include "pr60400-2.h"
 
19200
+
 
19201
+/* { dg-warning "trigraph" "" { target *-*-* } 1 } */
 
19202
+/* { dg-warning "trigraph" "" { target *-*-* } 2 } */
 
19203
+/* { dg-warning "trigraph" "" { target *-*-* } 3 } */
 
19204
+/* { dg-warning "trigraph" "" { target *-*-* } 4 } */
 
19205
+/* { dg-warning "trigraph" "" { target *-*-* } 5 } */
 
19206
+/* { dg-warning "trigraph" "" { target *-*-* } 6 } */
 
19207
Index: gcc/testsuite/c-c++-common/cpp/pr58844-1.c
 
19208
===================================================================
 
19209
--- a/src/gcc/testsuite/c-c++-common/cpp/pr58844-1.c    (.../tags/gcc_4_8_2_release)
 
19210
+++ b/src/gcc/testsuite/c-c++-common/cpp/pr58844-1.c    (.../branches/gcc-4_8-branch)
 
19211
@@ -0,0 +1,8 @@
 
19212
+/* PR preprocessor/58844 */
 
19213
+/* { dg-do compile } */
 
19214
+/* { dg-options "-ftrack-macro-expansion=0" } */
 
19215
+
 
19216
+#define A x######x
 
19217
+int A = 1;
 
19218
+#define A x######x     /* { dg-message "previous definition" } */
 
19219
+#define A x##x         /* { dg-warning "redefined" } */
 
19220
Index: gcc/testsuite/c-c++-common/cpp/pr58844-2.c
 
19221
===================================================================
 
19222
--- a/src/gcc/testsuite/c-c++-common/cpp/pr58844-2.c    (.../tags/gcc_4_8_2_release)
 
19223
+++ b/src/gcc/testsuite/c-c++-common/cpp/pr58844-2.c    (.../branches/gcc-4_8-branch)
 
19224
@@ -0,0 +1,8 @@
 
19225
+/* PR preprocessor/58844 */
 
19226
+/* { dg-do compile } */
 
19227
+/* { dg-options "-ftrack-macro-expansion=2" } */
 
19228
+
 
19229
+#define A x######x
 
19230
+int A = 1;
 
19231
+#define A x######x     /* { dg-message "previous definition" } */
 
19232
+#define A x##x         /* { dg-warning "redefined" } */
 
19233
Index: gcc/testsuite/c-c++-common/convert-vec-1.c
 
19234
===================================================================
 
19235
--- a/src/gcc/testsuite/c-c++-common/convert-vec-1.c    (.../tags/gcc_4_8_2_release)
 
19236
+++ b/src/gcc/testsuite/c-c++-common/convert-vec-1.c    (.../branches/gcc-4_8-branch)
 
19237
@@ -1,3 +1,4 @@
 
19238
 /* { dg-do compile } */
 
19239
+/* { dg-prune-output "changes the ABI" } */
 
19240
 typedef float v2sf __attribute__ ((vector_size (8)));
 
19241
 v2sf sub (void) { return (v2sf) 0.0; } /* { dg-error "can't convert" } */
 
19242
Index: gcc/testsuite/c-c++-common/pr60101.c
 
19243
===================================================================
 
19244
--- a/src/gcc/testsuite/c-c++-common/pr60101.c  (.../tags/gcc_4_8_2_release)
 
19245
+++ b/src/gcc/testsuite/c-c++-common/pr60101.c  (.../branches/gcc-4_8-branch)
 
19246
@@ -0,0 +1,112 @@
 
19247
+/* PR c/60101 */
 
19248
+/* { dg-do compile } */
 
19249
+/* { dg-options "-O2 -Wall" } */
 
19250
+
 
19251
+extern int *a, b, *c, *d;
 
19252
+
 
19253
+void
 
19254
+foo (double _Complex *x, double _Complex *y, double _Complex *z, unsigned int l, int w)
 
19255
+{
 
19256
+  unsigned int e = (unsigned int) a[3];
 
19257
+  double _Complex (*v)[l][4][e][l][4] = (double _Complex (*)[l][4][e][l][4]) z;
 
19258
+  double _Complex (*f)[l][b][l] = (double _Complex (*)[l][b][l]) y;
 
19259
+  unsigned int g = c[0] * c[1] * c[2];
 
19260
+  unsigned int h = d[0] + c[0] * (d[1] + c[1] * d[2]);
 
19261
+  unsigned int i;
 
19262
+
 
19263
+  for (i = 0; i < e; i++)
 
19264
+    {
 
19265
+      int j = e * d[3] + i;
 
19266
+
 
19267
+      unsigned int n0, n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11;
 
19268
+      float _Complex s = 0.;
 
19269
+      unsigned int t = 0;
 
19270
+
 
19271
+      for (n0 = 0; n0 < l; n0++)
 
19272
+       for (n1 = 0; n1 < l; n1++)
 
19273
+         for (n2 = 0; n2 < l; n2++)
 
19274
+           for (n3 = 0; n3 < l; n3++)
 
19275
+             for (n4 = 0; n4 < l; n4++)
 
19276
+               for (n5 = 0; n5 < l; n5++)
 
19277
+                 for (n6 = 0; n6 < l; n6++)
 
19278
+                   for (n7 = 0; n7 < l; n7++)
 
19279
+                     for (n8 = 0; n8 < l; n8++)
 
19280
+                       for (n9 = 0; n9 < l; n9++)
 
19281
+                         for (n10 = 0; n10 < l; n10++)
 
19282
+                           for (n11 = 0; n11 < l; n11++)
 
19283
+                             {
 
19284
+                               if (t % g == h)
 
19285
+                                 s
 
19286
+                                   += f[n0][n4][j][n8] * f[n1][n5][j][n9] * ~(f[n2][n6][w][n10]) * ~(f[n3][n7][w][n11])
 
19287
+                                      * (+0.25 * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n10][0][i][n4][1]
 
19288
+                                         * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n6][1][i][n0][0]
 
19289
+                                         + 0.25 * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n10][0][i][n4][1]
 
19290
+                                         * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
 
19291
+                                         - 0.5 * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n10][0][i][n4][1]
 
19292
+                                         * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
 
19293
+                                         + 0.25 * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n3][0][i][n4][1]
 
19294
+                                         * v[0][n7][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n11][1][i][n0][0]
 
19295
+                                         - 0.5 * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n3][0][i][n4][1]
 
19296
+                                         * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
 
19297
+                                         + 0.25 * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n3][0][i][n4][1]
 
19298
+                                         * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
 
19299
+                                         + 0.25 * v[0][n3][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n10][0][i][n4][1]
 
19300
+                                         * v[0][n6][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n7][1][i][n0][0]
 
19301
+                                         - 0.5 * v[0][n3][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n10][0][i][n4][1]
 
19302
+                                         * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
 
19303
+                                         + 0.25 * v[0][n3][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n10][0][i][n4][1]
 
19304
+                                         * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
 
19305
+                                         + 0.25 * v[0][n3][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n2][0][i][n4][1]
 
19306
+                                         * v[0][n6][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0]
 
19307
+                                         + 0.25 * v[0][n3][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n2][0][i][n4][1]
 
19308
+                                         * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
 
19309
+                                         - 0.5 * v[0][n3][0][i][n9][1] * v[0][n10][0][i][n5][1] * v[0][n2][0][i][n4][1]
 
19310
+                                         * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
 
19311
+                                         + 0.25 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
 
19312
+                                         * v[0][n6][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0]
 
19313
+                                         - 0.5 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
 
19314
+                                         * v[0][n6][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n7][1][i][n0][0]
 
19315
+                                         - 0.5 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
 
19316
+                                         * v[0][n7][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n11][1][i][n0][0]
 
19317
+                                         + 0.25 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
 
19318
+                                         * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n6][1][i][n0][0]
 
19319
+                                         + 1. * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
 
19320
+                                         * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
 
19321
+                                         - 0.5 * v[0][n10][0][i][n9][1] * v[0][n2][0][i][n5][1] * v[0][n3][0][i][n4][1]
 
19322
+                                         * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
 
19323
+                                         - 0.5 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
 
19324
+                                         * v[0][n6][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0]
 
19325
+                                         + 0.25 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
 
19326
+                                         * v[0][n6][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n7][1][i][n0][0]
 
19327
+                                         + 0.25 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
 
19328
+                                         * v[0][n7][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n11][1][i][n0][0]
 
19329
+                                         - 0.5 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
 
19330
+                                         * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n6][1][i][n0][0]
 
19331
+                                         - 0.5 * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
 
19332
+                                         * v[0][n11][1][i][n8][0] * v[0][n6][1][i][n1][0] * v[0][n7][1][i][n0][0]
 
19333
+                                         + 1. * v[0][n10][0][i][n9][1] * v[0][n3][0][i][n5][1] * v[0][n2][0][i][n4][1]
 
19334
+                                         * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n6][1][i][n0][0]
 
19335
+                                         + 0.5 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
 
19336
+                                         * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0] * v[0][n10][0][i][n8][0]
 
19337
+                                         - 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
 
19338
+                                         * v[0][n11][1][i][n1][0] * v[0][n7][1][i][n0][0] * v[0][n10][0][i][n8][0]
 
19339
+                                         - 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
 
19340
+                                         * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n0][0] * v[0][n10][0][i][n1][0]
 
19341
+                                         + 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
 
19342
+                                         * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n1][0] * v[0][n10][0][i][n0][0]
 
19343
+                                         + 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
 
19344
+                                         * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n0][0] * v[0][n10][0][i][n1][0]
 
19345
+                                         - 0.5 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n3][0][i][n5][1]
 
19346
+                                         * v[0][n11][1][i][n8][0] * v[0][n7][1][i][n1][0] * v[0][n10][0][i][n0][0]
 
19347
+                                         - 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1]
 
19348
+                                         * v[0][n7][1][i][n1][0] * v[0][n11][1][i][n0][0] * v[0][n3][0][i][n8][0]
 
19349
+                                         - 0.25 * v[0][n6][1][i][n4][1] * v[0][n2][0][i][n9][1] * v[0][n10][0][i][n5][1]
 
19350
+                                         * v[0][n7][1][i][n8][0] * v[0][n11][1][i][n0][0] * v[0][n3][0][i][n1][0]);
 
19351
+                               t++;
 
19352
+                             }
 
19353
+      int u = (j - w + b) % b;
 
19354
+      int q = (j >= w ? +1 : -1);
 
19355
+      int r = q;
 
19356
+      x[u] += r * s;
 
19357
+    }
 
19358
+}
 
19359
Index: gcc/testsuite/c-c++-common/pr59037.c
 
19360
===================================================================
 
19361
--- a/src/gcc/testsuite/c-c++-common/pr59037.c  (.../tags/gcc_4_8_2_release)
 
19362
+++ b/src/gcc/testsuite/c-c++-common/pr59037.c  (.../branches/gcc-4_8-branch)
 
19363
@@ -0,0 +1,12 @@
 
19364
+/* { dg-do compile } */
 
19365
+/* { dg-options "-O3" } */
 
19366
+
 
19367
+typedef int v4si __attribute__ ((vector_size (16)));
 
19368
+
 
19369
+int
 
19370
+main (int argc, char** argv)
 
19371
+{
 
19372
+  v4si x = {0,1,2,3};
 
19373
+  x = (v4si) {(x)[3], (x)[2], (x)[1], (x)[0]};
 
19374
+  return x[4];
 
19375
+}
 
19376
Index: gcc/testsuite/c-c++-common/pr59280.c
 
19377
===================================================================
 
19378
--- a/src/gcc/testsuite/c-c++-common/pr59280.c  (.../tags/gcc_4_8_2_release)
 
19379
+++ b/src/gcc/testsuite/c-c++-common/pr59280.c  (.../branches/gcc-4_8-branch)
 
19380
@@ -0,0 +1,4 @@
 
19381
+/* PR c/59280 */
 
19382
+/* { dg-do compile } */
 
19383
+
 
19384
+void bar (char *) __attribute__((constructor(foo))); /* { dg-error "constructor priorities must be integers|was not declared|constructor priorities are not supported" } */
 
19385
Index: gcc/testsuite/c-c++-common/pr37743.c
 
19386
===================================================================
 
19387
--- a/src/gcc/testsuite/c-c++-common/pr37743.c  (.../tags/gcc_4_8_2_release)
 
19388
+++ b/src/gcc/testsuite/c-c++-common/pr37743.c  (.../branches/gcc-4_8-branch)
 
19389
@@ -0,0 +1,13 @@
 
19390
+/* PR c/37743 */
 
19391
+/* This needs to be run only on targets where __UINT32_TYPE__ is defined
 
19392
+   to unsigned int.  */
 
19393
+/* { dg-do compile { target *-*-linux-gnu* } } */
 
19394
+/* { dg-options "-Wformat" } */
 
19395
+
 
19396
+int foo (const char *, ...) __attribute__ ((format (printf, 1, 2)));
 
19397
+
 
19398
+void
 
19399
+bar (unsigned int x)
 
19400
+{
 
19401
+  foo ("%x", __builtin_bswap32 (x));
 
19402
+}
 
19403
Index: gcc/testsuite/c-c++-common/fold-divmul-1.c
 
19404
===================================================================
 
19405
--- a/src/gcc/testsuite/c-c++-common/fold-divmul-1.c    (.../tags/gcc_4_8_2_release)
 
19406
+++ b/src/gcc/testsuite/c-c++-common/fold-divmul-1.c    (.../branches/gcc-4_8-branch)
 
19407
@@ -0,0 +1,11 @@
 
19408
+/* { dg-do compile } */
 
19409
+/* { dg-options "-fdump-tree-original" } */
 
19410
+
 
19411
+int *
 
19412
+fx (int *b, int *e)
 
19413
+{
 
19414
+  return b + (e - b);
 
19415
+}
 
19416
+
 
19417
+/* { dg-final { scan-tree-dump-not "/\\\[ex\\\]" "original" } } */
 
19418
+/* { dg-final { cleanup-tree-dump "original" } } */
 
19419
Index: gcc/testsuite/c-c++-common/torture/pr58794-1.c
 
19420
===================================================================
 
19421
--- a/src/gcc/testsuite/c-c++-common/torture/pr58794-1.c        (.../tags/gcc_4_8_2_release)
 
19422
+++ b/src/gcc/testsuite/c-c++-common/torture/pr58794-1.c        (.../branches/gcc-4_8-branch)
 
19423
@@ -0,0 +1,29 @@
 
19424
+/* { dg-do compile } */
 
19425
+
 
19426
+struct S0
 
19427
+{
 
19428
+  int f;
 
19429
+};
 
19430
+
 
19431
+struct S1
 
19432
+{
 
19433
+  struct S0 f1;
 
19434
+  volatile int f2;
 
19435
+};
 
19436
+
 
19437
+struct S2
 
19438
+{
 
19439
+  struct S1 g;
 
19440
+} a, b; 
 
19441
+
 
19442
+static int *c[1][2] = {{0, (int *)&a.g.f2}};
 
19443
+static int d; 
 
19444
+
 
19445
+int
 
19446
+main ()
 
19447
+{
 
19448
+  for (d = 0; d < 1; d++)
 
19449
+    for (b.g.f1.f = 0; b.g.f1.f < 1; b.g.f1.f++)
 
19450
+      *c[b.g.f1.f][d + 1] = 0;
 
19451
+  return 0;
 
19452
+}
 
19453
Index: gcc/testsuite/c-c++-common/torture/pr58794-2.c
 
19454
===================================================================
 
19455
--- a/src/gcc/testsuite/c-c++-common/torture/pr58794-2.c        (.../tags/gcc_4_8_2_release)
 
19456
+++ b/src/gcc/testsuite/c-c++-common/torture/pr58794-2.c        (.../branches/gcc-4_8-branch)
 
19457
@@ -0,0 +1,21 @@
 
19458
+/* { dg-do compile } */
 
19459
+
 
19460
+struct S 
 
19461
+{
 
19462
+  volatile int f;
 
19463
+} a;
 
19464
+
 
19465
+unsigned int b;
 
19466
+
 
19467
+static int *c[1][2] = {{0, (int *)&a.f}};
 
19468
+static unsigned int d;
 
19469
+
 
19470
+int 
 
19471
+main ()
 
19472
+{
 
19473
+  for (; d < 1; d++)
 
19474
+    for (; b < 1; b++)
 
19475
+      *c[b][d + 1] = 0;
 
19476
+
 
19477
+  return 0;
 
19478
+}
 
19479
Index: gcc/testsuite/c-c++-common/torture/pr60026.c
 
19480
===================================================================
 
19481
--- a/src/gcc/testsuite/c-c++-common/torture/pr60026.c  (.../tags/gcc_4_8_2_release)
 
19482
+++ b/src/gcc/testsuite/c-c++-common/torture/pr60026.c  (.../branches/gcc-4_8-branch)
 
19483
@@ -0,0 +1,28 @@
 
19484
+/* PR ipa/60026 */
 
19485
+/* { dg-do compile } */
 
19486
+
 
19487
+struct S { int f; } a;
 
19488
+
 
19489
+__attribute__((optimize (0)))
 
19490
+struct S foo (int x, struct S y)
 
19491
+{
 
19492
+  int b = y.f;
 
19493
+  return a; 
 
19494
+}
 
19495
+
 
19496
+void
 
19497
+bar ()
 
19498
+{
 
19499
+  while (a.f)
 
19500
+    {
 
19501
+      struct S c = {0};
 
19502
+      foo (0, c);
 
19503
+    }
 
19504
+}
 
19505
+
 
19506
+int
 
19507
+main ()
 
19508
+{
 
19509
+  bar (); 
 
19510
+  return 0;
 
19511
+}
 
19512
Index: gcc/testsuite/c-c++-common/vector-compare-2.c
 
19513
===================================================================
 
19514
--- a/src/gcc/testsuite/c-c++-common/vector-compare-2.c (.../tags/gcc_4_8_2_release)
 
19515
+++ b/src/gcc/testsuite/c-c++-common/vector-compare-2.c (.../branches/gcc-4_8-branch)
 
19516
@@ -1,6 +1,7 @@
 
19517
 /* { dg-do compile } */   
 
19518
 /* { dg-options "-fno-common" { target hppa*-*-hpux* } } */
 
19519
 /* { dg-options "-mabi=altivec" { target { { powerpc*-*-linux* } && ilp32 } } } */
 
19520
+/* { dg-options "-msse2" { target { i?86-*-* x86_64-*-* } } } */
 
19521
 /* Ignore warning on some powerpc-ibm-aix configurations. */
 
19522
 /* { dg-prune-output "non-standard ABI extension" } */
 
19523
 
 
19524
Index: gcc/testsuite/c-c++-common/gomp/pr58809.c
 
19525
===================================================================
 
19526
--- a/src/gcc/testsuite/c-c++-common/gomp/pr58809.c     (.../tags/gcc_4_8_2_release)
 
19527
+++ b/src/gcc/testsuite/c-c++-common/gomp/pr58809.c     (.../branches/gcc-4_8-branch)
 
19528
@@ -0,0 +1,31 @@
 
19529
+/* PR middle-end/58809 */
 
19530
+/* { dg-do compile } */
 
19531
+/* { dg-options "-fopenmp" } */
 
19532
+
 
19533
+_Complex int j;
 
19534
+_Complex double d;
 
19535
+
 
19536
+void
 
19537
+foo (void)
 
19538
+{
 
19539
+  #pragma omp parallel reduction (&:j) /* { dg-error "has invalid type for" } */
 
19540
+    ;
 
19541
+  #pragma omp parallel reduction (|:j) /* { dg-error "has invalid type for" } */
 
19542
+    ;
 
19543
+  #pragma omp parallel reduction (^:j) /* { dg-error "has invalid type for" } */
 
19544
+    ;
 
19545
+  #pragma omp parallel reduction (min:j) /* { dg-error "has invalid type for" } */
 
19546
+    ;
 
19547
+  #pragma omp parallel reduction (max:j) /* { dg-error "has invalid type for" } */
 
19548
+    ;
 
19549
+  #pragma omp parallel reduction (&:d) /* { dg-error "has invalid type for" } */
 
19550
+    ;
 
19551
+  #pragma omp parallel reduction (|:d) /* { dg-error "has invalid type for" } */
 
19552
+    ;
 
19553
+  #pragma omp parallel reduction (^:d) /* { dg-error "has invalid type for" } */
 
19554
+    ;
 
19555
+  #pragma omp parallel reduction (min:d) /* { dg-error "has invalid type for" } */
 
19556
+    ;
 
19557
+  #pragma omp parallel reduction (max:d) /* { dg-error "has invalid type for" } */
 
19558
+    ;
 
19559
+}
 
19560
Index: gcc/testsuite/c-c++-common/gomp/pr59467.c
 
19561
===================================================================
 
19562
--- a/src/gcc/testsuite/c-c++-common/gomp/pr59467.c     (.../tags/gcc_4_8_2_release)
 
19563
+++ b/src/gcc/testsuite/c-c++-common/gomp/pr59467.c     (.../branches/gcc-4_8-branch)
 
19564
@@ -0,0 +1,68 @@
 
19565
+/* PR libgomp/59467 */
 
19566
+
 
19567
+int v;
 
19568
+
 
19569
+void
 
19570
+foo (void)
 
19571
+{
 
19572
+  int x = 0, y = 0;
 
19573
+  #pragma omp parallel
 
19574
+  {
 
19575
+    int z;
 
19576
+    #pragma omp single copyprivate (x) /* { dg-error "is not threadprivate or private in outer context" } */
 
19577
+    {
 
19578
+      #pragma omp atomic write
 
19579
+       x = 6;
 
19580
+    }
 
19581
+    #pragma omp atomic read
 
19582
+    z = x;
 
19583
+    #pragma omp atomic
 
19584
+    y += z;
 
19585
+  }
 
19586
+  #pragma omp parallel
 
19587
+  {
 
19588
+    int z;
 
19589
+    #pragma omp single copyprivate (v) /* { dg-error "is not threadprivate or private in outer context" } */
 
19590
+    {
 
19591
+      #pragma omp atomic write
 
19592
+       v = 6;
 
19593
+    }
 
19594
+    #pragma omp atomic read
 
19595
+    z = v;
 
19596
+    #pragma omp atomic
 
19597
+    y += z;
 
19598
+  }
 
19599
+  #pragma omp parallel private (x)
 
19600
+  {
 
19601
+    int z;
 
19602
+    #pragma omp single copyprivate (x)
 
19603
+    {
 
19604
+      #pragma omp atomic write
 
19605
+       x = 6;
 
19606
+    }
 
19607
+    #pragma omp atomic read
 
19608
+    z = x;
 
19609
+    #pragma omp atomic
 
19610
+    y += z;
 
19611
+  }
 
19612
+  x = 0;
 
19613
+  #pragma omp parallel reduction (+:x)
 
19614
+  {
 
19615
+    #pragma omp single copyprivate (x)
 
19616
+    {
 
19617
+      #pragma omp atomic write
 
19618
+       x = 6;
 
19619
+    }
 
19620
+    #pragma omp atomic
 
19621
+    y += x;
 
19622
+  }
 
19623
+  #pragma omp single copyprivate (x)
 
19624
+  {
 
19625
+    x = 7;
 
19626
+  }
 
19627
+  #pragma omp single copyprivate (v)   /* { dg-error "is not threadprivate or private in outer context" } */
 
19628
+  {
 
19629
+    #pragma omp atomic write
 
19630
+      v = 6;
 
19631
+  }
 
19632
+}
 
19633
Index: gcc/testsuite/c-c++-common/scal-to-vec2.c
 
19634
===================================================================
 
19635
--- a/src/gcc/testsuite/c-c++-common/scal-to-vec2.c     (.../tags/gcc_4_8_2_release)
 
19636
+++ b/src/gcc/testsuite/c-c++-common/scal-to-vec2.c     (.../branches/gcc-4_8-branch)
 
19637
@@ -1,6 +1,7 @@
 
19638
 /* { dg-do compile } */   
 
19639
 /* { dg-options "-fno-common" { target hppa*-*-hpux* } } */
 
19640
 /* { dg-options "-mabi=altivec" { target { { powerpc*-*-linux* } && ilp32 } } } */
 
19641
+/* { dg-options "-msse2" { target { i?86-*-* x86_64-*-* } } } */
 
19642
 /* Ignore warning on some powerpc-ibm-aix configurations. */
 
19643
 /* { dg-prune-output "non-standard ABI extension" } */
 
19644
 
 
19645
Index: gcc/testsuite/c-c++-common/pr59032.c
 
19646
===================================================================
 
19647
--- a/src/gcc/testsuite/c-c++-common/pr59032.c  (.../tags/gcc_4_8_2_release)
 
19648
+++ b/src/gcc/testsuite/c-c++-common/pr59032.c  (.../branches/gcc-4_8-branch)
 
19649
@@ -0,0 +1,30 @@
 
19650
+/* { dg-do compile } */
 
19651
+/* { dg-options "-O2" } */
 
19652
+
 
19653
+void
 
19654
+foo()
 
19655
+{
 
19656
+  float v __attribute__((vector_size(8)));
 
19657
+  v++;
 
19658
+}
 
19659
+
 
19660
+void
 
19661
+foo2 ()
 
19662
+{
 
19663
+  float v __attribute__((vector_size(8)));
 
19664
+  ++v;
 
19665
+}
 
19666
+
 
19667
+void
 
19668
+foo3 ()
 
19669
+{
 
19670
+  float v __attribute__((vector_size(8)));
 
19671
+  v--;
 
19672
+}
 
19673
+
 
19674
+void
 
19675
+foo4 ()
 
19676
+{
 
19677
+  float v __attribute__((vector_size(8)));
 
19678
+  --v;
 
19679
+}
 
19680
Index: gcc/cp/typeck.c
 
19681
===================================================================
 
19682
--- a/src/gcc/cp/typeck.c       (.../tags/gcc_4_8_2_release)
 
19683
+++ b/src/gcc/cp/typeck.c       (.../branches/gcc-4_8-branch)
 
19684
@@ -4103,6 +4103,11 @@
 
19685
     case TRUTH_ORIF_EXPR:
 
19686
     case TRUTH_AND_EXPR:
 
19687
     case TRUTH_OR_EXPR:
 
19688
+      if (TREE_CODE (type0) == VECTOR_TYPE || TREE_CODE (type1) == VECTOR_TYPE)
 
19689
+       {
 
19690
+         sorry ("logical operation on vector type");
 
19691
+         return error_mark_node;
 
19692
+       }
 
19693
       result_type = boolean_type_node;
 
19694
       break;
 
19695
 
 
19696
@@ -5010,7 +5015,10 @@
 
19697
 cp_truthvalue_conversion (tree expr)
 
19698
 {
 
19699
   tree type = TREE_TYPE (expr);
 
19700
-  if (TYPE_PTRDATAMEM_P (type))
 
19701
+  if (TYPE_PTRDATAMEM_P (type)
 
19702
+      /* Avoid ICE on invalid use of non-static member function.  */
 
19703
+      || (TREE_CODE (expr) == FUNCTION_DECL
 
19704
+         && DECL_NONSTATIC_MEMBER_FUNCTION_P (expr)))
 
19705
     return build_binary_op (EXPR_LOCATION (expr),
 
19706
                            NE_EXPR, expr, nullptr_node, 1);
 
19707
   else if (TYPE_PTR_P (type) || TYPE_PTRMEMFUNC_P (type))
 
19708
@@ -5588,7 +5596,9 @@
 
19709
            inc = cxx_sizeof_nowarn (TREE_TYPE (argtype));
 
19710
          }
 
19711
        else
 
19712
-         inc = integer_one_node;
 
19713
+         inc = (TREE_CODE (argtype) == VECTOR_TYPE
 
19714
+                ? build_one_cst (argtype)
 
19715
+                : integer_one_node);
 
19716
 
 
19717
        inc = cp_convert (argtype, inc, complain);
 
19718
 
 
19719
@@ -7194,8 +7204,7 @@
 
19720
             side effect associated with any single compound assignment
 
19721
             operator. -- end note ]  */
 
19722
          lhs = stabilize_reference (lhs);
 
19723
-         if (TREE_SIDE_EFFECTS (rhs))
 
19724
-           rhs = mark_rvalue_use (rhs);
 
19725
+         rhs = rvalue (rhs);
 
19726
          rhs = stabilize_expr (rhs, &init);
 
19727
          newrhs = cp_build_binary_op (input_location,
 
19728
                                       modifycode, lhs, rhs,
 
19729
@@ -7611,7 +7620,7 @@
 
19730
   /* Handle null pointer to member function conversions.  */
 
19731
   if (null_ptr_cst_p (pfn))
 
19732
     {
 
19733
-      pfn = build_c_cast (input_location, type, pfn);
 
19734
+      pfn = cp_build_c_cast (type, pfn, complain);
 
19735
       return build_ptrmemfunc1 (to_type,
 
19736
                                integer_zero_node,
 
19737
                                pfn);
 
19738
Index: gcc/cp/decl.c
 
19739
===================================================================
 
19740
--- a/src/gcc/cp/decl.c (.../tags/gcc_4_8_2_release)
 
19741
+++ b/src/gcc/cp/decl.c (.../branches/gcc-4_8-branch)
 
19742
@@ -1867,9 +1867,9 @@
 
19743
       /* Merge the data types specified in the two decls.  */
 
19744
       newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
 
19745
 
 
19746
-      /* If merge_types produces a non-typedef type, just use the old type.  */
 
19747
-      if (TREE_CODE (newdecl) == TYPE_DECL
 
19748
-         && newtype == DECL_ORIGINAL_TYPE (newdecl))
 
19749
+      /* For typedefs use the old type, as the new type's DECL_NAME points
 
19750
+        at newdecl, which will be ggc_freed.  */
 
19751
+      if (TREE_CODE (newdecl) == TYPE_DECL)
 
19752
        newtype = oldtype;
 
19753
 
 
19754
       if (TREE_CODE (newdecl) == VAR_DECL)
 
19755
@@ -8193,7 +8193,9 @@
 
19756
              abi_1_itype = error_mark_node;
 
19757
            }
 
19758
 
 
19759
-         size = maybe_constant_value (size);
 
19760
+         if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
 
19761
+           size = maybe_constant_value (size);
 
19762
+
 
19763
          if (!TREE_CONSTANT (size))
 
19764
            size = osize;
 
19765
        }
 
19766
@@ -11891,7 +11893,10 @@
 
19767
 
 
19768
   if (decl
 
19769
       && (DECL_CLASS_TEMPLATE_P (decl)
 
19770
-         || DECL_TEMPLATE_TEMPLATE_PARM_P (decl)))
 
19771
+         /* If scope is ts_current we're defining a class, so ignore a
 
19772
+            template template parameter.  */
 
19773
+         || (scope != ts_current
 
19774
+             && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
 
19775
     decl = DECL_TEMPLATE_RESULT (decl);
 
19776
 
 
19777
   if (decl && TREE_CODE (decl) == TYPE_DECL)
 
19778
Index: gcc/cp/except.c
 
19779
===================================================================
 
19780
--- a/src/gcc/cp/except.c       (.../tags/gcc_4_8_2_release)
 
19781
+++ b/src/gcc/cp/except.c       (.../branches/gcc-4_8-branch)
 
19782
@@ -380,6 +380,9 @@
 
19783
 {
 
19784
   tree type = body ? TREE_TYPE (body) : void_type_node;
 
19785
 
 
19786
+  if (!flag_exceptions)
 
19787
+    return body;
 
19788
+
 
19789
   if (cond && !value_dependent_expression_p (cond))
 
19790
     {
 
19791
       cond = cxx_constant_value (cond);
 
19792
Index: gcc/cp/ChangeLog
 
19793
===================================================================
 
19794
--- a/src/gcc/cp/ChangeLog      (.../tags/gcc_4_8_2_release)
 
19795
+++ b/src/gcc/cp/ChangeLog      (.../branches/gcc-4_8-branch)
 
19796
@@ -1,3 +1,246 @@
 
19797
+2014-02-28  Jason Merrill  <jason@redhat.com>
 
19798
+
 
19799
+       PR c++/58845
 
19800
+       * typeck.c (cp_build_binary_op): Sorry on vector&&vector.
 
19801
+
 
19802
+2014-02-26  Jason Merrill  <jason@redhat.com>
 
19803
+
 
19804
+       PR c++/60182
 
19805
+       * pt.c (unify): Ignore alias templates when deducing a template
 
19806
+       template parameter.
 
19807
+
 
19808
+2014-02-24  Jason Merrill  <jason@redhat.com>
 
19809
+
 
19810
+       PR c++/60146
 
19811
+       * pt.c (tsubst_omp_for_iterator): Don't let substitution of the
 
19812
+       DECL_EXPR initialize a non-class iterator.
 
19813
+
 
19814
+2014-02-24  Fabien Chêne  <fabien@gcc.gnu.org>
 
19815
+        PR c++/37140
 
19816
+        * parser.c (cp_parser_nonclass_name): Call strip_using_decl and
 
19817
+       move the code handling dependent USING_DECLs...
 
19818
+        * name-lookup.c (strip_using_decl): ...Here.
 
19819
+
 
19820
+2014-02-21  Jason Merrill  <jason@redhat.com>
 
19821
+
 
19822
+       PR c++/60108
 
19823
+       * semantics.c (expand_or_defer_fn_1): Check DECL_DEFAULTED_FN.
 
19824
+
 
19825
+       PR c++/60187
 
19826
+       * parser.c (cp_parser_enum_specifier): Call
 
19827
+       check_for_bare_parameter_packs.
 
19828
+
 
19829
+       PR c++/60216
 
19830
+       * pt.c (register_specialization): Copy DECL_DELETED_FN to clones.
 
19831
+
 
19832
+       PR c++/60219
 
19833
+       * pt.c (coerce_template_parms): Bail if argument packing fails.
 
19834
+
 
19835
+       PR c++/60248
 
19836
+       * mangle.c (mangle_decl): Don't make an alias for a TYPE_DECL.
 
19837
+
 
19838
+2014-02-20  Jason Merrill  <jason@redhat.com>
 
19839
+
 
19840
+       PR c++/60274
 
19841
+       Revert:
 
19842
+       PR c++/58606
 
19843
+       * pt.c (template_parm_to_arg): Call convert_from_reference.
 
19844
+       (tsubst_template_arg): Don't strip reference refs.
 
19845
+
 
19846
+2014-02-20  Kai Tietz  <ktietz@redhat.com>
 
19847
+
 
19848
+       PR c++/58873
 
19849
+       * parser.c (cp_parser_functional_cast): Treat NULL_TREE
 
19850
+       valued type argument as error_mark_node.
 
19851
+
 
19852
+       PR c++/58835
 
19853
+       * semantics.c (finish_fname): Handle error_mark_node.
 
19854
+
 
19855
+2014-02-19  Jason Merrill  <jason@redhat.com>
 
19856
+
 
19857
+       PR c++/60046
 
19858
+       * pt.c (maybe_instantiate_noexcept): Don't instantiate exception
 
19859
+       spec from template context.
 
19860
+
 
19861
+2014-01-31  Jason Merrill  <jason@redhat.com>
 
19862
+
 
19863
+       PR c++/58672
 
19864
+       * decl2.c (handle_tls_init): Handle null init fn.
 
19865
+
 
19866
+       PR c++/55800
 
19867
+       * decl2.c (get_tls_init_fn): Copy DECL_EXTERNAL from the variable.
 
19868
+
 
19869
+       PR c++/59646
 
19870
+       * call.c (convert_like_real) [ck_aggr]: Set TARGET_EXPR_LIST_INIT_P.
 
19871
+       [ck_list]: Check for error_mark_node.
 
19872
+
 
19873
+       PR c++/57043
 
19874
+       * pt.c (fn_type_unification): Don't do DEDUCE_EXACT check
 
19875
+       during partial ordering.
 
19876
+
 
19877
+2014-01-30  Jason Merrill  <jason@redhat.com>
 
19878
+
 
19879
+       PR c++/57899
 
19880
+       * pt.c (instantiate_template_1): Save/restore local_specializations.
 
19881
+
 
19882
+2014-01-29  Jason Merrill  <jason@redhat.com>
 
19883
+
 
19884
+       PR c++/59989
 
19885
+       * pt.c (expand_template_argument_pack): Correct
 
19886
+       non_default_args_count calculation.
 
19887
+
 
19888
+       PR c++/58466
 
19889
+       * pt.c (unify_pack_expansion): Call expand_template_argument_pack.
 
19890
+
 
19891
+2014-01-28  Jason Merrill  <jason@redhat.com>
 
19892
+
 
19893
+       PR c++/58632
 
19894
+       * decl.c (lookup_and_check_tag): Ignore template parameters if
 
19895
+       scope == ts_current.
 
19896
+       * pt.c (check_template_shadow): Don't complain about the injected
 
19897
+       class name.
 
19898
+
 
19899
+2014-01-27  Jason Merrill  <jason@redhat.com>
 
19900
+
 
19901
+       PR c++/54652
 
19902
+       * decl.c (duplicate_decls): Always use oldtype for TYPE_DECL.
 
19903
+
 
19904
+       PR c++/58504
 
19905
+       * pt.c (tsubst_copy_and_build) [TRAIT_EXPR]: Use tsubst for
 
19906
+       types.
 
19907
+
 
19908
+       PR c++/58606
 
19909
+       * pt.c (template_parm_to_arg): Call convert_from_reference.
 
19910
+       (tsubst_template_arg): Don't strip reference refs.
 
19911
+
 
19912
+       PR c++/58639
 
19913
+       * call.c (build_aggr_conv): Reject value-initialization of reference.
 
19914
+
 
19915
+       PR c++/58812
 
19916
+       * call.c (convert_like_real): Give helpful error about excess braces
 
19917
+       for reference binding, too.
 
19918
+
 
19919
+       PR c++/58814
 
19920
+       * typeck.c (cp_build_modify_expr): Make the RHS an rvalue before
 
19921
+       stabilizing.
 
19922
+
 
19923
+       PR c++/58837
 
19924
+       * typeck.c (cp_truthvalue_conversion): Use explicit comparison for
 
19925
+       FUNCTION_DECL.
 
19926
+
 
19927
+       PR c++/59097
 
19928
+       * decl.c (compute_array_index_type): Don't call
 
19929
+       maybe_constant_value for a non-integral expression.
 
19930
+
 
19931
+       PR c++/58965
 
19932
+       * mangle.c (write_guarded_var_name): Handle null DECL_NAME.
 
19933
+
 
19934
+2014-01-24  Paolo Carlini  <paolo.carlini@oracle.com>
 
19935
+
 
19936
+       PR c++/57524
 
19937
+       * name-lookup.c (push_using_directive): Use timevar_cond_start.
 
19938
+
 
19939
+2014-01-23  Jakub Jelinek  <jakub@redhat.com>
 
19940
+
 
19941
+       PR middle-end/58809
 
19942
+       * semantics.c (finish_omp_clauses): Reject MIN_EXPR, MAX_EXPR,
 
19943
+       BIT_AND_EXPR, BIT_IOR_EXPR and BIT_XOR_EXPR on COMPLEX_TYPEs.
 
19944
+
 
19945
+2014-01-20  Marek Polacek  <polacek@redhat.com>
 
19946
+
 
19947
+       Backported from mainline
 
19948
+       2014-01-17  Marek Polacek  <polacek@redhat.com>
 
19949
+
 
19950
+       PR c++/59838
 
19951
+       * cvt.c (ocp_convert): Don't segfault on non-existing
 
19952
+       ENUM_UNDERLYING_TYPE.
 
19953
+
 
19954
+2014-01-10  Paolo Carlini  <paolo.carlini@oracle.com>
 
19955
+
 
19956
+       PR c++/56060
 
19957
+       PR c++/59730
 
19958
+       * pt.c (type_dependent_expression_p): Handle EXPR_PACK_EXPANSION.
 
19959
+
 
19960
+2013-12-12  Jason Merrill  <jason@redhat.com>
 
19961
+
 
19962
+       PR c++/58954
 
19963
+       * pt.c (resolve_overloaded_unification): Discard access checks.
 
19964
+
 
19965
+2013-12-05  Jason Merrill  <jason@redhat.com>
 
19966
+
 
19967
+       PR c++/59044
 
19968
+       PR c++/59052
 
19969
+       * pt.c (most_specialized_class): Use the partially instantiated
 
19970
+       template for deduction.  Drop the TMPL parameter.
 
19971
+
 
19972
+2013-12-04  Jakub Jelinek  <jakub@redhat.com>
 
19973
+
 
19974
+       PR c++/59268
 
19975
+       * pt.c (tsubst_copy_and_build): Handle POINTER_PLUS_EXPR.
 
19976
+
 
19977
+2013-11-27  Tom de Vries  <tom@codesourcery.com>
 
19978
+           Marc Glisse  <marc.glisse@inria.fr>
 
19979
+
 
19980
+       PR c++/59032
 
19981
+       * typeck.c (cp_build_unary_op): Allow vector increment and decrement.
 
19982
+
 
19983
+2013-11-27  Tom de Vries  <tom@codesourcery.com>
 
19984
+           Marc Glisse  <marc.glisse@inria.fr>
 
19985
+
 
19986
+       PR middle-end/59037
 
19987
+       * semantics.c (cxx_fold_indirect_ref): Don't create out-of-bounds
 
19988
+       BIT_FIELD_REF.
 
19989
+
 
19990
+2013-11-28  Jakub Jelinek  <jakub@redhat.com>
 
19991
+
 
19992
+       PR c++/59297
 
19993
+       * semantics.c (finish_omp_atomic): Call finish_expr_stmt
 
19994
+       rather than add_stmt.
 
19995
+
 
19996
+2013-11-23  Easwaran Raman  <eraman@google.com>
 
19997
+
 
19998
+       PR c++/59031
 
19999
+       * call.c (build_new_method_call_1): Comnpare function context
 
20000
+       with BASELINK_BINFO type rather than instance type before
 
20001
+       marking the call with LOOKUP_NONVIRTUAL.
 
20002
+
 
20003
+2013-10-31  Jason Merrill  <jason@redhat.com>
 
20004
+
 
20005
+       PR c++/58162
 
20006
+       * parser.c (cp_parser_late_parse_one_default_arg): Set
 
20007
+       TARGET_EXPR_DIRECT_INIT_P.
 
20008
+
 
20009
+2013-11-11  Paolo Carlini  <paolo.carlini@oracle.com>
 
20010
+
 
20011
+       * cvt.c (cp_convert_to_pointer): Call build_ptrmemfunc before
 
20012
+       maybe_warn_zero_as_null_pointer_constant to avoid duplicate
 
20013
+       -Wzero-as-null-pointer-constant diagnostics.
 
20014
+
 
20015
+       * typeck.c (build_ptrmemfunc): Use cp_build_c_cast.
 
20016
+
 
20017
+2013-10-25  Tom de Vries  <tom@codesourcery.com>
 
20018
+
 
20019
+       PR c++/58282
 
20020
+       * except.c (build_must_not_throw_expr): Handle
 
20021
+       flag_exceptions.
 
20022
+
 
20023
+2013-10-17  Paolo Carlini  <paolo.carlini@oracle.com>
 
20024
+
 
20025
+       PR c++/58596
 
20026
+       * semantics.c (lambda_expr_this_capture): Handle NSDMIs in the
 
20027
+       cp_unevaluated_operand case.
 
20028
+
 
20029
+2013-10-16  Paolo Carlini  <paolo.carlini@oracle.com>
 
20030
+
 
20031
+       PR c++/58633
 
20032
+       * parser.c (cp_parser_pseudo_destructor_name): Revert r174385 changes.
 
20033
+
 
20034
+2013-10-16  Jason Merrill  <jason@redhat.com>
 
20035
+
 
20036
+       PR c++/57850
 
20037
+       * decl2.c (dump_tu): Split out from...
 
20038
+       (cp_write_global_declarations): ...here.  Call it in PCH mode.
 
20039
+
 
20040
 2013-10-16  Release Manager
 
20041
 
 
20042
        * GCC 4.8.2 released.
 
20043
Index: gcc/cp/pt.c
 
20044
===================================================================
 
20045
--- a/src/gcc/cp/pt.c   (.../tags/gcc_4_8_2_release)
 
20046
+++ b/src/gcc/cp/pt.c   (.../branches/gcc-4_8-branch)
 
20047
@@ -170,7 +170,7 @@
 
20048
 static tree tsubst_template_args (tree, tree, tsubst_flags_t, tree);
 
20049
 static tree tsubst_template_parms (tree, tree, tsubst_flags_t);
 
20050
 static void regenerate_decl_from_template (tree, tree);
 
20051
-static tree most_specialized_class (tree, tree, tsubst_flags_t);
 
20052
+static tree most_specialized_class (tree, tsubst_flags_t);
 
20053
 static tree tsubst_aggr_type (tree, tree, tsubst_flags_t, tree, int);
 
20054
 static tree tsubst_arg_types (tree, tree, tree, tsubst_flags_t, tree);
 
20055
 static tree tsubst_function_type (tree, tree, tsubst_flags_t, tree);
 
20056
@@ -1419,6 +1419,8 @@
 
20057
                    = DECL_DECLARED_INLINE_P (fn);
 
20058
                  DECL_SOURCE_LOCATION (clone)
 
20059
                    = DECL_SOURCE_LOCATION (fn);
 
20060
+                 DECL_DELETED_FN (clone)
 
20061
+                   = DECL_DELETED_FN (fn);
 
20062
                }
 
20063
              check_specialization_namespace (tmpl);
 
20064
 
 
20065
@@ -3436,7 +3438,7 @@
 
20066
           for (i = 0; i < num_packed; ++i, ++out_arg)
 
20067
             TREE_VEC_ELT (result_args, out_arg) = TREE_VEC_ELT(packed, i);
 
20068
          if (non_default_args_count > 0)
 
20069
-           non_default_args_count += num_packed;
 
20070
+           non_default_args_count += num_packed - 1;
 
20071
         }
 
20072
       else
 
20073
         {
 
20074
@@ -3491,6 +3493,11 @@
 
20075
       || TEMPLATE_PARMS_FOR_INLINE (current_template_parms))
 
20076
     return true;
 
20077
 
 
20078
+  /* Don't complain about the injected class name, as we've already
 
20079
+     complained about the class itself.  */
 
20080
+  if (DECL_SELF_REFERENCE_P (decl))
 
20081
+    return false;
 
20082
+
 
20083
   error ("declaration of %q+#D", decl);
 
20084
   error (" shadows template parm %q+#D", olddecl);
 
20085
   return false;
 
20086
@@ -4261,7 +4268,7 @@
 
20087
       if (COMPLETE_TYPE_P (inst_type)
 
20088
          && CLASSTYPE_IMPLICIT_INSTANTIATION (inst_type))
 
20089
        {
 
20090
-         tree spec = most_specialized_class (inst_type, maintmpl, tf_none);
 
20091
+         tree spec = most_specialized_class (inst_type, tf_none);
 
20092
          if (spec && TREE_TYPE (spec) == type)
 
20093
            permerror (input_location,
 
20094
                       "partial specialization of %qT after instantiation "
 
20095
@@ -6672,6 +6679,8 @@
 
20096
           /* Store this argument.  */
 
20097
           if (arg == error_mark_node)
 
20098
             lost++;
 
20099
+         if (lost)
 
20100
+           break;
 
20101
           TREE_VEC_ELT (new_inner_args, parm_idx) = arg;
 
20102
 
 
20103
          /* We are done with all of the arguments.  */
 
20104
@@ -8572,7 +8581,7 @@
 
20105
 
 
20106
   /* Determine what specialization of the original template to
 
20107
      instantiate.  */
 
20108
-  t = most_specialized_class (type, templ, tf_warning_or_error);
 
20109
+  t = most_specialized_class (type, tf_warning_or_error);
 
20110
   if (t == error_mark_node)
 
20111
     {
 
20112
       TYPE_BEING_DEFINED (type) = 1;
 
20113
@@ -12694,27 +12703,43 @@
 
20114
   tsubst_expr ((NODE), args, complain, in_decl,        \
 
20115
               integral_constant_expression_p)
 
20116
   tree decl, init, cond, incr;
 
20117
-  bool init_decl;
 
20118
 
 
20119
   init = TREE_VEC_ELT (OMP_FOR_INIT (t), i);
 
20120
   gcc_assert (TREE_CODE (init) == MODIFY_EXPR);
 
20121
   decl = TREE_OPERAND (init, 0);
 
20122
   init = TREE_OPERAND (init, 1);
 
20123
-  /* Do this before substituting into decl to handle 'auto'.  */
 
20124
-  init_decl = (init && TREE_CODE (init) == DECL_EXPR);
 
20125
-  init = RECUR (init);
 
20126
-  decl = RECUR (decl);
 
20127
-  if (init_decl)
 
20128
+  tree decl_expr = NULL_TREE;
 
20129
+  if (init && TREE_CODE (init) == DECL_EXPR)
 
20130
     {
 
20131
-      gcc_assert (!processing_template_decl);
 
20132
-      init = DECL_INITIAL (decl);
 
20133
-      DECL_INITIAL (decl) = NULL_TREE;
 
20134
+      /* We need to jump through some hoops to handle declarations in the
 
20135
+        for-init-statement, since we might need to handle auto deduction,
 
20136
+        but we need to keep control of initialization.  */
 
20137
+      decl_expr = init;
 
20138
+      init = DECL_INITIAL (DECL_EXPR_DECL (init));
 
20139
+      decl = tsubst_decl (decl, args, complain);
 
20140
     }
 
20141
+  else
 
20142
+    decl = RECUR (decl);
 
20143
+  init = RECUR (init);
 
20144
 
 
20145
+  tree auto_node = type_uses_auto (TREE_TYPE (decl));
 
20146
+  if (auto_node && init)
 
20147
+    TREE_TYPE (decl)
 
20148
+      = do_auto_deduction (TREE_TYPE (decl), init, auto_node);
 
20149
+
 
20150
   gcc_assert (!type_dependent_expression_p (decl));
 
20151
 
 
20152
   if (!CLASS_TYPE_P (TREE_TYPE (decl)))
 
20153
     {
 
20154
+      if (decl_expr)
 
20155
+       {
 
20156
+         /* Declare the variable, but don't let that initialize it.  */
 
20157
+         tree init_sav = DECL_INITIAL (DECL_EXPR_DECL (decl_expr));
 
20158
+         DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = NULL_TREE;
 
20159
+         RECUR (decl_expr);
 
20160
+         DECL_INITIAL (DECL_EXPR_DECL (decl_expr)) = init_sav;
 
20161
+       }
 
20162
+
 
20163
       cond = RECUR (TREE_VEC_ELT (OMP_FOR_COND (t), i));
 
20164
       incr = TREE_VEC_ELT (OMP_FOR_INCR (t), i);
 
20165
       if (TREE_CODE (incr) == MODIFY_EXPR)
 
20166
@@ -12731,8 +12756,14 @@
 
20167
       return;
 
20168
     }
 
20169
 
 
20170
-  if (init && !init_decl)
 
20171
+  if (decl_expr)
 
20172
     {
 
20173
+      /* Declare and initialize the variable.  */
 
20174
+      RECUR (decl_expr);
 
20175
+      init = NULL_TREE;
 
20176
+    }
 
20177
+  else if (init)
 
20178
+    {
 
20179
       tree c;
 
20180
       for (c = *clauses; c ; c = OMP_CLAUSE_CHAIN (c))
 
20181
        {
 
20182
@@ -13710,6 +13741,10 @@
 
20183
        RETURN (r);
 
20184
       }
 
20185
 
 
20186
+    case POINTER_PLUS_EXPR:
 
20187
+      return fold_build_pointer_plus (RECUR (TREE_OPERAND (t, 0)),
 
20188
+                                     RECUR (TREE_OPERAND (t, 1)));
 
20189
+
 
20190
     case SCOPE_REF:
 
20191
       RETURN (tsubst_qualified_id (t, args, complain, in_decl, /*done=*/true,
 
20192
                                  /*address_p=*/false));
 
20193
@@ -14471,12 +14506,12 @@
 
20194
 
 
20195
     case TRAIT_EXPR:
 
20196
       {
 
20197
-       tree type1 = tsubst_copy (TRAIT_EXPR_TYPE1 (t), args,
 
20198
-                                 complain, in_decl);
 
20199
+       tree type1 = tsubst (TRAIT_EXPR_TYPE1 (t), args,
 
20200
+                            complain, in_decl);
 
20201
 
 
20202
        tree type2 = TRAIT_EXPR_TYPE2 (t);
 
20203
        if (type2)
 
20204
-         type2 = tsubst_copy (type2, args, complain, in_decl);
 
20205
+         type2 = tsubst (type2, args, complain, in_decl);
 
20206
        
 
20207
        RETURN (finish_trait_expr (TRAIT_EXPR_KIND (t), type1, type2));
 
20208
       }
 
20209
@@ -14778,6 +14813,8 @@
 
20210
   /* Instantiation of the function happens in the context of the function
 
20211
      template, not the context of the overload resolution we're doing.  */
 
20212
   push_to_top_level ();
 
20213
+  struct pointer_map_t *saved_local_specializations = local_specializations;
 
20214
+  local_specializations = NULL;
 
20215
   /* If there are dependent arguments, e.g. because we're doing partial
 
20216
      ordering, make sure processing_template_decl stays set.  */
 
20217
   if (uses_template_parms (targ_ptr))
 
20218
@@ -14793,6 +14830,7 @@
 
20219
                   targ_ptr, complain, gen_tmpl);
 
20220
   if (DECL_CLASS_SCOPE_P (gen_tmpl))
 
20221
     pop_nested_class ();
 
20222
+  local_specializations = saved_local_specializations;
 
20223
   pop_from_top_level ();
 
20224
 
 
20225
   if (fndecl == error_mark_node)
 
20226
@@ -15192,8 +15230,11 @@
 
20227
 
 
20228
   /* If we're looking for an exact match, check that what we got
 
20229
      is indeed an exact match.  It might not be if some template
 
20230
-     parameters are used in non-deduced contexts.  */
 
20231
-  if (strict == DEDUCE_EXACT)
 
20232
+     parameters are used in non-deduced contexts.  But don't check
 
20233
+     for an exact match if we have dependent template arguments;
 
20234
+     in that case we're doing partial ordering, and we already know
 
20235
+     that we have two candidates that will provide the actual type.  */
 
20236
+  if (strict == DEDUCE_EXACT && !any_dependent_template_arguments_p (targs))
 
20237
     {
 
20238
       tree substed = TREE_TYPE (decl);
 
20239
       unsigned int i;
 
20240
@@ -15749,7 +15790,7 @@
 
20241
          if (subargs != error_mark_node
 
20242
              && !any_dependent_template_arguments_p (subargs))
 
20243
            {
 
20244
-             elem = tsubst (TREE_TYPE (fn), subargs, tf_none, NULL_TREE);
 
20245
+             elem = TREE_TYPE (instantiate_template (fn, subargs, tf_none));
 
20246
              if (try_one_overload (tparms, targs, tempargs, parm,
 
20247
                                    elem, strict, sub_strict, addr_p, explain_p)
 
20248
                  && (!goodfn || !same_type_p (goodfn, elem)))
 
20249
@@ -16207,6 +16248,9 @@
 
20250
   tree pattern = PACK_EXPANSION_PATTERN (parm);
 
20251
   tree pack, packs = NULL_TREE;
 
20252
   int i, start = TREE_VEC_LENGTH (packed_parms) - 1;
 
20253
+
 
20254
+  packed_args = expand_template_argument_pack (packed_args);
 
20255
+
 
20256
   int len = TREE_VEC_LENGTH (packed_args);
 
20257
 
 
20258
   /* Determine the parameter packs we will be deducing from the
 
20259
@@ -16574,9 +16618,11 @@
 
20260
          if (TREE_CODE (arg) != BOUND_TEMPLATE_TEMPLATE_PARM
 
20261
              && !CLASSTYPE_SPECIALIZATION_OF_PRIMARY_TEMPLATE_P (arg))
 
20262
            return unify_template_deduction_failure (explain_p, parm, arg);
 
20263
-
 
20264
          {
 
20265
            tree parmvec = TYPE_TI_ARGS (parm);
 
20266
+           /* An alias template name is never deduced.  */
 
20267
+           if (TYPE_ALIAS_P (arg))
 
20268
+             arg = strip_typedefs (arg);
 
20269
            tree argvec = INNERMOST_TEMPLATE_ARGS (TYPE_TI_ARGS (arg));
 
20270
            tree full_argvec = add_to_template_args (targs, argvec);
 
20271
            tree parm_parms 
 
20272
@@ -17553,7 +17599,7 @@
 
20273
     return -1;
 
20274
 }
 
20275
 
 
20276
-/* Determine which of two partial specializations of MAIN_TMPL is more
 
20277
+/* Determine which of two partial specializations of TMPL is more
 
20278
    specialized.
 
20279
 
 
20280
    PAT1 is a TREE_LIST whose TREE_TYPE is the _TYPE node corresponding
 
20281
@@ -17569,7 +17615,7 @@
 
20282
    two templates is more specialized.  */
 
20283
 
 
20284
 static int
 
20285
-more_specialized_class (tree main_tmpl, tree pat1, tree pat2)
 
20286
+more_specialized_class (tree tmpl, tree pat1, tree pat2)
 
20287
 {
 
20288
   tree targs;
 
20289
   tree tmpl1, tmpl2;
 
20290
@@ -17584,7 +17630,7 @@
 
20291
      types in the arguments, and we need our dependency check functions
 
20292
      to behave correctly.  */
 
20293
   ++processing_template_decl;
 
20294
-  targs = get_class_bindings (main_tmpl, TREE_VALUE (pat1),
 
20295
+  targs = get_class_bindings (tmpl, TREE_VALUE (pat1),
 
20296
                              CLASSTYPE_TI_ARGS (tmpl1),
 
20297
                              CLASSTYPE_TI_ARGS (tmpl2));
 
20298
   if (targs)
 
20299
@@ -17593,7 +17639,7 @@
 
20300
       any_deductions = true;
 
20301
     }
 
20302
 
 
20303
-  targs = get_class_bindings (main_tmpl, TREE_VALUE (pat2),
 
20304
+  targs = get_class_bindings (tmpl, TREE_VALUE (pat2),
 
20305
                              CLASSTYPE_TI_ARGS (tmpl2),
 
20306
                              CLASSTYPE_TI_ARGS (tmpl1));
 
20307
   if (targs)
 
20308
@@ -17673,7 +17719,7 @@
 
20309
 }
 
20310
 
 
20311
 /* Return the innermost template arguments that, when applied to a partial
 
20312
-   specialization of MAIN_TMPL whose innermost template parameters are
 
20313
+   specialization of TMPL whose innermost template parameters are
 
20314
    TPARMS, and whose specialization arguments are SPEC_ARGS, yield the
 
20315
    ARGS.
 
20316
 
 
20317
@@ -17688,7 +17734,7 @@
 
20318
    is bound to `double'.  */
 
20319
 
 
20320
 static tree
 
20321
-get_class_bindings (tree main_tmpl, tree tparms, tree spec_args, tree args)
 
20322
+get_class_bindings (tree tmpl, tree tparms, tree spec_args, tree args)
 
20323
 {
 
20324
   int i, ntparms = TREE_VEC_LENGTH (tparms);
 
20325
   tree deduced_args;
 
20326
@@ -17728,8 +17774,8 @@
 
20327
      `T' is `A' but unify () does not check whether `typename T::X'
 
20328
      is `int'.  */
 
20329
   spec_args = tsubst (spec_args, deduced_args, tf_none, NULL_TREE);
 
20330
-  spec_args = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (main_tmpl),
 
20331
-                                    spec_args, main_tmpl,
 
20332
+  spec_args = coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
 
20333
+                                    spec_args, tmpl,
 
20334
                                     tf_none, false, false);
 
20335
   if (spec_args == error_mark_node
 
20336
       /* We only need to check the innermost arguments; the other
 
20337
@@ -17877,8 +17923,8 @@
 
20338
 }
 
20339
 
 
20340
 /* Return the most specialized of the class template partial
 
20341
-   specializations of TMPL which can produce TYPE, a specialization of
 
20342
-   TMPL.  The value returned is actually a TREE_LIST; the TREE_TYPE is
 
20343
+   specializations which can produce TYPE, a specialization of some class
 
20344
+   template.  The value returned is actually a TREE_LIST; the TREE_TYPE is
 
20345
    a _TYPE node corresponding to the partial specialization, while the
 
20346
    TREE_PURPOSE is the set of template arguments that must be
 
20347
    substituted into the TREE_TYPE in order to generate TYPE.
 
20348
@@ -17885,11 +17931,11 @@
 
20349
 
 
20350
    If the choice of partial specialization is ambiguous, a diagnostic
 
20351
    is issued, and the error_mark_node is returned.  If there are no
 
20352
-   partial specializations of TMPL matching TYPE, then NULL_TREE is
 
20353
-   returned.  */
 
20354
+   partial specializations matching TYPE, then NULL_TREE is
 
20355
+   returned, indicating that the primary template should be used.  */
 
20356
 
 
20357
 static tree
 
20358
-most_specialized_class (tree type, tree tmpl, tsubst_flags_t complain)
 
20359
+most_specialized_class (tree type, tsubst_flags_t complain)
 
20360
 {
 
20361
   tree list = NULL_TREE;
 
20362
   tree t;
 
20363
@@ -17896,11 +17942,11 @@
 
20364
   tree champ;
 
20365
   int fate;
 
20366
   bool ambiguous_p;
 
20367
-  tree args;
 
20368
   tree outer_args = NULL_TREE;
 
20369
 
 
20370
-  tmpl = most_general_template (tmpl);
 
20371
-  args = CLASSTYPE_TI_ARGS (type);
 
20372
+  tree tmpl = CLASSTYPE_TI_TEMPLATE (type);
 
20373
+  tree main_tmpl = most_general_template (tmpl);
 
20374
+  tree args = CLASSTYPE_TI_ARGS (type);
 
20375
 
 
20376
   /* For determining which partial specialization to use, only the
 
20377
      innermost args are interesting.  */
 
20378
@@ -17910,7 +17956,7 @@
 
20379
       args = INNERMOST_TEMPLATE_ARGS (args);
 
20380
     }
 
20381
 
 
20382
-  for (t = DECL_TEMPLATE_SPECIALIZATIONS (tmpl); t; t = TREE_CHAIN (t))
 
20383
+  for (t = DECL_TEMPLATE_SPECIALIZATIONS (main_tmpl); t; t = TREE_CHAIN (t))
 
20384
     {
 
20385
       tree partial_spec_args;
 
20386
       tree spec_args;
 
20387
@@ -17944,8 +17990,7 @@
 
20388
 
 
20389
       partial_spec_args =
 
20390
          coerce_template_parms (DECL_INNERMOST_TEMPLATE_PARMS (tmpl),
 
20391
-                                add_to_template_args (outer_args,
 
20392
-                                                      partial_spec_args),
 
20393
+                                partial_spec_args,
 
20394
                                 tmpl, tf_none,
 
20395
                                 /*require_all_args=*/true,
 
20396
                                 /*use_default_args=*/true);
 
20397
@@ -18553,6 +18598,10 @@
 
20398
 {
 
20399
   tree fntype, spec, noex, clone;
 
20400
 
 
20401
+  /* Don't instantiate a noexcept-specification from template context.  */
 
20402
+  if (processing_template_decl)
 
20403
+    return;
 
20404
+
 
20405
   if (DECL_CLONED_FUNCTION_P (fn))
 
20406
     fn = DECL_CLONED_FUNCTION (fn);
 
20407
   fntype = TREE_TYPE (fn);
 
20408
@@ -19955,6 +20004,10 @@
 
20409
       if (TREE_CODE (expression) == SCOPE_REF)
 
20410
        return false;
 
20411
 
 
20412
+      /* Always dependent, on the number of arguments if nothing else.  */
 
20413
+      if (TREE_CODE (expression) == EXPR_PACK_EXPANSION)
 
20414
+       return true;
 
20415
+
 
20416
       if (BASELINK_P (expression))
 
20417
        expression = BASELINK_FUNCTIONS (expression);
 
20418
 
 
20419
Index: gcc/cp/semantics.c
 
20420
===================================================================
 
20421
--- a/src/gcc/cp/semantics.c    (.../tags/gcc_4_8_2_release)
 
20422
+++ b/src/gcc/cp/semantics.c    (.../branches/gcc-4_8-branch)
 
20423
@@ -2501,7 +2501,8 @@
 
20424
   tree decl;
 
20425
 
 
20426
   decl = fname_decl (input_location, C_RID_CODE (id), id);
 
20427
-  if (processing_template_decl && current_function_decl)
 
20428
+  if (processing_template_decl && current_function_decl
 
20429
+      && decl != error_mark_node)
 
20430
     decl = DECL_NAME (decl);
 
20431
   return decl;
 
20432
 }
 
20433
@@ -3853,7 +3854,7 @@
 
20434
             linkage of all functions, and as that causes writes to
 
20435
             the data mapped in from the PCH file, it's advantageous
 
20436
             to mark the functions at this point.  */
 
20437
-         if (!DECL_IMPLICIT_INSTANTIATION (fn))
 
20438
+         if (!DECL_IMPLICIT_INSTANTIATION (fn) || DECL_DEFAULTED_FN (fn))
 
20439
            {
 
20440
              /* This function must have external linkage, as
 
20441
                 otherwise DECL_INTERFACE_KNOWN would have been
 
20442
@@ -4291,7 +4292,8 @@
 
20443
              error ("%qE has invalid type for %<reduction%>", t);
 
20444
              remove = true;
 
20445
            }
 
20446
-         else if (FLOAT_TYPE_P (TREE_TYPE (t)))
 
20447
+         else if (FLOAT_TYPE_P (TREE_TYPE (t))
 
20448
+                  || TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
 
20449
            {
 
20450
              enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
 
20451
              switch (r_code)
 
20452
@@ -4299,10 +4301,26 @@
 
20453
                case PLUS_EXPR:
 
20454
                case MULT_EXPR:
 
20455
                case MINUS_EXPR:
 
20456
+                 break;
 
20457
                case MIN_EXPR:
 
20458
                case MAX_EXPR:
 
20459
+                 if (TREE_CODE (TREE_TYPE (t)) == COMPLEX_TYPE)
 
20460
+                   r_code = ERROR_MARK;
 
20461
                  break;
 
20462
+               case BIT_AND_EXPR:
 
20463
+               case BIT_XOR_EXPR:
 
20464
+               case BIT_IOR_EXPR:
 
20465
                default:
 
20466
+                 r_code = ERROR_MARK;
 
20467
+                 break;
 
20468
+               case TRUTH_ANDIF_EXPR:
 
20469
+               case TRUTH_ORIF_EXPR:
 
20470
+                 if (FLOAT_TYPE_P (TREE_TYPE (t)))
 
20471
+                   r_code = ERROR_MARK;
 
20472
+                 break;
 
20473
+               }
 
20474
+             if (r_code == ERROR_MARK)
 
20475
+               {
 
20476
                  error ("%qE has invalid type for %<reduction(%s)%>",
 
20477
                         t, operator_name_info[r_code].name);
 
20478
                  remove = true;
 
20479
@@ -5059,7 +5077,7 @@
 
20480
        }
 
20481
       stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node, stmt);
 
20482
     }
 
20483
-  add_stmt (stmt);
 
20484
+  finish_expr_stmt (stmt);
 
20485
 }
 
20486
 
 
20487
 void
 
20488
@@ -7543,7 +7561,7 @@
 
20489
              unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
 
20490
              tree index = bitsize_int (indexi);
 
20491
 
 
20492
-             if (offset/part_widthi <= TYPE_VECTOR_SUBPARTS (op00type))
 
20493
+             if (offset / part_widthi < TYPE_VECTOR_SUBPARTS (op00type))
 
20494
                return fold_build3_loc (loc,
 
20495
                                        BIT_FIELD_REF, type, op00,
 
20496
                                        part_width, index);
 
20497
@@ -9481,7 +9499,14 @@
 
20498
   /* In unevaluated context this isn't an odr-use, so just return the
 
20499
      nearest 'this'.  */
 
20500
   if (cp_unevaluated_operand)
 
20501
-    return lookup_name (this_identifier);
 
20502
+    {
 
20503
+      /* In an NSDMI the fake 'this' pointer that we're using for
 
20504
+        parsing is in scope_chain.  */
 
20505
+      if (LAMBDA_EXPR_EXTRA_SCOPE (lambda)
 
20506
+         && TREE_CODE (LAMBDA_EXPR_EXTRA_SCOPE (lambda)) == FIELD_DECL)
 
20507
+       return scope_chain->x_current_class_ptr;
 
20508
+      return lookup_name (this_identifier);
 
20509
+    }
 
20510
 
 
20511
   /* Try to default capture 'this' if we can.  */
 
20512
   if (!this_capture
 
20513
Index: gcc/cp/decl2.c
 
20514
===================================================================
 
20515
--- a/src/gcc/cp/decl2.c        (.../tags/gcc_4_8_2_release)
 
20516
+++ b/src/gcc/cp/decl2.c        (.../branches/gcc-4_8-branch)
 
20517
@@ -2884,7 +2884,7 @@
 
20518
       TREE_PUBLIC (fn) = TREE_PUBLIC (var);
 
20519
       DECL_ARTIFICIAL (fn) = true;
 
20520
       DECL_COMDAT (fn) = DECL_COMDAT (var);
 
20521
-      DECL_EXTERNAL (fn) = true;
 
20522
+      DECL_EXTERNAL (fn) = DECL_EXTERNAL (var);
 
20523
       if (DECL_ONE_ONLY (var))
 
20524
        make_decl_one_only (fn, cxx_comdat_group (fn));
 
20525
       if (TREE_PUBLIC (var))
 
20526
@@ -3946,6 +3946,8 @@
 
20527
       if (TREE_PUBLIC (var))
 
20528
        {
 
20529
           tree single_init_fn = get_tls_init_fn (var);
 
20530
+         if (single_init_fn == NULL_TREE)
 
20531
+           continue;
 
20532
          cgraph_node *alias
 
20533
            = cgraph_same_body_alias (cgraph_get_create_node (fn),
 
20534
                                      single_init_fn, fn);
 
20535
@@ -3960,6 +3962,22 @@
 
20536
   expand_or_defer_fn (finish_function (0));
 
20537
 }
 
20538
 
 
20539
+/* The entire file is now complete.  If requested, dump everything
 
20540
+   to a file.  */
 
20541
+
 
20542
+static void
 
20543
+dump_tu (void)
 
20544
+{
 
20545
+  int flags;
 
20546
+  FILE *stream = dump_begin (TDI_tu, &flags);
 
20547
+
 
20548
+  if (stream)
 
20549
+    {
 
20550
+      dump_node (global_namespace, flags & ~TDF_SLIM, stream);
 
20551
+      dump_end (TDI_tu, stream);
 
20552
+    }
 
20553
+}
 
20554
+
 
20555
 /* This routine is called at the end of compilation.
 
20556
    Its job is to create all the code needed to initialize and
 
20557
    destroy the global aggregates.  We do the destruction
 
20558
@@ -3990,6 +4008,7 @@
 
20559
   if (pch_file)
 
20560
     {
 
20561
       c_common_write_pch ();
 
20562
+      dump_tu ();
 
20563
       return;
 
20564
     }
 
20565
 
 
20566
@@ -4359,17 +4378,8 @@
 
20567
 
 
20568
   /* The entire file is now complete.  If requested, dump everything
 
20569
      to a file.  */
 
20570
-  {
 
20571
-    int flags;
 
20572
-    FILE *stream = dump_begin (TDI_tu, &flags);
 
20573
+  dump_tu ();
 
20574
 
 
20575
-    if (stream)
 
20576
-      {
 
20577
-       dump_node (global_namespace, flags & ~TDF_SLIM, stream);
 
20578
-       dump_end (TDI_tu, stream);
 
20579
-      }
 
20580
-  }
 
20581
-
 
20582
   if (flag_detailed_statistics)
 
20583
     {
 
20584
       dump_tree_statistics ();
 
20585
Index: gcc/cp/parser.c
 
20586
===================================================================
 
20587
--- a/src/gcc/cp/parser.c       (.../tags/gcc_4_8_2_release)
 
20588
+++ b/src/gcc/cp/parser.c       (.../branches/gcc-4_8-branch)
 
20589
@@ -6421,10 +6421,6 @@
 
20590
   /* Look for the `~'.  */
 
20591
   cp_parser_require (parser, CPP_COMPL, RT_COMPL);
 
20592
 
 
20593
-  /* Once we see the ~, this has to be a pseudo-destructor.  */
 
20594
-  if (!processing_template_decl && !cp_parser_error_occurred (parser))
 
20595
-    cp_parser_commit_to_tentative_parse (parser);
 
20596
-
 
20597
   /* Look for the type-name again.  We are not responsible for
 
20598
      checking that it matches the first type-name.  */
 
20599
   *type = cp_parser_nonclass_name (parser);
 
20600
@@ -14168,25 +14164,7 @@
 
20601
   /* Look up the type-name.  */
 
20602
   type_decl = cp_parser_lookup_name_simple (parser, identifier, token->location);
 
20603
 
 
20604
-  if (TREE_CODE (type_decl) == USING_DECL)
 
20605
-    {
 
20606
-      if (!DECL_DEPENDENT_P (type_decl))
 
20607
-       type_decl = strip_using_decl (type_decl);
 
20608
-      else if (USING_DECL_TYPENAME_P (type_decl))
 
20609
-       {
 
20610
-         /* We have found a type introduced by a using
 
20611
-            declaration at class scope that refers to a dependent
 
20612
-            type.
 
20613
-            
 
20614
-            using typename :: [opt] nested-name-specifier unqualified-id ;
 
20615
-         */
 
20616
-         type_decl = make_typename_type (TREE_TYPE (type_decl),
 
20617
-                                         DECL_NAME (type_decl),
 
20618
-                                         typename_type, tf_error);
 
20619
-         if (type_decl != error_mark_node)
 
20620
-           type_decl = TYPE_NAME (type_decl);
 
20621
-       }
 
20622
-    }
 
20623
+  type_decl = strip_using_decl (type_decl);
 
20624
   
 
20625
   if (TREE_CODE (type_decl) != TYPE_DECL
 
20626
       && (objc_is_id (identifier) || objc_is_class_name (identifier)))
 
20627
@@ -14742,7 +14720,8 @@
 
20628
         {
 
20629
           underlying_type = grokdeclarator (NULL, &type_specifiers, TYPENAME,
 
20630
                                             /*initialized=*/0, NULL);
 
20631
-          if (underlying_type == error_mark_node)
 
20632
+          if (underlying_type == error_mark_node
 
20633
+             || check_for_bare_parameter_packs (underlying_type))
 
20634
             underlying_type = NULL_TREE;
 
20635
         }
 
20636
     }
 
20637
@@ -22209,6 +22188,9 @@
 
20638
   tree cast;
 
20639
   bool nonconst_p;
 
20640
 
 
20641
+  if (!type)
 
20642
+    type = error_mark_node;
 
20643
+
 
20644
   if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
 
20645
     {
 
20646
       maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
 
20647
@@ -22576,6 +22558,9 @@
 
20648
              && CONSTRUCTOR_IS_DIRECT_INIT (parsed_arg))
 
20649
            flags = LOOKUP_NORMAL;
 
20650
          parsed_arg = digest_init_flags (TREE_TYPE (decl), parsed_arg, flags);
 
20651
+         if (TREE_CODE (parsed_arg) == TARGET_EXPR)
 
20652
+           /* This represents the whole initialization.  */
 
20653
+           TARGET_EXPR_DIRECT_INIT_P (parsed_arg) = true;
 
20654
        }
 
20655
     }
 
20656
 
 
20657
Index: gcc/cp/call.c
 
20658
===================================================================
 
20659
--- a/src/gcc/cp/call.c (.../tags/gcc_4_8_2_release)
 
20660
+++ b/src/gcc/cp/call.c (.../branches/gcc-4_8-branch)
 
20661
@@ -892,6 +892,9 @@
 
20662
 
 
20663
       if (i < CONSTRUCTOR_NELTS (ctor))
 
20664
        val = CONSTRUCTOR_ELT (ctor, i)->value;
 
20665
+      else if (TREE_CODE (ftype) == REFERENCE_TYPE)
 
20666
+       /* Value-initialization of reference is ill-formed.  */
 
20667
+       return NULL;
 
20668
       else
 
20669
        {
 
20670
          if (empty_ctor == NULL_TREE)
 
20671
@@ -5806,9 +5809,11 @@
 
20672
       && convs->kind != ck_ambig
 
20673
       && (convs->kind != ck_ref_bind
 
20674
          || convs->user_conv_p)
 
20675
-      && convs->kind != ck_rvalue
 
20676
+      && (convs->kind != ck_rvalue
 
20677
+         || SCALAR_TYPE_P (totype))
 
20678
       && convs->kind != ck_base)
 
20679
     {
 
20680
+      bool complained = false;
 
20681
       conversion *t = convs;
 
20682
 
 
20683
       /* Give a helpful error if this is bad because of excess braces.  */
 
20684
@@ -5816,7 +5821,14 @@
 
20685
          && SCALAR_TYPE_P (totype)
 
20686
          && CONSTRUCTOR_NELTS (expr) > 0
 
20687
          && BRACE_ENCLOSED_INITIALIZER_P (CONSTRUCTOR_ELT (expr, 0)->value))
 
20688
-       permerror (loc, "too many braces around initializer for %qT", totype);
 
20689
+       {
 
20690
+         complained = true;
 
20691
+         permerror (loc, "too many braces around initializer "
 
20692
+                    "for %qT", totype);
 
20693
+         while (BRACE_ENCLOSED_INITIALIZER_P (expr)
 
20694
+                && CONSTRUCTOR_NELTS (expr) == 1)
 
20695
+           expr = CONSTRUCTOR_ELT (expr, 0)->value;
 
20696
+       }
 
20697
 
 
20698
       for (; t ; t = next_conversion (t))
 
20699
        {
 
20700
@@ -5853,8 +5865,9 @@
 
20701
            break;
 
20702
        }
 
20703
 
 
20704
-      permerror (loc, "invalid conversion from %qT to %qT",
 
20705
-                TREE_TYPE (expr), totype);
 
20706
+      if (!complained)
 
20707
+       permerror (loc, "invalid conversion from %qT to %qT",
 
20708
+                  TREE_TYPE (expr), totype);
 
20709
       if (fn)
 
20710
        permerror (DECL_SOURCE_LOCATION (fn),
 
20711
                   "  initializing argument %P of %qD", argnum, fn);
 
20712
@@ -5999,6 +6012,8 @@
 
20713
           to avoid the error about taking the address of a temporary.  */
 
20714
        array = cp_build_addr_expr (array, complain);
 
20715
        array = cp_convert (build_pointer_type (elttype), array, complain);
 
20716
+       if (array == error_mark_node)
 
20717
+         return error_mark_node;
 
20718
 
 
20719
        /* Build up the initializer_list object.  */
 
20720
        totype = complete_type (totype);
 
20721
@@ -6023,8 +6038,11 @@
 
20722
          return fold_if_not_in_template (expr);
 
20723
        }
 
20724
       expr = reshape_init (totype, expr, complain);
 
20725
-      return get_target_expr_sfinae (digest_init (totype, expr, complain),
 
20726
+      expr = get_target_expr_sfinae (digest_init (totype, expr, complain),
 
20727
                                     complain);
 
20728
+      if (expr != error_mark_node)
 
20729
+       TARGET_EXPR_LIST_INIT_P (expr) = true;
 
20730
+      return expr;
 
20731
 
 
20732
     default:
 
20733
       break;
 
20734
@@ -7414,7 +7432,7 @@
 
20735
   struct z_candidate *candidates = 0, *cand;
 
20736
   tree explicit_targs = NULL_TREE;
 
20737
   tree basetype = NULL_TREE;
 
20738
-  tree access_binfo;
 
20739
+  tree access_binfo, binfo;
 
20740
   tree optype;
 
20741
   tree first_mem_arg = NULL_TREE;
 
20742
   tree instance_ptr;
 
20743
@@ -7454,6 +7472,7 @@
 
20744
   if (!conversion_path)
 
20745
     conversion_path = BASELINK_BINFO (fns);
 
20746
   access_binfo = BASELINK_ACCESS_BINFO (fns);
 
20747
+  binfo = BASELINK_BINFO (fns);
 
20748
   optype = BASELINK_OPTYPE (fns);
 
20749
   fns = BASELINK_FUNCTIONS (fns);
 
20750
   if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
 
20751
@@ -7697,13 +7716,13 @@
 
20752
            {
 
20753
              /* Optimize away vtable lookup if we know that this
 
20754
                 function can't be overridden.  We need to check if
 
20755
-                the context and the instance type are the same,
 
20756
+                the context and the type where we found fn are the same,
 
20757
                 actually FN might be defined in a different class
 
20758
                 type because of a using-declaration. In this case, we
 
20759
                 do not want to perform a non-virtual call.  */
 
20760
              if (DECL_VINDEX (fn) && ! (flags & LOOKUP_NONVIRTUAL)
 
20761
                  && same_type_ignoring_top_level_qualifiers_p
 
20762
-                 (DECL_CONTEXT (fn), TREE_TYPE (instance))
 
20763
+                 (DECL_CONTEXT (fn), BINFO_TYPE (binfo))
 
20764
                  && resolves_to_fixed_type_p (instance, 0))
 
20765
                flags |= LOOKUP_NONVIRTUAL;
 
20766
               if (explicit_targs)
 
20767
Index: gcc/cp/cvt.c
 
20768
===================================================================
 
20769
--- a/src/gcc/cp/cvt.c  (.../tags/gcc_4_8_2_release)
 
20770
+++ b/src/gcc/cp/cvt.c  (.../branches/gcc-4_8-branch)
 
20771
@@ -203,13 +203,13 @@
 
20772
 
 
20773
   if (null_ptr_cst_p (expr))
 
20774
     {
 
20775
-      if (complain & tf_warning)
 
20776
-       maybe_warn_zero_as_null_pointer_constant (expr, loc);
 
20777
-
 
20778
       if (TYPE_PTRMEMFUNC_P (type))
 
20779
        return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr, 0,
 
20780
                                 /*c_cast_p=*/false, complain);
 
20781
 
 
20782
+      if (complain & tf_warning)
 
20783
+       maybe_warn_zero_as_null_pointer_constant (expr, loc);
 
20784
+
 
20785
       /* A NULL pointer-to-data-member is represented by -1, not by
 
20786
         zero.  */
 
20787
       tree val = (TYPE_PTRDATAMEM_P (type)
 
20788
@@ -743,6 +743,7 @@
 
20789
             unspecified.  */
 
20790
          if ((complain & tf_warning)
 
20791
              && TREE_CODE (e) == INTEGER_CST
 
20792
+             && ENUM_UNDERLYING_TYPE (type)
 
20793
              && !int_fits_type_p (e, ENUM_UNDERLYING_TYPE (type)))
 
20794
            warning_at (loc, OPT_Wconversion, 
 
20795
                        "the result of the conversion is unspecified because "
 
20796
Index: gcc/cp/mangle.c
 
20797
===================================================================
 
20798
--- a/src/gcc/cp/mangle.c       (.../tags/gcc_4_8_2_release)
 
20799
+++ b/src/gcc/cp/mangle.c       (.../branches/gcc-4_8-branch)
 
20800
@@ -3478,6 +3478,7 @@
 
20801
 
 
20802
   if (G.need_abi_warning
 
20803
       /* Don't do this for a fake symbol we aren't going to emit anyway.  */
 
20804
+      && TREE_CODE (decl) != TYPE_DECL
 
20805
       && !DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)
 
20806
       && !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
 
20807
     {
 
20808
@@ -3773,7 +3774,8 @@
 
20809
 static void
 
20810
 write_guarded_var_name (const tree variable)
 
20811
 {
 
20812
-  if (strncmp (IDENTIFIER_POINTER (DECL_NAME (variable)), "_ZGR", 4) == 0)
 
20813
+  if (DECL_NAME (variable)
 
20814
+      && strncmp (IDENTIFIER_POINTER (DECL_NAME (variable)), "_ZGR", 4) == 0)
 
20815
     /* The name of a guard variable for a reference temporary should refer
 
20816
        to the reference, not the temporary.  */
 
20817
     write_string (IDENTIFIER_POINTER (DECL_NAME (variable)) + 4);
 
20818
Index: gcc/cp/cp-tree.h
 
20819
===================================================================
 
20820
--- a/src/gcc/cp/cp-tree.h      (.../tags/gcc_4_8_2_release)
 
20821
+++ b/src/gcc/cp/cp-tree.h      (.../branches/gcc-4_8-branch)
 
20822
@@ -344,7 +344,8 @@
 
20823
 /* Returns true iff NODE is a BASELINK.  */
 
20824
 #define BASELINK_P(NODE) \
 
20825
   (TREE_CODE (NODE) == BASELINK)
 
20826
-/* The BINFO indicating the base from which the BASELINK_FUNCTIONS came.  */
 
20827
+/* The BINFO indicating the base in which lookup found the
 
20828
+   BASELINK_FUNCTIONS.  */
 
20829
 #define BASELINK_BINFO(NODE) \
 
20830
   (((struct tree_baselink*) BASELINK_CHECK (NODE))->binfo)
 
20831
 /* The functions referred to by the BASELINK; either a FUNCTION_DECL,
 
20832
Index: gcc/cp/name-lookup.c
 
20833
===================================================================
 
20834
--- a/src/gcc/cp/name-lookup.c  (.../tags/gcc_4_8_2_release)
 
20835
+++ b/src/gcc/cp/name-lookup.c  (.../branches/gcc-4_8-branch)
 
20836
@@ -394,7 +394,8 @@
 
20837
     }
 
20838
 }
 
20839
 
 
20840
-/* Strip non dependent using declarations.  */
 
20841
+/* Strip non dependent using declarations. If DECL is dependent,
 
20842
+   surreptitiously create a typename_type and return it.  */
 
20843
 
 
20844
 tree
 
20845
 strip_using_decl (tree decl)
 
20846
@@ -404,6 +405,23 @@
 
20847
 
 
20848
   while (TREE_CODE (decl) == USING_DECL && !DECL_DEPENDENT_P (decl))
 
20849
     decl = USING_DECL_DECLS (decl);
 
20850
+
 
20851
+  if (TREE_CODE (decl) == USING_DECL && DECL_DEPENDENT_P (decl)
 
20852
+      && USING_DECL_TYPENAME_P (decl))
 
20853
+    {
 
20854
+      /* We have found a type introduced by a using
 
20855
+        declaration at class scope that refers to a dependent
 
20856
+        type.
 
20857
+            
 
20858
+        using typename :: [opt] nested-name-specifier unqualified-id ;
 
20859
+      */
 
20860
+      decl = make_typename_type (TREE_TYPE (decl),
 
20861
+                                DECL_NAME (decl),
 
20862
+                                typename_type, tf_error);
 
20863
+      if (decl != error_mark_node)
 
20864
+       decl = TYPE_NAME (decl);
 
20865
+    }
 
20866
+
 
20867
   return decl;
 
20868
 }
 
20869
 
 
20870
@@ -5605,9 +5623,9 @@
 
20871
 push_using_directive (tree used)
 
20872
 {
 
20873
   tree ret;
 
20874
-  timevar_start (TV_NAME_LOOKUP);
 
20875
+  bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
 
20876
   ret = push_using_directive_1 (used);
 
20877
-  timevar_stop (TV_NAME_LOOKUP);
 
20878
+  timevar_cond_stop (TV_NAME_LOOKUP, subtime);
 
20879
   return ret;
 
20880
 }
 
20881
 
 
20882
Index: gcc/mode-switching.c
 
20883
===================================================================
 
20884
--- a/src/gcc/mode-switching.c  (.../tags/gcc_4_8_2_release)
 
20885
+++ b/src/gcc/mode-switching.c  (.../branches/gcc-4_8-branch)
 
20886
@@ -568,12 +568,15 @@
 
20887
 
 
20888
          info[bb->index].computing = last_mode;
 
20889
          /* Check for blocks without ANY mode requirements.
 
20890
-            N.B. because of MODE_AFTER, last_mode might still be different
 
20891
-            from no_mode.  */
 
20892
+            N.B. because of MODE_AFTER, last_mode might still
 
20893
+            be different from no_mode, in which case we need to
 
20894
+            mark the block as nontransparent.  */
 
20895
          if (!any_set_required)
 
20896
            {
 
20897
              ptr = new_seginfo (no_mode, BB_END (bb), bb->index, live_now);
 
20898
              add_seginfo (info + bb->index, ptr);
 
20899
+             if (last_mode != no_mode)
 
20900
+               bitmap_clear_bit (transp[bb->index], j);
 
20901
            }
 
20902
        }
 
20903
 #if defined (MODE_ENTRY) && defined (MODE_EXIT)
 
20904
Index: gcc/ipa-pure-const.c
 
20905
===================================================================
 
20906
--- a/src/gcc/ipa-pure-const.c  (.../tags/gcc_4_8_2_release)
 
20907
+++ b/src/gcc/ipa-pure-const.c  (.../branches/gcc-4_8-branch)
 
20908
@@ -588,7 +588,7 @@
 
20909
 /* Wrapper around check_decl for loads in local more.  */
 
20910
 
 
20911
 static bool
 
20912
-check_load (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
 
20913
+check_load (gimple, tree op, tree, void *data)
 
20914
 {
 
20915
   if (DECL_P (op))
 
20916
     check_decl ((funct_state)data, op, false, false);
 
20917
@@ -600,7 +600,7 @@
 
20918
 /* Wrapper around check_decl for stores in local more.  */
 
20919
 
 
20920
 static bool
 
20921
-check_store (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
 
20922
+check_store (gimple, tree op, tree, void *data)
 
20923
 {
 
20924
   if (DECL_P (op))
 
20925
     check_decl ((funct_state)data, op, true, false);
 
20926
@@ -612,7 +612,7 @@
 
20927
 /* Wrapper around check_decl for loads in ipa mode.  */
 
20928
 
 
20929
 static bool
 
20930
-check_ipa_load (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
 
20931
+check_ipa_load (gimple, tree op, tree, void *data)
 
20932
 {
 
20933
   if (DECL_P (op))
 
20934
     check_decl ((funct_state)data, op, false, true);
 
20935
@@ -624,7 +624,7 @@
 
20936
 /* Wrapper around check_decl for stores in ipa mode.  */
 
20937
 
 
20938
 static bool
 
20939
-check_ipa_store (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
 
20940
+check_ipa_store (gimple, tree op, tree, void *data)
 
20941
 {
 
20942
   if (DECL_P (op))
 
20943
     check_decl ((funct_state)data, op, true, true);
 
20944
Index: gcc/cse.c
 
20945
===================================================================
 
20946
--- a/src/gcc/cse.c     (.../tags/gcc_4_8_2_release)
 
20947
+++ b/src/gcc/cse.c     (.../branches/gcc-4_8-branch)
 
20948
@@ -1824,7 +1824,7 @@
 
20949
       }
 
20950
 }
 
20951
 
 
20952
-/* Function called for each rtx to check whether true dependence exist.  */
 
20953
+/* Function called for each rtx to check whether an anti dependence exist.  */
 
20954
 struct check_dependence_data
 
20955
 {
 
20956
   enum machine_mode mode;
 
20957
@@ -1837,7 +1837,7 @@
 
20958
 {
 
20959
   struct check_dependence_data *d = (struct check_dependence_data *) data;
 
20960
   if (*x && MEM_P (*x))
 
20961
-    return canon_true_dependence (d->exp, d->mode, d->addr, *x, NULL_RTX);
 
20962
+    return canon_anti_dependence (*x, true, d->exp, d->mode, d->addr);
 
20963
   else
 
20964
     return 0;
 
20965
 }
 
20966
@@ -6082,6 +6082,18 @@
 
20967
        return x;
 
20968
       }
 
20969
 
 
20970
+    case UNSIGNED_FLOAT:
 
20971
+      {
 
20972
+       rtx new_rtx = cse_process_notes (XEXP (x, 0), object, changed);
 
20973
+       /* We don't substitute negative VOIDmode constants into these rtx,
 
20974
+          since they would impede folding.  */
 
20975
+       if (GET_MODE (new_rtx) != VOIDmode
 
20976
+           || (CONST_INT_P (new_rtx) && INTVAL (new_rtx) >= 0)
 
20977
+           || (CONST_DOUBLE_P (new_rtx) && CONST_DOUBLE_HIGH (new_rtx) >= 0))
 
20978
+         validate_change (object, &XEXP (x, 0), new_rtx, 0);
 
20979
+       return x;
 
20980
+      }
 
20981
+
 
20982
     case REG:
 
20983
       i = REG_QTY (REGNO (x));
 
20984
 
 
20985
Index: gcc/tree-ssa-math-opts.c
 
20986
===================================================================
 
20987
--- a/src/gcc/tree-ssa-math-opts.c      (.../tags/gcc_4_8_2_release)
 
20988
+++ b/src/gcc/tree-ssa-math-opts.c      (.../branches/gcc-4_8-branch)
 
20989
@@ -1718,7 +1718,9 @@
 
20990
 
 
20991
   if (rhs_class == GIMPLE_BINARY_RHS)
 
20992
     {
 
20993
+      int i;
 
20994
       struct symbolic_number n1, n2;
 
20995
+      unsigned HOST_WIDEST_INT mask;
 
20996
       tree source_expr2;
 
20997
 
 
20998
       if (code != BIT_IOR_EXPR)
 
20999
@@ -1744,6 +1746,15 @@
 
21000
            return NULL_TREE;
 
21001
 
 
21002
          n->size = n1.size;
 
21003
+         for (i = 0, mask = 0xff; i < n->size; i++, mask <<= BITS_PER_UNIT)
 
21004
+           {
 
21005
+             unsigned HOST_WIDEST_INT masked1, masked2;
 
21006
+
 
21007
+             masked1 = n1.n & mask;
 
21008
+             masked2 = n2.n & mask;
 
21009
+             if (masked1 && masked2 && masked1 != masked2)
 
21010
+               return NULL_TREE;
 
21011
+           }
 
21012
          n->n = n1.n | n2.n;
 
21013
 
 
21014
          if (!verify_symbolic_number_p (n, stmt))
 
21015
Index: gcc/sel-sched.c
 
21016
===================================================================
 
21017
--- a/src/gcc/sel-sched.c       (.../tags/gcc_4_8_2_release)
 
21018
+++ b/src/gcc/sel-sched.c       (.../branches/gcc-4_8-branch)
 
21019
@@ -1253,7 +1253,7 @@
 
21020
 
 
21021
       if (!HARD_FRAME_POINTER_IS_FRAME_POINTER)
 
21022
         add_to_hard_reg_set (&reg_rename_p->unavailable_hard_regs, 
 
21023
-                            Pmode, HARD_FRAME_POINTER_IS_FRAME_POINTER);
 
21024
+                            Pmode, HARD_FRAME_POINTER_REGNUM);
 
21025
     }
 
21026
 
 
21027
 #ifdef STACK_REGS
 
21028
Index: gcc/gimple-low.c
 
21029
===================================================================
 
21030
--- a/src/gcc/gimple-low.c      (.../tags/gcc_4_8_2_release)
 
21031
+++ b/src/gcc/gimple-low.c      (.../branches/gcc-4_8-branch)
 
21032
@@ -238,6 +238,7 @@
 
21033
            break;
 
21034
          arg = gimple_call_arg (stmt, i);
 
21035
          if (p == error_mark_node
 
21036
+             || DECL_ARG_TYPE (p) == error_mark_node
 
21037
              || arg == error_mark_node
 
21038
              || (!types_compatible_p (DECL_ARG_TYPE (p), TREE_TYPE (arg))
 
21039
                  && !fold_convertible_p (DECL_ARG_TYPE (p), arg)))
 
21040
Index: gcc/tree-ssa-sink.c
 
21041
===================================================================
 
21042
--- a/src/gcc/tree-ssa-sink.c   (.../tags/gcc_4_8_2_release)
 
21043
+++ b/src/gcc/tree-ssa-sink.c   (.../branches/gcc-4_8-branch)
 
21044
@@ -559,7 +559,7 @@
 
21045
 execute_sink_code (void)
 
21046
 {
 
21047
   loop_optimizer_init (LOOPS_NORMAL);
 
21048
-
 
21049
+  split_critical_edges ();
 
21050
   connect_infinite_loops_to_exit ();
 
21051
   memset (&sink_stats, 0, sizeof (sink_stats));
 
21052
   calculate_dominance_info (CDI_DOMINATORS);
 
21053
Index: gcc/config.in
 
21054
===================================================================
 
21055
--- a/src/gcc/config.in (.../tags/gcc_4_8_2_release)
 
21056
+++ b/src/gcc/config.in (.../branches/gcc-4_8-branch)
 
21057
@@ -363,6 +363,12 @@
 
21058
 #endif
 
21059
 
 
21060
 
 
21061
+/* Define if your assembler supports the 'ud2' mnemonic. */
 
21062
+#ifndef USED_FOR_TARGET
 
21063
+#undef HAVE_AS_IX86_UD2
 
21064
+#endif
 
21065
+
 
21066
+
 
21067
 /* Define if your assembler supports the lituse_jsrdirect relocation. */
 
21068
 #ifndef USED_FOR_TARGET
 
21069
 #undef HAVE_AS_JSRDIRECT_RELOCS
 
21070
@@ -375,6 +381,12 @@
 
21071
 #endif
 
21072
 
 
21073
 
 
21074
+/* Define if your assembler supports LEON instructions. */
 
21075
+#ifndef USED_FOR_TARGET
 
21076
+#undef HAVE_AS_LEON
 
21077
+#endif
 
21078
+
 
21079
+
 
21080
 /* Define if the assembler won't complain about a line such as # 0 "" 2. */
 
21081
 #ifndef USED_FOR_TARGET
 
21082
 #undef HAVE_AS_LINE_ZERO
 
21083
Index: gcc/ifcvt.c
 
21084
===================================================================
 
21085
--- a/src/gcc/ifcvt.c   (.../tags/gcc_4_8_2_release)
 
21086
+++ b/src/gcc/ifcvt.c   (.../branches/gcc-4_8-branch)
 
21087
@@ -115,7 +115,11 @@
 
21088
 
 
21089
   while (1)
 
21090
     {
 
21091
-      if (CALL_P (insn) || NONJUMP_INSN_P (insn))
 
21092
+      if ((CALL_P (insn) || NONJUMP_INSN_P (insn))
 
21093
+         /* Don't count USE/CLOBBER insns, flow_find_cross_jump etc.
 
21094
+            don't count them either and we need consistency.  */
 
21095
+         && GET_CODE (PATTERN (insn)) != USE
 
21096
+         && GET_CODE (PATTERN (insn)) != CLOBBER)
 
21097
        count++;
 
21098
 
 
21099
       if (insn == BB_END (bb))
 
21100
@@ -505,7 +509,10 @@
 
21101
          n_insns -= 2 * n_matching;
 
21102
        }
 
21103
 
 
21104
-      if (then_start && else_start)
 
21105
+      if (then_start
 
21106
+         && else_start
 
21107
+         && then_n_insns > n_matching
 
21108
+         && else_n_insns > n_matching)
 
21109
        {
 
21110
          int longest_match = MIN (then_n_insns - n_matching,
 
21111
                                   else_n_insns - n_matching);
 
21112
Index: gcc/expr.c
 
21113
===================================================================
 
21114
--- a/src/gcc/expr.c    (.../tags/gcc_4_8_2_release)
 
21115
+++ b/src/gcc/expr.c    (.../branches/gcc-4_8-branch)
 
21116
@@ -1994,12 +1994,14 @@
 
21117
       HOST_WIDE_INT bytepos = INTVAL (XEXP (XVECEXP (src, 0, i), 1));
 
21118
       enum machine_mode mode = GET_MODE (tmps[i]);
 
21119
       unsigned int bytelen = GET_MODE_SIZE (mode);
 
21120
-      unsigned int adj_bytelen = bytelen;
 
21121
+      unsigned int adj_bytelen;
 
21122
       rtx dest = dst;
 
21123
 
 
21124
       /* Handle trailing fragments that run over the size of the struct.  */
 
21125
       if (ssize >= 0 && bytepos + (HOST_WIDE_INT) bytelen > ssize)
 
21126
        adj_bytelen = ssize - bytepos;
 
21127
+      else
 
21128
+       adj_bytelen = bytelen;
 
21129
 
 
21130
       if (GET_CODE (dst) == CONCAT)
 
21131
        {
 
21132
@@ -2040,6 +2042,7 @@
 
21133
            }
 
21134
        }
 
21135
 
 
21136
+      /* Handle trailing fragments that run over the size of the struct.  */
 
21137
       if (ssize >= 0 && bytepos + (HOST_WIDE_INT) bytelen > ssize)
 
21138
        {
 
21139
          /* store_bit_field always takes its value from the lsb.
 
21140
@@ -2057,16 +2060,22 @@
 
21141
              tmps[i] = expand_shift (RSHIFT_EXPR, mode, tmps[i],
 
21142
                                      shift, tmps[i], 0);
 
21143
            }
 
21144
-         bytelen = adj_bytelen;
 
21145
+
 
21146
+         /* Make sure not to write past the end of the struct.  */
 
21147
+         store_bit_field (dest,
 
21148
+                          adj_bytelen * BITS_PER_UNIT, bytepos * BITS_PER_UNIT,
 
21149
+                          bytepos * BITS_PER_UNIT, ssize * BITS_PER_UNIT - 1,
 
21150
+                          VOIDmode, tmps[i]);
 
21151
        }
 
21152
 
 
21153
       /* Optimize the access just a bit.  */
 
21154
-      if (MEM_P (dest)
 
21155
-         && (! SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (dest))
 
21156
-             || MEM_ALIGN (dest) >= GET_MODE_ALIGNMENT (mode))
 
21157
-         && bytepos * BITS_PER_UNIT % GET_MODE_ALIGNMENT (mode) == 0
 
21158
-         && bytelen == GET_MODE_SIZE (mode))
 
21159
+      else if (MEM_P (dest)
 
21160
+              && (!SLOW_UNALIGNED_ACCESS (mode, MEM_ALIGN (dest))
 
21161
+                  || MEM_ALIGN (dest) >= GET_MODE_ALIGNMENT (mode))
 
21162
+              && bytepos * BITS_PER_UNIT % GET_MODE_ALIGNMENT (mode) == 0
 
21163
+              && bytelen == GET_MODE_SIZE (mode))
 
21164
        emit_move_insn (adjust_address (dest, mode, bytepos), tmps[i]);
 
21165
+
 
21166
       else
 
21167
        store_bit_field (dest, bytelen * BITS_PER_UNIT, bytepos * BITS_PER_UNIT,
 
21168
                         0, 0, mode, tmps[i]);
 
21169
@@ -3602,12 +3611,21 @@
 
21170
         into a new pseudo.  This constant may be used in different modes,
 
21171
         and if not, combine will put things back together for us.  */
 
21172
       trunc_y = force_reg (srcmode, trunc_y);
 
21173
-      emit_unop_insn (ic, x, trunc_y, UNKNOWN);
 
21174
+
 
21175
+      /* If x is a hard register, perform the extension into a pseudo,
 
21176
+        so that e.g. stack realignment code is aware of it.  */
 
21177
+      rtx target = x;
 
21178
+      if (REG_P (x) && HARD_REGISTER_P (x))
 
21179
+       target = gen_reg_rtx (dstmode);
 
21180
+
 
21181
+      emit_unop_insn (ic, target, trunc_y, UNKNOWN);
 
21182
       last_insn = get_last_insn ();
 
21183
 
 
21184
-      if (REG_P (x))
 
21185
+      if (REG_P (target))
 
21186
        set_unique_reg_note (last_insn, REG_EQUAL, y);
 
21187
 
 
21188
+      if (target != x)
 
21189
+       return emit_move_insn (x, target);
 
21190
       return last_insn;
 
21191
     }
 
21192
 
 
21193
@@ -4551,19 +4569,19 @@
 
21194
                - tree_low_cst (DECL_FIELD_BIT_OFFSET (repr), 1));
 
21195
 
 
21196
   /* If the adjustment is larger than bitpos, we would have a negative bit
 
21197
-     position for the lower bound and this may wreak havoc later.  This can
 
21198
-     occur only if we have a non-null offset, so adjust offset and bitpos
 
21199
-     to make the lower bound non-negative.  */
 
21200
+     position for the lower bound and this may wreak havoc later.  Adjust
 
21201
+     offset and bitpos to make the lower bound non-negative in that case.  */
 
21202
   if (bitoffset > *bitpos)
 
21203
     {
 
21204
       HOST_WIDE_INT adjust = bitoffset - *bitpos;
 
21205
-
 
21206
       gcc_assert ((adjust % BITS_PER_UNIT) == 0);
 
21207
-      gcc_assert (*offset != NULL_TREE);
 
21208
 
 
21209
       *bitpos += adjust;
 
21210
-      *offset
 
21211
-       = size_binop (MINUS_EXPR, *offset, size_int (adjust / BITS_PER_UNIT));
 
21212
+      if (*offset == NULL_TREE)
 
21213
+       *offset = size_int (-adjust / BITS_PER_UNIT);
 
21214
+      else
 
21215
+       *offset
 
21216
+         = size_binop (MINUS_EXPR, *offset, size_int (adjust / BITS_PER_UNIT));
 
21217
       *bitstart = 0;
 
21218
     }
 
21219
   else
 
21220
@@ -4668,8 +4686,7 @@
 
21221
          expand_insn (icode, 2, ops);
 
21222
        }
 
21223
       else
 
21224
-       store_bit_field (mem, GET_MODE_BITSIZE (mode),
 
21225
-                        0, 0, 0, mode, reg);
 
21226
+       store_bit_field (mem, GET_MODE_BITSIZE (mode), 0, 0, 0, mode, reg);
 
21227
       return;
 
21228
     }
 
21229
 
 
21230
@@ -4698,6 +4715,15 @@
 
21231
       tem = get_inner_reference (to, &bitsize, &bitpos, &offset, &mode1,
 
21232
                                 &unsignedp, &volatilep, true);
 
21233
 
 
21234
+      /* Make sure bitpos is not negative, it can wreak havoc later.  */
 
21235
+      if (bitpos < 0)
 
21236
+       {
 
21237
+         gcc_assert (offset == NULL_TREE);
 
21238
+         offset = size_int (bitpos >> (BITS_PER_UNIT == 8
 
21239
+                                       ? 3 : exact_log2 (BITS_PER_UNIT)));
 
21240
+         bitpos &= BITS_PER_UNIT - 1;
 
21241
+       }
 
21242
+
 
21243
       if (TREE_CODE (to) == COMPONENT_REF
 
21244
          && DECL_BIT_FIELD_TYPE (TREE_OPERAND (to, 1)))
 
21245
        get_bit_range (&bitregion_start, &bitregion_end, to, &bitpos, &offset);
 
21246
Index: gcc/go/go-gcc.cc
 
21247
===================================================================
 
21248
--- a/src/gcc/go/go-gcc.cc      (.../tags/gcc_4_8_2_release)
 
21249
+++ b/src/gcc/go/go-gcc.cc      (.../branches/gcc-4_8-branch)
 
21250
@@ -232,6 +232,9 @@
 
21251
   Bexpression*
 
21252
   convert_expression(Btype* type, Bexpression* expr, Location);
 
21253
 
 
21254
+  Bexpression*
 
21255
+  function_code_expression(Bfunction*, Location);
 
21256
+
 
21257
   // Statements.
 
21258
 
 
21259
   Bstatement*
 
21260
@@ -334,6 +337,17 @@
 
21261
   Bexpression*
 
21262
   label_address(Blabel*, Location);
 
21263
 
 
21264
+  // Functions.
 
21265
+
 
21266
+  Bfunction*
 
21267
+  error_function()
 
21268
+  { return this->make_function(error_mark_node); }
 
21269
+
 
21270
+  Bfunction*
 
21271
+  function(Btype* fntype, const std::string& name, const std::string& asm_name,
 
21272
+           bool is_visible, bool is_declaration, bool is_inlinable,
 
21273
+           bool disable_split_stack, bool in_unique_section, Location);
 
21274
+
 
21275
  private:
 
21276
   // Make a Bexpression from a tree.
 
21277
   Bexpression*
 
21278
@@ -350,6 +364,10 @@
 
21279
   make_type(tree t)
 
21280
   { return new Btype(t); }
 
21281
 
 
21282
+  Bfunction*
 
21283
+  make_function(tree t)
 
21284
+  { return new Bfunction(t); }
 
21285
+
 
21286
   Btype*
 
21287
   fill_in_struct(Btype*, const std::vector<Btyped_identifier>&);
 
21288
 
 
21289
@@ -966,6 +984,19 @@
 
21290
   return tree_to_expr(ret);
 
21291
 }
 
21292
 
 
21293
+// Get the address of a function.
 
21294
+
 
21295
+Bexpression*
 
21296
+Gcc_backend::function_code_expression(Bfunction* bfunc, Location location)
 
21297
+{
 
21298
+  tree func = bfunc->get_tree();
 
21299
+  if (func == error_mark_node)
 
21300
+    return this->error_expression();
 
21301
+
 
21302
+  tree ret = build_fold_addr_expr_loc(location.gcc_location(), func);
 
21303
+  return this->make_expression(ret);
 
21304
+}
 
21305
+
 
21306
 // An expression as a statement.
 
21307
 
 
21308
 Bstatement*
 
21309
@@ -1724,6 +1755,56 @@
 
21310
   return this->make_expression(ret);
 
21311
 }
 
21312
 
 
21313
+// Declare or define a new function.
 
21314
+
 
21315
+Bfunction*
 
21316
+Gcc_backend::function(Btype* fntype, const std::string& name,
 
21317
+                      const std::string& asm_name, bool is_visible,
 
21318
+                      bool is_declaration, bool is_inlinable,
 
21319
+                      bool disable_split_stack, bool in_unique_section,
 
21320
+                      Location location)
 
21321
+{
 
21322
+  tree functype = fntype->get_tree();
 
21323
+  if (functype != error_mark_node)
 
21324
+    {
 
21325
+      gcc_assert(FUNCTION_POINTER_TYPE_P(functype));
 
21326
+      functype = TREE_TYPE(functype);
 
21327
+    }
 
21328
+  tree id = get_identifier_from_string(name);
 
21329
+  if (functype == error_mark_node || id == error_mark_node)
 
21330
+    return this->error_function();
 
21331
+
 
21332
+  tree decl = build_decl(location.gcc_location(), FUNCTION_DECL, id, functype);
 
21333
+  if (!asm_name.empty())
 
21334
+    SET_DECL_ASSEMBLER_NAME(decl, get_identifier_from_string(asm_name));
 
21335
+  if (is_visible)
 
21336
+    TREE_PUBLIC(decl) = 1;
 
21337
+  if (is_declaration)
 
21338
+    DECL_EXTERNAL(decl) = 1;
 
21339
+  else
 
21340
+    {
 
21341
+      tree restype = TREE_TYPE(functype);
 
21342
+      tree resdecl =
 
21343
+          build_decl(location.gcc_location(), RESULT_DECL, NULL_TREE, restype);
 
21344
+      DECL_ARTIFICIAL(resdecl) = 1;
 
21345
+      DECL_IGNORED_P(resdecl) = 1;
 
21346
+      DECL_CONTEXT(resdecl) = decl;
 
21347
+      DECL_RESULT(decl) = resdecl;
 
21348
+    }
 
21349
+  if (!is_inlinable)
 
21350
+    DECL_UNINLINABLE(decl) = 1;
 
21351
+  if (disable_split_stack)
 
21352
+    {
 
21353
+      tree attr = get_identifier("__no_split_stack__");
 
21354
+      DECL_ATTRIBUTES(decl) = tree_cons(attr, NULL_TREE, NULL_TREE);
 
21355
+    }
 
21356
+  if (in_unique_section)
 
21357
+    resolve_unique_section(decl, 0, 1);
 
21358
+
 
21359
+  go_preserve_from_gc(decl);
 
21360
+  return new Bfunction(decl);
 
21361
+}
 
21362
+
 
21363
 // The single backend.
 
21364
 
 
21365
 static Gcc_backend gcc_backend;
 
21366
@@ -1799,3 +1880,9 @@
 
21367
 {
 
21368
   return bv->get_tree();
 
21369
 }
 
21370
+
 
21371
+tree
 
21372
+function_to_tree(Bfunction* bf)
 
21373
+{
 
21374
+  return bf->get_tree();
 
21375
+}
 
21376
Index: gcc/go/ChangeLog
 
21377
===================================================================
 
21378
--- a/src/gcc/go/ChangeLog      (.../tags/gcc_4_8_2_release)
 
21379
+++ b/src/gcc/go/ChangeLog      (.../branches/gcc-4_8-branch)
 
21380
@@ -1,3 +1,22 @@
 
21381
+2013-12-11  Ian Lance Taylor  <iant@google.com>
 
21382
+
 
21383
+       * go-lang.c (go_langhook_post_options): Disable sibling calls by
 
21384
+       default.
 
21385
+
 
21386
+2013-10-16  Ian Lance Taylor  <iant@google.com>
 
21387
+
 
21388
+       Bring in from mainline:
 
21389
+
 
21390
+       2013-10-11  Chris Manghane  <cmang@google.com>
 
21391
+       * go-gcc.cc (Gcc_backend::function_code_expression): New
 
21392
+       function.
 
21393
+
 
21394
+       2013-10-10  Chris Manghane  <cmang@google.com>
 
21395
+       * go-gcc.cc (Backend::error_function): New function.
 
21396
+       (Backend::function): New function.
 
21397
+       (Backend::make_function): New function.
 
21398
+       (function_to_tree): New function.
 
21399
+
 
21400
 2013-10-16  Release Manager
 
21401
 
 
21402
        * GCC 4.8.2 released.
 
21403
Index: gcc/go/go-lang.c
 
21404
===================================================================
 
21405
--- a/src/gcc/go/go-lang.c      (.../tags/gcc_4_8_2_release)
 
21406
+++ b/src/gcc/go/go-lang.c      (.../branches/gcc-4_8-branch)
 
21407
@@ -269,6 +269,10 @@
 
21408
   if (flag_excess_precision_cmdline == EXCESS_PRECISION_DEFAULT)
 
21409
     flag_excess_precision_cmdline = EXCESS_PRECISION_STANDARD;
 
21410
 
 
21411
+  /* Tail call optimizations can confuse uses of runtime.Callers.  */
 
21412
+  if (!global_options_set.x_flag_optimize_sibling_calls)
 
21413
+    global_options.x_flag_optimize_sibling_calls = 0;
 
21414
+
 
21415
   /* Returning false means that the backend should be used.  */
 
21416
   return false;
 
21417
 }
 
21418
Index: gcc/go/gofrontend/gogo.cc
 
21419
===================================================================
 
21420
--- a/src/gcc/go/gofrontend/gogo.cc     (.../tags/gcc_4_8_2_release)
 
21421
+++ b/src/gcc/go/gofrontend/gogo.cc     (.../branches/gcc-4_8-branch)
 
21422
@@ -2822,7 +2822,10 @@
 
21423
   if (orig_fntype->is_varargs())
 
21424
     new_fntype->set_is_varargs();
 
21425
 
 
21426
-  std::string name = orig_no->name() + "$recover";
 
21427
+  std::string name = orig_no->name();
 
21428
+  if (orig_fntype->is_method())
 
21429
+    name += "$" + orig_fntype->receiver()->type()->mangled_name(gogo);
 
21430
+  name += "$recover";
 
21431
   Named_object *new_no = gogo->start_function(name, new_fntype, false,
 
21432
                                              location);
 
21433
   Function *new_func = new_no->func_value();
 
21434
@@ -2916,7 +2919,25 @@
 
21435
                 && !orig_rec_no->var_value()->is_receiver());
 
21436
       orig_rec_no->var_value()->set_is_receiver();
 
21437
 
 
21438
-      const std::string& new_receiver_name(orig_fntype->receiver()->name());
 
21439
+      std::string new_receiver_name(orig_fntype->receiver()->name());
 
21440
+      if (new_receiver_name.empty())
 
21441
+       {
 
21442
+         // Find the receiver.  It was named "r.NNN" in
 
21443
+         // Gogo::start_function.
 
21444
+         for (Bindings::const_definitions_iterator p =
 
21445
+                new_bindings->begin_definitions();
 
21446
+              p != new_bindings->end_definitions();
 
21447
+              ++p)
 
21448
+           {
 
21449
+             const std::string& pname((*p)->name());
 
21450
+             if (pname[0] == 'r' && pname[1] == '.')
 
21451
+               {
 
21452
+                 new_receiver_name = pname;
 
21453
+                 break;
 
21454
+               }
 
21455
+           }
 
21456
+         go_assert(!new_receiver_name.empty());
 
21457
+       }
 
21458
       Named_object* new_rec_no = new_bindings->lookup_local(new_receiver_name);
 
21459
       if (new_rec_no == NULL)
 
21460
        go_assert(saw_errors());
 
21461
@@ -3320,7 +3341,8 @@
 
21462
     closure_var_(NULL), block_(block), location_(location), labels_(),
 
21463
     local_type_count_(0), descriptor_(NULL), fndecl_(NULL), defer_stack_(NULL),
 
21464
     is_sink_(false), results_are_named_(false), nointerface_(false),
 
21465
-    calls_recover_(false), is_recover_thunk_(false), has_recover_thunk_(false),
 
21466
+    is_unnamed_type_stub_method_(false), calls_recover_(false),
 
21467
+    is_recover_thunk_(false), has_recover_thunk_(false),
 
21468
     in_unique_section_(false)
 
21469
 {
 
21470
 }
 
21471
@@ -3819,6 +3841,81 @@
 
21472
   *presults = results;
 
21473
 }
 
21474
 
 
21475
+// Get the backend representation.
 
21476
+
 
21477
+Bfunction*
 
21478
+Function::get_or_make_decl(Gogo* gogo, Named_object* no)
 
21479
+{
 
21480
+  if (this->fndecl_ == NULL)
 
21481
+    {
 
21482
+      std::string asm_name;
 
21483
+      bool is_visible = false;
 
21484
+      if (no->package() != NULL)
 
21485
+        ;
 
21486
+      else if (this->enclosing_ != NULL || Gogo::is_thunk(no))
 
21487
+        ;
 
21488
+      else if (Gogo::unpack_hidden_name(no->name()) == "init"
 
21489
+               && !this->type_->is_method())
 
21490
+        ;
 
21491
+      else if (Gogo::unpack_hidden_name(no->name()) == "main"
 
21492
+               && gogo->is_main_package())
 
21493
+        is_visible = true;
 
21494
+      // Methods have to be public even if they are hidden because
 
21495
+      // they can be pulled into type descriptors when using
 
21496
+      // anonymous fields.
 
21497
+      else if (!Gogo::is_hidden_name(no->name())
 
21498
+               || this->type_->is_method())
 
21499
+        {
 
21500
+         if (!this->is_unnamed_type_stub_method_)
 
21501
+           is_visible = true;
 
21502
+          std::string pkgpath = gogo->pkgpath_symbol();
 
21503
+          if (this->type_->is_method()
 
21504
+              && Gogo::is_hidden_name(no->name())
 
21505
+              && Gogo::hidden_name_pkgpath(no->name()) != gogo->pkgpath())
 
21506
+            {
 
21507
+              // This is a method we created for an unexported
 
21508
+              // method of an imported embedded type.  We need to
 
21509
+              // use the pkgpath of the imported package to avoid
 
21510
+              // a possible name collision.  See bug478 for a test
 
21511
+              // case.
 
21512
+              pkgpath = Gogo::hidden_name_pkgpath(no->name());
 
21513
+              pkgpath = Gogo::pkgpath_for_symbol(pkgpath);
 
21514
+            }
 
21515
+
 
21516
+          asm_name = pkgpath;
 
21517
+          asm_name.append(1, '.');
 
21518
+          asm_name.append(Gogo::unpack_hidden_name(no->name()));
 
21519
+          if (this->type_->is_method())
 
21520
+            {
 
21521
+              asm_name.append(1, '.');
 
21522
+              Type* rtype = this->type_->receiver()->type();
 
21523
+              asm_name.append(rtype->mangled_name(gogo));
 
21524
+            }
 
21525
+        }
 
21526
+
 
21527
+      // If a function calls the predeclared recover function, we
 
21528
+      // can't inline it, because recover behaves differently in a
 
21529
+      // function passed directly to defer.  If this is a recover
 
21530
+      // thunk that we built to test whether a function can be
 
21531
+      // recovered, we can't inline it, because that will mess up
 
21532
+      // our return address comparison.
 
21533
+      bool is_inlinable = !(this->calls_recover_ || this->is_recover_thunk_);
 
21534
+
 
21535
+      // If this is a thunk created to call a function which calls
 
21536
+      // the predeclared recover function, we need to disable
 
21537
+      // stack splitting for the thunk.
 
21538
+      bool disable_split_stack = this->is_recover_thunk_;
 
21539
+
 
21540
+      Btype* functype = this->type_->get_backend_fntype(gogo);
 
21541
+      this->fndecl_ =
 
21542
+          gogo->backend()->function(functype, no->get_id(gogo), asm_name,
 
21543
+                                    is_visible, false, is_inlinable,
 
21544
+                                    disable_split_stack,
 
21545
+                                    this->in_unique_section_, this->location());
 
21546
+    }
 
21547
+  return this->fndecl_;
 
21548
+}
 
21549
+
 
21550
 // Class Block.
 
21551
 
 
21552
 Block::Block(Block* enclosing, Location location)
 
21553
@@ -5110,6 +5207,75 @@
 
21554
     go_unreachable();
 
21555
 }
 
21556
 
 
21557
+
 
21558
+// Return the external identifier for this object.
 
21559
+
 
21560
+std::string
 
21561
+Named_object::get_id(Gogo* gogo)
 
21562
+{
 
21563
+  go_assert(!this->is_variable() && !this->is_result_variable());
 
21564
+  std::string decl_name;
 
21565
+  if (this->is_function_declaration()
 
21566
+      && !this->func_declaration_value()->asm_name().empty())
 
21567
+    decl_name = this->func_declaration_value()->asm_name();
 
21568
+  else if (this->is_type()
 
21569
+          && Linemap::is_predeclared_location(this->type_value()->location()))
 
21570
+    {
 
21571
+      // We don't need the package name for builtin types.
 
21572
+      decl_name = Gogo::unpack_hidden_name(this->name_);
 
21573
+    }
 
21574
+  else
 
21575
+    {
 
21576
+      std::string package_name;
 
21577
+      if (this->package_ == NULL)
 
21578
+       package_name = gogo->package_name();
 
21579
+      else
 
21580
+       package_name = this->package_->package_name();
 
21581
+
 
21582
+      // Note that this will be misleading if this is an unexported
 
21583
+      // method generated for an embedded imported type.  In that case
 
21584
+      // the unexported method should have the package name of the
 
21585
+      // package from which it is imported, but we are going to give
 
21586
+      // it our package name.  Fixing this would require knowing the
 
21587
+      // package name, but we only know the package path.  It might be
 
21588
+      // better to use package paths here anyhow.  This doesn't affect
 
21589
+      // the assembler code, because we always set that name in
 
21590
+      // Function::get_or_make_decl anyhow.  FIXME.
 
21591
+
 
21592
+      decl_name = package_name + '.' + Gogo::unpack_hidden_name(this->name_);
 
21593
+
 
21594
+      Function_type* fntype;
 
21595
+      if (this->is_function())
 
21596
+       fntype = this->func_value()->type();
 
21597
+      else if (this->is_function_declaration())
 
21598
+       fntype = this->func_declaration_value()->type();
 
21599
+      else
 
21600
+       fntype = NULL;
 
21601
+      if (fntype != NULL && fntype->is_method())
 
21602
+       {
 
21603
+         decl_name.push_back('.');
 
21604
+         decl_name.append(fntype->receiver()->type()->mangled_name(gogo));
 
21605
+       }
 
21606
+    }
 
21607
+  if (this->is_type())
 
21608
+    {
 
21609
+      unsigned int index;
 
21610
+      const Named_object* in_function = this->type_value()->in_function(&index);
 
21611
+      if (in_function != NULL)
 
21612
+       {
 
21613
+         decl_name += '$' + Gogo::unpack_hidden_name(in_function->name());
 
21614
+         if (index > 0)
 
21615
+           {
 
21616
+             char buf[30];
 
21617
+             snprintf(buf, sizeof buf, "%u", index);
 
21618
+             decl_name += '$';
 
21619
+             decl_name += buf;
 
21620
+           }
 
21621
+       }
 
21622
+    }
 
21623
+  return decl_name;
 
21624
+}
 
21625
+
 
21626
 // Class Bindings.
 
21627
 
 
21628
 Bindings::Bindings(Bindings* enclosing)
 
21629
Index: gcc/go/gofrontend/runtime.def
 
21630
===================================================================
 
21631
--- a/src/gcc/go/gofrontend/runtime.def (.../tags/gcc_4_8_2_release)
 
21632
+++ b/src/gcc/go/gofrontend/runtime.def (.../branches/gcc-4_8-branch)
 
21633
@@ -68,6 +68,12 @@
 
21634
               P1(STRING), R1(SLICE))
 
21635
 
 
21636
 
 
21637
+// Complex division.
 
21638
+DEF_GO_RUNTIME(COMPLEX64_DIV, "__go_complex64_div",
 
21639
+              P2(COMPLEX64, COMPLEX64), R1(COMPLEX64))
 
21640
+DEF_GO_RUNTIME(COMPLEX128_DIV, "__go_complex128_div",
 
21641
+              P2(COMPLEX128, COMPLEX128), R1(COMPLEX128))
 
21642
+
 
21643
 // Make a slice.
 
21644
 DEF_GO_RUNTIME(MAKESLICE1, "__go_make_slice1", P2(TYPE, UINTPTR), R1(SLICE))
 
21645
 DEF_GO_RUNTIME(MAKESLICE2, "__go_make_slice2", P3(TYPE, UINTPTR, UINTPTR),
 
21646
Index: gcc/go/gofrontend/gogo.h
 
21647
===================================================================
 
21648
--- a/src/gcc/go/gofrontend/gogo.h      (.../tags/gcc_4_8_2_release)
 
21649
+++ b/src/gcc/go/gofrontend/gogo.h      (.../branches/gcc-4_8-branch)
 
21650
@@ -48,6 +48,7 @@
 
21651
 class Bblock;
 
21652
 class Bvariable;
 
21653
 class Blabel;
 
21654
+class Bfunction;
 
21655
 
 
21656
 // This file declares the basic classes used to hold the internal
 
21657
 // representation of Go which is built by the parser.
 
21658
@@ -952,6 +953,15 @@
 
21659
     this->nointerface_ = true;
 
21660
   }
 
21661
 
 
21662
+  // Record that this function is a stub method created for an unnamed
 
21663
+  // type.
 
21664
+  void
 
21665
+  set_is_unnamed_type_stub_method()
 
21666
+  {
 
21667
+    go_assert(this->is_method());
 
21668
+    this->is_unnamed_type_stub_method_ = true;
 
21669
+  }
 
21670
+
 
21671
   // Add a new field to the closure variable.
 
21672
   void
 
21673
   add_closure_field(Named_object* var, Location loc)
 
21674
@@ -1089,17 +1099,13 @@
 
21675
     this->descriptor_ = descriptor;
 
21676
   }
 
21677
 
 
21678
-  // Return the function's decl given an identifier.
 
21679
-  tree
 
21680
-  get_or_make_decl(Gogo*, Named_object*, tree id);
 
21681
+  // Return the backend representation.
 
21682
+  Bfunction*
 
21683
+  get_or_make_decl(Gogo*, Named_object*);
 
21684
 
 
21685
   // Return the function's decl after it has been built.
 
21686
   tree
 
21687
-  get_decl() const
 
21688
-  {
 
21689
-    go_assert(this->fndecl_ != NULL);
 
21690
-    return this->fndecl_;
 
21691
-  }
 
21692
+  get_decl() const;
 
21693
 
 
21694
   // Set the function decl to hold a tree of the function code.
 
21695
   void
 
21696
@@ -1170,7 +1176,7 @@
 
21697
   // The function descriptor, if any.
 
21698
   Expression* descriptor_;
 
21699
   // The function decl.
 
21700
-  tree fndecl_;
 
21701
+  Bfunction* fndecl_;
 
21702
   // The defer stack variable.  A pointer to this variable is used to
 
21703
   // distinguish the defer stack for one function from another.  This
 
21704
   // is NULL unless we actually need a defer stack.
 
21705
@@ -1181,6 +1187,9 @@
 
21706
   bool results_are_named_ : 1;
 
21707
   // True if this method should not be included in the type descriptor.
 
21708
   bool nointerface_ : 1;
 
21709
+  // True if this function is a stub method created for an unnamed
 
21710
+  // type.
 
21711
+  bool is_unnamed_type_stub_method_ : 1;
 
21712
   // True if this function calls the predeclared recover function.
 
21713
   bool calls_recover_ : 1;
 
21714
   // True if this a thunk built for a function which calls recover.
 
21715
@@ -1265,9 +1274,9 @@
 
21716
   has_descriptor() const
 
21717
   { return this->descriptor_ != NULL; }
 
21718
 
 
21719
-  // Return a decl for the function given an identifier.
 
21720
-  tree
 
21721
-  get_or_make_decl(Gogo*, Named_object*, tree id);
 
21722
+  // Return a backend representation.
 
21723
+  Bfunction*
 
21724
+  get_or_make_decl(Gogo*, Named_object*);
 
21725
 
 
21726
   // If there is a descriptor, build it into the backend
 
21727
   // representation.
 
21728
@@ -1290,7 +1299,7 @@
 
21729
   // The function descriptor, if any.
 
21730
   Expression* descriptor_;
 
21731
   // The function decl if needed.
 
21732
-  tree fndecl_;
 
21733
+  Bfunction* fndecl_;
 
21734
 };
 
21735
 
 
21736
 // A variable.
 
21737
@@ -2181,8 +2190,8 @@
 
21738
   Bvariable*
 
21739
   get_backend_variable(Gogo*, Named_object* function);
 
21740
 
 
21741
-  // Return a tree for the external identifier for this object.
 
21742
-  tree
 
21743
+  // Return the external identifier for this object.
 
21744
+  std::string
 
21745
   get_id(Gogo*);
 
21746
 
 
21747
   // Return a tree representing this object.
 
21748
Index: gcc/go/gofrontend/types.h
 
21749
===================================================================
 
21750
--- a/src/gcc/go/gofrontend/types.h     (.../tags/gcc_4_8_2_release)
 
21751
+++ b/src/gcc/go/gofrontend/types.h     (.../branches/gcc-4_8-branch)
 
21752
@@ -1138,6 +1138,13 @@
 
21753
                          Function_type* equal_fntype, Named_object** hash_fn,
 
21754
                          Named_object** equal_fn);
 
21755
 
 
21756
+  void
 
21757
+  write_named_hash(Gogo*, Named_type*, Function_type* hash_fntype,
 
21758
+                  Function_type* equal_fntype);
 
21759
+
 
21760
+  void
 
21761
+  write_named_equal(Gogo*, Named_type*);
 
21762
+
 
21763
   // Build a composite literal for the uncommon type information.
 
21764
   Expression*
 
21765
   uncommon_type_constructor(Gogo*, Type* uncommon_type,
 
21766
@@ -1717,7 +1724,8 @@
 
21767
                Typed_identifier_list* results, Location location)
 
21768
     : Type(TYPE_FUNCTION),
 
21769
       receiver_(receiver), parameters_(parameters), results_(results),
 
21770
-      location_(location), is_varargs_(false), is_builtin_(false)
 
21771
+      location_(location), is_varargs_(false), is_builtin_(false),
 
21772
+      fnbtype_(NULL)
 
21773
   { }
 
21774
 
 
21775
   // Get the receiver.
 
21776
@@ -1789,6 +1797,12 @@
 
21777
   Function_type*
 
21778
   copy_with_receiver(Type*) const;
 
21779
 
 
21780
+  // Return a copy of this type with the receiver treated as the first
 
21781
+  // parameter.  If WANT_POINTER_RECEIVER is true, the receiver is
 
21782
+  // forced to be a pointer.
 
21783
+  Function_type*
 
21784
+  copy_with_receiver_as_param(bool want_pointer_receiver) const;
 
21785
+
 
21786
   // Return a copy of this type ignoring any receiver and using dummy
 
21787
   // names for all parameters.  This is used for thunks for method
 
21788
   // values.
 
21789
@@ -1798,6 +1812,11 @@
 
21790
   static Type*
 
21791
   make_function_type_descriptor_type();
 
21792
 
 
21793
+  // Return the backend representation of this function type. This is used
 
21794
+  // as the real type of a backend function declaration or defintion.
 
21795
+  Btype*
 
21796
+  get_backend_fntype(Gogo*);
 
21797
+
 
21798
  protected:
 
21799
   int
 
21800
   do_traverse(Traverse*);
 
21801
@@ -1851,6 +1870,9 @@
 
21802
   // Whether this is a special builtin function which can not simply
 
21803
   // be called.  This is used for len, cap, etc.
 
21804
   bool is_builtin_;
 
21805
+  // The backend representation of this type for backend function
 
21806
+  // declarations and definitions.
 
21807
+  Btype* fnbtype_;
 
21808
 };
 
21809
 
 
21810
 // The type of a pointer.
 
21811
@@ -1915,7 +1937,7 @@
 
21812
 {
 
21813
  public:
 
21814
   explicit Struct_field(const Typed_identifier& typed_identifier)
 
21815
-    : typed_identifier_(typed_identifier), tag_(NULL)
 
21816
+    : typed_identifier_(typed_identifier), tag_(NULL), is_imported_(false)
 
21817
   { }
 
21818
 
 
21819
   // The field name.
 
21820
@@ -1926,6 +1948,10 @@
 
21821
   bool
 
21822
   is_field_name(const std::string& name) const;
 
21823
 
 
21824
+  // Return whether this struct field is an unexported field named NAME.
 
21825
+  bool
 
21826
+  is_unexported_field_name(Gogo*, const std::string& name) const;
 
21827
+
 
21828
   // Return whether this struct field is an embedded built-in type.
 
21829
   bool
 
21830
   is_embedded_builtin(Gogo*) const;
 
21831
@@ -1963,6 +1989,11 @@
 
21832
   set_tag(const std::string& tag)
 
21833
   { this->tag_ = new std::string(tag); }
 
21834
 
 
21835
+  // Record that this field is defined in an imported struct.
 
21836
+  void
 
21837
+  set_is_imported()
 
21838
+  { this->is_imported_ = true; }
 
21839
+
 
21840
   // Set the type.  This is only used in error cases.
 
21841
   void
 
21842
   set_type(Type* type)
 
21843
@@ -1973,6 +2004,8 @@
 
21844
   Typed_identifier typed_identifier_;
 
21845
   // The field tag.  This is NULL if the field has no tag.
 
21846
   std::string* tag_;
 
21847
+  // Whether this field is defined in an imported struct.
 
21848
+  bool is_imported_;
 
21849
 };
 
21850
 
 
21851
 // A list of struct fields.
 
21852
Index: gcc/go/gofrontend/parse.cc
 
21853
===================================================================
 
21854
--- a/src/gcc/go/gofrontend/parse.cc    (.../tags/gcc_4_8_2_release)
 
21855
+++ b/src/gcc/go/gofrontend/parse.cc    (.../branches/gcc-4_8-branch)
 
21856
@@ -744,6 +744,8 @@
 
21857
     return NULL;
 
21858
 
 
21859
   Parse::Names names;
 
21860
+  if (receiver != NULL)
 
21861
+    names[receiver->name()] = receiver;
 
21862
   if (params != NULL)
 
21863
     this->check_signature_names(params, &names);
 
21864
   if (results != NULL)
 
21865
Index: gcc/go/gofrontend/import.h
 
21866
===================================================================
 
21867
--- a/src/gcc/go/gofrontend/import.h    (.../tags/gcc_4_8_2_release)
 
21868
+++ b/src/gcc/go/gofrontend/import.h    (.../branches/gcc-4_8-branch)
 
21869
@@ -149,6 +149,11 @@
 
21870
   location() const
 
21871
   { return this->location_; }
 
21872
 
 
21873
+  // Return the package we are importing.
 
21874
+  Package*
 
21875
+  package() const
 
21876
+  { return this->package_; }
 
21877
+
 
21878
   // Return the next character.
 
21879
   int
 
21880
   peek_char()
 
21881
Index: gcc/go/gofrontend/runtime.cc
 
21882
===================================================================
 
21883
--- a/src/gcc/go/gofrontend/runtime.cc  (.../tags/gcc_4_8_2_release)
 
21884
+++ b/src/gcc/go/gofrontend/runtime.cc  (.../branches/gcc-4_8-branch)
 
21885
@@ -42,6 +42,8 @@
 
21886
   RFT_RUNE,
 
21887
   // Go type float64, C type double.
 
21888
   RFT_FLOAT64,
 
21889
+  // Go type complex64, C type __complex float.
 
21890
+  RFT_COMPLEX64,
 
21891
   // Go type complex128, C type __complex double.
 
21892
   RFT_COMPLEX128,
 
21893
   // Go type string, C type struct __go_string.
 
21894
@@ -126,6 +128,10 @@
 
21895
          t = Type::lookup_float_type("float64");
 
21896
          break;
 
21897
 
 
21898
+       case RFT_COMPLEX64:
 
21899
+         t = Type::lookup_complex_type("complex64");
 
21900
+         break;
 
21901
+
 
21902
        case RFT_COMPLEX128:
 
21903
          t = Type::lookup_complex_type("complex128");
 
21904
          break;
 
21905
@@ -216,6 +222,7 @@
 
21906
     case RFT_UINTPTR:
 
21907
     case RFT_RUNE:
 
21908
     case RFT_FLOAT64:
 
21909
+    case RFT_COMPLEX64:
 
21910
     case RFT_COMPLEX128:
 
21911
     case RFT_STRING:
 
21912
     case RFT_POINTER:
 
21913
Index: gcc/go/gofrontend/expressions.h
 
21914
===================================================================
 
21915
--- a/src/gcc/go/gofrontend/expressions.h       (.../tags/gcc_4_8_2_release)
 
21916
+++ b/src/gcc/go/gofrontend/expressions.h       (.../branches/gcc-4_8-branch)
 
21917
@@ -1514,8 +1514,8 @@
 
21918
   closure()
 
21919
   { return this->closure_; }
 
21920
 
 
21921
-  // Return a tree for the code for a function.
 
21922
-  static tree
 
21923
+  // Return a backend expression for the code of a function.
 
21924
+  static Bexpression*
 
21925
   get_code_pointer(Gogo*, Named_object* function, Location loc);
 
21926
 
 
21927
  protected:
 
21928
Index: gcc/go/gofrontend/gogo-tree.cc
 
21929
===================================================================
 
21930
--- a/src/gcc/go/gofrontend/gogo-tree.cc        (.../tags/gcc_4_8_2_release)
 
21931
+++ b/src/gcc/go/gofrontend/gogo-tree.cc        (.../branches/gcc-4_8-branch)
 
21932
@@ -985,74 +985,6 @@
 
21933
   delete[] vec;
 
21934
 }
 
21935
 
 
21936
-// Get a tree for the identifier for a named object.
 
21937
-
 
21938
-tree
 
21939
-Named_object::get_id(Gogo* gogo)
 
21940
-{
 
21941
-  go_assert(!this->is_variable() && !this->is_result_variable());
 
21942
-  std::string decl_name;
 
21943
-  if (this->is_function_declaration()
 
21944
-      && !this->func_declaration_value()->asm_name().empty())
 
21945
-    decl_name = this->func_declaration_value()->asm_name();
 
21946
-  else if (this->is_type()
 
21947
-          && Linemap::is_predeclared_location(this->type_value()->location()))
 
21948
-    {
 
21949
-      // We don't need the package name for builtin types.
 
21950
-      decl_name = Gogo::unpack_hidden_name(this->name_);
 
21951
-    }
 
21952
-  else
 
21953
-    {
 
21954
-      std::string package_name;
 
21955
-      if (this->package_ == NULL)
 
21956
-       package_name = gogo->package_name();
 
21957
-      else
 
21958
-       package_name = this->package_->package_name();
 
21959
-
 
21960
-      // Note that this will be misleading if this is an unexported
 
21961
-      // method generated for an embedded imported type.  In that case
 
21962
-      // the unexported method should have the package name of the
 
21963
-      // package from which it is imported, but we are going to give
 
21964
-      // it our package name.  Fixing this would require knowing the
 
21965
-      // package name, but we only know the package path.  It might be
 
21966
-      // better to use package paths here anyhow.  This doesn't affect
 
21967
-      // the assembler code, because we always set that name in
 
21968
-      // Function::get_or_make_decl anyhow.  FIXME.
 
21969
-
 
21970
-      decl_name = package_name + '.' + Gogo::unpack_hidden_name(this->name_);
 
21971
-
 
21972
-      Function_type* fntype;
 
21973
-      if (this->is_function())
 
21974
-       fntype = this->func_value()->type();
 
21975
-      else if (this->is_function_declaration())
 
21976
-       fntype = this->func_declaration_value()->type();
 
21977
-      else
 
21978
-       fntype = NULL;
 
21979
-      if (fntype != NULL && fntype->is_method())
 
21980
-       {
 
21981
-         decl_name.push_back('.');
 
21982
-         decl_name.append(fntype->receiver()->type()->mangled_name(gogo));
 
21983
-       }
 
21984
-    }
 
21985
-  if (this->is_type())
 
21986
-    {
 
21987
-      unsigned int index;
 
21988
-      const Named_object* in_function = this->type_value()->in_function(&index);
 
21989
-      if (in_function != NULL)
 
21990
-       {
 
21991
-         decl_name += '$' + Gogo::unpack_hidden_name(in_function->name());
 
21992
-         if (index > 0)
 
21993
-           {
 
21994
-             char buf[30];
 
21995
-             snprintf(buf, sizeof buf, "%u", index);
 
21996
-             decl_name += '$';
 
21997
-             decl_name += buf;
 
21998
-           }
 
21999
-       }
 
22000
-    }
 
22001
-  return get_identifier_from_string(decl_name);
 
22002
-}
 
22003
-
 
22004
 // Get a tree for a named object.
 
22005
 
 
22006
 tree
 
22007
@@ -1067,11 +999,6 @@
 
22008
       return error_mark_node;
 
22009
     }
 
22010
 
 
22011
-  tree name;
 
22012
-  if (this->classification_ == NAMED_OBJECT_TYPE)
 
22013
-    name = NULL_TREE;
 
22014
-  else
 
22015
-    name = this->get_id(gogo);
 
22016
   tree decl;
 
22017
   switch (this->classification_)
 
22018
     {
 
22019
@@ -1099,6 +1026,7 @@
 
22020
              decl = error_mark_node;
 
22021
            else if (INTEGRAL_TYPE_P(TREE_TYPE(expr_tree)))
 
22022
              {
 
22023
+                tree name = get_identifier_from_string(this->get_id(gogo));
 
22024
                decl = build_decl(named_constant->location().gcc_location(),
 
22025
                                   CONST_DECL, name, TREE_TYPE(expr_tree));
 
22026
                DECL_INITIAL(decl) = expr_tree;
 
22027
@@ -1161,7 +1089,7 @@
 
22028
     case NAMED_OBJECT_FUNC:
 
22029
       {
 
22030
        Function* func = this->u_.func_value;
 
22031
-       decl = func->get_or_make_decl(gogo, this, name);
 
22032
+       decl = function_to_tree(func->get_or_make_decl(gogo, this));
 
22033
        if (decl != error_mark_node)
 
22034
          {
 
22035
            if (func->block() != NULL)
 
22036
@@ -1286,124 +1214,13 @@
 
22037
   return block_tree;
 
22038
 }
 
22039
 
 
22040
-// Get a tree for a function decl.
 
22041
+// Get the backend representation.
 
22042
 
 
22043
-tree
 
22044
-Function::get_or_make_decl(Gogo* gogo, Named_object* no, tree id)
 
22045
+Bfunction*
 
22046
+Function_declaration::get_or_make_decl(Gogo* gogo, Named_object* no)
 
22047
 {
 
22048
-  if (this->fndecl_ == NULL_TREE)
 
22049
+  if (this->fndecl_ == NULL)
 
22050
     {
 
22051
-      tree functype = type_to_tree(this->type_->get_backend(gogo));
 
22052
-
 
22053
-      if (functype != error_mark_node)
 
22054
-       {
 
22055
-         // The type of a function comes back as a pointer to a
 
22056
-         // struct whose first field is the function, but we want the
 
22057
-         // real function type for a function declaration.
 
22058
-         go_assert(POINTER_TYPE_P(functype)
 
22059
-                   && TREE_CODE(TREE_TYPE(functype)) == RECORD_TYPE);
 
22060
-         functype = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(functype)));
 
22061
-         go_assert(FUNCTION_POINTER_TYPE_P(functype));
 
22062
-         functype = TREE_TYPE(functype);
 
22063
-       }
 
22064
-
 
22065
-      if (functype == error_mark_node)
 
22066
-       this->fndecl_ = error_mark_node;
 
22067
-      else
 
22068
-       {
 
22069
-         tree decl = build_decl(this->location().gcc_location(), FUNCTION_DECL,
 
22070
-                                 id, functype);
 
22071
-
 
22072
-         this->fndecl_ = decl;
 
22073
-
 
22074
-         if (no->package() != NULL)
 
22075
-           ;
 
22076
-         else if (this->enclosing_ != NULL || Gogo::is_thunk(no))
 
22077
-           ;
 
22078
-         else if (Gogo::unpack_hidden_name(no->name()) == "init"
 
22079
-                  && !this->type_->is_method())
 
22080
-           ;
 
22081
-         else if (Gogo::unpack_hidden_name(no->name()) == "main"
 
22082
-                  && gogo->is_main_package())
 
22083
-           TREE_PUBLIC(decl) = 1;
 
22084
-         // Methods have to be public even if they are hidden because
 
22085
-         // they can be pulled into type descriptors when using
 
22086
-         // anonymous fields.
 
22087
-         else if (!Gogo::is_hidden_name(no->name())
 
22088
-                  || this->type_->is_method())
 
22089
-           {
 
22090
-             TREE_PUBLIC(decl) = 1;
 
22091
-             std::string pkgpath = gogo->pkgpath_symbol();
 
22092
-             if (this->type_->is_method()
 
22093
-                 && Gogo::is_hidden_name(no->name())
 
22094
-                 && Gogo::hidden_name_pkgpath(no->name()) != gogo->pkgpath())
 
22095
-               {
 
22096
-                 // This is a method we created for an unexported
 
22097
-                 // method of an imported embedded type.  We need to
 
22098
-                 // use the pkgpath of the imported package to avoid
 
22099
-                 // a possible name collision.  See bug478 for a test
 
22100
-                 // case.
 
22101
-                 pkgpath = Gogo::hidden_name_pkgpath(no->name());
 
22102
-                 pkgpath = Gogo::pkgpath_for_symbol(pkgpath);
 
22103
-               }
 
22104
-
 
22105
-             std::string asm_name = pkgpath;
 
22106
-             asm_name.append(1, '.');
 
22107
-             asm_name.append(Gogo::unpack_hidden_name(no->name()));
 
22108
-             if (this->type_->is_method())
 
22109
-               {
 
22110
-                 asm_name.append(1, '.');
 
22111
-                 Type* rtype = this->type_->receiver()->type();
 
22112
-                 asm_name.append(rtype->mangled_name(gogo));
 
22113
-               }
 
22114
-             SET_DECL_ASSEMBLER_NAME(decl,
 
22115
-                                     get_identifier_from_string(asm_name));
 
22116
-           }
 
22117
-
 
22118
-         // Why do we have to do this in the frontend?
 
22119
-         tree restype = TREE_TYPE(functype);
 
22120
-         tree resdecl =
 
22121
-            build_decl(this->location().gcc_location(), RESULT_DECL, NULL_TREE,
 
22122
-                       restype);
 
22123
-         DECL_ARTIFICIAL(resdecl) = 1;
 
22124
-         DECL_IGNORED_P(resdecl) = 1;
 
22125
-         DECL_CONTEXT(resdecl) = decl;
 
22126
-         DECL_RESULT(decl) = resdecl;
 
22127
-
 
22128
-         // If a function calls the predeclared recover function, we
 
22129
-         // can't inline it, because recover behaves differently in a
 
22130
-         // function passed directly to defer.  If this is a recover
 
22131
-         // thunk that we built to test whether a function can be
 
22132
-         // recovered, we can't inline it, because that will mess up
 
22133
-         // our return address comparison.
 
22134
-         if (this->calls_recover_ || this->is_recover_thunk_)
 
22135
-           DECL_UNINLINABLE(decl) = 1;
 
22136
-
 
22137
-         // If this is a thunk created to call a function which calls
 
22138
-         // the predeclared recover function, we need to disable
 
22139
-         // stack splitting for the thunk.
 
22140
-         if (this->is_recover_thunk_)
 
22141
-           {
 
22142
-             tree attr = get_identifier("__no_split_stack__");
 
22143
-             DECL_ATTRIBUTES(decl) = tree_cons(attr, NULL_TREE, NULL_TREE);
 
22144
-           }
 
22145
-
 
22146
-         if (this->in_unique_section_)
 
22147
-           resolve_unique_section (decl, 0, 1);
 
22148
-
 
22149
-         go_preserve_from_gc(decl);
 
22150
-       }
 
22151
-    }
 
22152
-  return this->fndecl_;
 
22153
-}
 
22154
-
 
22155
-// Get a tree for a function declaration.
 
22156
-
 
22157
-tree
 
22158
-Function_declaration::get_or_make_decl(Gogo* gogo, Named_object* no, tree id)
 
22159
-{
 
22160
-  if (this->fndecl_ == NULL_TREE)
 
22161
-    {
 
22162
       // Let Go code use an asm declaration to pick up a builtin
 
22163
       // function.
 
22164
       if (!this->asm_name_.empty())
 
22165
@@ -1412,58 +1229,46 @@
 
22166
            builtin_functions.find(this->asm_name_);
 
22167
          if (p != builtin_functions.end())
 
22168
            {
 
22169
-             this->fndecl_ = p->second;
 
22170
+             this->fndecl_ = tree_to_function(p->second);
 
22171
              return this->fndecl_;
 
22172
            }
 
22173
        }
 
22174
 
 
22175
-      tree functype = type_to_tree(this->fntype_->get_backend(gogo));
 
22176
+      std::string asm_name;
 
22177
+      if (this->asm_name_.empty())
 
22178
+        {
 
22179
+          asm_name = (no->package() == NULL
 
22180
+                                  ? gogo->pkgpath_symbol()
 
22181
+                                  : no->package()->pkgpath_symbol());
 
22182
+          asm_name.append(1, '.');
 
22183
+          asm_name.append(Gogo::unpack_hidden_name(no->name()));
 
22184
+          if (this->fntype_->is_method())
 
22185
+            {
 
22186
+              asm_name.append(1, '.');
 
22187
+              Type* rtype = this->fntype_->receiver()->type();
 
22188
+              asm_name.append(rtype->mangled_name(gogo));
 
22189
+            }
 
22190
+        }
 
22191
 
 
22192
-      if (functype != error_mark_node)
 
22193
-       {
 
22194
-         // The type of a function comes back as a pointer to a
 
22195
-         // struct whose first field is the function, but we want the
 
22196
-         // real function type for a function declaration.
 
22197
-         go_assert(POINTER_TYPE_P(functype)
 
22198
-                   && TREE_CODE(TREE_TYPE(functype)) == RECORD_TYPE);
 
22199
-         functype = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(functype)));
 
22200
-         go_assert(FUNCTION_POINTER_TYPE_P(functype));
 
22201
-         functype = TREE_TYPE(functype);
 
22202
-       }
 
22203
+      Btype* functype = this->fntype_->get_backend_fntype(gogo);
 
22204
+      this->fndecl_ =
 
22205
+          gogo->backend()->function(functype, no->get_id(gogo), asm_name,
 
22206
+                                    true, true, true, false, false,
 
22207
+                                    this->location());
 
22208
+    }
 
22209
 
 
22210
-      tree decl;
 
22211
-      if (functype == error_mark_node)
 
22212
-       decl = error_mark_node;
 
22213
-      else
 
22214
-       {
 
22215
-         decl = build_decl(this->location().gcc_location(), FUNCTION_DECL, id,
 
22216
-                            functype);
 
22217
-         TREE_PUBLIC(decl) = 1;
 
22218
-         DECL_EXTERNAL(decl) = 1;
 
22219
-
 
22220
-         if (this->asm_name_.empty())
 
22221
-           {
 
22222
-             std::string asm_name = (no->package() == NULL
 
22223
-                                     ? gogo->pkgpath_symbol()
 
22224
-                                     : no->package()->pkgpath_symbol());
 
22225
-             asm_name.append(1, '.');
 
22226
-             asm_name.append(Gogo::unpack_hidden_name(no->name()));
 
22227
-             if (this->fntype_->is_method())
 
22228
-               {
 
22229
-                 asm_name.append(1, '.');
 
22230
-                 Type* rtype = this->fntype_->receiver()->type();
 
22231
-                 asm_name.append(rtype->mangled_name(gogo));
 
22232
-               }
 
22233
-             SET_DECL_ASSEMBLER_NAME(decl,
 
22234
-                                     get_identifier_from_string(asm_name));
 
22235
-           }
 
22236
-       }
 
22237
-      this->fndecl_ = decl;
 
22238
-      go_preserve_from_gc(decl);
 
22239
-    }
 
22240
   return this->fndecl_;
 
22241
 }
 
22242
 
 
22243
+// Return the function's decl after it has been built.
 
22244
+
 
22245
+tree
 
22246
+Function::get_decl() const
 
22247
+{
 
22248
+  go_assert(this->fndecl_ != NULL);
 
22249
+  return function_to_tree(this->fndecl_);
 
22250
+}
 
22251
+
 
22252
 // We always pass the receiver to a method as a pointer.  If the
 
22253
 // receiver is actually declared as a non-pointer type, then we copy
 
22254
 // the value into a local variable, so that it has the right type.  In
 
22255
@@ -1558,7 +1363,7 @@
 
22256
 void
 
22257
 Function::build_tree(Gogo* gogo, Named_object* named_function)
 
22258
 {
 
22259
-  tree fndecl = this->fndecl_;
 
22260
+  tree fndecl = this->get_decl();
 
22261
   go_assert(fndecl != NULL_TREE);
 
22262
 
 
22263
   tree params = NULL_TREE;
 
22264
@@ -1796,7 +1601,7 @@
 
22265
     set = NULL_TREE;
 
22266
   else
 
22267
     set = fold_build2_loc(end_loc.gcc_location(), MODIFY_EXPR, void_type_node,
 
22268
-                         DECL_RESULT(this->fndecl_), retval);
 
22269
+                         DECL_RESULT(this->get_decl()), retval);
 
22270
   tree ret_stmt = fold_build1_loc(end_loc.gcc_location(), RETURN_EXPR,
 
22271
                                   void_type_node, set);
 
22272
   append_to_statement_list(ret_stmt, &stmt_list);
 
22273
@@ -1851,7 +1656,7 @@
 
22274
       retval = this->return_value(gogo, named_function, end_loc,
 
22275
                                  &stmt_list);
 
22276
       set = fold_build2_loc(end_loc.gcc_location(), MODIFY_EXPR, void_type_node,
 
22277
-                           DECL_RESULT(this->fndecl_), retval);
 
22278
+                           DECL_RESULT(this->get_decl()), retval);
 
22279
       ret_stmt = fold_build1_loc(end_loc.gcc_location(), RETURN_EXPR,
 
22280
                                  void_type_node, set);
 
22281
 
 
22282
@@ -1869,7 +1674,7 @@
 
22283
   *fini = stmt_list;
 
22284
 }
 
22285
 
 
22286
-// Return the value to assign to DECL_RESULT(this->fndecl_).  This may
 
22287
+// Return the value to assign to DECL_RESULT(this->get_decl()).  This may
 
22288
 // also add statements to STMT_LIST, which need to be executed before
 
22289
 // the assignment.  This is used for a return statement with no
 
22290
 // explicit values.
 
22291
@@ -1902,7 +1707,7 @@
 
22292
     }
 
22293
   else
 
22294
     {
 
22295
-      tree rettype = TREE_TYPE(DECL_RESULT(this->fndecl_));
 
22296
+      tree rettype = TREE_TYPE(DECL_RESULT(this->get_decl()));
 
22297
       retval = create_tmp_var(rettype, "RESULT");
 
22298
       tree field = TYPE_FIELDS(rettype);
 
22299
       int index = 0;
 
22300
@@ -2323,18 +2128,14 @@
 
22301
       go_assert(m != NULL);
 
22302
 
 
22303
       Named_object* no = m->named_object();
 
22304
-
 
22305
-      tree fnid = no->get_id(this);
 
22306
-
 
22307
-      tree fndecl;
 
22308
+      Bfunction* bf;
 
22309
       if (no->is_function())
 
22310
-       fndecl = no->func_value()->get_or_make_decl(this, no, fnid);
 
22311
+       bf = no->func_value()->get_or_make_decl(this, no);
 
22312
       else if (no->is_function_declaration())
 
22313
-       fndecl = no->func_declaration_value()->get_or_make_decl(this, no,
 
22314
-                                                               fnid);
 
22315
+       bf = no->func_declaration_value()->get_or_make_decl(this, no);
 
22316
       else
 
22317
        go_unreachable();
 
22318
-      fndecl = build_fold_addr_expr(fndecl);
 
22319
+      tree fndecl = build_fold_addr_expr(function_to_tree(bf));
 
22320
 
 
22321
       elt = pointers->quick_push(empty);
 
22322
       elt->index = size_int(i);
 
22323
@@ -2353,10 +2154,11 @@
 
22324
   TREE_CONSTANT(decl) = 1;
 
22325
   DECL_INITIAL(decl) = constructor;
 
22326
 
 
22327
-  // If the interface type has hidden methods, then this is the only
 
22328
-  // definition of the table.  Otherwise it is a comdat table which
 
22329
-  // may be defined in multiple packages.
 
22330
-  if (has_hidden_methods)
 
22331
+  // If the interface type has hidden methods, and the table is for a
 
22332
+  // named type, then this is the only definition of the table.
 
22333
+  // Otherwise it is a comdat table which may be defined in multiple
 
22334
+  // packages.
 
22335
+  if (has_hidden_methods && type->named_type() != NULL)
 
22336
     TREE_PUBLIC(decl) = 1;
 
22337
   else
 
22338
     {
 
22339
Index: gcc/go/gofrontend/lex.cc
 
22340
===================================================================
 
22341
--- a/src/gcc/go/gofrontend/lex.cc      (.../tags/gcc_4_8_2_release)
 
22342
+++ b/src/gcc/go/gofrontend/lex.cc      (.../branches/gcc-4_8-branch)
 
22343
@@ -873,7 +873,28 @@
 
22344
              && (cc < 'a' || cc > 'z')
 
22345
              && cc != '_'
 
22346
              && (cc < '0' || cc > '9'))
 
22347
-           break;
 
22348
+           {
 
22349
+             // Check for an invalid character here, as we get better
 
22350
+             // error behaviour if we swallow them as part of the
 
22351
+             // identifier we are building.
 
22352
+             if ((cc >= ' ' && cc < 0x7f)
 
22353
+                 || cc == '\t'
 
22354
+                 || cc == '\r'
 
22355
+                 || cc == '\n')
 
22356
+               break;
 
22357
+
 
22358
+             this->lineoff_ = p - this->linebuf_;
 
22359
+             error_at(this->location(),
 
22360
+                      "invalid character 0x%x in identifier",
 
22361
+                      cc);
 
22362
+             if (!has_non_ascii_char)
 
22363
+               {
 
22364
+                 buf.assign(pstart, p - pstart);
 
22365
+                 has_non_ascii_char = true;
 
22366
+               }
 
22367
+             if (!Lex::is_invalid_identifier(buf))
 
22368
+               buf.append("$INVALID$");
 
22369
+           }
 
22370
          ++p;
 
22371
          if (is_first)
 
22372
            {
 
22373
Index: gcc/go/gofrontend/backend.h
 
22374
===================================================================
 
22375
--- a/src/gcc/go/gofrontend/backend.h   (.../tags/gcc_4_8_2_release)
 
22376
+++ b/src/gcc/go/gofrontend/backend.h   (.../branches/gcc-4_8-branch)
 
22377
@@ -23,7 +23,7 @@
 
22378
 // The backend representation of a statement.
 
22379
 class Bstatement;
 
22380
 
 
22381
-// The backend representation of a function definition.
 
22382
+// The backend representation of a function definition or declaration.
 
22383
 class Bfunction;
 
22384
 
 
22385
 // The backend representation of a block.
 
22386
@@ -266,6 +266,11 @@
 
22387
   virtual Bexpression*
 
22388
   convert_expression(Btype* type, Bexpression* expr, Location) = 0;
 
22389
 
 
22390
+  // Create an expression for the address of a function.  This is used to
 
22391
+  // get the address of the code for a function.
 
22392
+  virtual Bexpression*
 
22393
+  function_code_expression(Bfunction*, Location) = 0;
 
22394
+
 
22395
   // Statements.
 
22396
 
 
22397
   // Create an error statement.  This is used for cases which should
 
22398
@@ -498,6 +503,32 @@
 
22399
   // recover.
 
22400
   virtual Bexpression*
 
22401
   label_address(Blabel*, Location) = 0;
 
22402
+
 
22403
+  // Functions.
 
22404
+
 
22405
+  // Create an error function.  This is used for cases which should
 
22406
+  // not occur in a correct program, in order to keep the compilation
 
22407
+  // going without crashing.
 
22408
+  virtual Bfunction*
 
22409
+  error_function() = 0;
 
22410
+
 
22411
+  // Declare or define a function of FNTYPE.
 
22412
+  // NAME is the Go name of the function. ASM_NAME, if not the empty string, is
 
22413
+  // the name that should be used in the symbol table; this will be non-empty if
 
22414
+  // a magic extern comment is used.
 
22415
+  // IS_VISIBLE is true if this function should be visible outside of the
 
22416
+  // current compilation unit. IS_DECLARATION is true if this is a function
 
22417
+  // declaration rather than a definition; the function definition will be in
 
22418
+  // another compilation unit.
 
22419
+  // IS_INLINABLE is true if the function can be inlined.
 
22420
+  // DISABLE_SPLIT_STACK is true if this function may not split the stack; this
 
22421
+  // is used for the implementation of recover.
 
22422
+  // IN_UNIQUE_SECTION is true if this function should be put into a unique
 
22423
+  // location if possible; this is used for field tracking.
 
22424
+  virtual Bfunction*
 
22425
+  function(Btype* fntype, const std::string& name, const std::string& asm_name,
 
22426
+           bool is_visible, bool is_declaration, bool is_inlinable,
 
22427
+           bool disable_split_stack, bool in_unique_section, Location) = 0;
 
22428
 };
 
22429
 
 
22430
 // The backend interface has to define this function.
 
22431
@@ -517,5 +548,6 @@
 
22432
 extern tree stat_to_tree(Bstatement*);
 
22433
 extern tree block_to_tree(Bblock*);
 
22434
 extern tree var_to_tree(Bvariable*);
 
22435
+extern tree function_to_tree(Bfunction*);
 
22436
 
 
22437
 #endif // !defined(GO_BACKEND_H)
 
22438
Index: gcc/go/gofrontend/types.cc
 
22439
===================================================================
 
22440
--- a/src/gcc/go/gofrontend/types.cc    (.../tags/gcc_4_8_2_release)
 
22441
+++ b/src/gcc/go/gofrontend/types.cc    (.../branches/gcc-4_8-branch)
 
22442
@@ -1834,7 +1834,9 @@
 
22443
                                               bloc);
 
22444
   gogo->start_block(bloc);
 
22445
 
 
22446
-  if (this->struct_type() != NULL)
 
22447
+  if (name != NULL && name->real_type()->named_type() != NULL)
 
22448
+    this->write_named_hash(gogo, name, hash_fntype, equal_fntype);
 
22449
+  else if (this->struct_type() != NULL)
 
22450
     this->struct_type()->write_hash_function(gogo, name, hash_fntype,
 
22451
                                             equal_fntype);
 
22452
   else if (this->array_type() != NULL)
 
22453
@@ -1852,7 +1854,9 @@
 
22454
                                                false, bloc);
 
22455
   gogo->start_block(bloc);
 
22456
 
 
22457
-  if (this->struct_type() != NULL)
 
22458
+  if (name != NULL && name->real_type()->named_type() != NULL)
 
22459
+    this->write_named_equal(gogo, name);
 
22460
+  else if (this->struct_type() != NULL)
 
22461
     this->struct_type()->write_equal_function(gogo, name);
 
22462
   else if (this->array_type() != NULL)
 
22463
     this->array_type()->write_equal_function(gogo, name);
 
22464
@@ -1865,6 +1869,100 @@
 
22465
   gogo->finish_function(bloc);
 
22466
 }
 
22467
 
 
22468
+// Write a hash function that simply calls the hash function for a
 
22469
+// named type.  This is used when one named type is defined as
 
22470
+// another.  This ensures that this case works when the other named
 
22471
+// type is defined in another package and relies on calling hash
 
22472
+// functions defined only in that package.
 
22473
+
 
22474
+void
 
22475
+Type::write_named_hash(Gogo* gogo, Named_type* name,
 
22476
+                      Function_type* hash_fntype, Function_type* equal_fntype)
 
22477
+{
 
22478
+  Location bloc = Linemap::predeclared_location();
 
22479
+
 
22480
+  Named_type* base_type = name->real_type()->named_type();
 
22481
+  go_assert(base_type != NULL);
 
22482
+
 
22483
+  // The pointer to the type we are going to hash.  This is an
 
22484
+  // unsafe.Pointer.
 
22485
+  Named_object* key_arg = gogo->lookup("key", NULL);
 
22486
+  go_assert(key_arg != NULL);
 
22487
+
 
22488
+  // The size of the type we are going to hash.
 
22489
+  Named_object* keysz_arg = gogo->lookup("key_size", NULL);
 
22490
+  go_assert(keysz_arg != NULL);
 
22491
+
 
22492
+  Named_object* hash_fn;
 
22493
+  Named_object* equal_fn;
 
22494
+  name->real_type()->type_functions(gogo, base_type, hash_fntype, equal_fntype,
 
22495
+                                   &hash_fn, &equal_fn);
 
22496
+
 
22497
+  // Call the hash function for the base type.
 
22498
+  Expression* key_ref = Expression::make_var_reference(key_arg, bloc);
 
22499
+  Expression* keysz_ref = Expression::make_var_reference(keysz_arg, bloc);
 
22500
+  Expression_list* args = new Expression_list();
 
22501
+  args->push_back(key_ref);
 
22502
+  args->push_back(keysz_ref);
 
22503
+  Expression* func = Expression::make_func_reference(hash_fn, NULL, bloc);
 
22504
+  Expression* call = Expression::make_call(func, args, false, bloc);
 
22505
+
 
22506
+  // Return the hash of the base type.
 
22507
+  Expression_list* vals = new Expression_list();
 
22508
+  vals->push_back(call);
 
22509
+  Statement* s = Statement::make_return_statement(vals, bloc);
 
22510
+  gogo->add_statement(s);
 
22511
+}
 
22512
+
 
22513
+// Write an equality function that simply calls the equality function
 
22514
+// for a named type.  This is used when one named type is defined as
 
22515
+// another.  This ensures that this case works when the other named
 
22516
+// type is defined in another package and relies on calling equality
 
22517
+// functions defined only in that package.
 
22518
+
 
22519
+void
 
22520
+Type::write_named_equal(Gogo* gogo, Named_type* name)
 
22521
+{
 
22522
+  Location bloc = Linemap::predeclared_location();
 
22523
+
 
22524
+  // The pointers to the types we are going to compare.  These have
 
22525
+  // type unsafe.Pointer.
 
22526
+  Named_object* key1_arg = gogo->lookup("key1", NULL);
 
22527
+  Named_object* key2_arg = gogo->lookup("key2", NULL);
 
22528
+  go_assert(key1_arg != NULL && key2_arg != NULL);
 
22529
+
 
22530
+  Named_type* base_type = name->real_type()->named_type();
 
22531
+  go_assert(base_type != NULL);
 
22532
+
 
22533
+  // Build temporaries with the base type.
 
22534
+  Type* pt = Type::make_pointer_type(base_type);
 
22535
+
 
22536
+  Expression* ref = Expression::make_var_reference(key1_arg, bloc);
 
22537
+  ref = Expression::make_cast(pt, ref, bloc);
 
22538
+  Temporary_statement* p1 = Statement::make_temporary(pt, ref, bloc);
 
22539
+  gogo->add_statement(p1);
 
22540
+
 
22541
+  ref = Expression::make_var_reference(key2_arg, bloc);
 
22542
+  ref = Expression::make_cast(pt, ref, bloc);
 
22543
+  Temporary_statement* p2 = Statement::make_temporary(pt, ref, bloc);
 
22544
+  gogo->add_statement(p2);
 
22545
+
 
22546
+  // Compare the values for equality.
 
22547
+  Expression* t1 = Expression::make_temporary_reference(p1, bloc);
 
22548
+  t1 = Expression::make_unary(OPERATOR_MULT, t1, bloc);
 
22549
+
 
22550
+  Expression* t2 = Expression::make_temporary_reference(p2, bloc);
 
22551
+  t2 = Expression::make_unary(OPERATOR_MULT, t2, bloc);
 
22552
+
 
22553
+  Expression* cond = Expression::make_binary(OPERATOR_EQEQ, t1, t2, bloc);
 
22554
+
 
22555
+  // Return the equality comparison.
 
22556
+  Expression_list* vals = new Expression_list();
 
22557
+  vals->push_back(cond);
 
22558
+  Statement* s = Statement::make_return_statement(vals, bloc);
 
22559
+  gogo->add_statement(s);
 
22560
+}
 
22561
+
 
22562
 // Return a composite literal for the type descriptor for a plain type
 
22563
 // of kind RUNTIME_TYPE_KIND named NAME.
 
22564
 
 
22565
@@ -2164,26 +2262,9 @@
 
22566
 
 
22567
   ++p;
 
22568
   go_assert(p->is_field_name("typ"));
 
22569
-  if (!only_value_methods && m->is_value_method())
 
22570
-    {
 
22571
-      // This is a value method on a pointer type.  Change the type of
 
22572
-      // the method to use a pointer receiver.  The implementation
 
22573
-      // always uses a pointer receiver anyhow.
 
22574
-      Type* rtype = mtype->receiver()->type();
 
22575
-      Type* prtype = Type::make_pointer_type(rtype);
 
22576
-      Typed_identifier* receiver =
 
22577
-       new Typed_identifier(mtype->receiver()->name(), prtype,
 
22578
-                            mtype->receiver()->location());
 
22579
-      mtype = Type::make_function_type(receiver,
 
22580
-                                      (mtype->parameters() == NULL
 
22581
-                                       ? NULL
 
22582
-                                       : mtype->parameters()->copy()),
 
22583
-                                      (mtype->results() == NULL
 
22584
-                                       ? NULL
 
22585
-                                       : mtype->results()->copy()),
 
22586
-                                      mtype->location());
 
22587
-    }
 
22588
-  vals->push_back(Expression::make_type_descriptor(mtype, bloc));
 
22589
+  bool want_pointer_receiver = !only_value_methods && m->is_value_method();
 
22590
+  nonmethod_type = mtype->copy_with_receiver_as_param(want_pointer_receiver);
 
22591
+  vals->push_back(Expression::make_type_descriptor(nonmethod_type, bloc));
 
22592
 
 
22593
   ++p;
 
22594
   go_assert(p->is_field_name("tfn"));
 
22595
@@ -3383,6 +3464,68 @@
 
22596
 // Get the backend representation for a function type.
 
22597
 
 
22598
 Btype*
 
22599
+Function_type::get_backend_fntype(Gogo* gogo)
 
22600
+{
 
22601
+  if (this->fnbtype_ == NULL)
 
22602
+    {
 
22603
+      Backend::Btyped_identifier breceiver;
 
22604
+      if (this->receiver_ != NULL)
 
22605
+        {
 
22606
+          breceiver.name = Gogo::unpack_hidden_name(this->receiver_->name());
 
22607
+
 
22608
+          // We always pass the address of the receiver parameter, in
 
22609
+          // order to make interface calls work with unknown types.
 
22610
+          Type* rtype = this->receiver_->type();
 
22611
+          if (rtype->points_to() == NULL)
 
22612
+            rtype = Type::make_pointer_type(rtype);
 
22613
+          breceiver.btype = rtype->get_backend(gogo);
 
22614
+          breceiver.location = this->receiver_->location();
 
22615
+        }
 
22616
+
 
22617
+      std::vector<Backend::Btyped_identifier> bparameters;
 
22618
+      if (this->parameters_ != NULL)
 
22619
+        {
 
22620
+          bparameters.resize(this->parameters_->size());
 
22621
+          size_t i = 0;
 
22622
+          for (Typed_identifier_list::const_iterator p =
 
22623
+                   this->parameters_->begin(); p != this->parameters_->end();
 
22624
+               ++p, ++i)
 
22625
+           {
 
22626
+              bparameters[i].name = Gogo::unpack_hidden_name(p->name());
 
22627
+              bparameters[i].btype = p->type()->get_backend(gogo);
 
22628
+              bparameters[i].location = p->location();
 
22629
+            }
 
22630
+          go_assert(i == bparameters.size());
 
22631
+        }
 
22632
+
 
22633
+      std::vector<Backend::Btyped_identifier> bresults;
 
22634
+      if (this->results_ != NULL)
 
22635
+        {
 
22636
+          bresults.resize(this->results_->size());
 
22637
+          size_t i = 0;
 
22638
+          for (Typed_identifier_list::const_iterator p =
 
22639
+                   this->results_->begin(); p != this->results_->end();
 
22640
+               ++p, ++i)
 
22641
+           {
 
22642
+              bresults[i].name = Gogo::unpack_hidden_name(p->name());
 
22643
+              bresults[i].btype = p->type()->get_backend(gogo);
 
22644
+              bresults[i].location = p->location();
 
22645
+            }
 
22646
+          go_assert(i == bresults.size());
 
22647
+        }
 
22648
+
 
22649
+      this->fnbtype_ = gogo->backend()->function_type(breceiver, bparameters,
 
22650
+                                                      bresults,
 
22651
+                                                      this->location());
 
22652
+
 
22653
+    }
 
22654
+
 
22655
+  return this->fnbtype_;
 
22656
+}
 
22657
+
 
22658
+// Get the backend representation for a Go function type.
 
22659
+
 
22660
+Btype*
 
22661
 Function_type::do_get_backend(Gogo* gogo)
 
22662
 {
 
22663
   // When we do anything with a function value other than call it, it
 
22664
@@ -3395,57 +3538,9 @@
 
22665
     gogo->backend()->placeholder_struct_type("__go_descriptor", loc);
 
22666
   Btype* ptr_struct_type = gogo->backend()->pointer_type(struct_type);
 
22667
 
 
22668
-  Backend::Btyped_identifier breceiver;
 
22669
-  if (this->receiver_ != NULL)
 
22670
-    {
 
22671
-      breceiver.name = Gogo::unpack_hidden_name(this->receiver_->name());
 
22672
-
 
22673
-      // We always pass the address of the receiver parameter, in
 
22674
-      // order to make interface calls work with unknown types.
 
22675
-      Type* rtype = this->receiver_->type();
 
22676
-      if (rtype->points_to() == NULL)
 
22677
-       rtype = Type::make_pointer_type(rtype);
 
22678
-      breceiver.btype = rtype->get_backend(gogo);
 
22679
-      breceiver.location = this->receiver_->location();
 
22680
-    }
 
22681
-
 
22682
-  std::vector<Backend::Btyped_identifier> bparameters;
 
22683
-  if (this->parameters_ != NULL)
 
22684
-    {
 
22685
-      bparameters.resize(this->parameters_->size());
 
22686
-      size_t i = 0;
 
22687
-      for (Typed_identifier_list::const_iterator p = this->parameters_->begin();
 
22688
-          p != this->parameters_->end();
 
22689
-          ++p, ++i)
 
22690
-       {
 
22691
-         bparameters[i].name = Gogo::unpack_hidden_name(p->name());
 
22692
-         bparameters[i].btype = p->type()->get_backend(gogo);
 
22693
-         bparameters[i].location = p->location();
 
22694
-       }
 
22695
-      go_assert(i == bparameters.size());
 
22696
-    }
 
22697
-
 
22698
-  std::vector<Backend::Btyped_identifier> bresults;
 
22699
-  if (this->results_ != NULL)
 
22700
-    {
 
22701
-      bresults.resize(this->results_->size());
 
22702
-      size_t i = 0;
 
22703
-      for (Typed_identifier_list::const_iterator p = this->results_->begin();
 
22704
-          p != this->results_->end();
 
22705
-          ++p, ++i)
 
22706
-       {
 
22707
-         bresults[i].name = Gogo::unpack_hidden_name(p->name());
 
22708
-         bresults[i].btype = p->type()->get_backend(gogo);
 
22709
-         bresults[i].location = p->location();
 
22710
-       }
 
22711
-      go_assert(i == bresults.size());
 
22712
-    }
 
22713
-
 
22714
-  Btype* fntype = gogo->backend()->function_type(breceiver, bparameters,
 
22715
-                                                bresults, loc);
 
22716
   std::vector<Backend::Btyped_identifier> fields(1);
 
22717
   fields[0].name = "code";
 
22718
-  fields[0].btype = fntype;
 
22719
+  fields[0].btype = this->get_backend_fntype(gogo);
 
22720
   fields[0].location = loc;
 
22721
   if (!gogo->backend()->set_placeholder_struct_type(struct_type, fields))
 
22722
     return gogo->backend()->error_type();
 
22723
@@ -3821,6 +3916,32 @@
 
22724
   return ret;
 
22725
 }
 
22726
 
 
22727
+// Make a copy of a function type with the receiver as the first
 
22728
+// parameter.
 
22729
+
 
22730
+Function_type*
 
22731
+Function_type::copy_with_receiver_as_param(bool want_pointer_receiver) const
 
22732
+{
 
22733
+  go_assert(this->is_method());
 
22734
+  Typed_identifier_list* new_params = new Typed_identifier_list();
 
22735
+  Type* rtype = this->receiver_->type();
 
22736
+  if (want_pointer_receiver)
 
22737
+    rtype = Type::make_pointer_type(rtype);
 
22738
+  Typed_identifier receiver(this->receiver_->name(), rtype,
 
22739
+                           this->receiver_->location());
 
22740
+  new_params->push_back(receiver);
 
22741
+  const Typed_identifier_list* orig_params = this->parameters_;
 
22742
+  if (orig_params != NULL && !orig_params->empty())
 
22743
+    {
 
22744
+      for (Typed_identifier_list::const_iterator p = orig_params->begin();
 
22745
+          p != orig_params->end();
 
22746
+          ++p)
 
22747
+       new_params->push_back(*p);
 
22748
+    }
 
22749
+  return Type::make_function_type(NULL, new_params, this->results_,
 
22750
+                                 this->location_);
 
22751
+}
 
22752
+
 
22753
 // Make a copy of a function type ignoring any receiver and adding a
 
22754
 // closure parameter.
 
22755
 
 
22756
@@ -4195,7 +4316,8 @@
 
22757
 
 
22758
       // This is a horrible hack caused by the fact that we don't pack
 
22759
       // the names of builtin types.  FIXME.
 
22760
-      if (nt != NULL
 
22761
+      if (!this->is_imported_
 
22762
+         && nt != NULL
 
22763
          && nt->is_builtin()
 
22764
          && nt->name() == Gogo::unpack_hidden_name(name))
 
22765
        return true;
 
22766
@@ -4204,6 +4326,36 @@
 
22767
     }
 
22768
 }
 
22769
 
 
22770
+// Return whether this field is an unexported field named NAME.
 
22771
+
 
22772
+bool
 
22773
+Struct_field::is_unexported_field_name(Gogo* gogo,
 
22774
+                                      const std::string& name) const
 
22775
+{
 
22776
+  const std::string& field_name(this->field_name());
 
22777
+  if (Gogo::is_hidden_name(field_name)
 
22778
+      && name == Gogo::unpack_hidden_name(field_name)
 
22779
+      && gogo->pack_hidden_name(name, false) != field_name)
 
22780
+    return true;
 
22781
+
 
22782
+  // Check for the name of a builtin type.  This is like the test in
 
22783
+  // is_field_name, only there we return false if this->is_imported_,
 
22784
+  // and here we return true.
 
22785
+  if (this->is_imported_ && this->is_anonymous())
 
22786
+    {
 
22787
+      Type* t = this->typed_identifier_.type();
 
22788
+      if (t->points_to() != NULL)
 
22789
+       t = t->points_to();
 
22790
+      Named_type* nt = t->named_type();
 
22791
+      if (nt != NULL
 
22792
+         && nt->is_builtin()
 
22793
+         && nt->name() == Gogo::unpack_hidden_name(name))
 
22794
+       return true;
 
22795
+    }
 
22796
+
 
22797
+  return false;
 
22798
+}
 
22799
+
 
22800
 // Return whether this field is an embedded built-in type.
 
22801
 
 
22802
 bool
 
22803
@@ -4264,13 +4416,8 @@
 
22804
        ++p)
 
22805
     {
 
22806
       Type* t = p->type();
 
22807
-      if (t->is_undefined())
 
22808
+      if (p->is_anonymous())
 
22809
        {
 
22810
-         error_at(p->location(), "struct field type is incomplete");
 
22811
-         p->set_type(Type::make_error_type());
 
22812
-       }
 
22813
-      else if (p->is_anonymous())
 
22814
-       {
 
22815
          if (t->named_type() != NULL && t->points_to() != NULL)
 
22816
            {
 
22817
              error_at(p->location(), "embedded type may not be a pointer");
 
22818
@@ -4641,13 +4788,8 @@
 
22819
       for (Struct_field_list::const_iterator pf = fields->begin();
 
22820
           pf != fields->end();
 
22821
           ++pf)
 
22822
-       {
 
22823
-         const std::string& field_name(pf->field_name());
 
22824
-         if (Gogo::is_hidden_name(field_name)
 
22825
-             && name == Gogo::unpack_hidden_name(field_name)
 
22826
-             && gogo->pack_hidden_name(name, false) != field_name)
 
22827
-           return true;
 
22828
-       }
 
22829
+       if (pf->is_unexported_field_name(gogo, name))
 
22830
+         return true;
 
22831
     }
 
22832
   return false;
 
22833
 }
 
22834
@@ -5250,6 +5392,7 @@
 
22835
          Type* ftype = imp->read_type();
 
22836
 
 
22837
          Struct_field sf(Typed_identifier(name, ftype, imp->location()));
 
22838
+         sf.set_is_imported();
 
22839
 
 
22840
          if (imp->peek_char() == ' ')
 
22841
            {
 
22842
@@ -9022,6 +9165,8 @@
 
22843
                                      fntype->is_varargs(), location);
 
22844
          gogo->finish_function(fntype->location());
 
22845
 
 
22846
+         if (type->named_type() == NULL && stub->is_function())
 
22847
+           stub->func_value()->set_is_unnamed_type_stub_method();
 
22848
          if (m->nointerface() && stub->is_function())
 
22849
            stub->func_value()->set_nointerface();
 
22850
        }
 
22851
@@ -9289,7 +9434,9 @@
 
22852
       else
 
22853
        {
 
22854
          bool is_unexported;
 
22855
-         if (!Gogo::is_hidden_name(name))
 
22856
+         // The test for 'a' and 'z' is to handle builtin names,
 
22857
+         // which are not hidden.
 
22858
+         if (!Gogo::is_hidden_name(name) && (name[0] < 'a' || name[0] > 'z'))
 
22859
            is_unexported = false;
 
22860
          else
 
22861
            {
 
22862
Index: gcc/go/gofrontend/expressions.cc
 
22863
===================================================================
 
22864
--- a/src/gcc/go/gofrontend/expressions.cc      (.../tags/gcc_4_8_2_release)
 
22865
+++ b/src/gcc/go/gofrontend/expressions.cc      (.../branches/gcc-4_8-branch)
 
22866
@@ -1219,7 +1219,7 @@
 
22867
 
 
22868
 // Get the tree for the code of a function expression.
 
22869
 
 
22870
-tree
 
22871
+Bexpression*
 
22872
 Func_expression::get_code_pointer(Gogo* gogo, Named_object* no, Location loc)
 
22873
 {
 
22874
   Function_type* fntype;
 
22875
@@ -1237,25 +1237,18 @@
 
22876
       error_at(loc,
 
22877
               "invalid use of special builtin function %qs; must be called",
 
22878
               no->message_name().c_str());
 
22879
-      return error_mark_node;
 
22880
+      return gogo->backend()->error_expression();
 
22881
     }
 
22882
 
 
22883
-  tree id = no->get_id(gogo);
 
22884
-  if (id == error_mark_node)
 
22885
-    return error_mark_node;
 
22886
-
 
22887
-  tree fndecl;
 
22888
+  Bfunction* fndecl;
 
22889
   if (no->is_function())
 
22890
-    fndecl = no->func_value()->get_or_make_decl(gogo, no, id);
 
22891
+    fndecl = no->func_value()->get_or_make_decl(gogo, no);
 
22892
   else if (no->is_function_declaration())
 
22893
-    fndecl = no->func_declaration_value()->get_or_make_decl(gogo, no, id);
 
22894
+    fndecl = no->func_declaration_value()->get_or_make_decl(gogo, no);
 
22895
   else
 
22896
     go_unreachable();
 
22897
 
 
22898
-  if (fndecl == error_mark_node)
 
22899
-    return error_mark_node;
 
22900
-
 
22901
-  return build_fold_addr_expr_loc(loc.gcc_location(), fndecl);
 
22902
+  return gogo->backend()->function_code_expression(fndecl, loc);
 
22903
 }
 
22904
 
 
22905
 // Get the tree for a function expression.  This is used when we take
 
22906
@@ -1492,8 +1485,10 @@
 
22907
 tree
 
22908
 Func_code_reference_expression::do_get_tree(Translate_context* context)
 
22909
 {
 
22910
-  return Func_expression::get_code_pointer(context->gogo(), this->function_,
 
22911
-                                          this->location());
 
22912
+  Bexpression* ret =
 
22913
+      Func_expression::get_code_pointer(context->gogo(), this->function_,
 
22914
+                                        this->location());
 
22915
+  return expr_to_tree(ret);
 
22916
 }
 
22917
 
 
22918
 // Make a reference to the code of a function.
 
22919
@@ -3055,8 +3050,7 @@
 
22920
   do_lower(Gogo*, Named_object*, Statement_inserter*, int);
 
22921
 
 
22922
   bool
 
22923
-  do_is_constant() const
 
22924
-  { return this->expr_->is_constant(); }
 
22925
+  do_is_constant() const;
 
22926
 
 
22927
   bool
 
22928
   do_numeric_constant_value(Numeric_constant*) const;
 
22929
@@ -3198,6 +3192,27 @@
 
22930
   return this;
 
22931
 }
 
22932
 
 
22933
+// Return whether a type conversion is a constant.
 
22934
+
 
22935
+bool
 
22936
+Type_conversion_expression::do_is_constant() const
 
22937
+{
 
22938
+  if (!this->expr_->is_constant())
 
22939
+    return false;
 
22940
+
 
22941
+  // A conversion to a type that may not be used as a constant is not
 
22942
+  // a constant.  For example, []byte(nil).
 
22943
+  Type* type = this->type_;
 
22944
+  if (type->integer_type() == NULL
 
22945
+      && type->float_type() == NULL
 
22946
+      && type->complex_type() == NULL
 
22947
+      && !type->is_boolean_type()
 
22948
+      && !type->is_string_type())
 
22949
+    return false;
 
22950
+
 
22951
+  return true;
 
22952
+}
 
22953
+
 
22954
 // Return the constant numeric value if there is one.
 
22955
 
 
22956
 bool
 
22957
@@ -5586,6 +5601,15 @@
 
22958
       subcontext.type = NULL;
 
22959
     }
 
22960
 
 
22961
+  if (this->op_ == OPERATOR_ANDAND || this->op_ == OPERATOR_OROR)
 
22962
+    {
 
22963
+      // For a logical operation, the context does not determine the
 
22964
+      // types of the operands.  The operands must be some boolean
 
22965
+      // type but if the context has a boolean type they do not
 
22966
+      // inherit it.  See http://golang.org/issue/3924.
 
22967
+      subcontext.type = NULL;
 
22968
+    }
 
22969
+
 
22970
   // Set the context for the left hand operand.
 
22971
   if (is_shift_op)
 
22972
     {
 
22973
@@ -5967,6 +5991,43 @@
 
22974
                                right);
 
22975
     }
 
22976
 
 
22977
+  // For complex division Go wants slightly different results than the
 
22978
+  // GCC library provides, so we have our own runtime routine.
 
22979
+  if (this->op_ == OPERATOR_DIV && this->left_->type()->complex_type() != NULL)
 
22980
+    {
 
22981
+      const char *name;
 
22982
+      tree *pdecl;
 
22983
+      Type* ctype;
 
22984
+      static tree complex64_div_decl;
 
22985
+      static tree complex128_div_decl;
 
22986
+      switch (this->left_->type()->complex_type()->bits())
 
22987
+       {
 
22988
+       case 64:
 
22989
+         name = "__go_complex64_div";
 
22990
+         pdecl = &complex64_div_decl;
 
22991
+         ctype = Type::lookup_complex_type("complex64");
 
22992
+         break;
 
22993
+       case 128:
 
22994
+         name = "__go_complex128_div";
 
22995
+         pdecl = &complex128_div_decl;
 
22996
+         ctype = Type::lookup_complex_type("complex128");
 
22997
+         break;
 
22998
+       default:
 
22999
+         go_unreachable();
 
23000
+       }
 
23001
+      Btype* cbtype = ctype->get_backend(gogo);
 
23002
+      tree ctype_tree = type_to_tree(cbtype);
 
23003
+      return Gogo::call_builtin(pdecl,
 
23004
+                               this->location(),
 
23005
+                               name,
 
23006
+                               2,
 
23007
+                               ctype_tree,
 
23008
+                               ctype_tree,
 
23009
+                               fold_convert_loc(gccloc, ctype_tree, left),
 
23010
+                               type,
 
23011
+                               fold_convert_loc(gccloc, ctype_tree, right));
 
23012
+    }
 
23013
+
 
23014
   tree compute_type = excess_precision_type(type);
 
23015
   if (compute_type != NULL_TREE)
 
23016
     {
 
23017
@@ -7191,6 +7252,15 @@
 
23018
   if (this->code_ == BUILTIN_OFFSETOF)
 
23019
     {
 
23020
       Expression* arg = this->one_arg();
 
23021
+
 
23022
+      if (arg->bound_method_expression() != NULL
 
23023
+         || arg->interface_field_reference_expression() != NULL)
 
23024
+       {
 
23025
+         this->report_error(_("invalid use of method value as argument "
 
23026
+                              "of Offsetof"));
 
23027
+         return this;
 
23028
+       }
 
23029
+
 
23030
       Field_reference_expression* farg = arg->field_reference_expression();
 
23031
       while (farg != NULL)
 
23032
        {
 
23033
@@ -7200,7 +7270,8 @@
 
23034
          // it must not be reached through pointer indirections.
 
23035
          if (farg->expr()->deref() != farg->expr())
 
23036
            {
 
23037
-             this->report_error(_("argument of Offsetof implies indirection of an embedded field"));
 
23038
+             this->report_error(_("argument of Offsetof implies "
 
23039
+                                  "indirection of an embedded field"));
 
23040
              return this;
 
23041
            }
 
23042
          // Go up until we reach the original base.
 
23043
@@ -7476,7 +7547,7 @@
 
23044
       switch (nc.to_unsigned_long(&v))
 
23045
        {
 
23046
        case Numeric_constant::NC_UL_VALID:
 
23047
-         return true;
 
23048
+         break;
 
23049
        case Numeric_constant::NC_UL_NOTINT:
 
23050
          error_at(e->location(), "non-integer %s argument to make",
 
23051
                   is_length ? "len" : "cap");
 
23052
@@ -7488,8 +7559,23 @@
 
23053
        case Numeric_constant::NC_UL_BIG:
 
23054
          // We don't want to give a compile-time error for a 64-bit
 
23055
          // value on a 32-bit target.
 
23056
-         return true;
 
23057
+         break;
 
23058
        }
 
23059
+
 
23060
+      mpz_t val;
 
23061
+      if (!nc.to_int(&val))
 
23062
+       go_unreachable();
 
23063
+      int bits = mpz_sizeinbase(val, 2);
 
23064
+      mpz_clear(val);
 
23065
+      Type* int_type = Type::lookup_integer_type("int");
 
23066
+      if (bits >= int_type->integer_type()->bits())
 
23067
+       {
 
23068
+         error_at(e->location(), "%s argument too large for make",
 
23069
+                  is_length ? "len" : "cap");
 
23070
+         return false;
 
23071
+       }
 
23072
+
 
23073
+      return true;
 
23074
     }
 
23075
 
 
23076
   if (e->type()->integer_type() != NULL)
 
23077
@@ -7595,6 +7681,8 @@
 
23078
 bool
 
23079
 Builtin_call_expression::do_is_constant() const
 
23080
 {
 
23081
+  if (this->is_error_expression())
 
23082
+    return true;
 
23083
   switch (this->code_)
 
23084
     {
 
23085
     case BUILTIN_LEN:
 
23086
@@ -9744,15 +9832,9 @@
 
23087
     }
 
23088
 
 
23089
   tree fntype_tree = type_to_tree(fntype->get_backend(gogo));
 
23090
-  if (fntype_tree == error_mark_node)
 
23091
+  tree fnfield_type = type_to_tree(fntype->get_backend_fntype(gogo));
 
23092
+  if (fntype_tree == error_mark_node || fnfield_type == error_mark_node)
 
23093
     return error_mark_node;
 
23094
-  go_assert(POINTER_TYPE_P(fntype_tree));
 
23095
-  if (TREE_TYPE(fntype_tree) == error_mark_node)
 
23096
-    return error_mark_node;
 
23097
-  go_assert(TREE_CODE(TREE_TYPE(fntype_tree)) == RECORD_TYPE);
 
23098
-  tree fnfield_type = TREE_TYPE(TYPE_FIELDS(TREE_TYPE(fntype_tree)));
 
23099
-  if (fnfield_type == error_mark_node)
 
23100
-    return error_mark_node;
 
23101
   go_assert(FUNCTION_POINTER_TYPE_P(fnfield_type));
 
23102
   tree rettype = TREE_TYPE(TREE_TYPE(fnfield_type));
 
23103
   if (rettype == error_mark_node)
 
23104
@@ -9763,7 +9845,7 @@
 
23105
   if (func != NULL)
 
23106
     {
 
23107
       Named_object* no = func->named_object();
 
23108
-      fn = Func_expression::get_code_pointer(gogo, no, location);
 
23109
+      fn = expr_to_tree(Func_expression::get_code_pointer(gogo, no, location));
 
23110
       if (!has_closure)
 
23111
        closure_tree = NULL_TREE;
 
23112
       else
 
23113
@@ -10817,11 +10899,20 @@
 
23114
 void
 
23115
 String_index_expression::do_check_types(Gogo*)
 
23116
 {
 
23117
-  if (this->start_->type()->integer_type() == NULL)
 
23118
+  Numeric_constant nc;
 
23119
+  unsigned long v;
 
23120
+  if (this->start_->type()->integer_type() == NULL
 
23121
+      && !this->start_->type()->is_error()
 
23122
+      && (!this->start_->numeric_constant_value(&nc)
 
23123
+         || nc.to_unsigned_long(&v) == Numeric_constant::NC_UL_NOTINT))
 
23124
     this->report_error(_("index must be integer"));
 
23125
   if (this->end_ != NULL
 
23126
       && this->end_->type()->integer_type() == NULL
 
23127
-      && !this->end_->is_nil_expression())
 
23128
+      && !this->end_->type()->is_error()
 
23129
+      && !this->end_->is_nil_expression()
 
23130
+      && !this->end_->is_error_expression()
 
23131
+      && (!this->end_->numeric_constant_value(&nc)
 
23132
+         || nc.to_unsigned_long(&v) == Numeric_constant::NC_UL_NOTINT))
 
23133
     this->report_error(_("slice end must be integer"));
 
23134
 
 
23135
   std::string sval;
 
23136
Index: gcc/recog.c
 
23137
===================================================================
 
23138
--- a/src/gcc/recog.c   (.../tags/gcc_4_8_2_release)
 
23139
+++ b/src/gcc/recog.c   (.../branches/gcc-4_8-branch)
 
23140
@@ -3061,6 +3061,9 @@
 
23141
   return 1;
 
23142
 }
 
23143
 
 
23144
+/* Regno offset to be used in the register search.  */
 
23145
+static int search_ofs;
 
23146
+
 
23147
 /* Try to find a hard register of mode MODE, matching the register class in
 
23148
    CLASS_STR, which is available at the beginning of insn CURRENT_INSN and
 
23149
    remains available until the end of LAST_INSN.  LAST_INSN may be NULL_RTX,
 
23150
@@ -3076,7 +3079,6 @@
 
23151
 peep2_find_free_register (int from, int to, const char *class_str,
 
23152
                          enum machine_mode mode, HARD_REG_SET *reg_set)
 
23153
 {
 
23154
-  static int search_ofs;
 
23155
   enum reg_class cl;
 
23156
   HARD_REG_SET live;
 
23157
   df_ref *def_rec;
 
23158
@@ -3541,6 +3543,7 @@
 
23159
   /* Initialize the regsets we're going to use.  */
 
23160
   for (i = 0; i < MAX_INSNS_PER_PEEP2 + 1; ++i)
 
23161
     peep2_insn_data[i].live_before = BITMAP_ALLOC (&reg_obstack);
 
23162
+  search_ofs = 0;
 
23163
   live = BITMAP_ALLOC (&reg_obstack);
 
23164
 
 
23165
   FOR_EACH_BB_REVERSE (bb)
 
23166
Index: gcc/ada/indepsw-darwin.adb
 
23167
===================================================================
 
23168
--- a/src/gcc/ada/indepsw-darwin.adb    (.../tags/gcc_4_8_2_release)
 
23169
+++ b/src/gcc/ada/indepsw-darwin.adb    (.../branches/gcc-4_8-branch)
 
23170
@@ -0,0 +1,67 @@
 
23171
+------------------------------------------------------------------------------
 
23172
+--                                                                          --
 
23173
+--                         GNAT COMPILER COMPONENTS                         --
 
23174
+--                                                                          --
 
23175
+--                              I N D E P S W                               --
 
23176
+--                                                                          --
 
23177
+--                                 B o d y                                  --
 
23178
+--                            (Darwin version)                              --
 
23179
+--                                                                          --
 
23180
+--            Copyright (C) 2013, Free Software Foundation, Inc.            --
 
23181
+--                                                                          --
 
23182
+-- GNAT is free software;  you can  redistribute it  and/or modify it under --
 
23183
+-- terms of the  GNU General Public License as published  by the Free Soft- --
 
23184
+-- ware  Foundation;  either version 3,  or (at your option) any later ver- --
 
23185
+-- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
 
23186
+-- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
 
23187
+-- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
 
23188
+--                                                                          --
 
23189
+-- As a special exception under Section 7 of GPL version 3, you are granted --
 
23190
+-- additional permissions described in the GCC Runtime Library Exception,   --
 
23191
+-- version 3.1, as published by the Free Software Foundation.               --
 
23192
+--                                                                          --
 
23193
+-- You should have received a copy of the GNU General Public License and    --
 
23194
+-- a copy of the GCC Runtime Library Exception along with this program;     --
 
23195
+-- see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see    --
 
23196
+-- <http://www.gnu.org/licenses/>.                                          --
 
23197
+--                                                                          --
 
23198
+-- GNAT was originally developed  by the GNAT team at  New York University. --
 
23199
+-- Extensive contributions were provided by Ada Core Technologies Inc.      --
 
23200
+--                                                                          --
 
23201
+------------------------------------------------------------------------------
 
23202
+
 
23203
+--  This is the Darwin version
 
23204
+
 
23205
+package body Indepsw is
 
23206
+
 
23207
+   Map_Switch : aliased constant String := "-Wl,-map,";
 
23208
+
 
23209
+   -------------
 
23210
+   -- Convert --
 
23211
+   -------------
 
23212
+
 
23213
+   procedure Convert
 
23214
+     (Switch   : Switch_Kind;
 
23215
+      Argument : String;
 
23216
+      To       : out String_List_Access)
 
23217
+   is
 
23218
+   begin
 
23219
+      case Switch is
 
23220
+         when Map_File =>
 
23221
+            To := new Argument_List'(1 => new String'(Map_Switch & Argument));
 
23222
+      end case;
 
23223
+   end Convert;
 
23224
+
 
23225
+   ------------------
 
23226
+   -- Is_Supported --
 
23227
+   ------------------
 
23228
+
 
23229
+   function Is_Supported (Switch : Switch_Kind) return Boolean is
 
23230
+   begin
 
23231
+      case Switch is
 
23232
+         when Map_File =>
 
23233
+            return True;
 
23234
+      end case;
 
23235
+   end Is_Supported;
 
23236
+
 
23237
+end Indepsw;
 
23238
Index: gcc/ada/ChangeLog
 
23239
===================================================================
 
23240
--- a/src/gcc/ada/ChangeLog     (.../tags/gcc_4_8_2_release)
 
23241
+++ b/src/gcc/ada/ChangeLog     (.../branches/gcc-4_8-branch)
 
23242
@@ -1,3 +1,46 @@
 
23243
+2014-03-13  Eric Botcazou  <ebotcazou@adacore.com>
 
23244
+
 
23245
+       PR ada/51483
 
23246
+       * back_end.ads (Register_Type_Proc): Add 'precision' parameter.
 
23247
+       * cstand.adb (Register_Float_Type): Add 'precision' parameter and use
 
23248
+       it to set the RM size.  Use directly 'size' for the Esize.
 
23249
+       * gcc-interface/gigi.h (enumerate_modes): Add integer parameter.
 
23250
+       * gcc-interface/misc.c (enumerate_modes): Likewise.  Do not register
 
23251
+       types for vector modes, pass the size in addition to the precision.
 
23252
+
 
23253
+2014-01-12  Eric Botcazou  <ebotcazou@adacore.com>
 
23254
+
 
23255
+       PR ada/59772
 
23256
+       * gcc-interface/cuintp.c (build_cst_from_int): Use 32-bit integer type
 
23257
+       as intermediate type.
 
23258
+       (UI_To_gnu): Likewise.
 
23259
+
 
23260
+2013-12-12  Eric Botcazou  <ebotcazou@adacore.com>
 
23261
+           Iain Sandoe  <iain@codesourcery.com>
 
23262
+
 
23263
+       PR ada/55946
 
23264
+       * gcc-interface/Make-lang.in (ada/doctools/xgnatugn): Use gnatmake.
 
23265
+       * gcc-interface/Makefile.in (GCC_LINK): Add LDFLAGS.
 
23266
+       (../../gnatmake): Remove LDFLAGS.
 
23267
+       (../../gnatlink): Likewise.
 
23268
+
 
23269
+2013-12-04  Eric Botcazou  <ebotcazou@adacore.com>
 
23270
+
 
23271
+       PR ada/59382
 
23272
+       * indepsw-darwin.adb: New file.
 
23273
+
 
23274
+2013-10-19  Eric Botcazou  <ebotcazou@adacore.com>
 
23275
+
 
23276
+       * gcc-interface/utils.c (scale_by_factor_of): New function.
 
23277
+       (rest_of_record_type_compilation): Use scale_by_factor_of in order to
 
23278
+       scale the original offset for both rounding cases; in the second case,
 
23279
+       take into accout the addend to compute the alignment.  Tidy up.
 
23280
+
 
23281
+2013-10-19  Eric Botcazou  <ebotcazou@adacore.com>
 
23282
+
 
23283
+       * gcc-interface/utils.c (gnat_set_type_context): New function.
 
23284
+       (gnat_pushdecl): Use it to set the context of the type.
 
23285
+
 
23286
 2013-10-16  Release Manager
 
23287
 
 
23288
        * GCC 4.8.2 released.
 
23289
Index: gcc/ada/cstand.adb
 
23290
===================================================================
 
23291
--- a/src/gcc/ada/cstand.adb    (.../tags/gcc_4_8_2_release)
 
23292
+++ b/src/gcc/ada/cstand.adb    (.../branches/gcc-4_8-branch)
 
23293
@@ -151,6 +151,7 @@
 
23294
       Complex   : Boolean;  -- True iff type has real and imaginary parts
 
23295
       Count     : Natural;  -- Number of elements in vector, 0 otherwise
 
23296
       Float_Rep : Float_Rep_Kind; -- Representation used for fpt type
 
23297
+      Precision : Positive; -- Precision of representation in bits
 
23298
       Size      : Positive; -- Size of representation in bits
 
23299
       Alignment : Natural); -- Required alignment in bits
 
23300
    pragma Convention (C, Register_Float_Type);
 
23301
@@ -2014,6 +2015,7 @@
 
23302
       Complex   : Boolean;
 
23303
       Count     : Natural;
 
23304
       Float_Rep : Float_Rep_Kind;
 
23305
+      Precision : Positive;
 
23306
       Size      : Positive;
 
23307
       Alignment : Natural)
 
23308
    is
 
23309
@@ -2063,14 +2065,25 @@
 
23310
 
 
23311
          else
 
23312
             Write_Str ("mod 2**");
 
23313
-            Write_Int (Int (Size / Positive'Max (1, Count)));
 
23314
+            Write_Int (Int (Precision / Positive'Max (1, Count)));
 
23315
             Write_Line (";");
 
23316
          end if;
 
23317
 
 
23318
-         Write_Str ("for " & T & "'Size use ");
 
23319
-         Write_Int (Int (Size));
 
23320
-         Write_Line (";");
 
23321
+         if Precision = Size then
 
23322
+            Write_Str ("for " & T (1 .. Last) & "'Size use ");
 
23323
+            Write_Int (Int (Size));
 
23324
+            Write_Line (";");
 
23325
 
 
23326
+         else
 
23327
+            Write_Str ("for " & T (1 .. Last) & "'Value_Size use ");
 
23328
+            Write_Int (Int (Precision));
 
23329
+            Write_Line (";");
 
23330
+
 
23331
+            Write_Str ("for " & T (1 .. Last) & "'Object_Size use ");
 
23332
+            Write_Int (Int (Size));
 
23333
+            Write_Line (";");
 
23334
+         end if;
 
23335
+
 
23336
          Write_Str ("for " & T & "'Alignment use ");
 
23337
          Write_Int (Int (Alignment / 8));
 
23338
          Write_Line (";");
 
23339
@@ -2092,15 +2105,13 @@
 
23340
       if Digs > 0 and then not Complex and then Count = 0 then
 
23341
          declare
 
23342
             Ent   : constant Entity_Id := New_Standard_Entity;
 
23343
-            Esize : constant Pos := Pos ((Size + Alignment - 1)
 
23344
-                                           / Alignment * Alignment);
 
23345
          begin
 
23346
             Set_Defining_Identifier
 
23347
               (New_Node (N_Full_Type_Declaration, Stloc), Ent);
 
23348
             Make_Name (Ent, T (1 .. Last));
 
23349
             Set_Scope (Ent, Standard_Standard);
 
23350
-            Build_Float_Type (Ent, Esize, Float_Rep, Pos (Digs));
 
23351
-            Set_RM_Size (Ent, UI_From_Int (Int (Size)));
 
23352
+            Build_Float_Type (Ent, Int (Size), Float_Rep, Pos (Digs));
 
23353
+            Set_RM_Size (Ent, UI_From_Int (Int (Precision)));
 
23354
             Set_Alignment (Ent, UI_From_Int (Int (Alignment / 8)));
 
23355
 
 
23356
             if No (Back_End_Float_Types) then
 
23357
Index: gcc/ada/back_end.ads
 
23358
===================================================================
 
23359
--- a/src/gcc/ada/back_end.ads  (.../tags/gcc_4_8_2_release)
 
23360
+++ b/src/gcc/ada/back_end.ads  (.../branches/gcc-4_8-branch)
 
23361
@@ -55,6 +55,7 @@
 
23362
       Complex   : Boolean;  -- True iff type has real and imaginary parts
 
23363
       Count     : Natural;  -- Number of elements in vector, 0 otherwise
 
23364
       Float_Rep : Float_Rep_Kind; -- Representation used for fpt type
 
23365
+      Precision : Positive; -- Precision of representation in bits
 
23366
       Size      : Positive; -- Size of representation in bits
 
23367
       Alignment : Natural); -- Required alignment in bits
 
23368
    pragma Convention (C, Register_Type_Proc);
 
23369
Index: gcc/ada/gcc-interface/utils.c
 
23370
===================================================================
 
23371
--- a/src/gcc/ada/gcc-interface/utils.c (.../tags/gcc_4_8_2_release)
 
23372
+++ b/src/gcc/ada/gcc-interface/utils.c (.../branches/gcc-4_8-branch)
 
23373
@@ -232,6 +232,7 @@
 
23374
 static tree split_plus (tree, tree *);
 
23375
 static tree float_type_for_precision (int, enum machine_mode);
 
23376
 static tree convert_to_fat_pointer (tree, tree);
 
23377
+static unsigned int scale_by_factor_of (tree, unsigned int);
 
23378
 static bool potential_alignment_gap (tree, tree, tree);
 
23379
 static void process_attributes (tree, struct attrib *);
 
23380
 
 
23381
@@ -532,6 +533,22 @@
 
23382
   free_binding_level = level;
 
23383
 }
 
23384
 
 
23385
+/* Set the context of TYPE and its parallel types (if any) to CONTEXT.  */
 
23386
+
 
23387
+static void
 
23388
+gnat_set_type_context (tree type, tree context)
 
23389
+{
 
23390
+  tree decl = TYPE_STUB_DECL (type);
 
23391
+
 
23392
+  TYPE_CONTEXT (type) = context;
 
23393
+
 
23394
+  while (decl && DECL_PARALLEL_TYPE (decl))
 
23395
+    {
 
23396
+      TYPE_CONTEXT (DECL_PARALLEL_TYPE (decl)) = context;
 
23397
+      decl = TYPE_STUB_DECL (DECL_PARALLEL_TYPE (decl));
 
23398
+    }
 
23399
+}
 
23400
+
 
23401
 /* Record DECL as belonging to the current lexical scope and use GNAT_NODE
 
23402
    for location information and flag propagation.  */
 
23403
 
 
23404
@@ -613,7 +630,7 @@
 
23405
              if (TREE_CODE (t) == POINTER_TYPE)
 
23406
                TYPE_NEXT_PTR_TO (t) = tt;
 
23407
              TYPE_NAME (tt) = DECL_NAME (decl);
 
23408
-             TYPE_CONTEXT (tt) = DECL_CONTEXT (decl);
 
23409
+             gnat_set_type_context (tt, DECL_CONTEXT (decl));
 
23410
              TYPE_STUB_DECL (tt) = TYPE_STUB_DECL (t);
 
23411
              DECL_ORIGINAL_TYPE (decl) = tt;
 
23412
            }
 
23413
@@ -623,7 +640,7 @@
 
23414
          /* We need a variant for the placeholder machinery to work.  */
 
23415
          tree tt = build_variant_type_copy (t);
 
23416
          TYPE_NAME (tt) = decl;
 
23417
-         TYPE_CONTEXT (tt) = DECL_CONTEXT (decl);
 
23418
+         gnat_set_type_context (tt, DECL_CONTEXT (decl));
 
23419
          TREE_USED (tt) = TREE_USED (t);
 
23420
          TREE_TYPE (decl) = tt;
 
23421
          if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
 
23422
@@ -645,7 +662,7 @@
 
23423
          if (!(TYPE_NAME (t) && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL))
 
23424
            {
 
23425
              TYPE_NAME (t) = decl;
 
23426
-             TYPE_CONTEXT (t) = DECL_CONTEXT (decl);
 
23427
+             gnat_set_type_context (t, DECL_CONTEXT (decl));
 
23428
            }
 
23429
     }
 
23430
 }
 
23431
@@ -1692,93 +1709,74 @@
 
23432
       TYPE_SIZE_UNIT (new_record_type)
 
23433
        = size_int (TYPE_ALIGN (record_type) / BITS_PER_UNIT);
 
23434
 
 
23435
-      /* Now scan all the fields, replacing each field with a new
 
23436
-        field corresponding to the new encoding.  */
 
23437
+      /* Now scan all the fields, replacing each field with a new field
 
23438
+        corresponding to the new encoding.  */
 
23439
       for (old_field = TYPE_FIELDS (record_type); old_field;
 
23440
           old_field = DECL_CHAIN (old_field))
 
23441
        {
 
23442
          tree field_type = TREE_TYPE (old_field);
 
23443
          tree field_name = DECL_NAME (old_field);
 
23444
-         tree new_field;
 
23445
          tree curpos = bit_position (old_field);
 
23446
+         tree pos, new_field;
 
23447
          bool var = false;
 
23448
          unsigned int align = 0;
 
23449
-         tree pos;
 
23450
 
 
23451
+         /* We're going to do some pattern matching below so remove as many
 
23452
+            conversions as possible.  */
 
23453
+         curpos = remove_conversions (curpos, true);
 
23454
+
 
23455
          /* See how the position was modified from the last position.
 
23456
 
 
23457
-         There are two basic cases we support: a value was added
 
23458
-         to the last position or the last position was rounded to
 
23459
-         a boundary and they something was added.  Check for the
 
23460
-         first case first.  If not, see if there is any evidence
 
23461
-         of rounding.  If so, round the last position and try
 
23462
-         again.
 
23463
+            There are two basic cases we support: a value was added
 
23464
+            to the last position or the last position was rounded to
 
23465
+            a boundary and they something was added.  Check for the
 
23466
+            first case first.  If not, see if there is any evidence
 
23467
+            of rounding.  If so, round the last position and retry.
 
23468
 
 
23469
-         If this is a union, the position can be taken as zero. */
 
23470
-
 
23471
-         /* Some computations depend on the shape of the position expression,
 
23472
-            so strip conversions to make sure it's exposed.  */
 
23473
-         curpos = remove_conversions (curpos, true);
 
23474
-
 
23475
+            If this is a union, the position can be taken as zero.  */
 
23476
          if (TREE_CODE (new_record_type) == UNION_TYPE)
 
23477
-           pos = bitsize_zero_node, align = 0;
 
23478
+           pos = bitsize_zero_node;
 
23479
          else
 
23480
            pos = compute_related_constant (curpos, last_pos);
 
23481
 
 
23482
-         if (!pos && TREE_CODE (curpos) == MULT_EXPR
 
23483
+         if (!pos
 
23484
+             && TREE_CODE (curpos) == MULT_EXPR
 
23485
              && host_integerp (TREE_OPERAND (curpos, 1), 1))
 
23486
            {
 
23487
              tree offset = TREE_OPERAND (curpos, 0);
 
23488
              align = tree_low_cst (TREE_OPERAND (curpos, 1), 1);
 
23489
-
 
23490
-             /* An offset which is a bitwise AND with a mask increases the
 
23491
-                alignment according to the number of trailing zeros.  */
 
23492
-             offset = remove_conversions (offset, true);
 
23493
-             if (TREE_CODE (offset) == BIT_AND_EXPR
 
23494
-                 && TREE_CODE (TREE_OPERAND (offset, 1)) == INTEGER_CST)
 
23495
-               {
 
23496
-                 unsigned HOST_WIDE_INT mask
 
23497
-                   = TREE_INT_CST_LOW (TREE_OPERAND (offset, 1));
 
23498
-                 unsigned int i;
 
23499
-
 
23500
-                 for (i = 0; i < HOST_BITS_PER_WIDE_INT; i++)
 
23501
-                   {
 
23502
-                     if (mask & 1)
 
23503
-                       break;
 
23504
-                     mask >>= 1;
 
23505
-                     align *= 2;
 
23506
-                   }
 
23507
-               }
 
23508
-
 
23509
-             pos = compute_related_constant (curpos,
 
23510
-                                             round_up (last_pos, align));
 
23511
+             align = scale_by_factor_of (offset, align);
 
23512
+             last_pos = round_up (last_pos, align);
 
23513
+             pos = compute_related_constant (curpos, last_pos);
 
23514
            }
 
23515
-         else if (!pos && TREE_CODE (curpos) == PLUS_EXPR
 
23516
-                  && TREE_CODE (TREE_OPERAND (curpos, 1)) == INTEGER_CST
 
23517
+         else if (!pos
 
23518
+                  && TREE_CODE (curpos) == PLUS_EXPR
 
23519
+                  && host_integerp (TREE_OPERAND (curpos, 1), 1)
 
23520
                   && TREE_CODE (TREE_OPERAND (curpos, 0)) == MULT_EXPR
 
23521
-                  && host_integerp (TREE_OPERAND
 
23522
-                                    (TREE_OPERAND (curpos, 0), 1),
 
23523
-                                    1))
 
23524
+                  && host_integerp
 
23525
+                     (TREE_OPERAND (TREE_OPERAND (curpos, 0), 1), 1))
 
23526
            {
 
23527
+             tree offset = TREE_OPERAND (TREE_OPERAND (curpos, 0), 0);
 
23528
+             unsigned HOST_WIDE_INT addend
 
23529
+               = tree_low_cst (TREE_OPERAND (curpos, 1), 1);
 
23530
              align
 
23531
-               = tree_low_cst
 
23532
-               (TREE_OPERAND (TREE_OPERAND (curpos, 0), 1), 1);
 
23533
-             pos = compute_related_constant (curpos,
 
23534
-                                             round_up (last_pos, align));
 
23535
+               = tree_low_cst (TREE_OPERAND (TREE_OPERAND (curpos, 0), 1), 1);
 
23536
+             align = scale_by_factor_of (offset, align);
 
23537
+             align = MIN (align, addend & -addend);
 
23538
+             last_pos = round_up (last_pos, align);
 
23539
+             pos = compute_related_constant (curpos, last_pos);
 
23540
            }
 
23541
-         else if (potential_alignment_gap (prev_old_field, old_field,
 
23542
-                                           pos))
 
23543
+         else if (potential_alignment_gap (prev_old_field, old_field, pos))
 
23544
            {
 
23545
              align = TYPE_ALIGN (field_type);
 
23546
-             pos = compute_related_constant (curpos,
 
23547
-                                             round_up (last_pos, align));
 
23548
+             last_pos = round_up (last_pos, align);
 
23549
+             pos = compute_related_constant (curpos, last_pos);
 
23550
            }
 
23551
 
 
23552
          /* If we can't compute a position, set it to zero.
 
23553
 
 
23554
-         ??? We really should abort here, but it's too much work
 
23555
-         to get this correct for all cases.  */
 
23556
-
 
23557
+            ??? We really should abort here, but it's too much work
 
23558
+            to get this correct for all cases.  */
 
23559
          if (!pos)
 
23560
            pos = bitsize_zero_node;
 
23561
 
 
23562
@@ -2553,6 +2551,32 @@
 
23563
   return false;
 
23564
 }
 
23565
 
 
23566
+/* Return VALUE scaled by the biggest power-of-2 factor of EXPR.  */
 
23567
+
 
23568
+static unsigned int
 
23569
+scale_by_factor_of (tree expr, unsigned int value)
 
23570
+{
 
23571
+  expr = remove_conversions (expr, true);
 
23572
+
 
23573
+  /* An expression which is a bitwise AND with a mask has a power-of-2 factor
 
23574
+     corresponding to the number of trailing zeros of the mask.  */
 
23575
+  if (TREE_CODE (expr) == BIT_AND_EXPR
 
23576
+      && TREE_CODE (TREE_OPERAND (expr, 1)) == INTEGER_CST)
 
23577
+    {
 
23578
+      unsigned HOST_WIDE_INT mask = TREE_INT_CST_LOW (TREE_OPERAND (expr, 1));
 
23579
+      unsigned int i = 0;
 
23580
+
 
23581
+      while ((mask & 1) == 0 && i < HOST_BITS_PER_WIDE_INT)
 
23582
+       {
 
23583
+         mask >>= 1;
 
23584
+         value *= 2;
 
23585
+         i++;
 
23586
+       }
 
23587
+    }
 
23588
+
 
23589
+  return value;
 
23590
+}
 
23591
+
 
23592
 /* Given two consecutive field decls PREV_FIELD and CURR_FIELD, return true
 
23593
    unless we can prove these 2 fields are laid out in such a way that no gap
 
23594
    exist between the end of PREV_FIELD and the beginning of CURR_FIELD.  OFFSET
 
23595
Index: gcc/ada/gcc-interface/Makefile.in
 
23596
===================================================================
 
23597
--- a/src/gcc/ada/gcc-interface/Makefile.in     (.../tags/gcc_4_8_2_release)
 
23598
+++ b/src/gcc/ada/gcc-interface/Makefile.in     (.../branches/gcc-4_8-branch)
 
23599
@@ -2397,7 +2397,7 @@
 
23600
        "GNATLINK=$(GNATLINK)"  \
 
23601
        "GNATBIND=$(GNATBIND)"
 
23602
 
 
23603
-GCC_LINK=$(CC) $(GCC_LINK_FLAGS) $(ADA_INCLUDES)
 
23604
+GCC_LINK=$(CC) $(GCC_LINK_FLAGS) $(ADA_INCLUDES) $(LDFLAGS)
 
23605
 
 
23606
 # Build directory for the tools. Let's copy the target-dependent
 
23607
 # sources using the same mechanism as for gnatlib. The other sources are
 
23608
@@ -2519,12 +2519,10 @@
 
23609
 
 
23610
 # Likewise for the tools
 
23611
 ../../gnatmake$(exeext): $(P) b_gnatm.o link.o targext.o $(GNATMAKE_OBJS)
 
23612
-       $(GCC_LINK) $(ALL_CFLAGS) $(LDFLAGS) -o $@ b_gnatm.o $(GNATMAKE_OBJS) \
 
23613
-                   $(TOOLS_LIBS)
 
23614
+       +$(GCC_LINK) $(ALL_CFLAGS) -o $@ b_gnatm.o $(GNATMAKE_OBJS) $(TOOLS_LIBS)
 
23615
 
 
23616
 ../../gnatlink$(exeext): $(P) b_gnatl.o link.o targext.o $(GNATLINK_OBJS)
 
23617
-       $(GCC_LINK) $(ALL_CFLAGS) $(LDFLAGS) -o $@ b_gnatl.o $(GNATLINK_OBJS) \
 
23618
-                   $(TOOLS_LIBS)
 
23619
+       +$(GCC_LINK) $(ALL_CFLAGS) -o $@ b_gnatl.o $(GNATLINK_OBJS) $(TOOLS_LIBS)
 
23620
 
 
23621
 ../stamp-gnatlib-$(RTSDIR):
 
23622
        @if [ ! -f stamp-gnatlib-$(RTSDIR) ] ; \
 
23623
Index: gcc/ada/gcc-interface/cuintp.c
 
23624
===================================================================
 
23625
--- a/src/gcc/ada/gcc-interface/cuintp.c        (.../tags/gcc_4_8_2_release)
 
23626
+++ b/src/gcc/ada/gcc-interface/cuintp.c        (.../branches/gcc-4_8-branch)
 
23627
@@ -6,7 +6,7 @@
 
23628
  *                                                                          *
 
23629
  *                          C Implementation File                           *
 
23630
  *                                                                          *
 
23631
- *          Copyright (C) 1992-2012, Free Software Foundation, Inc.         *
 
23632
+ *          Copyright (C) 1992-2014, Free Software Foundation, Inc.         *
 
23633
  *                                                                          *
 
23634
  * GNAT is free software;  you can  redistribute it  and/or modify it under *
 
23635
  * terms of the  GNU General Public License as published  by the Free Soft- *
 
23636
@@ -59,8 +59,8 @@
 
23637
 static tree
 
23638
 build_cst_from_int (tree type, HOST_WIDE_INT low)
 
23639
 {
 
23640
-  if (TREE_CODE (type) == REAL_TYPE)
 
23641
-    return convert (type, build_int_cst (NULL_TREE, low));
 
23642
+  if (SCALAR_FLOAT_TYPE_P (type))
 
23643
+    return convert (type, build_int_cst (gnat_type_for_size (32, 0), low));
 
23644
   else
 
23645
     return build_int_cst_type (type, low);
 
23646
 }
 
23647
@@ -99,20 +99,13 @@
 
23648
       gcc_assert (Length > 0);
 
23649
 
 
23650
       /* The computations we perform below always require a type at least as
 
23651
-        large as an integer not to overflow.  REAL types are always fine, but
 
23652
+        large as an integer not to overflow.  FP types are always fine, but
 
23653
         INTEGER or ENUMERAL types we are handed may be too short.  We use a
 
23654
         base integer type node for the computations in this case and will
 
23655
-        convert the final result back to the incoming type later on.
 
23656
-        The base integer precision must be superior than 16.  */
 
23657
+        convert the final result back to the incoming type later on.  */
 
23658
+      if (!SCALAR_FLOAT_TYPE_P (comp_type) && TYPE_PRECISION (comp_type) < 32)
 
23659
+       comp_type = gnat_type_for_size (32, 0);
 
23660
 
 
23661
-      if (TREE_CODE (comp_type) != REAL_TYPE
 
23662
-         && TYPE_PRECISION (comp_type)
 
23663
-            < TYPE_PRECISION (long_integer_type_node))
 
23664
-       {
 
23665
-         comp_type = long_integer_type_node;
 
23666
-         gcc_assert (TYPE_PRECISION (comp_type) > 16);
 
23667
-       }
 
23668
-
 
23669
       gnu_base = build_cst_from_int (comp_type, Base);
 
23670
 
 
23671
       gnu_ret = build_cst_from_int (comp_type, First);
 
23672
Index: gcc/ada/gcc-interface/Make-lang.in
 
23673
===================================================================
 
23674
--- a/src/gcc/ada/gcc-interface/Make-lang.in    (.../tags/gcc_4_8_2_release)
 
23675
+++ b/src/gcc/ada/gcc-interface/Make-lang.in    (.../branches/gcc-4_8-branch)
 
23676
@@ -625,7 +625,7 @@
 
23677
 ada/doctools/xgnatugn$(build_exeext): ada/xgnatugn.adb
 
23678
        -$(MKDIR) ada/doctools
 
23679
        $(CP) $^ ada/doctools
 
23680
-       cd ada/doctools && $(GNATMAKE) -q xgnatugn
 
23681
+       cd ada/doctools && gnatmake -q xgnatugn
 
23682
 
 
23683
 # Note that doc/gnat_ugn.texi and doc/projects.texi do not depend on
 
23684
 # xgnatugn being built so we can distribute a pregenerated doc/gnat_ugn.info
 
23685
Index: gcc/ada/gcc-interface/gigi.h
 
23686
===================================================================
 
23687
--- a/src/gcc/ada/gcc-interface/gigi.h  (.../tags/gcc_4_8_2_release)
 
23688
+++ b/src/gcc/ada/gcc-interface/gigi.h  (.../branches/gcc-4_8-branch)
 
23689
@@ -1014,7 +1014,7 @@
 
23690
 /* This function is called by the front-end to enumerate all the supported
 
23691
    modes for the machine, as well as some predefined C types.  */
 
23692
 extern void enumerate_modes (void (*f) (const char *, int, int, int, int, int,
 
23693
-                                       int));
 
23694
+                                       int, int));
 
23695
 
 
23696
 #ifdef __cplusplus
 
23697
 }
 
23698
Index: gcc/ada/gcc-interface/misc.c
 
23699
===================================================================
 
23700
--- a/src/gcc/ada/gcc-interface/misc.c  (.../tags/gcc_4_8_2_release)
 
23701
+++ b/src/gcc/ada/gcc-interface/misc.c  (.../branches/gcc-4_8-branch)
 
23702
@@ -648,7 +648,7 @@
 
23703
 /* This function is called by the front-end to enumerate all the supported
 
23704
    modes for the machine, as well as some predefined C types.  F is a function
 
23705
    which is called back with the parameters as listed below, first a string,
 
23706
-   then six ints.  The name is any arbitrary null-terminated string and has
 
23707
+   then seven ints.  The name is any arbitrary null-terminated string and has
 
23708
    no particular significance, except for the case of predefined C types, where
 
23709
    it should be the name of the C type.  For integer types, only signed types
 
23710
    should be listed, unsigned versions are assumed.  The order of types should
 
23711
@@ -664,11 +664,12 @@
 
23712
    COMPLEX_P   nonzero is this represents a complex mode
 
23713
    COUNT       count of number of items, nonzero for vector mode
 
23714
    FLOAT_REP   Float_Rep_Kind for FP, otherwise undefined
 
23715
-   SIZE                number of bits used to store data
 
23716
+   PRECISION   number of bits used to store data
 
23717
+   SIZE                number of bits occupied by the mode
 
23718
    ALIGN       number of bits to which mode is aligned.  */
 
23719
 
 
23720
 void
 
23721
-enumerate_modes (void (*f) (const char *, int, int, int, int, int, int))
 
23722
+enumerate_modes (void (*f) (const char *, int, int, int, int, int, int, int))
 
23723
 {
 
23724
   const tree c_types[]
 
23725
     = { float_type_node, double_type_node, long_double_type_node };
 
23726
@@ -742,28 +743,26 @@
 
23727
 
 
23728
       /* First register any C types for this mode that the front end
 
23729
         may need to know about, unless the mode should be skipped.  */
 
23730
-
 
23731
-      if (!skip_p)
 
23732
+      if (!skip_p && !vector_p)
 
23733
        for (nameloop = 0; nameloop < ARRAY_SIZE (c_types); nameloop++)
 
23734
          {
 
23735
-           tree typ = c_types[nameloop];
 
23736
-           const char *nam = c_names[nameloop];
 
23737
+           tree type = c_types[nameloop];
 
23738
+           const char *name = c_names[nameloop];
 
23739
 
 
23740
-           if (TYPE_MODE (typ) == i)
 
23741
+           if (TYPE_MODE (type) == i)
 
23742
              {
 
23743
-               f (nam, digs, complex_p,
 
23744
-                  vector_p ? GET_MODE_NUNITS (i) : 0, float_rep,
 
23745
-                  TYPE_PRECISION (typ), TYPE_ALIGN (typ));
 
23746
+               f (name, digs, complex_p, 0, float_rep, TYPE_PRECISION (type),
 
23747
+                  TREE_INT_CST_LOW (TYPE_SIZE (type)), TYPE_ALIGN (type));
 
23748
                skip_p = true;
 
23749
              }
 
23750
          }
 
23751
 
 
23752
       /* If no predefined C types were found, register the mode itself.  */
 
23753
-
 
23754
       if (!skip_p)
 
23755
        f (GET_MODE_NAME (i), digs, complex_p,
 
23756
           vector_p ? GET_MODE_NUNITS (i) : 0, float_rep,
 
23757
-          GET_MODE_PRECISION (i), GET_MODE_ALIGNMENT (i));
 
23758
+          GET_MODE_PRECISION (i), GET_MODE_BITSIZE (i),
 
23759
+          GET_MODE_ALIGNMENT (i));
 
23760
     }
 
23761
 }
 
23762
 
 
23763
Index: gcc/tree-eh.c
 
23764
===================================================================
 
23765
--- a/src/gcc/tree-eh.c (.../tags/gcc_4_8_2_release)
 
23766
+++ b/src/gcc/tree-eh.c (.../branches/gcc-4_8-branch)
 
23767
@@ -1357,9 +1357,6 @@
 
23768
   x = gimple_seq_last_stmt (finally);
 
23769
   finally_loc = x ? gimple_location (x) : tf_loc;
 
23770
 
 
23771
-  /* Lower the finally block itself.  */
 
23772
-  lower_eh_constructs_1 (state, &finally);
 
23773
-
 
23774
   /* Prepare for switch statement generation.  */
 
23775
   nlabels = tf->dest_array.length ();
 
23776
   return_index = nlabels;
 
23777
@@ -1445,6 +1442,7 @@
 
23778
   x = gimple_build_label (finally_label);
 
23779
   gimple_seq_add_stmt (&tf->top_p_seq, x);
 
23780
 
 
23781
+  lower_eh_constructs_1 (state, &finally);
 
23782
   gimple_seq_add_seq (&tf->top_p_seq, finally);
 
23783
 
 
23784
   /* Redirect each incoming goto edge.  */
 
23785
@@ -2502,12 +2500,6 @@
 
23786
  restart:
 
23787
   switch (code)
 
23788
     {
 
23789
-    case TARGET_MEM_REF:
 
23790
-      if (TREE_CODE (TMR_BASE (expr)) == ADDR_EXPR
 
23791
-         && !TMR_INDEX (expr) && !TMR_INDEX2 (expr))
 
23792
-       return false;
 
23793
-      return !TREE_THIS_NOTRAP (expr);
 
23794
-
 
23795
     case COMPONENT_REF:
 
23796
     case REALPART_EXPR:
 
23797
     case IMAGPART_EXPR:
 
23798
@@ -2534,10 +2526,36 @@
 
23799
        return false;
 
23800
       return !in_array_bounds_p (expr);
 
23801
 
 
23802
+    case TARGET_MEM_REF:
 
23803
     case MEM_REF:
 
23804
+      if (TREE_CODE (TREE_OPERAND (expr, 0)) == ADDR_EXPR
 
23805
+         && tree_could_trap_p (TREE_OPERAND (TREE_OPERAND (expr, 0), 0)))
 
23806
+       return true;
 
23807
+      if (TREE_THIS_NOTRAP (expr))
 
23808
+       return false;
 
23809
+      /* We cannot prove that the access is in-bounds when we have
 
23810
+         variable-index TARGET_MEM_REFs.  */
 
23811
+      if (code == TARGET_MEM_REF
 
23812
+         && (TMR_INDEX (expr) || TMR_INDEX2 (expr)))
 
23813
+       return true;
 
23814
       if (TREE_CODE (TREE_OPERAND (expr, 0)) == ADDR_EXPR)
 
23815
-       return false;
 
23816
-      /* Fallthru.  */
 
23817
+       {
 
23818
+         tree base = TREE_OPERAND (TREE_OPERAND (expr, 0), 0);
 
23819
+         double_int off = mem_ref_offset (expr);
 
23820
+         if (off.is_negative ())
 
23821
+           return true;
 
23822
+         if (TREE_CODE (base) == STRING_CST)
 
23823
+           return double_int::from_uhwi (TREE_STRING_LENGTH (base)).ule (off);
 
23824
+         else if (DECL_SIZE_UNIT (base) == NULL_TREE
 
23825
+                  || TREE_CODE (DECL_SIZE_UNIT (base)) != INTEGER_CST
 
23826
+                  || tree_to_double_int (DECL_SIZE_UNIT (base)).ule (off))
 
23827
+           return true;
 
23828
+         /* Now we are sure the first byte of the access is inside
 
23829
+            the object.  */
 
23830
+         return false;
 
23831
+       }
 
23832
+      return true;
 
23833
+
 
23834
     case INDIRECT_REF:
 
23835
       return !TREE_THIS_NOTRAP (expr);
 
23836
 
 
23837
@@ -4166,8 +4184,11 @@
 
23838
   /* If the block is totally empty, look for more unsplitting cases.  */
 
23839
   if (gsi_end_p (gsi))
 
23840
     {
 
23841
-      /* For the degenerate case of an infinite loop bail out.  */
 
23842
-      if (infinite_empty_loop_p (e_out))
 
23843
+      /* For the degenerate case of an infinite loop bail out.
 
23844
+        If bb has no successors and is totally empty, which can happen e.g.
 
23845
+        because of incorrect noreturn attribute, bail out too.  */
 
23846
+      if (e_out == NULL
 
23847
+         || infinite_empty_loop_p (e_out))
 
23848
        return ret;
 
23849
 
 
23850
       return ret | cleanup_empty_eh_unsplit (bb, e_out, lp);
 
23851
@@ -4304,11 +4325,12 @@
 
23852
   remove_unreachable_handlers ();
 
23853
 
 
23854
   /* Watch out for the region tree vanishing due to all unreachable.  */
 
23855
-  if (cfun->eh->region_tree && optimize)
 
23856
+  if (cfun->eh->region_tree)
 
23857
     {
 
23858
       bool changed = false;
 
23859
 
 
23860
-      changed |= unsplit_all_eh ();
 
23861
+      if (optimize)
 
23862
+       changed |= unsplit_all_eh ();
 
23863
       changed |= cleanup_all_empty_eh ();
 
23864
 
 
23865
       if (changed)
 
23866
Index: gcc/fortran/interface.c
 
23867
===================================================================
 
23868
--- a/src/gcc/fortran/interface.c       (.../tags/gcc_4_8_2_release)
 
23869
+++ b/src/gcc/fortran/interface.c       (.../branches/gcc-4_8-branch)
 
23870
@@ -1245,7 +1245,8 @@
 
23871
          return FAILURE;
 
23872
        }
 
23873
 
 
23874
-      if (r1->ts.u.cl->length)
 
23875
+      if (s1->ts.u.cl && s1->ts.u.cl->length
 
23876
+         && s2->ts.u.cl && s2->ts.u.cl->length)
 
23877
        {
 
23878
          int compval = gfc_dep_compare_expr (r1->ts.u.cl->length,
 
23879
                                              r2->ts.u.cl->length);
 
23880
@@ -1367,8 +1368,8 @@
 
23881
       if (s1->attr.function && s2->attr.function)
 
23882
        {
 
23883
          /* If both are functions, check result characteristics.  */
 
23884
-         if (check_result_characteristics (s1, s2, errmsg, err_len)
 
23885
-             == FAILURE)
 
23886
+         if (check_result_characteristics (s1, s2, errmsg, err_len) == FAILURE
 
23887
+             || check_result_characteristics (s2, s1, errmsg, err_len) == FAILURE)
 
23888
            return 0;
 
23889
        }
 
23890
 
 
23891
Index: gcc/fortran/intrinsic.c
 
23892
===================================================================
 
23893
--- a/src/gcc/fortran/intrinsic.c       (.../tags/gcc_4_8_2_release)
 
23894
+++ b/src/gcc/fortran/intrinsic.c       (.../branches/gcc-4_8-branch)
 
23895
@@ -4229,7 +4229,7 @@
 
23896
       c->resolved_sym->attr.elemental = isym->elemental;
 
23897
     }
 
23898
 
 
23899
-  if (gfc_pure (NULL) && !isym->pure)
 
23900
+  if (!isym->pure && gfc_pure (NULL))
 
23901
     {
 
23902
       gfc_error ("Subroutine call to intrinsic '%s' at %L is not PURE", name,
 
23903
                 &c->loc);
 
23904
@@ -4236,6 +4236,9 @@
 
23905
       return MATCH_ERROR;
 
23906
     }
 
23907
 
 
23908
+  if (!isym->pure)
 
23909
+    gfc_unset_implicit_pure (NULL);
 
23910
+
 
23911
   c->resolved_sym->attr.noreturn = isym->noreturn;
 
23912
 
 
23913
   return MATCH_YES;
 
23914
Index: gcc/fortran/trans-expr.c
 
23915
===================================================================
 
23916
--- a/src/gcc/fortran/trans-expr.c      (.../tags/gcc_4_8_2_release)
 
23917
+++ b/src/gcc/fortran/trans-expr.c      (.../branches/gcc-4_8-branch)
 
23918
@@ -670,7 +670,6 @@
 
23919
     gfc_add_modify (&parmse->post, vptr,
 
23920
                    fold_convert (TREE_TYPE (vptr), ctree));
 
23921
 
 
23922
-  gcc_assert (!optional || (optional && !copyback));
 
23923
   if (optional)
 
23924
     {
 
23925
       tree tmp2;
 
23926
@@ -6343,7 +6342,13 @@
 
23927
       /* Returns a reference to the scalar evaluated outside the loop
 
23928
         for this case.  */
 
23929
       gfc_conv_expr (se, expr);
 
23930
-      se->expr = gfc_build_addr_expr (NULL_TREE, se->expr);
 
23931
+
 
23932
+      if (expr->ts.type == BT_CHARACTER
 
23933
+         && expr->expr_type != EXPR_FUNCTION)
 
23934
+       gfc_conv_string_parameter (se);
 
23935
+      else
 
23936
+       se->expr = gfc_build_addr_expr (NULL_TREE, se->expr);
 
23937
+
 
23938
       return;
 
23939
     }
 
23940
 
 
23941
Index: gcc/fortran/trans-array.c
 
23942
===================================================================
 
23943
--- a/src/gcc/fortran/trans-array.c     (.../tags/gcc_4_8_2_release)
 
23944
+++ b/src/gcc/fortran/trans-array.c     (.../branches/gcc-4_8-branch)
 
23945
@@ -1,5 +1,5 @@
 
23946
 /* Array translation routines
 
23947
-   Copyright (C) 2002-2013 Free Software Foundation, Inc.
 
23948
+   Copyright (C) 2002-2014 Free Software Foundation, Inc.
 
23949
    Contributed by Paul Brook <paul@nowt.org>
 
23950
    and Steven Bosscher <s.bosscher@student.tudelft.nl>
 
23951
 
 
23952
@@ -2487,6 +2487,11 @@
 
23953
                 a reference to the value.  */
 
23954
              gfc_conv_expr (&se, expr);
 
23955
            }
 
23956
+
 
23957
+         /* Ensure that a pointer to the string is stored.  */
 
23958
+         if (expr->ts.type == BT_CHARACTER)
 
23959
+           gfc_conv_string_parameter (&se);
 
23960
+
 
23961
          gfc_add_block_to_block (&outer_loop->pre, &se.pre);
 
23962
          gfc_add_block_to_block (&outer_loop->post, &se.post);
 
23963
          if (gfc_is_class_scalar_expr (expr))
 
23964
@@ -7940,6 +7945,7 @@
 
23965
   tree size1;
 
23966
   tree size2;
 
23967
   tree array1;
 
23968
+  tree cond_null;
 
23969
   tree cond;
 
23970
   tree tmp;
 
23971
   tree tmp2;
 
23972
@@ -8015,9 +8021,9 @@
 
23973
   jump_label2 = gfc_build_label_decl (NULL_TREE);
 
23974
 
 
23975
   /* Allocate if data is NULL.  */
 
23976
-  cond = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node,
 
23977
+  cond_null = fold_build2_loc (input_location, EQ_EXPR, boolean_type_node,
 
23978
                         array1, build_int_cst (TREE_TYPE (array1), 0));
 
23979
-  tmp = build3_v (COND_EXPR, cond,
 
23980
+  tmp = build3_v (COND_EXPR, cond_null,
 
23981
                  build1_v (GOTO_EXPR, jump_label1),
 
23982
                  build_empty_stmt (input_location));
 
23983
   gfc_add_expr_to_block (&fblock, tmp);
 
23984
@@ -8069,13 +8075,25 @@
 
23985
   tmp = build1_v (LABEL_EXPR, jump_label1);
 
23986
   gfc_add_expr_to_block (&fblock, tmp);
 
23987
 
 
23988
-  size1 = gfc_conv_descriptor_size (desc, expr1->rank);
 
23989
+  /* If the lhs has not been allocated, its bounds will not have been
 
23990
+     initialized and so its size is set to zero.  */
 
23991
+  size1 = gfc_create_var (gfc_array_index_type, NULL);
 
23992
+  gfc_init_block (&alloc_block);
 
23993
+  gfc_add_modify (&alloc_block, size1, gfc_index_zero_node);
 
23994
+  gfc_init_block (&realloc_block);
 
23995
+  gfc_add_modify (&realloc_block, size1,
 
23996
+                 gfc_conv_descriptor_size (desc, expr1->rank));
 
23997
+  tmp = build3_v (COND_EXPR, cond_null,
 
23998
+                 gfc_finish_block (&alloc_block),
 
23999
+                 gfc_finish_block (&realloc_block));
 
24000
+  gfc_add_expr_to_block (&fblock, tmp);
 
24001
 
 
24002
-  /* Get the rhs size.  Fix both sizes.  */
 
24003
+  /* Get the rhs size and fix it.  */
 
24004
   if (expr2)
 
24005
     desc2 = rss->info->data.array.descriptor;
 
24006
   else
 
24007
     desc2 = NULL_TREE;
 
24008
+
 
24009
   size2 = gfc_index_one_node;
 
24010
   for (n = 0; n < expr2->rank; n++)
 
24011
     {
 
24012
@@ -8089,8 +8107,6 @@
 
24013
                               gfc_array_index_type,
 
24014
                               tmp, size2);
 
24015
     }
 
24016
-
 
24017
-  size1 = gfc_evaluate_now (size1, &fblock);
 
24018
   size2 = gfc_evaluate_now (size2, &fblock);
 
24019
 
 
24020
   cond = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
 
24021
Index: gcc/fortran/symbol.c
 
24022
===================================================================
 
24023
--- a/src/gcc/fortran/symbol.c  (.../tags/gcc_4_8_2_release)
 
24024
+++ b/src/gcc/fortran/symbol.c  (.../branches/gcc-4_8-branch)
 
24025
@@ -1110,8 +1110,8 @@
 
24026
       return FAILURE;
 
24027
     }
 
24028
 
 
24029
-  if (s == SAVE_EXPLICIT && gfc_implicit_pure (NULL))
 
24030
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
24031
+  if (s == SAVE_EXPLICIT)
 
24032
+    gfc_unset_implicit_pure (NULL);
 
24033
 
 
24034
   if (s == SAVE_EXPLICIT && attr->save == SAVE_EXPLICIT)
 
24035
     {
 
24036
Index: gcc/fortran/class.c
 
24037
===================================================================
 
24038
--- a/src/gcc/fortran/class.c   (.../tags/gcc_4_8_2_release)
 
24039
+++ b/src/gcc/fortran/class.c   (.../branches/gcc-4_8-branch)
 
24040
@@ -2486,7 +2486,7 @@
 
24041
     return NULL;
 
24042
 
 
24043
   /* Sometimes the typespec is passed from a single call.  */
 
24044
-  if (ts->type == BT_DERIVED)
 
24045
+  if (ts->type == BT_DERIVED || ts->type == BT_CLASS)
 
24046
     return gfc_find_derived_vtab (ts->u.derived);
 
24047
 
 
24048
   /* Find the top-level namespace.  */
 
24049
Index: gcc/fortran/decl.c
 
24050
===================================================================
 
24051
--- a/src/gcc/fortran/decl.c    (.../tags/gcc_4_8_2_release)
 
24052
+++ b/src/gcc/fortran/decl.c    (.../branches/gcc-4_8-branch)
 
24053
@@ -510,10 +510,8 @@
 
24054
       free (newdata);
 
24055
       return MATCH_ERROR;
 
24056
     }
 
24057
+  gfc_unset_implicit_pure (gfc_current_ns->proc_name);
 
24058
 
 
24059
-  if (gfc_implicit_pure (NULL))
 
24060
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
24061
-
 
24062
   /* Mark the variable as having appeared in a data statement.  */
 
24063
   if (gfc_add_data (&sym->attr, sym->name, &sym->declared_at) == FAILURE)
 
24064
     {
 
24065
@@ -571,10 +569,8 @@
 
24066
       gfc_error ("DATA statement at %C is not allowed in a PURE procedure");
 
24067
       return MATCH_ERROR;
 
24068
     }
 
24069
+  gfc_unset_implicit_pure (gfc_current_ns->proc_name);
 
24070
 
 
24071
-  if (gfc_implicit_pure (NULL))
 
24072
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
24073
-
 
24074
   return MATCH_YES;
 
24075
 
 
24076
 cleanup:
 
24077
@@ -1737,6 +1733,7 @@
 
24078
                 "a PURE procedure");
 
24079
       return MATCH_ERROR;
 
24080
     }
 
24081
+  gfc_unset_implicit_pure (gfc_current_ns->proc_name);
 
24082
 
 
24083
   /* Match NULL() initialization.  */
 
24084
   m = gfc_match_null (init);
 
24085
@@ -2045,6 +2042,10 @@
 
24086
              m = MATCH_ERROR;
 
24087
            }
 
24088
 
 
24089
+         if (current_attr.flavor != FL_PARAMETER
 
24090
+             && gfc_state_stack->state != COMP_DERIVED)
 
24091
+           gfc_unset_implicit_pure (gfc_current_ns->proc_name);
 
24092
+
 
24093
          if (m != MATCH_YES)
 
24094
            goto cleanup;
 
24095
        }
 
24096
@@ -5069,7 +5070,14 @@
 
24097
       if (gfc_add_proc (&c->attr, name, NULL) == FAILURE)
 
24098
        return MATCH_ERROR;
 
24099
 
 
24100
-      c->tb = tb;
 
24101
+      if (num == 1)
 
24102
+       c->tb = tb;
 
24103
+      else
 
24104
+       {
 
24105
+         c->tb = XCNEW (gfc_typebound_proc);
 
24106
+         c->tb->where = gfc_current_locus;
 
24107
+         *c->tb = *tb;
 
24108
+       }
 
24109
 
 
24110
       /* Set interface.  */
 
24111
       if (proc_if != NULL)
 
24112
@@ -7384,6 +7392,7 @@
 
24113
 
 
24114
 
 
24115
 /* Check a derived type that is being extended.  */
 
24116
+
 
24117
 static gfc_symbol*
 
24118
 check_extended_derived_type (char *name)
 
24119
 {
 
24120
@@ -7395,14 +7404,15 @@
 
24121
       return NULL;
 
24122
     }
 
24123
 
 
24124
+  extended = gfc_find_dt_in_generic (extended);
 
24125
+
 
24126
+  /* F08:C428.  */
 
24127
   if (!extended)
 
24128
     {
 
24129
-      gfc_error ("No such symbol in TYPE definition at %C");
 
24130
+      gfc_error ("Symbol '%s' at %C has not been previously defined", name);
 
24131
       return NULL;
 
24132
     }
 
24133
 
 
24134
-  extended = gfc_find_dt_in_generic (extended);
 
24135
-
 
24136
   if (extended->attr.flavor != FL_DERIVED)
 
24137
     {
 
24138
       gfc_error ("'%s' in EXTENDS expression at %C is not a "
 
24139
Index: gcc/fortran/dump-parse-tree.c
 
24140
===================================================================
 
24141
--- a/src/gcc/fortran/dump-parse-tree.c (.../tags/gcc_4_8_2_release)
 
24142
+++ b/src/gcc/fortran/dump-parse-tree.c (.../branches/gcc-4_8-branch)
 
24143
@@ -110,7 +110,8 @@
 
24144
       break;
 
24145
 
 
24146
     case BT_CHARACTER:
 
24147
-      show_expr (ts->u.cl->length);
 
24148
+      if (ts->u.cl)
 
24149
+       show_expr (ts->u.cl->length);
 
24150
       fprintf(dumpfile, " %d", ts->kind);
 
24151
       break;
 
24152
 
 
24153
Index: gcc/fortran/gfortran.h
 
24154
===================================================================
 
24155
--- a/src/gcc/fortran/gfortran.h        (.../tags/gcc_4_8_2_release)
 
24156
+++ b/src/gcc/fortran/gfortran.h        (.../branches/gcc-4_8-branch)
 
24157
@@ -2830,6 +2830,7 @@
 
24158
 int gfc_impure_variable (gfc_symbol *);
 
24159
 int gfc_pure (gfc_symbol *);
 
24160
 int gfc_implicit_pure (gfc_symbol *);
 
24161
+void gfc_unset_implicit_pure (gfc_symbol *);
 
24162
 int gfc_elemental (gfc_symbol *);
 
24163
 gfc_try gfc_resolve_iterator (gfc_iterator *, bool, bool);
 
24164
 gfc_try find_forall_index (gfc_expr *, gfc_symbol *, int);
 
24165
Index: gcc/fortran/ChangeLog
 
24166
===================================================================
 
24167
--- a/src/gcc/fortran/ChangeLog (.../tags/gcc_4_8_2_release)
 
24168
+++ b/src/gcc/fortran/ChangeLog (.../branches/gcc-4_8-branch)
 
24169
@@ -1,3 +1,227 @@
 
24170
+2014-03-20  Tobias Burnus  <burnus@net-b.de>
 
24171
+
 
24172
+       PR fortran/60543
 
24173
+       PR fortran/60283
 
24174
+       * gfortran.h (gfc_unset_implicit_pure): New prototype.
 
24175
+       * resolve.c (gfc_unset_implicit_pure): New.
 
24176
+       (resolve_structure_cons, resolve_function,
 
24177
+       pure_subroutine, resolve_ordinary_assign): Use it.
 
24178
+       * decl.c (match_old_style_init, gfc_match_data,
 
24179
+       match_pointer_init, variable_decl): Ditto.
 
24180
+       * expr.c (gfc_check_pointer_assign): Ditto.
 
24181
+       * intrinsic.c (gfc_intrinsic_sub_interface): Ditto.
 
24182
+       * io.c (match_vtag, gfc_match_open, gfc_match_close,
 
24183
+       match_filepos, gfc_match_inquire, gfc_match_print,
 
24184
+       gfc_match_wait, check_io_constraints): Ditto.
 
24185
+       * match.c (gfc_match_critical, gfc_match_stopcode,
 
24186
+       lock_unlock_statement, sync_statement, gfc_match_allocate,
 
24187
+       gfc_match_deallocate): Ditto.
 
24188
+       * parse.c (decode_omp_directive): Ditto.
 
24189
+       * symbol.c (gfc_add_save): Ditto.
 
24190
+
 
24191
+2014-03-08  Janus Weil  <janus@gcc.gnu.org>
 
24192
+
 
24193
+       PR fortran/60450
 
24194
+       * simplify.c (gfc_simplify_shape): Only clear shape if it was really
 
24195
+       created successfully.
 
24196
+
 
24197
+2014-03-06  Jakub Jelinek  <jakub@redhat.com>
 
24198
+
 
24199
+       Backport from mainline
 
24200
+       2014-02-11  Jakub Jelinek  <jakub@redhat.com>
 
24201
+
 
24202
+       PR fortran/52370
 
24203
+       * trans-decl.c (gfc_build_dummy_array_decl): Set TREE_NO_WARNING
 
24204
+       on decl if sym->attr.optional.
 
24205
+
 
24206
+2014-03-02  Mikael Morin  <mikael@gcc.gnu.org>
 
24207
+
 
24208
+       PR fortran/60341
 
24209
+       * frontend-passes.c (optimize_comparison): Guard two union accesses
 
24210
+       with the corresponding tag checks.
 
24211
+
 
24212
+2014-02-22  Mikael Morin  <mikael@gcc.gnu.org>
 
24213
+
 
24214
+       PR fortran/59599
 
24215
+       * trans-intrinsic.c (gfc_conv_intrinsic_ichar): Calculate the
 
24216
+       number of arguments.
 
24217
+
 
24218
+2014-02-19  Tobias Burnus  <burnus@net-b.de>
 
24219
+
 
24220
+       PR fortran/49397
 
24221
+       * expr.c (gfc_check_pointer_assign): Add check for
 
24222
+       F2008Cor2, C729.
 
24223
+       * trans-decl.c (gfc_get_symbol_decl): Correctly generate
 
24224
+       external decl in a corner case.
 
24225
+
 
24226
+2014-02-19  Janus Weil  <janus@gcc.gnu.org>
 
24227
+
 
24228
+       Backports from mainline:
 
24229
+       2014-02-17  Janus Weil  <janus@gcc.gnu.org>
 
24230
+
 
24231
+       PR fortran/55907
 
24232
+       * resolve.c (build_default_init_expr): Don't initialize character
 
24233
+       variable if -fno-automatic is given.
 
24234
+
 
24235
+       2014-02-18  Janus Weil  <janus@gcc.gnu.org>
 
24236
+
 
24237
+       PR fortran/60231
 
24238
+       * resolve.c (check_generic_tbp_ambiguity): Check for presence of dummy
 
24239
+       arguments to prevent ICE.
 
24240
+
 
24241
+2014-02-09  Janus Weil  <janus@gcc.gnu.org>
 
24242
+
 
24243
+       Backport from mainline
 
24244
+       2013-10-21  Tobias Burnus  <burnus@net-b.de>
 
24245
+
 
24246
+       PR fortran/58803
 
24247
+       PR fortran/59395
 
24248
+       * decl.c (match_ppc_decl): Prevent later double free.
 
24249
+
 
24250
+2014-02-08  Mikael Morin  <mikael@gcc.gnu.org>
 
24251
+
 
24252
+       PR fortran/57033
 
24253
+       * primary.c (gfc_convert_to_structure_constructor): Avoid null pointer
 
24254
+       dereference.
 
24255
+
 
24256
+2014-02-07  Paul Thomas  <pault@gcc.gnu.org>
 
24257
+
 
24258
+       PR fortran/59906
 
24259
+       * trans-stmt.c (gfc_add_loop_ss_code): In the case of character
 
24260
+       SS_REFERENCE, use gfc_conv_string_parameter to ensure that a
 
24261
+       pointer to the string is stored.
 
24262
+       * trans-expr.c (gfc_conv_expr_reference): Likewise, use
 
24263
+       gfc_conv_string_parameter to ensure that a pointer to is passed
 
24264
+       to the elemental function.
 
24265
+
 
24266
+2014-02-01  Paul Thomas  <pault@gcc.gnu.org>
 
24267
+
 
24268
+       PR fortran/59414
 
24269
+       * trans-stmt.c (gfc_trans_allocate): Before the pointer
 
24270
+       assignment to transfer the source _vptr to a class allocate
 
24271
+       expression, the final class reference should be exposed. The
 
24272
+       tail that includes the _data and array references is stored.
 
24273
+       This reduced expression is transferred to 'lhs' and the _vptr
 
24274
+       added. Then the tail is restored to the allocate expression.
 
24275
+
 
24276
+2014-01-26  Mikael Morin  <mikael@gcc.gnu.org>
 
24277
+
 
24278
+       PR fortran/58007
 
24279
+       * module.c
 
24280
+       (fp2, find_pointer2): Remove.
 
24281
+       (mio_component_ref): Don't forcedfully set the containing derived type
 
24282
+       symbol for loading.  Remove unused argument.
 
24283
+       (mio_ref): Update caller
 
24284
+       (skip_list): New argument nest_level.  Initialize level with the new
 
24285
+       argument.
 
24286
+       (read_module): Add forced pointer components association for derived
 
24287
+       type symbols.
 
24288
+
 
24289
+2014-01-19  Paul Thomas  <pault@gcc.gnu.org>
 
24290
+
 
24291
+       Backport from mainline
 
24292
+       2013-12-01  Paul Thomas  <pault@gcc.gnu.org>
 
24293
+
 
24294
+       PR fortran/58410
 
24295
+       * trans-array.c (gfc_alloc_allocatable_for_assignment): Do not
 
24296
+       use the array bounds of an unallocated array but set its size
 
24297
+       to zero instead.
 
24298
+
 
24299
+2014-01-19  Paul Thomas  <pault@gcc.gnu.org>
 
24300
+
 
24301
+       Backport from mainline
 
24302
+       2013-12-01  Paul Thomas  <pault@gcc.gnu.org>
 
24303
+
 
24304
+       PR fortran/34547
 
24305
+       * resolve.c (resolve_transfer): EXPR_NULL is always in an
 
24306
+       invalid context in a transfer statement.
 
24307
+
 
24308
+2014-01-11  Janus Weil  <janus@gcc.gnu.org>
 
24309
+
 
24310
+       Backport from mainline
 
24311
+       2013-12-29  Janus Weil  <janus@gcc.gnu.org>
 
24312
+
 
24313
+       PR fortran/59612
 
24314
+       PR fortran/57042
 
24315
+       * dump-parse-tree.c (show_typespec): Check for charlen.
 
24316
+       * invoke.texi: Fix documentation of -fdump-fortran-optimized and
 
24317
+       -fdump-parse-tree.
 
24318
+
 
24319
+2014-01-04  Janus Weil  <janus@gcc.gnu.org>
 
24320
+
 
24321
+       Backport from mainline
 
24322
+       2014-01-02  Janus Weil  <janus@gcc.gnu.org>
 
24323
+
 
24324
+       PR fortran/59654
 
24325
+       * resolve.c (resolve_typebound_procedures): No need to create the vtab
 
24326
+       here.
 
24327
+
 
24328
+2013-12-31  Janus Weil  <janus@gcc.gnu.org>
 
24329
+
 
24330
+       Backport from mainline
 
24331
+       2013-12-30  Janus Weil  <janus@gcc.gnu.org>
 
24332
+
 
24333
+       PR fortran/58998
 
24334
+       * resolve.c (resolve_symbol): Check that symbol is not only flavorless
 
24335
+       but also untyped.
 
24336
+
 
24337
+2013-12-18  Janus Weil  <janus@gcc.gnu.org>
 
24338
+
 
24339
+       Backport from mainline
 
24340
+       2013-12-15  Janus Weil  <janus@gcc.gnu.org>
 
24341
+
 
24342
+       PR fortran/59493
 
24343
+       * class.c (gfc_find_intrinsic_vtab): Handle BT_CLASS.
 
24344
+
 
24345
+2013-11-30  Paul Thomas  <pault@gcc.gnu.org>
 
24346
+
 
24347
+       Backport from mainline
 
24348
+       2013-11-04  Paul Thomas  <pault@gcc.gnu.org>
 
24349
+
 
24350
+       PR fortran/57445
 
24351
+       * trans-expr.c (gfc_conv_class_to_class): Remove spurious
 
24352
+       assert.
 
24353
+
 
24354
+2013-11-17  Janus Weil  <janus@gcc.gnu.org>
 
24355
+
 
24356
+       Backport from mainline
 
24357
+       2013-11-07  Janus Weil  <janus@gcc.gnu.org>
 
24358
+
 
24359
+       PR fortran/58471
 
24360
+       * primary.c (gfc_expr_attr): Check for result symbol.
 
24361
+
 
24362
+2013-11-16  Janus Weil  <janus@gcc.gnu.org>
 
24363
+
 
24364
+       Backport from mainline
 
24365
+       2013-09-20  Janus Weil  <janus@gcc.gnu.org>
 
24366
+
 
24367
+       PR fortran/58099
 
24368
+       * expr.c (gfc_check_pointer_assign): Remove second call to
 
24369
+       'gfc_compare_interfaces' with swapped arguments.
 
24370
+       * interface.c (gfc_compare_interfaces): Symmetrize the call to
 
24371
+       'check_result_characteristics' by calling it with swapped arguments.
 
24372
+
 
24373
+2013-11-16  Paul Thomas  <pault@gcc.gnu.org>
 
24374
+
 
24375
+       PR fortran/58771
 
24376
+       * trans-io.c (transfer_expr): If the backend_decl for a derived
 
24377
+       type is missing, build it with gfc_typenode_for_spec.
 
24378
+
 
24379
+2013-11-05  Steven G. Kargl <kargl@gcc.gnu.org>
 
24380
+
 
24381
+       PR fortran/58989
 
24382
+       * check.c (gfc_check_reshape): ensure that shape is a constant
 
24383
+       expression.
 
24384
+
 
24385
+2013-11-02  Janus Weil  <janus@gcc.gnu.org>
 
24386
+
 
24387
+       Backport from mainline
 
24388
+       2013-09-23  Janus Weil  <janus@gcc.gnu.org>
 
24389
+
 
24390
+       PR fortran/58355
 
24391
+       * decl.c (check_extended_derived_type): Prevent segfault, modify error
 
24392
+       message.
 
24393
+
 
24394
 2013-10-16  Release Manager
 
24395
 
 
24396
        * GCC 4.8.2 released.
 
24397
Index: gcc/fortran/trans-stmt.c
 
24398
===================================================================
 
24399
--- a/src/gcc/fortran/trans-stmt.c      (.../tags/gcc_4_8_2_release)
 
24400
+++ b/src/gcc/fortran/trans-stmt.c      (.../branches/gcc-4_8-branch)
 
24401
@@ -5104,10 +5104,49 @@
 
24402
        {
 
24403
          gfc_expr *lhs, *rhs;
 
24404
          gfc_se lse;
 
24405
+         gfc_ref *ref, *class_ref, *tail;
 
24406
 
 
24407
+         /* Find the last class reference.  */
 
24408
+         class_ref = NULL;
 
24409
+         for (ref = e->ref; ref; ref = ref->next)
 
24410
+           {
 
24411
+             if (ref->type == REF_COMPONENT
 
24412
+                 && ref->u.c.component->ts.type == BT_CLASS)
 
24413
+               class_ref = ref;
 
24414
+
 
24415
+             if (ref->next == NULL)
 
24416
+               break;
 
24417
+           }
 
24418
+
 
24419
+         /* Remove and store all subsequent references after the
 
24420
+            CLASS reference.  */
 
24421
+         if (class_ref)
 
24422
+           {
 
24423
+             tail = class_ref->next;
 
24424
+             class_ref->next = NULL;
 
24425
+           }
 
24426
+         else
 
24427
+           {
 
24428
+             tail = e->ref;
 
24429
+             e->ref = NULL;
 
24430
+           }
 
24431
+
 
24432
          lhs = gfc_expr_to_initialize (e);
 
24433
          gfc_add_vptr_component (lhs);
 
24434
 
 
24435
+         /* Remove the _vptr component and restore the original tail
 
24436
+            references.  */
 
24437
+         if (class_ref)
 
24438
+           {
 
24439
+             gfc_free_ref_list (class_ref->next);
 
24440
+             class_ref->next = tail;
 
24441
+           }
 
24442
+         else
 
24443
+           {
 
24444
+             gfc_free_ref_list (e->ref);
 
24445
+             e->ref = tail;
 
24446
+           }
 
24447
+
 
24448
          if (class_expr != NULL_TREE)
 
24449
            {
 
24450
              /* Polymorphic SOURCE: VPTR must be determined at run time.  */
 
24451
Index: gcc/fortran/expr.c
 
24452
===================================================================
 
24453
--- a/src/gcc/fortran/expr.c    (.../tags/gcc_4_8_2_release)
 
24454
+++ b/src/gcc/fortran/expr.c    (.../branches/gcc-4_8-branch)
 
24455
@@ -3555,11 +3555,13 @@
 
24456
          return FAILURE;
 
24457
        }
 
24458
 
 
24459
-      if (!gfc_compare_interfaces (s2, s1, name, 0, 1,
 
24460
-                                  err, sizeof(err), NULL, NULL))
 
24461
+      /* Check F2008Cor2, C729.  */
 
24462
+      if (!s2->attr.intrinsic && s2->attr.if_source == IFSRC_UNKNOWN
 
24463
+         && !s2->attr.external && !s2->attr.subroutine && !s2->attr.function)
 
24464
        {
 
24465
-         gfc_error ("Interface mismatch in procedure pointer assignment "
 
24466
-                    "at %L: %s", &rvalue->where, err);
 
24467
+         gfc_error ("Procedure pointer target '%s' at %L must be either an "
 
24468
+                    "intrinsic, host or use associated, referenced or have "
 
24469
+                    "the EXTERNAL attribute", s2->name, &rvalue->where);
 
24470
          return FAILURE;
 
24471
        }
 
24472
 
 
24473
@@ -3679,9 +3681,8 @@
 
24474
     }
 
24475
 
 
24476
   if (is_implicit_pure && gfc_impure_variable (rvalue->symtree->n.sym))
 
24477
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
24478
+    gfc_unset_implicit_pure (gfc_current_ns->proc_name);
 
24479
 
 
24480
-
 
24481
   if (gfc_has_vector_index (rvalue))
 
24482
     {
 
24483
       gfc_error ("Pointer assignment with vector subscript "
 
24484
Index: gcc/fortran/module.c
 
24485
===================================================================
 
24486
--- a/src/gcc/fortran/module.c  (.../tags/gcc_4_8_2_release)
 
24487
+++ b/src/gcc/fortran/module.c  (.../branches/gcc-4_8-branch)
 
24488
@@ -386,37 +386,6 @@
 
24489
 }
 
24490
 
 
24491
 
 
24492
-/* Recursive function to find a pointer within a tree by brute force.  */
 
24493
-
 
24494
-static pointer_info *
 
24495
-fp2 (pointer_info *p, const void *target)
 
24496
-{
 
24497
-  pointer_info *q;
 
24498
-
 
24499
-  if (p == NULL)
 
24500
-    return NULL;
 
24501
-
 
24502
-  if (p->u.pointer == target)
 
24503
-    return p;
 
24504
-
 
24505
-  q = fp2 (p->left, target);
 
24506
-  if (q != NULL)
 
24507
-    return q;
 
24508
-
 
24509
-  return fp2 (p->right, target);
 
24510
-}
 
24511
-
 
24512
-
 
24513
-/* During reading, find a pointer_info node from the pointer value.
 
24514
-   This amounts to a brute-force search.  */
 
24515
-
 
24516
-static pointer_info *
 
24517
-find_pointer2 (void *p)
 
24518
-{
 
24519
-  return fp2 (pi_root, p);
 
24520
-}
 
24521
-
 
24522
-
 
24523
 /* Resolve any fixups using a known pointer.  */
 
24524
 
 
24525
 static void
 
24526
@@ -2522,45 +2491,13 @@
 
24527
    the namespace and is not loaded again.  */
 
24528
 
 
24529
 static void
 
24530
-mio_component_ref (gfc_component **cp, gfc_symbol *sym)
 
24531
+mio_component_ref (gfc_component **cp)
 
24532
 {
 
24533
-  char name[GFC_MAX_SYMBOL_LEN + 1];
 
24534
-  gfc_component *q;
 
24535
   pointer_info *p;
 
24536
 
 
24537
   p = mio_pointer_ref (cp);
 
24538
   if (p->type == P_UNKNOWN)
 
24539
     p->type = P_COMPONENT;
 
24540
-
 
24541
-  if (iomode == IO_OUTPUT)
 
24542
-    mio_pool_string (&(*cp)->name);
 
24543
-  else
 
24544
-    {
 
24545
-      mio_internal_string (name);
 
24546
-
 
24547
-      if (sym && sym->attr.is_class)
 
24548
-       sym = sym->components->ts.u.derived;
 
24549
-
 
24550
-      /* It can happen that a component reference can be read before the
 
24551
-        associated derived type symbol has been loaded. Return now and
 
24552
-        wait for a later iteration of load_needed.  */
 
24553
-      if (sym == NULL)
 
24554
-       return;
 
24555
-
 
24556
-      if (sym->components != NULL && p->u.pointer == NULL)
 
24557
-       {
 
24558
-         /* Symbol already loaded, so search by name.  */
 
24559
-         q = gfc_find_component (sym, name, true, true);
 
24560
-
 
24561
-         if (q)
 
24562
-           associate_integer_pointer (p, q);
 
24563
-       }
 
24564
-
 
24565
-      /* Make sure this symbol will eventually be loaded.  */
 
24566
-      p = find_pointer2 (sym);
 
24567
-      if (p->u.rsym.state == UNUSED)
 
24568
-       p->u.rsym.state = NEEDED;
 
24569
-    }
 
24570
 }
 
24571
 
 
24572
 
 
24573
@@ -2917,7 +2854,7 @@
 
24574
 
 
24575
     case REF_COMPONENT:
 
24576
       mio_symbol_ref (&r->u.c.sym);
 
24577
-      mio_component_ref (&r->u.c.component, r->u.c.sym);
 
24578
+      mio_component_ref (&r->u.c.component);
 
24579
       break;
 
24580
 
 
24581
     case REF_SUBSTRING:
 
24582
@@ -3772,7 +3709,9 @@
 
24583
 
 
24584
 
 
24585
 /* Unlike most other routines, the address of the symbol node is already
 
24586
-   fixed on input and the name/module has already been filled in.  */
 
24587
+   fixed on input and the name/module has already been filled in.
 
24588
+   If you update the symbol format here, don't forget to update read_module
 
24589
+   as well (look for "seek to the symbol's component list").   */
 
24590
 
 
24591
 static void
 
24592
 mio_symbol (gfc_symbol *sym)
 
24593
@@ -3782,6 +3721,7 @@
 
24594
   mio_lparen ();
 
24595
 
 
24596
   mio_symbol_attribute (&sym->attr);
 
24597
+
 
24598
   mio_typespec (&sym->ts);
 
24599
   if (sym->ts.type == BT_CLASS)
 
24600
     sym->attr.class_ok = 1;
 
24601
@@ -3812,7 +3752,6 @@
 
24602
 
 
24603
   /* Note that components are always saved, even if they are supposed
 
24604
      to be private.  Component access is checked during searching.  */
 
24605
-
 
24606
   mio_component_list (&sym->components, sym->attr.vtype);
 
24607
 
 
24608
   if (sym->components != NULL)
 
24609
@@ -3914,14 +3853,17 @@
 
24610
 }
 
24611
 
 
24612
 
 
24613
-/* Skip a list between balanced left and right parens.  */
 
24614
+/* Skip a list between balanced left and right parens.
 
24615
+   By setting NEST_LEVEL one assumes that a number of NEST_LEVEL opening parens
 
24616
+   have been already parsed by hand, and the remaining of the content is to be
 
24617
+   skipped here.  The default value is 0 (balanced parens).  */
 
24618
 
 
24619
 static void
 
24620
-skip_list (void)
 
24621
+skip_list (int nest_level = 0)
 
24622
 {
 
24623
   int level;
 
24624
 
 
24625
-  level = 0;
 
24626
+  level = nest_level;
 
24627
   do
 
24628
     {
 
24629
       switch (parse_atom ())
 
24630
@@ -4555,7 +4497,6 @@
 
24631
       info->u.rsym.ns = atom_int;
 
24632
 
 
24633
       get_module_locus (&info->u.rsym.where);
 
24634
-      skip_list ();
 
24635
 
 
24636
       /* See if the symbol has already been loaded by a previous module.
 
24637
         If so, we reference the existing symbol and prevent it from
 
24638
@@ -4566,11 +4507,57 @@
 
24639
 
 
24640
       if (sym == NULL
 
24641
          || (sym->attr.flavor == FL_VARIABLE && info->u.rsym.ns !=1))
 
24642
-       continue;
 
24643
+       {
 
24644
+         skip_list ();
 
24645
+         continue;
 
24646
+       }
 
24647
 
 
24648
       info->u.rsym.state = USED;
 
24649
       info->u.rsym.sym = sym;
 
24650
+      /* The current symbol has already been loaded, so we can avoid loading
 
24651
+        it again.  However, if it is a derived type, some of its components
 
24652
+        can be used in expressions in the module.  To avoid the module loading
 
24653
+        failing, we need to associate the module's component pointer indexes
 
24654
+        with the existing symbol's component pointers.  */
 
24655
+      if (sym->attr.flavor == FL_DERIVED)
 
24656
+       {
 
24657
+         gfc_component *c;
 
24658
 
 
24659
+         /* First seek to the symbol's component list.  */
 
24660
+         mio_lparen (); /* symbol opening.  */
 
24661
+         skip_list (); /* skip symbol attribute.  */
 
24662
+         skip_list (); /* typespec.  */
 
24663
+         require_atom (ATOM_INTEGER); /* namespace ref.  */
 
24664
+         require_atom (ATOM_INTEGER); /* common ref.  */
 
24665
+         skip_list (); /* formal args.  */
 
24666
+         /* no value.  */
 
24667
+         skip_list (); /* array_spec.  */
 
24668
+         require_atom (ATOM_INTEGER); /* result.  */
 
24669
+         /* not a cray pointer.  */
 
24670
+
 
24671
+         mio_lparen (); /* component list opening.  */
 
24672
+         for (c = sym->components; c; c = c->next)
 
24673
+           {
 
24674
+             pointer_info *p;
 
24675
+             const char *comp_name;
 
24676
+             int n;
 
24677
+
 
24678
+             mio_lparen (); /* component opening.  */
 
24679
+             mio_integer (&n);
 
24680
+             p = get_integer (n);
 
24681
+             if (p->u.pointer == NULL)
 
24682
+               associate_integer_pointer (p, c);
 
24683
+             mio_pool_string (&comp_name);
 
24684
+             gcc_assert (comp_name == c->name);
 
24685
+             skip_list (1); /* component end.  */
 
24686
+           }
 
24687
+         mio_rparen (); /* component list closing.  */
 
24688
+
 
24689
+         skip_list (1); /* symbol end.  */
 
24690
+       }
 
24691
+      else
 
24692
+       skip_list ();
 
24693
+
 
24694
       /* Some symbols do not have a namespace (eg. formal arguments),
 
24695
         so the automatic "unique symtree" mechanism must be suppressed
 
24696
         by marking them as referenced.  */
 
24697
Index: gcc/fortran/io.c
 
24698
===================================================================
 
24699
--- a/src/gcc/fortran/io.c      (.../tags/gcc_4_8_2_release)
 
24700
+++ b/src/gcc/fortran/io.c      (.../branches/gcc-4_8-branch)
 
24701
@@ -1309,7 +1309,8 @@
 
24702
       return MATCH_ERROR;
 
24703
     }
 
24704
 
 
24705
-  if (gfc_pure (NULL) && gfc_impure_variable (result->symtree->n.sym))
 
24706
+  bool impure = gfc_impure_variable (result->symtree->n.sym);
 
24707
+  if (impure && gfc_pure (NULL))
 
24708
     {
 
24709
       gfc_error ("Variable %s cannot be assigned in PURE procedure at %C",
 
24710
                 tag->name);
 
24711
@@ -1317,8 +1318,8 @@
 
24712
       return MATCH_ERROR;
 
24713
     }
 
24714
 
 
24715
-  if (gfc_implicit_pure (NULL) && gfc_impure_variable (result->symtree->n.sym))
 
24716
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
24717
+  if (impure)
 
24718
+    gfc_unset_implicit_pure (NULL);
 
24719
 
 
24720
   *v = result;
 
24721
   return MATCH_YES;
 
24722
@@ -1838,8 +1839,7 @@
 
24723
       goto cleanup;
 
24724
     }
 
24725
 
 
24726
-  if (gfc_implicit_pure (NULL))
 
24727
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
24728
+  gfc_unset_implicit_pure (NULL);
 
24729
 
 
24730
   warn = (open->err || open->iostat) ? true : false;
 
24731
 
 
24732
@@ -2251,8 +2251,7 @@
 
24733
       goto cleanup;
 
24734
     }
 
24735
 
 
24736
-  if (gfc_implicit_pure (NULL))
 
24737
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
24738
+  gfc_unset_implicit_pure (NULL);
 
24739
 
 
24740
   warn = (close->iostat || close->err) ? true : false;
 
24741
 
 
24742
@@ -2419,8 +2418,7 @@
 
24743
       goto cleanup;
 
24744
     }
 
24745
 
 
24746
-  if (gfc_implicit_pure (NULL))
 
24747
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
24748
+  gfc_unset_implicit_pure (NULL);
 
24749
 
 
24750
   new_st.op = op;
 
24751
   new_st.ext.filepos = fp;
 
24752
@@ -3276,9 +3274,8 @@
 
24753
                     "an internal file in a PURE procedure",
 
24754
                     io_kind_name (k));
 
24755
 
 
24756
-      if (gfc_implicit_pure (NULL) && (k == M_READ || k == M_WRITE))
 
24757
-       gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
24758
-
 
24759
+      if (k == M_READ || k == M_WRITE)
 
24760
+       gfc_unset_implicit_pure (NULL);
 
24761
     }
 
24762
 
 
24763
   if (k != M_READ)
 
24764
@@ -3809,8 +3806,7 @@
 
24765
       return MATCH_ERROR;
 
24766
     }
 
24767
 
 
24768
-  if (gfc_implicit_pure (NULL))
 
24769
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
24770
+  gfc_unset_implicit_pure (NULL);
 
24771
 
 
24772
   return MATCH_YES;
 
24773
 }
 
24774
@@ -3969,8 +3965,7 @@
 
24775
          return MATCH_ERROR;
 
24776
        }
 
24777
 
 
24778
-      if (gfc_implicit_pure (NULL))
 
24779
-       gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
24780
+      gfc_unset_implicit_pure (NULL);
 
24781
 
 
24782
       new_st.block = gfc_get_code ();
 
24783
       new_st.block->op = EXEC_IOLENGTH;
 
24784
@@ -4023,8 +4018,7 @@
 
24785
       goto cleanup;
 
24786
     }
 
24787
 
 
24788
-  if (gfc_implicit_pure (NULL))
 
24789
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
24790
+  gfc_unset_implicit_pure (NULL);
 
24791
   
 
24792
   if (inquire->id != NULL && inquire->pending == NULL)
 
24793
     {
 
24794
@@ -4212,8 +4206,7 @@
 
24795
       goto cleanup;
 
24796
     }
 
24797
 
 
24798
-  if (gfc_implicit_pure (NULL))
 
24799
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
24800
+  gfc_unset_implicit_pure (NULL);
 
24801
 
 
24802
   new_st.op = EXEC_WAIT;
 
24803
   new_st.ext.wait = wait;
 
24804
Index: gcc/fortran/frontend-passes.c
 
24805
===================================================================
 
24806
--- a/src/gcc/fortran/frontend-passes.c (.../tags/gcc_4_8_2_release)
 
24807
+++ b/src/gcc/fortran/frontend-passes.c (.../branches/gcc-4_8-branch)
 
24808
@@ -1214,7 +1214,9 @@
 
24809
          /* Replace A // B < A // C with B < C, and A // B < C // B
 
24810
             with A < C.  */
 
24811
          if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
 
24812
+             && op1->expr_type == EXPR_OP
 
24813
              && op1->value.op.op == INTRINSIC_CONCAT
 
24814
+             && op2->expr_type == EXPR_OP
 
24815
              && op2->value.op.op == INTRINSIC_CONCAT)
 
24816
            {
 
24817
              gfc_expr *op1_left = op1->value.op.op1;
 
24818
Index: gcc/fortran/resolve.c
 
24819
===================================================================
 
24820
--- a/src/gcc/fortran/resolve.c (.../tags/gcc_4_8_2_release)
 
24821
+++ b/src/gcc/fortran/resolve.c (.../branches/gcc-4_8-branch)
 
24822
@@ -1,5 +1,5 @@
 
24823
 /* Perform type resolution on the various structures.
 
24824
-   Copyright (C) 2001-2013 Free Software Foundation, Inc.
 
24825
+   Copyright (C) 2001-2014 Free Software Foundation, Inc.
 
24826
    Contributed by Andy Vaught
 
24827
 
 
24828
 This file is part of GCC.
 
24829
@@ -1259,9 +1259,10 @@
 
24830
        }
 
24831
 
 
24832
       /* F2003, C1272 (3).  */
 
24833
-      if (gfc_pure (NULL) && cons->expr->expr_type == EXPR_VARIABLE
 
24834
-         && (gfc_impure_variable (cons->expr->symtree->n.sym)
 
24835
-             || gfc_is_coindexed (cons->expr)))
 
24836
+      bool impure = cons->expr->expr_type == EXPR_VARIABLE
 
24837
+                   && (gfc_impure_variable (cons->expr->symtree->n.sym)
 
24838
+                       || gfc_is_coindexed (cons->expr));
 
24839
+      if (impure && gfc_pure (NULL))
 
24840
        {
 
24841
          t = FAILURE;
 
24842
          gfc_error ("Invalid expression in the structure constructor for "
 
24843
@@ -1269,12 +1270,8 @@
 
24844
                     comp->name, &cons->expr->where);
 
24845
        }
 
24846
 
 
24847
-      if (gfc_implicit_pure (NULL)
 
24848
-           && cons->expr->expr_type == EXPR_VARIABLE
 
24849
-           && (gfc_impure_variable (cons->expr->symtree->n.sym)
 
24850
-               || gfc_is_coindexed (cons->expr)))
 
24851
-       gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
24852
-
 
24853
+      if (impure)
 
24854
+       gfc_unset_implicit_pure (NULL);
 
24855
     }
 
24856
 
 
24857
   return t;
 
24858
@@ -3295,8 +3292,7 @@
 
24859
          t = FAILURE;
 
24860
        }
 
24861
 
 
24862
-      if (gfc_implicit_pure (NULL))
 
24863
-       gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
24864
+      gfc_unset_implicit_pure (NULL);
 
24865
     }
 
24866
 
 
24867
   /* Functions without the RECURSIVE attribution are not allowed to
 
24868
@@ -3361,8 +3357,7 @@
 
24869
     gfc_error ("Subroutine call to '%s' at %L is not PURE", sym->name,
 
24870
               &c->loc);
 
24871
 
 
24872
-  if (gfc_implicit_pure (NULL))
 
24873
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
24874
+  gfc_unset_implicit_pure (NULL);
 
24875
 }
 
24876
 
 
24877
 
 
24878
@@ -8705,10 +8700,11 @@
 
24879
         && exp->value.op.op == INTRINSIC_PARENTHESES)
 
24880
     exp = exp->value.op.op1;
 
24881
 
 
24882
-  if (exp && exp->expr_type == EXPR_NULL && exp->ts.type == BT_UNKNOWN)
 
24883
+  if (exp && exp->expr_type == EXPR_NULL
 
24884
+      && code->ext.dt)
 
24885
     {
 
24886
-      gfc_error ("NULL intrinsic at %L in data transfer statement requires "
 
24887
-                "MOLD=", &exp->where);
 
24888
+      gfc_error ("Invalid context for NULL () intrinsic at %L",
 
24889
+                &exp->where);
 
24890
       return;
 
24891
     }
 
24892
 
 
24893
@@ -9612,7 +9608,7 @@
 
24894
       if (lhs->expr_type == EXPR_VARIABLE
 
24895
            && lhs->symtree->n.sym != gfc_current_ns->proc_name
 
24896
            && lhs->symtree->n.sym->ns != gfc_current_ns)
 
24897
-       gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
24898
+       gfc_unset_implicit_pure (NULL);
 
24899
 
 
24900
       if (lhs->ts.type == BT_DERIVED
 
24901
            && lhs->expr_type == EXPR_VARIABLE
 
24902
@@ -9620,11 +9616,11 @@
 
24903
            && rhs->expr_type == EXPR_VARIABLE
 
24904
            && (gfc_impure_variable (rhs->symtree->n.sym)
 
24905
                || gfc_is_coindexed (rhs)))
 
24906
-       gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
24907
+       gfc_unset_implicit_pure (NULL);
 
24908
 
 
24909
       /* Fortran 2008, C1283.  */
 
24910
       if (gfc_is_coindexed (lhs))
 
24911
-       gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
24912
+       gfc_unset_implicit_pure (NULL);
 
24913
     }
 
24914
 
 
24915
   /* F03:7.4.1.2.  */
 
24916
@@ -11057,7 +11053,7 @@
 
24917
          init_expr = NULL;
 
24918
        }
 
24919
       if (!init_expr && gfc_option.flag_init_character == GFC_INIT_CHARACTER_ON
 
24920
-         && sym->ts.u.cl->length)
 
24921
+         && sym->ts.u.cl->length && gfc_option.flag_max_stack_var_size != 0)
 
24922
        {
 
24923
          gfc_actual_arglist *arg;
 
24924
          init_expr = gfc_get_expr ();
 
24925
@@ -11877,6 +11873,7 @@
 
24926
 {
 
24927
   gfc_symbol *sym1, *sym2;
 
24928
   const char *pass1, *pass2;
 
24929
+  gfc_formal_arglist *dummy_args;
 
24930
 
 
24931
   gcc_assert (t1->specific && t2->specific);
 
24932
   gcc_assert (!t1->specific->is_generic);
 
24933
@@ -11899,19 +11896,33 @@
 
24934
       return FAILURE;
 
24935
     }
 
24936
 
 
24937
-  /* Compare the interfaces.  */
 
24938
+  /* Determine PASS arguments.  */
 
24939
   if (t1->specific->nopass)
 
24940
     pass1 = NULL;
 
24941
   else if (t1->specific->pass_arg)
 
24942
     pass1 = t1->specific->pass_arg;
 
24943
   else
 
24944
-    pass1 = gfc_sym_get_dummy_args (t1->specific->u.specific->n.sym)->sym->name;
 
24945
+    {
 
24946
+      dummy_args = gfc_sym_get_dummy_args (t1->specific->u.specific->n.sym);
 
24947
+      if (dummy_args)
 
24948
+       pass1 = dummy_args->sym->name;
 
24949
+      else
 
24950
+       pass1 = NULL;
 
24951
+    }
 
24952
   if (t2->specific->nopass)
 
24953
     pass2 = NULL;
 
24954
   else if (t2->specific->pass_arg)
 
24955
     pass2 = t2->specific->pass_arg;
 
24956
   else
 
24957
-    pass2 = gfc_sym_get_dummy_args (t2->specific->u.specific->n.sym)->sym->name;
 
24958
+    {
 
24959
+      dummy_args = gfc_sym_get_dummy_args (t2->specific->u.specific->n.sym);
 
24960
+      if (dummy_args)
 
24961
+       pass2 = dummy_args->sym->name;
 
24962
+      else
 
24963
+       pass2 = NULL;
 
24964
+    }
 
24965
+
 
24966
+  /* Compare the interfaces.  */
 
24967
   if (gfc_compare_interfaces (sym1, sym2, sym2->name, !t1->is_operator, 0,
 
24968
                              NULL, 0, pass1, pass2))
 
24969
     {
 
24970
@@ -12425,9 +12436,6 @@
 
24971
   resolve_bindings_derived = derived;
 
24972
   resolve_bindings_result = SUCCESS;
 
24973
 
 
24974
-  /* Make sure the vtab has been generated.  */
 
24975
-  gfc_find_derived_vtab (derived);
 
24976
-
 
24977
   if (derived->f2k_derived->tb_sym_root)
 
24978
     gfc_traverse_symtree (derived->f2k_derived->tb_sym_root,
 
24979
                          &resolve_typebound_procedure);
 
24980
@@ -13256,7 +13264,8 @@
 
24981
   if (sym->attr.flavor == FL_UNKNOWN
 
24982
       || (sym->attr.flavor == FL_PROCEDURE && !sym->attr.intrinsic
 
24983
          && !sym->attr.generic && !sym->attr.external
 
24984
-         && sym->attr.if_source == IFSRC_UNKNOWN))
 
24985
+         && sym->attr.if_source == IFSRC_UNKNOWN
 
24986
+         && sym->ts.type == BT_UNKNOWN))
 
24987
     {
 
24988
 
 
24989
     /* If we find that a flavorless symbol is an interface in one of the
 
24990
@@ -14376,6 +14385,33 @@
 
24991
 }
 
24992
 
 
24993
 
 
24994
+void
 
24995
+gfc_unset_implicit_pure (gfc_symbol *sym)
 
24996
+{
 
24997
+  gfc_namespace *ns;
 
24998
+
 
24999
+  if (sym == NULL)
 
25000
+    {
 
25001
+      /* Check if the current procedure is implicit_pure.  Walk up
 
25002
+        the procedure list until we find a procedure.  */
 
25003
+      for (ns = gfc_current_ns; ns; ns = ns->parent)
 
25004
+       {
 
25005
+         sym = ns->proc_name;
 
25006
+         if (sym == NULL)
 
25007
+           return;
 
25008
+
 
25009
+         if (sym->attr.flavor == FL_PROCEDURE)
 
25010
+           break;
 
25011
+       }
 
25012
+    }
 
25013
+
 
25014
+  if (sym->attr.flavor == FL_PROCEDURE)
 
25015
+    sym->attr.implicit_pure = 0;
 
25016
+  else
 
25017
+    sym->attr.pure = 0;
 
25018
+}
 
25019
+
 
25020
+
 
25021
 /* Test whether the current procedure is elemental or not.  */
 
25022
 
 
25023
 int
 
25024
Index: gcc/fortran/trans-io.c
 
25025
===================================================================
 
25026
--- a/src/gcc/fortran/trans-io.c        (.../tags/gcc_4_8_2_release)
 
25027
+++ b/src/gcc/fortran/trans-io.c        (.../branches/gcc-4_8-branch)
 
25028
@@ -243,16 +243,16 @@
 
25029
 
 
25030
   /* The code to generate the error.  */
 
25031
   gfc_start_block (&block);
 
25032
-  
 
25033
+
 
25034
   arg1 = gfc_build_addr_expr (NULL_TREE, var);
 
25035
-  
 
25036
+
 
25037
   arg2 = build_int_cst (integer_type_node, error_code),
 
25038
-  
 
25039
+
 
25040
   asprintf (&message, "%s", _(msgid));
 
25041
   arg3 = gfc_build_addr_expr (pchar_type_node,
 
25042
                              gfc_build_localized_cstring_const (message));
 
25043
   free (message);
 
25044
-  
 
25045
+
 
25046
   tmp = build_call_expr_loc (input_location,
 
25047
                         gfor_fndecl_generate_error, 3, arg1, arg2, arg3);
 
25048
 
 
25049
@@ -521,7 +521,7 @@
 
25050
       gfc_trans_io_runtime_check (cond, var, LIBERROR_BAD_UNIT,
 
25051
                               "Unit number in I/O statement too small",
 
25052
                               &se.pre);
 
25053
-    
 
25054
+
 
25055
       /* UNIT numbers should be less than the max.  */
 
25056
       val = gfc_conv_mpz_to_tree (gfc_integer_kinds[i].huge, 4);
 
25057
       cond = fold_build2_loc (input_location, GT_EXPR, boolean_type_node,
 
25058
@@ -1000,7 +1000,7 @@
 
25059
   if (p->convert)
 
25060
     mask |= set_string (&block, &post_block, var, IOPARM_open_convert,
 
25061
                        p->convert);
 
25062
-                       
 
25063
+
 
25064
   if (p->newunit)
 
25065
     mask |= set_parameter_ref (&block, &post_block, var, IOPARM_open_newunit,
 
25066
                               p->newunit);
 
25067
@@ -1234,7 +1234,7 @@
 
25068
     {
 
25069
       mask |= set_parameter_ref (&block, &post_block, var, IOPARM_inquire_exist,
 
25070
                                 p->exist);
 
25071
-    
 
25072
+
 
25073
       if (p->unit && !p->iostat)
 
25074
        {
 
25075
          p->iostat = create_dummy_iostat ();
 
25076
@@ -1322,7 +1322,7 @@
 
25077
   if (p->pad)
 
25078
     mask |= set_string (&block, &post_block, var, IOPARM_inquire_pad,
 
25079
                        p->pad);
 
25080
-  
 
25081
+
 
25082
   if (p->convert)
 
25083
     mask |= set_string (&block, &post_block, var, IOPARM_inquire_convert,
 
25084
                        p->convert);
 
25085
@@ -1547,7 +1547,7 @@
 
25086
   tree dtype;
 
25087
   tree dt_parm_addr;
 
25088
   tree decl = NULL_TREE;
 
25089
-  int n_dim; 
 
25090
+  int n_dim;
 
25091
   int itype;
 
25092
   int rank = 0;
 
25093
 
 
25094
@@ -2032,7 +2032,7 @@
 
25095
       if (gfc_notification_std (GFC_STD_GNU) != SILENT)
 
25096
        {
 
25097
          gfc_error_now ("Derived type '%s' at %L has PRIVATE components",
 
25098
-                        ts->u.derived->name, code != NULL ? &(code->loc) : 
 
25099
+                        ts->u.derived->name, code != NULL ? &(code->loc) :
 
25100
                         &gfc_current_locus);
 
25101
          return;
 
25102
        }
 
25103
@@ -2041,7 +2041,7 @@
 
25104
       ts->kind = ts->u.derived->ts.kind;
 
25105
       ts->f90_type = ts->u.derived->ts.f90_type;
 
25106
     }
 
25107
-  
 
25108
+
 
25109
   kind = ts->kind;
 
25110
   function = NULL;
 
25111
   arg2 = NULL;
 
25112
@@ -2123,7 +2123,7 @@
 
25113
            function = iocall[IOCALL_X_CHARACTER_WIDE];
 
25114
          else
 
25115
            function = iocall[IOCALL_X_CHARACTER_WIDE_WRITE];
 
25116
-           
 
25117
+
 
25118
          tmp = gfc_build_addr_expr (NULL_TREE, dt_parm);
 
25119
          tmp = build_call_expr_loc (input_location,
 
25120
                                 function, 4, tmp, addr_expr, arg2, arg3);
 
25121
@@ -2158,6 +2158,12 @@
 
25122
       expr = build_fold_indirect_ref_loc (input_location,
 
25123
                                      expr);
 
25124
 
 
25125
+      /* Make sure that the derived type has been built.  An external
 
25126
+        function, if only referenced in an io statement requires this
 
25127
+        check (see PR58771).  */
 
25128
+      if (ts->u.derived->backend_decl == NULL_TREE)
 
25129
+       tmp = gfc_typenode_for_spec (ts);
 
25130
+
 
25131
       for (c = ts->u.derived->components; c; c = c->next)
 
25132
        {
 
25133
          field = c->backend_decl;
 
25134
Index: gcc/fortran/trans-decl.c
 
25135
===================================================================
 
25136
--- a/src/gcc/fortran/trans-decl.c      (.../tags/gcc_4_8_2_release)
 
25137
+++ b/src/gcc/fortran/trans-decl.c      (.../branches/gcc-4_8-branch)
 
25138
@@ -1013,6 +1013,10 @@
 
25139
   TREE_STATIC (decl) = 0;
 
25140
   DECL_EXTERNAL (decl) = 0;
 
25141
 
 
25142
+  /* Avoid uninitialized warnings for optional dummy arguments.  */
 
25143
+  if (sym->attr.optional)
 
25144
+    TREE_NO_WARNING (decl) = 1;
 
25145
+
 
25146
   /* We should never get deferred shape arrays here.  We used to because of
 
25147
      frontend bugs.  */
 
25148
   gcc_assert (sym->as->type != AS_DEFERRED);
 
25149
@@ -1358,9 +1362,10 @@
 
25150
 
 
25151
   if (sym->attr.flavor == FL_PROCEDURE)
 
25152
     {
 
25153
-      /* Catch function declarations. Only used for actual parameters,
 
25154
+      /* Catch functions. Only used for actual parameters,
 
25155
         procedure pointers and procptr initialization targets.  */
 
25156
-      if (sym->attr.external || sym->attr.use_assoc || sym->attr.intrinsic)
 
25157
+      if (sym->attr.external || sym->attr.use_assoc || sym->attr.intrinsic
 
25158
+         || sym->attr.if_source != IFSRC_DECL)
 
25159
        {
 
25160
          decl = gfc_get_extern_function_decl (sym);
 
25161
          gfc_set_decl_location (decl, &sym->declared_at);
 
25162
Index: gcc/fortran/match.c
 
25163
===================================================================
 
25164
--- a/src/gcc/fortran/match.c   (.../tags/gcc_4_8_2_release)
 
25165
+++ b/src/gcc/fortran/match.c   (.../branches/gcc-4_8-branch)
 
25166
@@ -1753,8 +1753,7 @@
 
25167
       return MATCH_ERROR;
 
25168
     }
 
25169
 
 
25170
-  if (gfc_implicit_pure (NULL))
 
25171
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
25172
+  gfc_unset_implicit_pure (NULL);
 
25173
 
 
25174
   if (gfc_notify_std (GFC_STD_F2008, "CRITICAL statement at %C")
 
25175
       == FAILURE)
 
25176
@@ -2683,8 +2682,7 @@
 
25177
       goto cleanup;
 
25178
     }
 
25179
 
 
25180
-  if (gfc_implicit_pure (NULL))
 
25181
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
25182
+  gfc_unset_implicit_pure (NULL);
 
25183
 
 
25184
   if (st == ST_STOP && gfc_find_state (COMP_CRITICAL) == SUCCESS)
 
25185
     {
 
25186
@@ -2824,8 +2822,7 @@
 
25187
       return MATCH_ERROR;
 
25188
     }
 
25189
 
 
25190
-  if (gfc_implicit_pure (NULL))
 
25191
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
25192
+  gfc_unset_implicit_pure (NULL);
 
25193
 
 
25194
   if (gfc_option.coarray == GFC_FCOARRAY_NONE)
 
25195
     {
 
25196
@@ -3020,8 +3017,7 @@
 
25197
       return MATCH_ERROR;
 
25198
     }
 
25199
 
 
25200
-  if (gfc_implicit_pure (NULL))
 
25201
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
25202
+  gfc_unset_implicit_pure (NULL);
 
25203
 
 
25204
   if (gfc_notify_std (GFC_STD_F2008, "SYNC statement at %C")
 
25205
       == FAILURE)
 
25206
@@ -3500,15 +3496,15 @@
 
25207
       if (gfc_check_do_variable (tail->expr->symtree))
 
25208
        goto cleanup;
 
25209
 
 
25210
-      if (gfc_pure (NULL) && gfc_impure_variable (tail->expr->symtree->n.sym))
 
25211
+      bool impure = gfc_impure_variable (tail->expr->symtree->n.sym);
 
25212
+      if (impure && gfc_pure (NULL))
 
25213
        {
 
25214
          gfc_error ("Bad allocate-object at %C for a PURE procedure");
 
25215
          goto cleanup;
 
25216
        }
 
25217
 
 
25218
-      if (gfc_implicit_pure (NULL)
 
25219
-           && gfc_impure_variable (tail->expr->symtree->n.sym))
 
25220
-       gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
25221
+      if (impure)
 
25222
+       gfc_unset_implicit_pure (NULL);
 
25223
 
 
25224
       if (tail->expr->ts.deferred)
 
25225
        {
 
25226
@@ -3890,14 +3886,15 @@
 
25227
 
 
25228
       sym = tail->expr->symtree->n.sym;
 
25229
 
 
25230
-      if (gfc_pure (NULL) && gfc_impure_variable (sym))
 
25231
+      bool impure = gfc_impure_variable (sym);
 
25232
+      if (impure && gfc_pure (NULL))
 
25233
        {
 
25234
          gfc_error ("Illegal allocate-object at %C for a PURE procedure");
 
25235
          goto cleanup;
 
25236
        }
 
25237
 
 
25238
-      if (gfc_implicit_pure (NULL) && gfc_impure_variable (sym))
 
25239
-       gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
25240
+      if (impure)
 
25241
+       gfc_unset_implicit_pure (NULL);
 
25242
 
 
25243
       if (gfc_is_coarray (tail->expr)
 
25244
          && gfc_find_state (COMP_DO_CONCURRENT) == SUCCESS)
 
25245
Index: gcc/fortran/parse.c
 
25246
===================================================================
 
25247
--- a/src/gcc/fortran/parse.c   (.../tags/gcc_4_8_2_release)
 
25248
+++ b/src/gcc/fortran/parse.c   (.../branches/gcc-4_8-branch)
 
25249
@@ -550,8 +550,7 @@
 
25250
       return ST_NONE;
 
25251
     }
 
25252
 
 
25253
-  if (gfc_implicit_pure (NULL))
 
25254
-    gfc_current_ns->proc_name->attr.implicit_pure = 0;
 
25255
+  gfc_unset_implicit_pure (NULL);
 
25256
 
 
25257
   old_locus = gfc_current_locus;
 
25258
 
 
25259
Index: gcc/fortran/check.c
 
25260
===================================================================
 
25261
--- a/src/gcc/fortran/check.c   (.../tags/gcc_4_8_2_release)
 
25262
+++ b/src/gcc/fortran/check.c   (.../branches/gcc-4_8-branch)
 
25263
@@ -3208,7 +3208,7 @@
 
25264
                 "than %d elements", &shape->where, GFC_MAX_DIMENSIONS);
 
25265
       return FAILURE;
 
25266
     }
 
25267
-  else if (shape->expr_type == EXPR_ARRAY)
 
25268
+  else if (shape->expr_type == EXPR_ARRAY && gfc_is_constant_expr (shape))
 
25269
     {
 
25270
       gfc_expr *e;
 
25271
       int i, extent;
 
25272
Index: gcc/fortran/primary.c
 
25273
===================================================================
 
25274
--- a/src/gcc/fortran/primary.c (.../tags/gcc_4_8_2_release)
 
25275
+++ b/src/gcc/fortran/primary.c (.../branches/gcc-4_8-branch)
 
25276
@@ -2252,7 +2252,7 @@
 
25277
     case EXPR_FUNCTION:
 
25278
       gfc_clear_attr (&attr);
 
25279
 
 
25280
-      if (e->value.function.esym != NULL)
 
25281
+      if (e->value.function.esym && e->value.function.esym->result)
 
25282
        {
 
25283
          gfc_symbol *sym = e->value.function.esym->result;
 
25284
          attr = sym->attr;
 
25285
@@ -2540,7 +2540,8 @@
 
25286
       if (parent && !comp)
 
25287
        break;
 
25288
 
 
25289
-      actual = actual->next;
 
25290
+      if (actual)
 
25291
+       actual = actual->next;
 
25292
     }
 
25293
 
 
25294
   if (build_actual_constructor (&comp_head, &ctor_head, sym) == FAILURE)
 
25295
Index: gcc/fortran/trans-intrinsic.c
 
25296
===================================================================
 
25297
--- a/src/gcc/fortran/trans-intrinsic.c (.../tags/gcc_4_8_2_release)
 
25298
+++ b/src/gcc/fortran/trans-intrinsic.c (.../branches/gcc-4_8-branch)
 
25299
@@ -4685,8 +4685,10 @@
 
25300
 gfc_conv_intrinsic_ichar (gfc_se * se, gfc_expr * expr)
 
25301
 {
 
25302
   tree args[2], type, pchartype;
 
25303
+  int nargs;
 
25304
 
 
25305
-  gfc_conv_intrinsic_function_args (se, expr, args, 2);
 
25306
+  nargs = gfc_intrinsic_argument_list_length (expr);
 
25307
+  gfc_conv_intrinsic_function_args (se, expr, args, nargs);
 
25308
   gcc_assert (POINTER_TYPE_P (TREE_TYPE (args[1])));
 
25309
   pchartype = gfc_get_pchar_type (expr->value.function.actual->expr->ts.kind);
 
25310
   args[1] = fold_build1_loc (input_location, NOP_EXPR, pchartype, args[1]);
 
25311
Index: gcc/fortran/simplify.c
 
25312
===================================================================
 
25313
--- a/src/gcc/fortran/simplify.c        (.../tags/gcc_4_8_2_release)
 
25314
+++ b/src/gcc/fortran/simplify.c        (.../branches/gcc-4_8-branch)
 
25315
@@ -5528,7 +5528,7 @@
 
25316
       if (e == &gfc_bad_expr || range_check (e, "SHAPE") == &gfc_bad_expr)
 
25317
        {
 
25318
          gfc_free_expr (result);
 
25319
-         if (t)
 
25320
+         if (t == SUCCESS)
 
25321
            gfc_clear_shape (shape, source->rank);
 
25322
          return &gfc_bad_expr;
 
25323
        }
 
25324
@@ -5536,7 +5536,7 @@
 
25325
       gfc_constructor_append_expr (&result->value.constructor, e, NULL);
 
25326
     }
 
25327
 
 
25328
-  if (t)
 
25329
+  if (t == SUCCESS)
 
25330
     gfc_clear_shape (shape, source->rank);
 
25331
 
 
25332
   return result;
 
25333
Index: gcc/configure.ac
 
25334
===================================================================
 
25335
--- a/src/gcc/configure.ac      (.../tags/gcc_4_8_2_release)
 
25336
+++ b/src/gcc/configure.ac      (.../branches/gcc-4_8-branch)
 
25337
@@ -1516,13 +1516,11 @@
 
25338
        /* | [A-Za-z]:[\\/]* ) realsrcdir=${srcdir};;
 
25339
        *) realsrcdir=../${srcdir};;
 
25340
        esac
 
25341
-       saved_CFLAGS="${CFLAGS}"
 
25342
        CC="${CC_FOR_BUILD}" CFLAGS="${CFLAGS_FOR_BUILD}" \
 
25343
-       LDFLAGS="${LDFLAGS_FOR_BUILD}" \
 
25344
+       LDFLAGS="${LDFLAGS_FOR_BUILD}" GMPINC="" \
 
25345
        ${realsrcdir}/configure \
 
25346
                --enable-languages=${enable_languages-all} \
 
25347
                --target=$target_alias --host=$build_alias --build=$build_alias
 
25348
-       CFLAGS="${saved_CFLAGS}"
 
25349
 
 
25350
        # We just finished tests for the build machine, so rename
 
25351
        # the file auto-build.h in the gcc directory.
 
25352
@@ -1887,6 +1885,7 @@
 
25353
 if test x$build != x$host || test "x$coverage_flags" != x
 
25354
 then
 
25355
     BUILD_CFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CFLAGS_FOR_BUILD)'
 
25356
+    BUILD_CXXFLAGS='$(INTERNAL_CFLAGS) $(T_CFLAGS) $(CXXFLAGS_FOR_BUILD)'
 
25357
     BUILD_LDFLAGS='$(LDFLAGS_FOR_BUILD)'
 
25358
 fi
 
25359
 
 
25360
@@ -3611,6 +3610,19 @@
 
25361
        kasumi_fi_xor %f46, %f48, %f50, %f52],,
 
25362
       [AC_DEFINE(HAVE_AS_SPARC4, 1,
 
25363
                 [Define if your assembler supports SPARC4 instructions.])])
 
25364
+
 
25365
+    gcc_GAS_CHECK_FEATURE([LEON instructions],
 
25366
+      gcc_cv_as_sparc_leon,,
 
25367
+      [-Aleon],
 
25368
+      [.text
 
25369
+       .register %g2, #scratch
 
25370
+       .register %g3, #scratch
 
25371
+       .align 4
 
25372
+       smac %g2, %g3, %g1
 
25373
+       umac %g2, %g3, %g1
 
25374
+       cas [[%g2]], %g3, %g1],,
 
25375
+      [AC_DEFINE(HAVE_AS_LEON, 1,
 
25376
+                [Define if your assembler supports LEON instructions.])])
 
25377
     ;;
 
25378
 
 
25379
 changequote(,)dnl
 
25380
@@ -3749,8 +3761,13 @@
 
25381
 
 
25382
     # These two are used unconditionally by i386.[ch]; it is to be defined
 
25383
     # to 1 if the feature is present, 0 otherwise.
 
25384
+    as_ix86_gotoff_in_data_opt=
 
25385
+    if test x$gas = xyes; then
 
25386
+      as_ix86_gotoff_in_data_opt="--32"
 
25387
+    fi
 
25388
     gcc_GAS_CHECK_FEATURE([GOTOFF in data],
 
25389
-        gcc_cv_as_ix86_gotoff_in_data, [2,11,0],,
 
25390
+      gcc_cv_as_ix86_gotoff_in_data, [2,11,0],
 
25391
+      [$as_ix86_gotoff_in_data_opt],
 
25392
 [      .text
 
25393
 .L0:
 
25394
        nop
 
25395
@@ -3772,6 +3789,12 @@
 
25396
         [AC_DEFINE(HAVE_AS_IX86_REP_LOCK_PREFIX, 1,
 
25397
           [Define if the assembler supports 'rep <insn>, lock <insn>'.])])
 
25398
 
 
25399
+    gcc_GAS_CHECK_FEATURE([ud2 mnemonic],
 
25400
+       gcc_cv_as_ix86_ud2,,,
 
25401
+       [ud2],,
 
25402
+      [AC_DEFINE(HAVE_AS_IX86_UD2, 1,
 
25403
+       [Define if your assembler supports the 'ud2' mnemonic.])])
 
25404
+
 
25405
     gcc_GAS_CHECK_FEATURE([R_386_TLS_GD_PLT reloc],
 
25406
         gcc_cv_as_ix86_tlsgdplt,,,
 
25407
        [call    tls_gd@tlsgdplt],
 
25408
@@ -5193,15 +5216,15 @@
 
25409
   AC_MSG_CHECKING([for exported symbols])
 
25410
   if test "x$export_sym_check" != x; then
 
25411
     echo "int main() {return 0;} int foobar() {return 0;}" > conftest.c
 
25412
-    ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest > /dev/null 2>&1
 
25413
-    if $export_sym_check conftest | grep foobar > /dev/null; then
 
25414
+    ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest$ac_exeext > /dev/null 2>&1
 
25415
+    if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
 
25416
       : # No need to use a flag
 
25417
       AC_MSG_RESULT([yes])
 
25418
     else
 
25419
       AC_MSG_RESULT([yes])
 
25420
       AC_MSG_CHECKING([for -rdynamic])
 
25421
-      ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest > /dev/null 2>&1
 
25422
-      if $export_sym_check conftest | grep foobar > /dev/null; then
 
25423
+      ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest$ac_exeext > /dev/null 2>&1
 
25424
+      if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
 
25425
         plugin_rdynamic=yes
 
25426
         pluginlibs="-rdynamic"
 
25427
       else
 
25428
Index: gcc/print-rtl.c
 
25429
===================================================================
 
25430
--- a/src/gcc/print-rtl.c       (.../tags/gcc_4_8_2_release)
 
25431
+++ b/src/gcc/print-rtl.c       (.../branches/gcc-4_8-branch)
 
25432
@@ -582,6 +582,8 @@
 
25433
 
 
25434
       if (MEM_EXPR (in_rtx))
 
25435
        print_mem_expr (outfile, MEM_EXPR (in_rtx));
 
25436
+      else
 
25437
+       fputc (' ', outfile);
 
25438
 
 
25439
       if (MEM_OFFSET_KNOWN_P (in_rtx))
 
25440
        fprintf (outfile, "+" HOST_WIDE_INT_PRINT_DEC, MEM_OFFSET (in_rtx));
 
25441
Index: gcc/tree-vectorizer.h
 
25442
===================================================================
 
25443
--- a/src/gcc/tree-vectorizer.h (.../tags/gcc_4_8_2_release)
 
25444
+++ b/src/gcc/tree-vectorizer.h (.../branches/gcc-4_8-branch)
 
25445
@@ -542,6 +542,10 @@
 
25446
      is 1.  */
 
25447
   unsigned int gap;
 
25448
 
 
25449
+  /* The minimum negative dependence distance this stmt participates in
 
25450
+     or zero if none.  */
 
25451
+  unsigned int min_neg_dist;
 
25452
+
 
25453
   /* Not all stmts in the loop need to be vectorized. e.g, the increment
 
25454
      of the loop induction variable and computation of array indexes. relevant
 
25455
      indicates whether the stmt needs to be vectorized.  */
 
25456
@@ -593,6 +597,7 @@
 
25457
 #define STMT_VINFO_GROUP_READ_WRITE_DEPENDENCE(S)  (S)->read_write_dep
 
25458
 #define STMT_VINFO_GROUPED_ACCESS(S)      ((S)->first_element != NULL && (S)->data_ref_info)
 
25459
 #define STMT_VINFO_LOOP_PHI_EVOLUTION_PART(S) (S)->loop_phi_evolution_part
 
25460
+#define STMT_VINFO_MIN_NEG_DIST(S)     (S)->min_neg_dist
 
25461
 
 
25462
 #define GROUP_FIRST_ELEMENT(S)          (S)->first_element
 
25463
 #define GROUP_NEXT_ELEMENT(S)           (S)->next_element
 
25464
Index: gcc/sdbout.c
 
25465
===================================================================
 
25466
--- a/src/gcc/sdbout.c  (.../tags/gcc_4_8_2_release)
 
25467
+++ b/src/gcc/sdbout.c  (.../branches/gcc-4_8-branch)
 
25468
@@ -1226,7 +1226,10 @@
 
25469
 sdbout_parms (tree parms)
 
25470
 {
 
25471
   for (; parms; parms = TREE_CHAIN (parms))
 
25472
-    if (DECL_NAME (parms))
 
25473
+    if (DECL_NAME (parms)
 
25474
+       && TREE_TYPE (parms) != error_mark_node
 
25475
+       && DECL_RTL_SET_P (parms)
 
25476
+       && DECL_INCOMING_RTL (parms))
 
25477
       {
 
25478
        int current_sym_value = 0;
 
25479
        const char *name = IDENTIFIER_POINTER (DECL_NAME (parms));
 
25480
@@ -1358,7 +1361,10 @@
 
25481
 sdbout_reg_parms (tree parms)
 
25482
 {
 
25483
   for (; parms; parms = TREE_CHAIN (parms))
 
25484
-    if (DECL_NAME (parms))
 
25485
+    if (DECL_NAME (parms)
 
25486
+        && TREE_TYPE (parms) != error_mark_node
 
25487
+        && DECL_RTL_SET_P (parms)
 
25488
+        && DECL_INCOMING_RTL (parms))
 
25489
       {
 
25490
        const char *name = IDENTIFIER_POINTER (DECL_NAME (parms));
 
25491
 
 
25492
Index: gcc/ipa-split.c
 
25493
===================================================================
 
25494
--- a/src/gcc/ipa-split.c       (.../tags/gcc_4_8_2_release)
 
25495
+++ b/src/gcc/ipa-split.c       (.../branches/gcc-4_8-branch)
 
25496
@@ -136,7 +136,7 @@
 
25497
    variable, check it if it is present in bitmap passed via DATA.  */
 
25498
 
 
25499
 static bool
 
25500
-test_nonssa_use (gimple stmt ATTRIBUTE_UNUSED, tree t, void *data)
 
25501
+test_nonssa_use (gimple, tree t, tree, void *data)
 
25502
 {
 
25503
   t = get_base_address (t);
 
25504
 
 
25505
@@ -229,7 +229,7 @@
 
25506
            }
 
25507
          if (gimple_code (stmt) == GIMPLE_LABEL
 
25508
              && test_nonssa_use (stmt, gimple_label_label (stmt),
 
25509
-                                 non_ssa_vars))
 
25510
+                                 NULL_TREE, non_ssa_vars))
 
25511
          {
 
25512
            ok = false;
 
25513
            goto done;
 
25514
@@ -258,7 +258,7 @@
 
25515
              if (virtual_operand_p (gimple_phi_result (stmt)))
 
25516
                continue;
 
25517
              if (TREE_CODE (op) != SSA_NAME
 
25518
-                 && test_nonssa_use (stmt, op, non_ssa_vars))
 
25519
+                 && test_nonssa_use (stmt, op, op, non_ssa_vars))
 
25520
                {
 
25521
                  ok = false;
 
25522
                  goto done;
 
25523
@@ -670,7 +670,7 @@
 
25524
    Return true when access to T prevents splitting the function.  */
 
25525
 
 
25526
 static bool
 
25527
-mark_nonssa_use (gimple stmt ATTRIBUTE_UNUSED, tree t, void *data)
 
25528
+mark_nonssa_use (gimple, tree t, tree, void *data)
 
25529
 {
 
25530
   t = get_base_address (t);
 
25531
 
 
25532
@@ -830,7 +830,7 @@
 
25533
            if (TREE_CODE (op) == SSA_NAME)
 
25534
              bitmap_set_bit (used_ssa_names, SSA_NAME_VERSION (op));
 
25535
            else
 
25536
-             can_split &= !mark_nonssa_use (stmt, op, non_ssa_vars);
 
25537
+             can_split &= !mark_nonssa_use (stmt, op, op, non_ssa_vars);
 
25538
          }
 
25539
       }
 
25540
   return can_split;
 
25541
Index: gcc/alias.c
 
25542
===================================================================
 
25543
--- a/src/gcc/alias.c   (.../tags/gcc_4_8_2_release)
 
25544
+++ b/src/gcc/alias.c   (.../branches/gcc-4_8-branch)
 
25545
@@ -156,7 +156,9 @@
 
25546
 static alias_set_entry get_alias_set_entry (alias_set_type);
 
25547
 static bool nonoverlapping_component_refs_p (const_rtx, const_rtx);
 
25548
 static tree decl_for_component_ref (tree);
 
25549
-static int write_dependence_p (const_rtx, const_rtx, int);
 
25550
+static int write_dependence_p (const_rtx,
 
25551
+                                     const_rtx, enum machine_mode, rtx,
 
25552
+                                                            bool, bool, bool);
 
25553
 
 
25554
 static void memory_modified_1 (rtx, const_rtx, void *);
 
25555
 
 
25556
@@ -2558,15 +2560,24 @@
 
25557
 }
 
25558
 
 
25559
 /* Returns nonzero if a write to X might alias a previous read from
 
25560
-   (or, if WRITEP is nonzero, a write to) MEM.  */
 
25561
+   (or, if WRITEP is true, a write to) MEM.
 
25562
+   If X_CANONCALIZED is true, then X_ADDR is the canonicalized address of X,
 
25563
+   and X_MODE the mode for that access.
 
25564
+   If MEM_CANONICALIZED is true, MEM is canonicalized.  */
 
25565
 
 
25566
 static int
 
25567
-write_dependence_p (const_rtx mem, const_rtx x, int writep)
 
25568
+write_dependence_p (const_rtx mem,
 
25569
+                                  const_rtx x, enum machine_mode x_mode, rtx x_addr,
 
25570
+                                                bool mem_canonicalized, bool x_canonicalized, bool writep)
 
25571
 {
 
25572
-  rtx x_addr, mem_addr;
 
25573
+  rtx mem_addr;
 
25574
   rtx base;
 
25575
   int ret;
 
25576
 
 
25577
+  gcc_checking_assert (x_canonicalized
 
25578
+                             ? (x_addr != NULL_RTX && x_mode != VOIDmode)
 
25579
+                                      : (x_addr == NULL_RTX && x_mode == VOIDmode));
 
25580
+
 
25581
   if (MEM_VOLATILE_P (x) && MEM_VOLATILE_P (mem))
 
25582
     return 1;
 
25583
 
 
25584
@@ -2590,17 +2601,21 @@
 
25585
   if (MEM_ADDR_SPACE (mem) != MEM_ADDR_SPACE (x))
 
25586
     return 1;
 
25587
 
 
25588
-  x_addr = XEXP (x, 0);
 
25589
   mem_addr = XEXP (mem, 0);
 
25590
-  if (!((GET_CODE (x_addr) == VALUE
 
25591
-        && GET_CODE (mem_addr) != VALUE
 
25592
-        && reg_mentioned_p (x_addr, mem_addr))
 
25593
-       || (GET_CODE (x_addr) != VALUE
 
25594
-           && GET_CODE (mem_addr) == VALUE
 
25595
-           && reg_mentioned_p (mem_addr, x_addr))))
 
25596
+  if (!x_addr)
 
25597
     {
 
25598
-      x_addr = get_addr (x_addr);
 
25599
-      mem_addr = get_addr (mem_addr);
 
25600
+      x_addr = XEXP (x, 0);
 
25601
+      if (!((GET_CODE (x_addr) == VALUE
 
25602
+            && GET_CODE (mem_addr) != VALUE
 
25603
+            && reg_mentioned_p (x_addr, mem_addr))
 
25604
+           || (GET_CODE (x_addr) != VALUE
 
25605
+               && GET_CODE (mem_addr) == VALUE
 
25606
+               && reg_mentioned_p (mem_addr, x_addr))))
 
25607
+       {
 
25608
+         x_addr = get_addr (x_addr);
 
25609
+         if (!mem_canonicalized)
 
25610
+           mem_addr = get_addr (mem_addr);
 
25611
+       }
 
25612
     }
 
25613
 
 
25614
   if (! writep)
 
25615
@@ -2616,11 +2631,16 @@
 
25616
                          GET_MODE (mem)))
 
25617
     return 0;
 
25618
 
 
25619
-  x_addr = canon_rtx (x_addr);
 
25620
-  mem_addr = canon_rtx (mem_addr);
 
25621
+  if (!x_canonicalized)
 
25622
+    {
 
25623
+      x_addr = canon_rtx (x_addr);
 
25624
+      x_mode = GET_MODE (x);
 
25625
+    }
 
25626
+  if (!mem_canonicalized)
 
25627
+    mem_addr = canon_rtx (mem_addr);
 
25628
 
 
25629
   if ((ret = memrefs_conflict_p (SIZE_FOR_MODE (mem), mem_addr,
 
25630
-                                SIZE_FOR_MODE (x), x_addr, 0)) != -1)
 
25631
+                                GET_MODE_SIZE (x_mode), x_addr, 0)) != -1)
 
25632
     return ret;
 
25633
 
 
25634
   if (nonoverlapping_memrefs_p (x, mem, false))
 
25635
@@ -2634,15 +2654,33 @@
 
25636
 int
 
25637
 anti_dependence (const_rtx mem, const_rtx x)
 
25638
 {
 
25639
-  return write_dependence_p (mem, x, /*writep=*/0);
 
25640
+  return write_dependence_p (mem, x, VOIDmode, NULL_RTX,
 
25641
+                                 /*mem_canonicalized=*/false,
 
25642
+                                                    /*x_canonicalized*/false, /*writep=*/false);
 
25643
 }
 
25644
 
 
25645
+/* Likewise, but we already have a canonicalized MEM, and X_ADDR for X.
 
25646
+   Also, consider X in X_MODE (which might be from an enclosing
 
25647
+   STRICT_LOW_PART / ZERO_EXTRACT).
 
25648
+   If MEM_CANONICALIZED is true, MEM is canonicalized.  */
 
25649
+
 
25650
+int
 
25651
+canon_anti_dependence (const_rtx mem, bool mem_canonicalized,
 
25652
+                                        const_rtx x, enum machine_mode x_mode, rtx x_addr)
 
25653
+{
 
25654
+  return write_dependence_p (mem, x, x_mode, x_addr,
 
25655
+                                 mem_canonicalized, /*x_canonicalized=*/true,
 
25656
+                                                            /*writep=*/false);
 
25657
+}
 
25658
+
 
25659
 /* Output dependence: X is written after store in MEM takes place.  */
 
25660
 
 
25661
 int
 
25662
 output_dependence (const_rtx mem, const_rtx x)
 
25663
 {
 
25664
-  return write_dependence_p (mem, x, /*writep=*/1);
 
25665
+  return write_dependence_p (mem, x, VOIDmode, NULL_RTX,
 
25666
+                                 /*mem_canonicalized=*/false,
 
25667
+                                                    /*x_canonicalized*/false, /*writep=*/true);
 
25668
 }
 
25669
 
 
25670
 
 
25671
@@ -2871,17 +2909,14 @@
 
25672
       /* Wipe the reg_seen array clean.  */
 
25673
       bitmap_clear (reg_seen);
 
25674
 
 
25675
-      /* Mark all hard registers which may contain an address.
 
25676
-        The stack, frame and argument pointers may contain an address.
 
25677
-        An argument register which can hold a Pmode value may contain
 
25678
-        an address even if it is not in BASE_REGS.
 
25679
+      /* Initialize the alias information for this pass.  */
 
25680
+      for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
 
25681
+       if (static_reg_base_value[i])
 
25682
+         {
 
25683
+           new_reg_base_value[i] = static_reg_base_value[i];
 
25684
+           bitmap_set_bit (reg_seen, i);
 
25685
+         }
 
25686
 
 
25687
-        The address expression is VOIDmode for an argument and
 
25688
-        Pmode for other registers.  */
 
25689
-
 
25690
-      memcpy (new_reg_base_value, static_reg_base_value,
 
25691
-             FIRST_PSEUDO_REGISTER * sizeof (rtx));
 
25692
-
 
25693
       /* Walk the insns adding values to the new_reg_base_value array.  */
 
25694
       for (i = 0; i < rpo_cnt; i++)
 
25695
        {
 
25696
Index: gcc/tree-vect-loop.c
 
25697
===================================================================
 
25698
--- a/src/gcc/tree-vect-loop.c  (.../tags/gcc_4_8_2_release)
 
25699
+++ b/src/gcc/tree-vect-loop.c  (.../branches/gcc-4_8-branch)
 
25700
@@ -1537,7 +1537,7 @@
 
25701
 
 
25702
   if (!LOOP_VINFO_NITERS_KNOWN_P (loop_vinfo)
 
25703
       || LOOP_VINFO_INT_NITERS (loop_vinfo) % vectorization_factor != 0
 
25704
-      || LOOP_PEELING_FOR_ALIGNMENT (loop_vinfo))
 
25705
+      || LOOP_VINFO_PEELING_FOR_GAPS (loop_vinfo))
 
25706
     {
 
25707
       if (dump_enabled_p ())
 
25708
         dump_printf_loc (MSG_NOTE, vect_location, "epilog loop required.");
 
25709
@@ -2097,6 +2097,12 @@
 
25710
               || (!check_reduction && flow_loop_nested_p (vect_loop, loop)));
 
25711
 
 
25712
   name = PHI_RESULT (phi);
 
25713
+  /* ???  If there are no uses of the PHI result the inner loop reduction
 
25714
+     won't be detected as possibly double-reduction by vectorizable_reduction
 
25715
+     because that tries to walk the PHI arg from the preheader edge which
 
25716
+     can be constant.  See PR60382.  */
 
25717
+  if (has_zero_uses (name))
 
25718
+    return NULL;
 
25719
   nloop_uses = 0;
 
25720
   FOR_EACH_IMM_USE_FAST (use_p, imm_iter, name)
 
25721
     {
 
25722
@@ -3115,7 +3121,6 @@
 
25723
   stmt_vec_info stmt_vinfo = vinfo_for_stmt (iv_phi);
 
25724
   loop_vec_info loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_vinfo);
 
25725
   struct loop *loop = LOOP_VINFO_LOOP (loop_vinfo);
 
25726
-  tree scalar_type;
 
25727
   tree vectype;
 
25728
   int nunits;
 
25729
   edge pe = loop_preheader_edge (loop);
 
25730
@@ -3122,7 +3127,6 @@
 
25731
   struct loop *iv_loop;
 
25732
   basic_block new_bb;
 
25733
   tree new_vec, vec_init, vec_step, t;
 
25734
-  tree access_fn;
 
25735
   tree new_var;
 
25736
   tree new_name;
 
25737
   gimple init_stmt, induction_phi, new_stmt;
 
25738
@@ -3130,7 +3134,6 @@
 
25739
   tree init_expr, step_expr;
 
25740
   int vf = LOOP_VINFO_VECT_FACTOR (loop_vinfo);
 
25741
   int i;
 
25742
-  bool ok;
 
25743
   int ncopies;
 
25744
   tree expr;
 
25745
   stmt_vec_info phi_info = vinfo_for_stmt (iv_phi);
 
25746
@@ -3159,16 +3162,14 @@
 
25747
   latch_e = loop_latch_edge (iv_loop);
 
25748
   loop_arg = PHI_ARG_DEF_FROM_EDGE (iv_phi, latch_e);
 
25749
 
 
25750
-  access_fn = analyze_scalar_evolution (iv_loop, PHI_RESULT (iv_phi));
 
25751
-  gcc_assert (access_fn);
 
25752
-  STRIP_NOPS (access_fn);
 
25753
-  ok = vect_is_simple_iv_evolution (iv_loop->num, access_fn,
 
25754
-                                    &init_expr, &step_expr);
 
25755
-  gcc_assert (ok);
 
25756
+  step_expr = STMT_VINFO_LOOP_PHI_EVOLUTION_PART (phi_info);
 
25757
+  gcc_assert (step_expr != NULL_TREE);
 
25758
+
 
25759
   pe = loop_preheader_edge (iv_loop);
 
25760
+  init_expr = PHI_ARG_DEF_FROM_EDGE (iv_phi,
 
25761
+                                    loop_preheader_edge (iv_loop));
 
25762
 
 
25763
-  scalar_type = TREE_TYPE (init_expr);
 
25764
-  vectype = get_vectype_for_scalar_type (scalar_type);
 
25765
+  vectype = get_vectype_for_scalar_type (TREE_TYPE (init_expr));
 
25766
   resvectype = get_vectype_for_scalar_type (TREE_TYPE (PHI_RESULT (iv_phi)));
 
25767
   gcc_assert (vectype);
 
25768
   nunits = TYPE_VECTOR_SUBPARTS (vectype);
 
25769
@@ -3177,6 +3178,16 @@
 
25770
   gcc_assert (phi_info);
 
25771
   gcc_assert (ncopies >= 1);
 
25772
 
 
25773
+  /* Convert the step to the desired type.  */
 
25774
+  step_expr = force_gimple_operand (fold_convert (TREE_TYPE (vectype),
 
25775
+                                                 step_expr),
 
25776
+                                   &stmts, true, NULL_TREE);
 
25777
+  if (stmts)
 
25778
+    {
 
25779
+      new_bb = gsi_insert_seq_on_edge_immediate (pe, stmts);
 
25780
+      gcc_assert (!new_bb);
 
25781
+    }
 
25782
+
 
25783
   /* Find the first insertion point in the BB.  */
 
25784
   si = gsi_after_labels (bb);
 
25785
 
 
25786
@@ -3186,9 +3197,7 @@
 
25787
       /* iv_loop is nested in the loop to be vectorized.  init_expr had already
 
25788
         been created during vectorization of previous stmts.  We obtain it
 
25789
         from the STMT_VINFO_VEC_STMT of the defining stmt.  */
 
25790
-      tree iv_def = PHI_ARG_DEF_FROM_EDGE (iv_phi,
 
25791
-                                           loop_preheader_edge (iv_loop));
 
25792
-      vec_init = vect_get_vec_def_for_operand (iv_def, iv_phi, NULL);
 
25793
+      vec_init = vect_get_vec_def_for_operand (init_expr, iv_phi, NULL);
 
25794
       /* If the initial value is not of proper type, convert it.  */
 
25795
       if (!useless_type_conversion_p (vectype, TREE_TYPE (vec_init)))
 
25796
        {
 
25797
@@ -3211,8 +3220,11 @@
 
25798
 
 
25799
       /* iv_loop is the loop to be vectorized. Create:
 
25800
         vec_init = [X, X+S, X+2*S, X+3*S] (S = step_expr, X = init_expr)  */
 
25801
-      new_var = vect_get_new_vect_var (scalar_type, vect_scalar_var, "var_");
 
25802
-      new_name = force_gimple_operand (init_expr, &stmts, false, new_var);
 
25803
+      new_var = vect_get_new_vect_var (TREE_TYPE (vectype),
 
25804
+                                      vect_scalar_var, "var_");
 
25805
+      new_name = force_gimple_operand (fold_convert (TREE_TYPE (vectype),
 
25806
+                                                    init_expr),
 
25807
+                                      &stmts, false, new_var);
 
25808
       if (stmts)
 
25809
        {
 
25810
          new_bb = gsi_insert_seq_on_edge_immediate (pe, stmts);
 
25811
@@ -3224,9 +3236,7 @@
 
25812
       for (i = 1; i < nunits; i++)
 
25813
        {
 
25814
          /* Create: new_name_i = new_name + step_expr  */
 
25815
-         enum tree_code code = POINTER_TYPE_P (scalar_type)
 
25816
-                               ? POINTER_PLUS_EXPR : PLUS_EXPR;
 
25817
-         init_stmt = gimple_build_assign_with_ops (code, new_var,
 
25818
+         init_stmt = gimple_build_assign_with_ops (PLUS_EXPR, new_var,
 
25819
                                                    new_name, step_expr);
 
25820
          new_name = make_ssa_name (new_var, init_stmt);
 
25821
          gimple_assign_set_lhs (init_stmt, new_name);
 
25822
@@ -5564,8 +5574,9 @@
 
25823
              && !STMT_VINFO_LIVE_P (stmt_info))
 
25824
            continue;
 
25825
 
 
25826
-         if ((TYPE_VECTOR_SUBPARTS (STMT_VINFO_VECTYPE (stmt_info))
 
25827
-               != (unsigned HOST_WIDE_INT) vectorization_factor)
 
25828
+         if (STMT_VINFO_VECTYPE (stmt_info)
 
25829
+             && (TYPE_VECTOR_SUBPARTS (STMT_VINFO_VECTYPE (stmt_info))
 
25830
+                 != (unsigned HOST_WIDE_INT) vectorization_factor)
 
25831
              && dump_enabled_p ())
 
25832
            dump_printf_loc (MSG_NOTE, vect_location, "multiple-types.");
 
25833
 
 
25834
Index: gcc/lra-coalesce.c
 
25835
===================================================================
 
25836
--- a/src/gcc/lra-coalesce.c    (.../tags/gcc_4_8_2_release)
 
25837
+++ b/src/gcc/lra-coalesce.c    (.../branches/gcc-4_8-branch)
 
25838
@@ -221,9 +221,12 @@
 
25839
   basic_block bb;
 
25840
   rtx mv, set, insn, next, *sorted_moves;
 
25841
   int i, mv_num, sregno, dregno;
 
25842
+  unsigned int regno;
 
25843
   int coalesced_moves;
 
25844
   int max_regno = max_reg_num ();
 
25845
   bitmap_head involved_insns_bitmap;
 
25846
+  bitmap_head result_pseudo_vals_bitmap;
 
25847
+  bitmap_iterator bi;
 
25848
 
 
25849
   timevar_push (TV_LRA_COALESCE);
 
25850
 
 
25851
@@ -318,6 +321,34 @@
 
25852
              }
 
25853
          }
 
25854
     }
 
25855
+  /* If we have situation after inheritance pass:
 
25856
+
 
25857
+     r1 <- ...  insn originally setting p1
 
25858
+     i1 <- r1   setting inheritance i1 from reload r1
 
25859
+       ...
 
25860
+     ... <- ... p2 ... dead p2
 
25861
+     ..
 
25862
+     p1 <- i1
 
25863
+     r2 <- i1
 
25864
+     ...<- ... r2 ...
 
25865
+
 
25866
+     And we are coalescing p1 and p2 using p1.  In this case i1 and p1
 
25867
+     should have different values, otherwise they can get the same
 
25868
+     hard reg and this is wrong for insn using p2 before coalescing.
 
25869
+     So invalidate such inheritance pseudo values.  */
 
25870
+  bitmap_initialize (&result_pseudo_vals_bitmap, &reg_obstack);
 
25871
+  EXECUTE_IF_SET_IN_BITMAP (&coalesced_pseudos_bitmap, 0, regno, bi)
 
25872
+    bitmap_set_bit (&result_pseudo_vals_bitmap,
 
25873
+                   lra_reg_info[first_coalesced_pseudo[regno]].val);
 
25874
+  EXECUTE_IF_SET_IN_BITMAP (&lra_inheritance_pseudos, 0, regno, bi)
 
25875
+    if (bitmap_bit_p (&result_pseudo_vals_bitmap, lra_reg_info[regno].val))
 
25876
+      {
 
25877
+       lra_set_regno_unique_value (regno);
 
25878
+       if (lra_dump_file != NULL)
 
25879
+         fprintf (lra_dump_file,
 
25880
+                  "     Make unique value for inheritance r%d\n", regno);
 
25881
+      }
 
25882
+  bitmap_clear (&result_pseudo_vals_bitmap);
 
25883
   bitmap_clear (&used_pseudos_bitmap);
 
25884
   bitmap_clear (&involved_insns_bitmap);
 
25885
   bitmap_clear (&coalesced_pseudos_bitmap);
 
25886
Index: gcc/tree-vect-data-refs.c
 
25887
===================================================================
 
25888
--- a/src/gcc/tree-vect-data-refs.c     (.../tags/gcc_4_8_2_release)
 
25889
+++ b/src/gcc/tree-vect-data-refs.c     (.../branches/gcc-4_8-branch)
 
25890
@@ -739,6 +739,13 @@
 
25891
          if (dump_enabled_p ())
 
25892
            dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
 
25893
                              "dependence distance negative.");
 
25894
+         /* Record a negative dependence distance to later limit the
 
25895
+            amount of stmt copying / unrolling we can perform.
 
25896
+            Only need to handle read-after-write dependence.  */
 
25897
+         if (DR_IS_READ (drb)
 
25898
+             && (STMT_VINFO_MIN_NEG_DIST (stmtinfo_b) == 0
 
25899
+                 || STMT_VINFO_MIN_NEG_DIST (stmtinfo_b) > (unsigned)dist))
 
25900
+           STMT_VINFO_MIN_NEG_DIST (stmtinfo_b) = dist;
 
25901
          continue;
 
25902
        }
 
25903
 
 
25904
Index: gcc/gimplify.c
 
25905
===================================================================
 
25906
--- a/src/gcc/gimplify.c        (.../tags/gcc_4_8_2_release)
 
25907
+++ b/src/gcc/gimplify.c        (.../branches/gcc-4_8-branch)
 
25908
@@ -2060,6 +2060,9 @@
 
25909
 /* Nonlocal VLAs seen in the current function.  */
 
25910
 static struct pointer_set_t *nonlocal_vlas;
 
25911
 
 
25912
+/* The VAR_DECLs created for nonlocal VLAs for debug info purposes.  */
 
25913
+static tree nonlocal_vla_vars;
 
25914
+
 
25915
 /* Gimplify a VAR_DECL or PARM_DECL.  Return GS_OK if we expanded a
 
25916
    DECL_VALUE_EXPR, and it's worth re-examining things.  */
 
25917
 
 
25918
@@ -2106,14 +2109,13 @@
 
25919
            ctx = ctx->outer_context;
 
25920
          if (!ctx && !pointer_set_insert (nonlocal_vlas, decl))
 
25921
            {
 
25922
-             tree copy = copy_node (decl), block;
 
25923
+             tree copy = copy_node (decl);
 
25924
 
 
25925
              lang_hooks.dup_lang_specific_decl (copy);
 
25926
              SET_DECL_RTL (copy, 0);
 
25927
              TREE_USED (copy) = 1;
 
25928
-             block = DECL_INITIAL (current_function_decl);
 
25929
-             DECL_CHAIN (copy) = BLOCK_VARS (block);
 
25930
-             BLOCK_VARS (block) = copy;
 
25931
+             DECL_CHAIN (copy) = nonlocal_vla_vars;
 
25932
+             nonlocal_vla_vars = copy;
 
25933
              SET_DECL_VALUE_EXPR (copy, unshare_expr (value_expr));
 
25934
              DECL_HAS_VALUE_EXPR_P (copy) = 1;
 
25935
            }
 
25936
@@ -4369,7 +4371,7 @@
 
25937
           unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
 
25938
           tree index = bitsize_int (indexi);
 
25939
           if (offset / part_widthi
 
25940
-              <= TYPE_VECTOR_SUBPARTS (TREE_TYPE (addrtype)))
 
25941
+              < TYPE_VECTOR_SUBPARTS (TREE_TYPE (addrtype)))
 
25942
             return fold_build3 (BIT_FIELD_REF, type, TREE_OPERAND (addr, 0),
 
25943
                                 part_width, index);
 
25944
        }
 
25945
@@ -6131,7 +6133,7 @@
 
25946
    region's REDUCTION clause.  */
 
25947
 
 
25948
 static bool
 
25949
-omp_check_private (struct gimplify_omp_ctx *ctx, tree decl)
 
25950
+omp_check_private (struct gimplify_omp_ctx *ctx, tree decl, bool copyprivate)
 
25951
 {
 
25952
   splay_tree_node n;
 
25953
 
 
25954
@@ -6140,8 +6142,11 @@
 
25955
       ctx = ctx->outer_context;
 
25956
       if (ctx == NULL)
 
25957
        return !(is_global_var (decl)
 
25958
-                /* References might be private, but might be shared too.  */
 
25959
-                || lang_hooks.decls.omp_privatize_by_reference (decl));
 
25960
+                /* References might be private, but might be shared too,
 
25961
+                   when checking for copyprivate, assume they might be
 
25962
+                   private, otherwise assume they might be shared.  */
 
25963
+                || (!copyprivate
 
25964
+                    && lang_hooks.decls.omp_privatize_by_reference (decl)));
 
25965
 
 
25966
       n = splay_tree_lookup (ctx->variables, (splay_tree_key) decl);
 
25967
       if (n != NULL)
 
25968
@@ -6267,12 +6272,36 @@
 
25969
              remove = true;
 
25970
              break;
 
25971
            }
 
25972
+         if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_COPYPRIVATE
 
25973
+             && !remove
 
25974
+             && !omp_check_private (ctx, decl, true))
 
25975
+           {
 
25976
+             remove = true;
 
25977
+             if (is_global_var (decl))
 
25978
+               {
 
25979
+                 if (DECL_THREAD_LOCAL_P (decl))
 
25980
+                   remove = false;
 
25981
+                 else if (DECL_HAS_VALUE_EXPR_P (decl))
 
25982
+                   {
 
25983
+                     tree value = get_base_address (DECL_VALUE_EXPR (decl));
 
25984
+
 
25985
+                     if (value
 
25986
+                         && DECL_P (value)
 
25987
+                         && DECL_THREAD_LOCAL_P (value))
 
25988
+                       remove = false;
 
25989
+                   }
 
25990
+               }
 
25991
+             if (remove)
 
25992
+               error_at (OMP_CLAUSE_LOCATION (c),
 
25993
+                         "copyprivate variable %qE is not threadprivate"
 
25994
+                         " or private in outer context", DECL_NAME (decl));
 
25995
+           }
 
25996
        do_notice:
 
25997
          if (outer_ctx)
 
25998
            omp_notice_variable (outer_ctx, decl, true);
 
25999
          if (check_non_private
 
26000
              && region_type == ORT_WORKSHARE
 
26001
-             && omp_check_private (ctx, decl))
 
26002
+             && omp_check_private (ctx, decl, false))
 
26003
            {
 
26004
              error ("%s variable %qE is private in outer context",
 
26005
                     check_non_private, DECL_NAME (decl));
 
26006
@@ -8261,6 +8290,21 @@
 
26007
 
 
26008
   if (nonlocal_vlas)
 
26009
     {
 
26010
+      if (nonlocal_vla_vars)
 
26011
+       {
 
26012
+         /* tree-nested.c may later on call declare_vars (..., true);
 
26013
+            which relies on BLOCK_VARS chain to be the tail of the
 
26014
+            gimple_bind_vars chain.  Ensure we don't violate that
 
26015
+            assumption.  */
 
26016
+         if (gimple_bind_block (outer_bind)
 
26017
+             == DECL_INITIAL (current_function_decl))
 
26018
+           declare_vars (nonlocal_vla_vars, outer_bind, true);
 
26019
+         else
 
26020
+           BLOCK_VARS (DECL_INITIAL (current_function_decl))
 
26021
+             = chainon (BLOCK_VARS (DECL_INITIAL (current_function_decl)),
 
26022
+                        nonlocal_vla_vars);
 
26023
+         nonlocal_vla_vars = NULL_TREE;
 
26024
+       }
 
26025
       pointer_set_destroy (nonlocal_vlas);
 
26026
       nonlocal_vlas = NULL;
 
26027
     }
 
26028
Index: gcc/tree-dfa.c
 
26029
===================================================================
 
26030
--- a/src/gcc/tree-dfa.c        (.../tags/gcc_4_8_2_release)
 
26031
+++ b/src/gcc/tree-dfa.c        (.../branches/gcc-4_8-branch)
 
26032
@@ -386,7 +386,6 @@
 
26033
   double_int bit_offset = double_int_zero;
 
26034
   HOST_WIDE_INT hbit_offset;
 
26035
   bool seen_variable_array_ref = false;
 
26036
-  tree base_type;
 
26037
 
 
26038
   /* First get the final access size from just the outermost expression.  */
 
26039
   if (TREE_CODE (exp) == COMPONENT_REF)
 
26040
@@ -417,8 +416,6 @@
 
26041
      and find the ultimate containing object.  */
 
26042
   while (1)
 
26043
     {
 
26044
-      base_type = TREE_TYPE (exp);
 
26045
-
 
26046
       switch (TREE_CODE (exp))
 
26047
        {
 
26048
        case BIT_FIELD_REF:
 
26049
@@ -543,7 +540,38 @@
 
26050
        case VIEW_CONVERT_EXPR:
 
26051
          break;
 
26052
 
 
26053
+       case TARGET_MEM_REF:
 
26054
+         /* Via the variable index or index2 we can reach the
 
26055
+            whole object.  Still hand back the decl here.  */
 
26056
+         if (TREE_CODE (TMR_BASE (exp)) == ADDR_EXPR
 
26057
+             && (TMR_INDEX (exp) || TMR_INDEX2 (exp)))
 
26058
+           {
 
26059
+             exp = TREE_OPERAND (TMR_BASE (exp), 0);
 
26060
+             bit_offset = double_int_zero;
 
26061
+             maxsize = -1;
 
26062
+             goto done;
 
26063
+           }
 
26064
+         /* Fallthru.  */
 
26065
        case MEM_REF:
 
26066
+         /* We need to deal with variable arrays ending structures such as
 
26067
+            struct { int length; int a[1]; } x;           x.a[d]
 
26068
+            struct { struct { int a; int b; } a[1]; } x;  x.a[d].a
 
26069
+            struct { struct { int a[1]; } a[1]; } x;      x.a[0][d], x.a[d][0]
 
26070
+            struct { int len; union { int a[1]; struct X x; } u; } x; x.u.a[d]
 
26071
+            where we do not know maxsize for variable index accesses to
 
26072
+            the array.  The simplest way to conservatively deal with this
 
26073
+            is to punt in the case that offset + maxsize reaches the
 
26074
+            base type boundary.  This needs to include possible trailing
 
26075
+            padding that is there for alignment purposes.  */
 
26076
+         if (seen_variable_array_ref
 
26077
+             && maxsize != -1
 
26078
+             && (!bit_offset.fits_shwi ()
 
26079
+                 || !host_integerp (TYPE_SIZE (TREE_TYPE (exp)), 1)
 
26080
+                 || (bit_offset.to_shwi () + maxsize
 
26081
+                     == (HOST_WIDE_INT) TREE_INT_CST_LOW
 
26082
+                           (TYPE_SIZE (TREE_TYPE (exp))))))
 
26083
+           maxsize = -1;
 
26084
+
 
26085
          /* Hand back the decl for MEM[&decl, off].  */
 
26086
          if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR)
 
26087
            {
 
26088
@@ -565,37 +593,6 @@
 
26089
            }
 
26090
          goto done;
 
26091
 
 
26092
-       case TARGET_MEM_REF:
 
26093
-         /* Hand back the decl for MEM[&decl, off].  */
 
26094
-         if (TREE_CODE (TMR_BASE (exp)) == ADDR_EXPR)
 
26095
-           {
 
26096
-             /* Via the variable index or index2 we can reach the
 
26097
-                whole object.  */
 
26098
-             if (TMR_INDEX (exp) || TMR_INDEX2 (exp))
 
26099
-               {
 
26100
-                 exp = TREE_OPERAND (TMR_BASE (exp), 0);
 
26101
-                 bit_offset = double_int_zero;
 
26102
-                 maxsize = -1;
 
26103
-                 goto done;
 
26104
-               }
 
26105
-             if (integer_zerop (TMR_OFFSET (exp)))
 
26106
-               exp = TREE_OPERAND (TMR_BASE (exp), 0);
 
26107
-             else
 
26108
-               {
 
26109
-                 double_int off = mem_ref_offset (exp);
 
26110
-                 off = off.alshift (BITS_PER_UNIT == 8
 
26111
-                                    ? 3 : exact_log2 (BITS_PER_UNIT),
 
26112
-                                    HOST_BITS_PER_DOUBLE_INT);
 
26113
-                 off += bit_offset;
 
26114
-                 if (off.fits_shwi ())
 
26115
-                   {
 
26116
-                     bit_offset = off;
 
26117
-                     exp = TREE_OPERAND (TMR_BASE (exp), 0);
 
26118
-                   }
 
26119
-               }
 
26120
-           }
 
26121
-         goto done;
 
26122
-
 
26123
        default:
 
26124
          goto done;
 
26125
        }
 
26126
@@ -602,8 +599,18 @@
 
26127
 
 
26128
       exp = TREE_OPERAND (exp, 0);
 
26129
     }
 
26130
+
 
26131
+  /* We need to deal with variable arrays ending structures.  */
 
26132
+  if (seen_variable_array_ref
 
26133
+      && maxsize != -1
 
26134
+      && (!bit_offset.fits_shwi ()
 
26135
+         || !host_integerp (TYPE_SIZE (TREE_TYPE (exp)), 1)
 
26136
+         || (bit_offset.to_shwi () + maxsize
 
26137
+             == (HOST_WIDE_INT)
 
26138
+                  TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (exp))))))
 
26139
+    maxsize = -1;
 
26140
+
 
26141
  done:
 
26142
-
 
26143
   if (!bit_offset.fits_shwi ())
 
26144
     {
 
26145
       *poffset = 0;
 
26146
@@ -615,24 +622,6 @@
 
26147
 
 
26148
   hbit_offset = bit_offset.to_shwi ();
 
26149
 
 
26150
-  /* We need to deal with variable arrays ending structures such as
 
26151
-       struct { int length; int a[1]; } x;           x.a[d]
 
26152
-       struct { struct { int a; int b; } a[1]; } x;  x.a[d].a
 
26153
-       struct { struct { int a[1]; } a[1]; } x;      x.a[0][d], x.a[d][0]
 
26154
-       struct { int len; union { int a[1]; struct X x; } u; } x; x.u.a[d]
 
26155
-     where we do not know maxsize for variable index accesses to
 
26156
-     the array.  The simplest way to conservatively deal with this
 
26157
-     is to punt in the case that offset + maxsize reaches the
 
26158
-     base type boundary.  This needs to include possible trailing padding
 
26159
-     that is there for alignment purposes.  */
 
26160
-
 
26161
-  if (seen_variable_array_ref
 
26162
-      && maxsize != -1
 
26163
-      && (!host_integerp (TYPE_SIZE (base_type), 1)
 
26164
-         || (hbit_offset + maxsize
 
26165
-             == (signed) TREE_INT_CST_LOW (TYPE_SIZE (base_type)))))
 
26166
-    maxsize = -1;
 
26167
-
 
26168
   /* In case of a decl or constant base object we can do better.  */
 
26169
 
 
26170
   if (DECL_P (exp))
 
26171
Index: gcc/gimple-fold.c
 
26172
===================================================================
 
26173
--- a/src/gcc/gimple-fold.c     (.../tags/gcc_4_8_2_release)
 
26174
+++ b/src/gcc/gimple-fold.c     (.../branches/gcc-4_8-branch)
 
26175
@@ -178,7 +178,7 @@
 
26176
          /* Make sure we create a cgraph node for functions we'll reference.
 
26177
             They can be non-existent if the reference comes from an entry
 
26178
             of an external vtable for example.  */
 
26179
-         cgraph_get_create_node (base);
 
26180
+         cgraph_get_create_real_symbol_node (base);
 
26181
        }
 
26182
       /* Fixup types in global initializers.  */
 
26183
       if (TREE_TYPE (TREE_TYPE (cval)) != TREE_TYPE (TREE_OPERAND (cval, 0)))
 
26184
@@ -866,6 +866,7 @@
 
26185
       break;
 
26186
     case BUILT_IN_STRCPY:
 
26187
     case BUILT_IN_STRNCPY:
 
26188
+    case BUILT_IN_STRCAT:
 
26189
       arg_idx = 1;
 
26190
       type = 0;
 
26191
       break;
 
26192
@@ -941,6 +942,13 @@
 
26193
                                       val[1]);
 
26194
       break;
 
26195
 
 
26196
+    case BUILT_IN_STRCAT:
 
26197
+      if (val[1] && is_gimple_val (val[1]) && nargs == 2)
 
26198
+       result = fold_builtin_strcat (loc, gimple_call_arg (stmt, 0),
 
26199
+                                     gimple_call_arg (stmt, 1),
 
26200
+                                     val[1]);
 
26201
+      break;
 
26202
+
 
26203
     case BUILT_IN_FPUTS:
 
26204
       if (nargs == 2)
 
26205
        result = fold_builtin_fputs (loc, gimple_call_arg (stmt, 0),
 
26206
Index: gcc/cfgexpand.c
 
26207
===================================================================
 
26208
--- a/src/gcc/cfgexpand.c       (.../tags/gcc_4_8_2_release)
 
26209
+++ b/src/gcc/cfgexpand.c       (.../branches/gcc-4_8-branch)
 
26210
@@ -331,7 +331,7 @@
 
26211
    enter its partition number into bitmap DATA.  */
 
26212
 
 
26213
 static bool
 
26214
-visit_op (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
 
26215
+visit_op (gimple, tree op, tree, void *data)
 
26216
 {
 
26217
   bitmap active = (bitmap)data;
 
26218
   op = get_base_address (op);
 
26219
@@ -351,7 +351,7 @@
 
26220
    from bitmap DATA.  */
 
26221
 
 
26222
 static bool
 
26223
-visit_conflict (gimple stmt ATTRIBUTE_UNUSED, tree op, void *data)
 
26224
+visit_conflict (gimple, tree op, tree, void *data)
 
26225
 {
 
26226
   bitmap active = (bitmap)data;
 
26227
   op = get_base_address (op);
 
26228
@@ -385,7 +385,7 @@
 
26229
   edge e;
 
26230
   edge_iterator ei;
 
26231
   gimple_stmt_iterator gsi;
 
26232
-  bool (*visit)(gimple, tree, void *);
 
26233
+  walk_stmt_load_store_addr_fn visit;
 
26234
 
 
26235
   bitmap_clear (work);
 
26236
   FOR_EACH_EDGE (e, ei, bb->preds)
 
26237
@@ -4707,14 +4707,18 @@
 
26238
          if (e->insns.r)
 
26239
            {
 
26240
              rebuild_jump_labels_chain (e->insns.r);
 
26241
-             /* Avoid putting insns before parm_birth_insn.  */
 
26242
+             /* Put insns after parm birth, but before
 
26243
+                NOTE_INSNS_FUNCTION_BEG.  */
 
26244
              if (e->src == ENTRY_BLOCK_PTR
 
26245
-                 && single_succ_p (ENTRY_BLOCK_PTR)
 
26246
-                 && parm_birth_insn)
 
26247
+                 && single_succ_p (ENTRY_BLOCK_PTR))
 
26248
                {
 
26249
                  rtx insns = e->insns.r;
 
26250
                  e->insns.r = NULL_RTX;
 
26251
-                 emit_insn_after_noloc (insns, parm_birth_insn, e->dest);
 
26252
+                 if (NOTE_P (parm_birth_insn)
 
26253
+                     && NOTE_KIND (parm_birth_insn) == NOTE_INSN_FUNCTION_BEG)
 
26254
+                   emit_insn_before_noloc (insns, parm_birth_insn, e->dest);
 
26255
+                 else
 
26256
+                   emit_insn_after_noloc (insns, parm_birth_insn, e->dest);
 
26257
                }
 
26258
              else
 
26259
                commit_one_edge_insertion (e);
 
26260
Index: gcc/cselib.c
 
26261
===================================================================
 
26262
--- a/src/gcc/cselib.c  (.../tags/gcc_4_8_2_release)
 
26263
+++ b/src/gcc/cselib.c  (.../branches/gcc-4_8-branch)
 
26264
@@ -2260,8 +2260,8 @@
 
26265
              continue;
 
26266
            }
 
26267
          if (num_mems < PARAM_VALUE (PARAM_MAX_CSELIB_MEMORY_LOCATIONS)
 
26268
-             && ! canon_true_dependence (mem_rtx, GET_MODE (mem_rtx),
 
26269
-                                         mem_addr, x, NULL_RTX))
 
26270
+             && ! canon_anti_dependence (x, false, mem_rtx,
 
26271
+                                         GET_MODE (mem_rtx), mem_addr))
 
26272
            {
 
26273
              has_mem = true;
 
26274
              num_mems++;
 
26275
Index: gcc/tree-ssa-pre.c
 
26276
===================================================================
 
26277
--- a/src/gcc/tree-ssa-pre.c    (.../tags/gcc_4_8_2_release)
 
26278
+++ b/src/gcc/tree-ssa-pre.c    (.../branches/gcc-4_8-branch)
 
26279
@@ -3664,6 +3664,12 @@
 
26280
       if (dump_file && dump_flags & TDF_DETAILS)
 
26281
        fprintf (dump_file, "Starting insert iteration %d\n", num_iterations);
 
26282
       new_stuff = insert_aux (ENTRY_BLOCK_PTR);
 
26283
+
 
26284
+      /* Clear the NEW sets before the next iteration.  We have already
 
26285
+         fully propagated its contents.  */
 
26286
+      if (new_stuff)
 
26287
+       FOR_ALL_BB (bb)
 
26288
+         bitmap_set_free (NEW_SETS (bb));
 
26289
     }
 
26290
   statistics_histogram_event (cfun, "insert iterations", num_iterations);
 
26291
 }
 
26292
Index: gcc/cfgcleanup.c
 
26293
===================================================================
 
26294
--- a/src/gcc/cfgcleanup.c      (.../tags/gcc_4_8_2_release)
 
26295
+++ b/src/gcc/cfgcleanup.c      (.../branches/gcc-4_8-branch)
 
26296
@@ -1293,7 +1293,6 @@
 
26297
 {
 
26298
   rtx i1, i2, last1, last2, afterlast1, afterlast2;
 
26299
   int ninsns = 0;
 
26300
-  rtx p1;
 
26301
   enum replace_direction dir, last_dir, afterlast_dir;
 
26302
   bool follow_fallthru, did_fallthru;
 
26303
 
 
26304
@@ -1321,8 +1320,9 @@
 
26305
       || (returnjump_p (i2) && !side_effects_p (PATTERN (i2))))
 
26306
     {
 
26307
       last2 = i2;
 
26308
-      /* Count everything except for unconditional jump as insn.  */
 
26309
-      if (!simplejump_p (i2) && !returnjump_p (i2) && last1)
 
26310
+      /* Count everything except for unconditional jump as insn.
 
26311
+        Don't count any jumps if dir_p is NULL.  */
 
26312
+      if (!simplejump_p (i2) && !returnjump_p (i2) && last1 && dir_p)
 
26313
        ninsns++;
 
26314
       i2 = PREV_INSN (i2);
 
26315
     }
 
26316
@@ -1373,8 +1373,8 @@
 
26317
          last1 = i1, last2 = i2;
 
26318
          afterlast_dir = last_dir;
 
26319
          last_dir = dir;
 
26320
-         p1 = PATTERN (i1);
 
26321
-         if (!(GET_CODE (p1) == USE || GET_CODE (p1) == CLOBBER))
 
26322
+         if (GET_CODE (PATTERN (i1)) != USE
 
26323
+             && GET_CODE (PATTERN (i1)) != CLOBBER)
 
26324
            ninsns++;
 
26325
        }
 
26326
 
 
26327
@@ -1420,7 +1420,8 @@
 
26328
 /* Like flow_find_cross_jump, except start looking for a matching sequence from
 
26329
    the head of the two blocks.  Do not include jumps at the end.
 
26330
    If STOP_AFTER is nonzero, stop after finding that many matching
 
26331
-   instructions.  */
 
26332
+   instructions.  If STOP_AFTER is zero, count all INSN_P insns, if it is
 
26333
+   non-zero, only count active insns.  */
 
26334
 
 
26335
 int
 
26336
 flow_find_head_matching_sequence (basic_block bb1, basic_block bb2, rtx *f1,
 
26337
@@ -1492,7 +1493,10 @@
 
26338
 
 
26339
          beforelast1 = last1, beforelast2 = last2;
 
26340
          last1 = i1, last2 = i2;
 
26341
-         ninsns++;
 
26342
+         if (!stop_after
 
26343
+             || (GET_CODE (PATTERN (i1)) != USE
 
26344
+                 && GET_CODE (PATTERN (i1)) != CLOBBER))
 
26345
+           ninsns++;
 
26346
        }
 
26347
 
 
26348
       if (i1 == BB_END (bb1) || i2 == BB_END (bb2)
 
26349
Index: gcc/simplify-rtx.c
 
26350
===================================================================
 
26351
--- a/src/gcc/simplify-rtx.c    (.../tags/gcc_4_8_2_release)
 
26352
+++ b/src/gcc/simplify-rtx.c    (.../branches/gcc-4_8-branch)
 
26353
@@ -639,11 +639,16 @@
 
26354
                                   XEXP (op, 0), origmode);
 
26355
     }
 
26356
 
 
26357
-  /* Simplify (truncate:SI (op:DI (x:DI) (y:DI)))
 
26358
-     to (op:SI (truncate:SI (x:DI)) (truncate:SI (x:DI))).  */
 
26359
-  if (GET_CODE (op) == PLUS
 
26360
-      || GET_CODE (op) == MINUS
 
26361
-      || GET_CODE (op) == MULT)
 
26362
+  /* If the machine can perform operations in the truncated mode, distribute
 
26363
+     the truncation, i.e. simplify (truncate:QI (op:SI (x:SI) (y:SI))) into
 
26364
+     (op:QI (truncate:QI (x:SI)) (truncate:QI (y:SI))).  */
 
26365
+  if (1
 
26366
+#ifdef WORD_REGISTER_OPERATIONS
 
26367
+      && precision >= BITS_PER_WORD
 
26368
+#endif
 
26369
+      && (GET_CODE (op) == PLUS
 
26370
+         || GET_CODE (op) == MINUS
 
26371
+         || GET_CODE (op) == MULT))
 
26372
     {
 
26373
       rtx op0 = simplify_gen_unary (TRUNCATE, mode, XEXP (op, 0), op_mode);
 
26374
       if (op0)
 
26375
Index: gcc/tree-ssa-live.c
 
26376
===================================================================
 
26377
--- a/src/gcc/tree-ssa-live.c   (.../tags/gcc_4_8_2_release)
 
26378
+++ b/src/gcc/tree-ssa-live.c   (.../branches/gcc-4_8-branch)
 
26379
@@ -394,7 +394,8 @@
 
26380
     {
 
26381
       /* When a global var becomes used for the first time also walk its
 
26382
          initializer (non global ones don't have any).  */
 
26383
-      if (set_is_used (t) && is_global_var (t))
 
26384
+      if (set_is_used (t) && is_global_var (t)
 
26385
+         && DECL_CONTEXT (t) == current_function_decl)
 
26386
        mark_all_vars_used (&DECL_INITIAL (t));
 
26387
     }
 
26388
   /* remove_unused_scope_block_p requires information about labels
 
26389
Index: gcc/tree-sra.c
 
26390
===================================================================
 
26391
--- a/src/gcc/tree-sra.c        (.../tags/gcc_4_8_2_release)
 
26392
+++ b/src/gcc/tree-sra.c        (.../branches/gcc-4_8-branch)
 
26393
@@ -1161,8 +1161,7 @@
 
26394
    GIMPLE_ASM operands with memory constrains which cannot be scalarized.  */
 
26395
 
 
26396
 static bool
 
26397
-asm_visit_addr (gimple stmt ATTRIBUTE_UNUSED, tree op,
 
26398
-               void *data ATTRIBUTE_UNUSED)
 
26399
+asm_visit_addr (gimple, tree op, tree, void *)
 
26400
 {
 
26401
   op = get_base_address (op);
 
26402
   if (op
 
26403
@@ -2890,6 +2889,10 @@
 
26404
                                                  lacc);
 
26405
              else
 
26406
                drhs = NULL_TREE;
 
26407
+             if (drhs
 
26408
+                 && !useless_type_conversion_p (lacc->type, TREE_TYPE (drhs)))
 
26409
+               drhs = fold_build1_loc (loc, VIEW_CONVERT_EXPR,
 
26410
+                                       lacc->type, drhs);
 
26411
              ds = gimple_build_debug_bind (get_access_replacement (lacc),
 
26412
                                            drhs, gsi_stmt (*old_gsi));
 
26413
              gsi_insert_after (new_gsi, ds, GSI_NEW_STMT);
 
26414
@@ -4868,6 +4871,14 @@
 
26415
       return false;
 
26416
     }
 
26417
 
 
26418
+  if (!opt_for_fn (node->symbol.decl, optimize)
 
26419
+      || !opt_for_fn (node->symbol.decl, flag_ipa_sra))
 
26420
+    {
 
26421
+      if (dump_file)
 
26422
+       fprintf (dump_file, "Function not optimized.\n");
 
26423
+      return false;
 
26424
+    }
 
26425
+
 
26426
   if (DECL_VIRTUAL_P (current_function_decl))
 
26427
     {
 
26428
       if (dump_file)
 
26429
Index: gcc/tree-predcom.c
 
26430
===================================================================
 
26431
--- a/src/gcc/tree-predcom.c    (.../tags/gcc_4_8_2_release)
 
26432
+++ b/src/gcc/tree-predcom.c    (.../branches/gcc-4_8-branch)
 
26433
@@ -1323,90 +1323,43 @@
 
26434
   gsi_insert_after (&bsi, new_stmt, GSI_NEW_STMT);
 
26435
 }
 
26436
 
 
26437
-/* Returns the reference to the address of REF in the ITER-th iteration of
 
26438
-   LOOP, or NULL if we fail to determine it (ITER may be negative).  We
 
26439
-   try to preserve the original shape of the reference (not rewrite it
 
26440
-   as an indirect ref to the address), to make tree_could_trap_p in
 
26441
-   prepare_initializers_chain return false more often.  */
 
26442
+/* Returns a memory reference to DR in the ITER-th iteration of
 
26443
+   the loop it was analyzed in.  Append init stmts to STMTS.  */
 
26444
 
 
26445
-static tree
 
26446
-ref_at_iteration (struct loop *loop, tree ref, int iter)
 
26447
+static tree 
 
26448
+ref_at_iteration (data_reference_p dr, int iter, gimple_seq *stmts)
 
26449
 {
 
26450
-  tree idx, *idx_p, type, val, op0 = NULL_TREE, ret;
 
26451
-  affine_iv iv;
 
26452
-  bool ok;
 
26453
-
 
26454
-  if (handled_component_p (ref))
 
26455
+  tree off = DR_OFFSET (dr);
 
26456
+  tree coff = DR_INIT (dr);
 
26457
+  if (iter == 0)
 
26458
+    ;
 
26459
+  else if (TREE_CODE (DR_STEP (dr)) == INTEGER_CST)
 
26460
+    coff = size_binop (PLUS_EXPR, coff,
 
26461
+                      size_binop (MULT_EXPR, DR_STEP (dr), ssize_int (iter)));
 
26462
+  else
 
26463
+    off = size_binop (PLUS_EXPR, off,
 
26464
+                     size_binop (MULT_EXPR, DR_STEP (dr), ssize_int (iter)));
 
26465
+  tree addr = fold_build_pointer_plus (DR_BASE_ADDRESS (dr), off);
 
26466
+  addr = force_gimple_operand_1 (addr, stmts, is_gimple_mem_ref_addr,
 
26467
+                                NULL_TREE);
 
26468
+  tree alias_ptr = fold_convert (reference_alias_ptr_type (DR_REF (dr)), coff);
 
26469
+  /* While data-ref analysis punts on bit offsets it still handles
 
26470
+     bitfield accesses at byte boundaries.  Cope with that.  Note that
 
26471
+     we cannot simply re-apply the outer COMPONENT_REF because the
 
26472
+     byte-granular portion of it is already applied via DR_INIT and
 
26473
+     DR_OFFSET, so simply build a BIT_FIELD_REF knowing that the bits
 
26474
+     start at offset zero.  */
 
26475
+  if (TREE_CODE (DR_REF (dr)) == COMPONENT_REF
 
26476
+      && DECL_BIT_FIELD (TREE_OPERAND (DR_REF (dr), 1)))
 
26477
     {
 
26478
-      op0 = ref_at_iteration (loop, TREE_OPERAND (ref, 0), iter);
 
26479
-      if (!op0)
 
26480
-       return NULL_TREE;
 
26481
+      tree field = TREE_OPERAND (DR_REF (dr), 1);
 
26482
+      return build3 (BIT_FIELD_REF, TREE_TYPE (DR_REF (dr)),
 
26483
+                    build2 (MEM_REF, DECL_BIT_FIELD_TYPE (field),
 
26484
+                            addr, alias_ptr),
 
26485
+                    DECL_SIZE (field), bitsize_zero_node);
 
26486
     }
 
26487
-  else if (!INDIRECT_REF_P (ref)
 
26488
-          && TREE_CODE (ref) != MEM_REF)
 
26489
-    return unshare_expr (ref);
 
26490
-
 
26491
-  if (TREE_CODE (ref) == MEM_REF)
 
26492
-    {
 
26493
-      ret = unshare_expr (ref);
 
26494
-      idx = TREE_OPERAND (ref, 0);
 
26495
-      idx_p = &TREE_OPERAND (ret, 0);
 
26496
-    }
 
26497
-  else if (TREE_CODE (ref) == COMPONENT_REF)
 
26498
-    {
 
26499
-      /* Check that the offset is loop invariant.  */
 
26500
-      if (TREE_OPERAND (ref, 2)
 
26501
-         && !expr_invariant_in_loop_p (loop, TREE_OPERAND (ref, 2)))
 
26502
-       return NULL_TREE;
 
26503
-
 
26504
-      return build3 (COMPONENT_REF, TREE_TYPE (ref), op0,
 
26505
-                    unshare_expr (TREE_OPERAND (ref, 1)),
 
26506
-                    unshare_expr (TREE_OPERAND (ref, 2)));
 
26507
-    }
 
26508
-  else if (TREE_CODE (ref) == ARRAY_REF)
 
26509
-    {
 
26510
-      /* Check that the lower bound and the step are loop invariant.  */
 
26511
-      if (TREE_OPERAND (ref, 2)
 
26512
-         && !expr_invariant_in_loop_p (loop, TREE_OPERAND (ref, 2)))
 
26513
-       return NULL_TREE;
 
26514
-      if (TREE_OPERAND (ref, 3)
 
26515
-         && !expr_invariant_in_loop_p (loop, TREE_OPERAND (ref, 3)))
 
26516
-       return NULL_TREE;
 
26517
-
 
26518
-      ret = build4 (ARRAY_REF, TREE_TYPE (ref), op0, NULL_TREE,
 
26519
-                   unshare_expr (TREE_OPERAND (ref, 2)),
 
26520
-                   unshare_expr (TREE_OPERAND (ref, 3)));
 
26521
-      idx = TREE_OPERAND (ref, 1);
 
26522
-      idx_p = &TREE_OPERAND (ret, 1);
 
26523
-    }
 
26524
   else
 
26525
-    return NULL_TREE;
 
26526
-
 
26527
-  ok = simple_iv (loop, loop, idx, &iv, true);
 
26528
-  if (!ok)
 
26529
-    return NULL_TREE;
 
26530
-  iv.base = expand_simple_operations (iv.base);
 
26531
-  if (integer_zerop (iv.step))
 
26532
-    *idx_p = unshare_expr (iv.base);
 
26533
-  else
 
26534
-    {
 
26535
-      type = TREE_TYPE (iv.base);
 
26536
-      if (POINTER_TYPE_P (type))
 
26537
-       {
 
26538
-         val = fold_build2 (MULT_EXPR, sizetype, iv.step,
 
26539
-                            size_int (iter));
 
26540
-         val = fold_build_pointer_plus (iv.base, val);
 
26541
-       }
 
26542
-      else
 
26543
-       {
 
26544
-         val = fold_build2 (MULT_EXPR, type, iv.step,
 
26545
-                            build_int_cst_type (type, iter));
 
26546
-         val = fold_build2 (PLUS_EXPR, type, iv.base, val);
 
26547
-       }
 
26548
-      *idx_p = unshare_expr (val);
 
26549
-    }
 
26550
-
 
26551
-  return ret;
 
26552
+    return fold_build2 (MEM_REF, TREE_TYPE (DR_REF (dr)), addr, alias_ptr);
 
26553
 }
 
26554
 
 
26555
 /* Get the initialization expression for the INDEX-th temporary variable
 
26556
@@ -2068,7 +2021,11 @@
 
26557
 
 
26558
   stmt = find_common_use_stmt (&name1, &name2);
 
26559
 
 
26560
-  if (!stmt)
 
26561
+  if (!stmt
 
26562
+      /* A simple post-dominance check - make sure the combination
 
26563
+         is executed under the same condition as the references.  */
 
26564
+      || (gimple_bb (stmt) != gimple_bb (r1->stmt)
 
26565
+         && gimple_bb (stmt) != gimple_bb (r2->stmt)))
 
26566
     return false;
 
26567
 
 
26568
   acode = gimple_assign_rhs_code (stmt);
 
26569
@@ -2365,14 +2322,10 @@
 
26570
       if (chain->inits[i] != NULL_TREE)
 
26571
        continue;
 
26572
 
 
26573
-      init = ref_at_iteration (loop, DR_REF (dr), (int) i - n);
 
26574
-      if (!init)
 
26575
-       return false;
 
26576
-
 
26577
+      init = ref_at_iteration (dr, (int) i - n, &stmts);
 
26578
       if (!chain->all_always_accessed && tree_could_trap_p (init))
 
26579
        return false;
 
26580
 
 
26581
-      init = force_gimple_operand (init, &stmts, false, NULL_TREE);
 
26582
       if (stmts)
 
26583
        gsi_insert_seq_on_edge_immediate (entry, stmts);
 
26584
 
 
26585
@@ -2449,6 +2402,7 @@
 
26586
   if (!components)
 
26587
     {
 
26588
       free_data_refs (datarefs);
 
26589
+      free_affine_expand_cache (&name_expansions);
 
26590
       return false;
 
26591
     }
 
26592
 
 
26593
Index: gcc/loop-iv.c
 
26594
===================================================================
 
26595
--- a/src/gcc/loop-iv.c (.../tags/gcc_4_8_2_release)
 
26596
+++ b/src/gcc/loop-iv.c (.../branches/gcc-4_8-branch)
 
26597
@@ -425,7 +425,9 @@
 
26598
       && !iv->first_special)
 
26599
     {
 
26600
       rtx val = get_iv_value (iv, const0_rtx);
 
26601
-      val = lowpart_subreg (mode, val, iv->extend_mode);
 
26602
+      val = lowpart_subreg (mode, val,
 
26603
+                           iv->extend == IV_UNKNOWN_EXTEND
 
26604
+                           ? iv->mode : iv->extend_mode);
 
26605
 
 
26606
       iv->base = val;
 
26607
       iv->extend = IV_UNKNOWN_EXTEND;
 
26608
@@ -465,8 +467,14 @@
 
26609
       && !iv->first_special)
 
26610
     {
 
26611
       rtx val = get_iv_value (iv, const0_rtx);
 
26612
+      if (iv->extend_mode != iv->mode
 
26613
+         && iv->extend != IV_UNKNOWN_EXTEND
 
26614
+         && iv->extend != extend)
 
26615
+       val = lowpart_subreg (iv->mode, val, iv->extend_mode);
 
26616
       val = simplify_gen_unary (iv_extend_to_rtx_code (extend), mode,
 
26617
-                               val, iv->extend_mode);
 
26618
+                               val,
 
26619
+                               iv->extend == extend
 
26620
+                               ? iv->extend_mode : iv->mode);
 
26621
       iv->base = val;
 
26622
       iv->extend = IV_UNKNOWN_EXTEND;
 
26623
       iv->mode = iv->extend_mode = mode;
 
26624
Index: gcc/ipa-prop.c
 
26625
===================================================================
 
26626
--- a/src/gcc/ipa-prop.c        (.../tags/gcc_4_8_2_release)
 
26627
+++ b/src/gcc/ipa-prop.c        (.../branches/gcc-4_8-branch)
 
26628
@@ -623,16 +623,22 @@
 
26629
   if (parm_ainfo && parm_ainfo->parm_modified)
 
26630
     return false;
 
26631
 
 
26632
-  gcc_checking_assert (gimple_vuse (stmt) != NULL_TREE);
 
26633
-  ao_ref_init (&refd, parm_load);
 
26634
-  /* We can cache visited statements only when parm_ainfo is available and when
 
26635
-     we are looking at a naked load of the whole parameter.  */
 
26636
-  if (!parm_ainfo || TREE_CODE (parm_load) != PARM_DECL)
 
26637
-    visited_stmts = NULL;
 
26638
+  if (optimize)
 
26639
+    {
 
26640
+      gcc_checking_assert (gimple_vuse (stmt) != NULL_TREE);
 
26641
+      ao_ref_init (&refd, parm_load);
 
26642
+      /* We can cache visited statements only when parm_ainfo is available and
 
26643
+     when we are looking at a naked load of the whole parameter.  */
 
26644
+      if (!parm_ainfo || TREE_CODE (parm_load) != PARM_DECL)
 
26645
+       visited_stmts = NULL;
 
26646
+      else
 
26647
+       visited_stmts = &parm_ainfo->parm_visited_statements;
 
26648
+      walk_aliased_vdefs (&refd, gimple_vuse (stmt), mark_modified, &modified,
 
26649
+                         visited_stmts);
 
26650
+    }
 
26651
   else
 
26652
-    visited_stmts = &parm_ainfo->parm_visited_statements;
 
26653
-  walk_aliased_vdefs (&refd, gimple_vuse (stmt), mark_modified, &modified,
 
26654
-                     visited_stmts);
 
26655
+    modified = true;
 
26656
+
 
26657
   if (parm_ainfo && modified)
 
26658
     parm_ainfo->parm_modified = true;
 
26659
   return !modified;
 
26660
@@ -740,7 +746,7 @@
 
26661
 ipa_load_from_parm_agg_1 (vec<ipa_param_descriptor_t> descriptors,
 
26662
                          struct param_analysis_info *parms_ainfo, gimple stmt,
 
26663
                          tree op, int *index_p, HOST_WIDE_INT *offset_p,
 
26664
-                         bool *by_ref_p)
 
26665
+                         HOST_WIDE_INT *size_p, bool *by_ref_p)
 
26666
 {
 
26667
   int index;
 
26668
   HOST_WIDE_INT size, max_size;
 
26669
@@ -758,6 +764,8 @@
 
26670
        {
 
26671
          *index_p = index;
 
26672
          *by_ref_p = false;
 
26673
+         if (size_p)
 
26674
+           *size_p = size;
 
26675
          return true;
 
26676
        }
 
26677
       return false;
 
26678
@@ -800,6 +808,8 @@
 
26679
     {
 
26680
       *index_p = index;
 
26681
       *by_ref_p = true;
 
26682
+      if (size_p)
 
26683
+       *size_p = size;
 
26684
       return true;
 
26685
     }
 
26686
   return false;
 
26687
@@ -814,7 +824,7 @@
 
26688
                        bool *by_ref_p)
 
26689
 {
 
26690
   return ipa_load_from_parm_agg_1 (info->descriptors, NULL, stmt, op, index_p,
 
26691
-                                  offset_p, by_ref_p);
 
26692
+                                  offset_p, NULL, by_ref_p);
 
26693
 }
 
26694
 
 
26695
 /* Given that an actual argument is an SSA_NAME (given in NAME) and is a result
 
26696
@@ -1051,7 +1061,8 @@
 
26697
     return;
 
26698
   parm = TREE_OPERAND (expr, 0);
 
26699
   index = ipa_get_param_decl_index (info, SSA_NAME_VAR (parm));
 
26700
-  gcc_assert (index >= 0);
 
26701
+  if (index < 0)
 
26702
+    return;
 
26703
 
 
26704
   cond_bb = single_pred (assign_bb);
 
26705
   cond = last_stmt (cond_bb);
 
26706
@@ -1462,6 +1473,9 @@
 
26707
 {
 
26708
   struct cgraph_edge *cs;
 
26709
 
 
26710
+  if (!optimize)
 
26711
+    return;
 
26712
+
 
26713
   for (cs = node->callees; cs; cs = cs->next_callee)
 
26714
     {
 
26715
       struct cgraph_node *callee = cgraph_function_or_thunk_node (cs->callee,
 
26716
@@ -1646,7 +1660,7 @@
 
26717
   if (gimple_assign_single_p (def)
 
26718
       && ipa_load_from_parm_agg_1 (info->descriptors, parms_ainfo, def,
 
26719
                                   gimple_assign_rhs1 (def), &index, &offset,
 
26720
-                                  &by_ref))
 
26721
+                                  NULL, &by_ref))
 
26722
     {
 
26723
       struct cgraph_edge *cs = ipa_note_param_call (node, index, call);
 
26724
       cs->indirect_info->offset = offset;
 
26725
@@ -1847,8 +1861,7 @@
 
26726
    passed in DATA.  */
 
26727
 
 
26728
 static bool
 
26729
-visit_ref_for_mod_analysis (gimple stmt ATTRIBUTE_UNUSED,
 
26730
-                            tree op, void *data)
 
26731
+visit_ref_for_mod_analysis (gimple, tree op, tree, void *data)
 
26732
 {
 
26733
   struct ipa_node_params *info = (struct ipa_node_params *) data;
 
26734
 
 
26735
@@ -2126,7 +2139,6 @@
 
26736
      we may create the first reference to the object in the unit.  */
 
26737
   if (!callee || callee->global.inlined_to)
 
26738
     {
 
26739
-      struct cgraph_node *first_clone = callee;
 
26740
 
 
26741
       /* We are better to ensure we can refer to it.
 
26742
         In the case of static functions we are out of luck, since we already   
 
26743
@@ -2142,31 +2154,7 @@
 
26744
                     xstrdup (cgraph_node_name (ie->callee)), ie->callee->uid);
 
26745
          return NULL;
 
26746
        }
 
26747
-
 
26748
-      /* Create symbol table node.  Even if inline clone exists, we can not take
 
26749
-        it as a target of non-inlined call.  */
 
26750
-      callee = cgraph_create_node (target);
 
26751
-
 
26752
-      /* OK, we previously inlined the function, then removed the offline copy and
 
26753
-        now we want it back for external call.  This can happen when devirtualizing
 
26754
-        while inlining function called once that happens after extern inlined and
 
26755
-        virtuals are already removed.  In this case introduce the external node
 
26756
-        and make it available for call.  */
 
26757
-      if (first_clone)
 
26758
-       {
 
26759
-         first_clone->clone_of = callee;
 
26760
-         callee->clones = first_clone;
 
26761
-         symtab_prevail_in_asm_name_hash ((symtab_node)callee);
 
26762
-         symtab_insert_node_to_hashtable ((symtab_node)callee);
 
26763
-         if (dump_file)
 
26764
-           fprintf (dump_file, "ipa-prop: Introduced new external node "
 
26765
-                    "(%s/%i) and turned into root of the clone tree.\n",
 
26766
-                    xstrdup (cgraph_node_name (callee)), callee->uid);
 
26767
-       }
 
26768
-      else if (dump_file)
 
26769
-       fprintf (dump_file, "ipa-prop: Introduced new external node "
 
26770
-                "(%s/%i).\n",
 
26771
-                xstrdup (cgraph_node_name (callee)), callee->uid);
 
26772
+      callee = cgraph_get_create_real_symbol_node (target);
 
26773
     }
 
26774
   ipa_check_create_node_params ();
 
26775
 
 
26776
@@ -3902,7 +3890,7 @@
 
26777
        struct ipa_agg_replacement_value *v;
 
26778
        gimple stmt = gsi_stmt (gsi);
 
26779
        tree rhs, val, t;
 
26780
-       HOST_WIDE_INT offset;
 
26781
+       HOST_WIDE_INT offset, size;
 
26782
        int index;
 
26783
        bool by_ref, vce;
 
26784
 
 
26785
@@ -3929,13 +3917,15 @@
 
26786
          continue;
 
26787
 
 
26788
        if (!ipa_load_from_parm_agg_1 (descriptors, parms_ainfo, stmt,
 
26789
-                                      rhs, &index, &offset, &by_ref))
 
26790
+                                      rhs, &index, &offset, &size, &by_ref))
 
26791
          continue;
 
26792
        for (v = aggval; v; v = v->next)
 
26793
          if (v->index == index
 
26794
              && v->offset == offset)
 
26795
            break;
 
26796
-       if (!v || v->by_ref != by_ref)
 
26797
+       if (!v
 
26798
+           || v->by_ref != by_ref
 
26799
+           || tree_low_cst (TYPE_SIZE (TREE_TYPE (v->value)), 0) != size)
 
26800
          continue;
 
26801
 
 
26802
        gcc_checking_assert (is_gimple_ip_invariant (v->value));
 
26803
Index: gcc/tree-ssa-dce.c
 
26804
===================================================================
 
26805
--- a/src/gcc/tree-ssa-dce.c    (.../tags/gcc_4_8_2_release)
 
26806
+++ b/src/gcc/tree-ssa-dce.c    (.../branches/gcc-4_8-branch)
 
26807
@@ -1307,26 +1307,19 @@
 
26808
          stats.total++;
 
26809
 
 
26810
          /* We can mark a call to free as not necessary if the
 
26811
-            defining statement of its argument is an allocation
 
26812
-            function and that is not necessary itself.  */
 
26813
-         if (gimple_call_builtin_p (stmt, BUILT_IN_FREE))
 
26814
+            defining statement of its argument is not necessary
 
26815
+            (and thus is getting removed).  */
 
26816
+         if (gimple_plf (stmt, STMT_NECESSARY)
 
26817
+             && gimple_call_builtin_p (stmt, BUILT_IN_FREE))
 
26818
            {
 
26819
              tree ptr = gimple_call_arg (stmt, 0);
 
26820
-             tree callee2;
 
26821
-             gimple def_stmt;
 
26822
-             if (TREE_CODE (ptr) != SSA_NAME)
 
26823
-               continue;
 
26824
-             def_stmt = SSA_NAME_DEF_STMT (ptr);
 
26825
-             if (!is_gimple_call (def_stmt)
 
26826
-                 || gimple_plf (def_stmt, STMT_NECESSARY))
 
26827
-               continue;
 
26828
-             callee2 = gimple_call_fndecl (def_stmt);
 
26829
-             if (callee2 == NULL_TREE
 
26830
-                 || DECL_BUILT_IN_CLASS (callee2) != BUILT_IN_NORMAL
 
26831
-                 || (DECL_FUNCTION_CODE (callee2) != BUILT_IN_MALLOC
 
26832
-                     && DECL_FUNCTION_CODE (callee2) != BUILT_IN_CALLOC))
 
26833
-               continue;
 
26834
-             gimple_set_plf (stmt, STMT_NECESSARY, false);
 
26835
+             if (TREE_CODE (ptr) == SSA_NAME)
 
26836
+               {
 
26837
+                 gimple def_stmt = SSA_NAME_DEF_STMT (ptr);
 
26838
+                 if (!gimple_nop_p (def_stmt)
 
26839
+                     && !gimple_plf (def_stmt, STMT_NECESSARY))
 
26840
+                   gimple_set_plf (stmt, STMT_NECESSARY, false);
 
26841
+               }
 
26842
            }
 
26843
 
 
26844
          /* If GSI is not necessary then remove it.  */
 
26845
Index: gcc/tree-ssa-ter.c
 
26846
===================================================================
 
26847
--- a/src/gcc/tree-ssa-ter.c    (.../tags/gcc_4_8_2_release)
 
26848
+++ b/src/gcc/tree-ssa-ter.c    (.../branches/gcc-4_8-branch)
 
26849
@@ -590,6 +590,30 @@
 
26850
 }
 
26851
 
 
26852
 
 
26853
+/* Helper function for find_ssaname_in_stores.  Called via walk_tree to
 
26854
+   find a SSA_NAME DATA somewhere in *TP.  */
 
26855
+
 
26856
+static tree
 
26857
+find_ssaname (tree *tp, int *walk_subtrees, void *data)
 
26858
+{
 
26859
+  tree var = (tree) data;
 
26860
+  if (*tp == var)
 
26861
+    return var;
 
26862
+  else if (IS_TYPE_OR_DECL_P (*tp))
 
26863
+    *walk_subtrees = 0;
 
26864
+  return NULL_TREE;
 
26865
+}
 
26866
+
 
26867
+/* Helper function for find_replaceable_in_bb.  Return true if SSA_NAME DATA
 
26868
+   is used somewhere in T, which is a store in the statement.  Called via
 
26869
+   walk_stmt_load_store_addr_ops.  */
 
26870
+
 
26871
+static bool
 
26872
+find_ssaname_in_store (gimple, tree, tree t, void *data)
 
26873
+{
 
26874
+  return walk_tree (&t, find_ssaname, data, NULL) != NULL_TREE;
 
26875
+}
 
26876
+
 
26877
 /* This function processes basic block BB, and looks for variables which can
 
26878
    be replaced by their expressions.  Results are stored in the table TAB.  */
 
26879
 
 
26880
@@ -643,8 +667,7 @@
 
26881
              /* If the stmt does a memory store and the replacement
 
26882
                 is a load aliasing it avoid creating overlapping
 
26883
                 assignments which we cannot expand correctly.  */
 
26884
-             if (gimple_vdef (stmt)
 
26885
-                 && gimple_assign_single_p (stmt))
 
26886
+             if (gimple_vdef (stmt))
 
26887
                {
 
26888
                  gimple def_stmt = SSA_NAME_DEF_STMT (use);
 
26889
                  while (is_gimple_assign (def_stmt)
 
26890
@@ -653,9 +676,29 @@
 
26891
                      = SSA_NAME_DEF_STMT (gimple_assign_rhs1 (def_stmt));
 
26892
                  if (gimple_vuse (def_stmt)
 
26893
                      && gimple_assign_single_p (def_stmt)
 
26894
-                     && refs_may_alias_p (gimple_assign_lhs (stmt),
 
26895
-                                          gimple_assign_rhs1 (def_stmt)))
 
26896
-                   same_root_var = true;
 
26897
+                     && stmt_may_clobber_ref_p (stmt,
 
26898
+                                                gimple_assign_rhs1 (def_stmt)))
 
26899
+                   {
 
26900
+                     /* For calls, it is not a problem if USE is among
 
26901
+                        call's arguments or say OBJ_TYPE_REF argument,
 
26902
+                        all those necessarily need to be evaluated before
 
26903
+                        the call that may clobber the memory.  But if
 
26904
+                        LHS of the call refers to USE, expansion might
 
26905
+                        evaluate it after the call, prevent TER in that
 
26906
+                        case.
 
26907
+                        For inline asm, allow TER of loads into input
 
26908
+                        arguments, but disallow TER for USEs that occur
 
26909
+                        somewhere in outputs.  */
 
26910
+                     if (is_gimple_call (stmt)
 
26911
+                         || gimple_code (stmt) == GIMPLE_ASM)
 
26912
+                       {
 
26913
+                         if (walk_stmt_load_store_ops (stmt, use, NULL,
 
26914
+                                                       find_ssaname_in_store))
 
26915
+                           same_root_var = true;
 
26916
+                       }
 
26917
+                     else
 
26918
+                       same_root_var = true;
 
26919
+                   }
 
26920
                }
 
26921
 
 
26922
              /* Mark expression as replaceable unless stmt is volatile, or the
 
26923
Index: gcc/ira.c
 
26924
===================================================================
 
26925
--- a/src/gcc/ira.c     (.../tags/gcc_4_8_2_release)
 
26926
+++ b/src/gcc/ira.c     (.../branches/gcc-4_8-branch)
 
26927
@@ -4742,6 +4742,18 @@
 
26928
   if (need_dce && optimize)
 
26929
     run_fast_dce ();
 
26930
 
 
26931
+  /* Diagnose uses of the hard frame pointer when it is used as a global
 
26932
+     register.  Often we can get away with letting the user appropriate
 
26933
+     the frame pointer, but we should let them know when code generation
 
26934
+     makes that impossible.  */
 
26935
+  if (global_regs[HARD_FRAME_POINTER_REGNUM] && frame_pointer_needed)
 
26936
+    {
 
26937
+      tree decl = global_regs_decl[HARD_FRAME_POINTER_REGNUM];
 
26938
+      error_at (DECL_SOURCE_LOCATION (current_function_decl),
 
26939
+                "frame pointer required, but reserved");
 
26940
+      inform (DECL_SOURCE_LOCATION (decl), "for %qD", decl);
 
26941
+    }
 
26942
+
 
26943
   timevar_pop (TV_IRA);
 
26944
 }
 
26945
 
 
26946
Index: gcc/rtl.h
 
26947
===================================================================
 
26948
--- a/src/gcc/rtl.h     (.../tags/gcc_4_8_2_release)
 
26949
+++ b/src/gcc/rtl.h     (.../branches/gcc-4_8-branch)
 
26950
@@ -2705,6 +2705,8 @@
 
26951
                                  const_rtx, rtx);
 
26952
 extern int read_dependence (const_rtx, const_rtx);
 
26953
 extern int anti_dependence (const_rtx, const_rtx);
 
26954
+extern int canon_anti_dependence (const_rtx, bool,
 
26955
+                                               const_rtx, enum machine_mode, rtx);
 
26956
 extern int output_dependence (const_rtx, const_rtx);
 
26957
 extern int may_alias_p (const_rtx, const_rtx);
 
26958
 extern void init_alias_target (void);
 
26959
@@ -2789,6 +2791,8 @@
 
26960
 #define fatal_insn_not_found(insn) \
 
26961
        _fatal_insn_not_found (insn, __FILE__, __LINE__, __FUNCTION__)
 
26962
 
 
26963
+/* reginfo.c */
 
26964
+extern tree GTY(()) global_regs_decl[FIRST_PSEUDO_REGISTER];
 
26965
 
 
26966
 
 
26967
 #endif /* ! GCC_RTL_H */
 
26968
Index: gcc/tree-vect-stmts.c
 
26969
===================================================================
 
26970
--- a/src/gcc/tree-vect-stmts.c (.../tags/gcc_4_8_2_release)
 
26971
+++ b/src/gcc/tree-vect-stmts.c (.../branches/gcc-4_8-branch)
 
26972
@@ -4369,6 +4369,20 @@
 
26973
       return false;
 
26974
     }
 
26975
 
 
26976
+  /* Invalidate assumptions made by dependence analysis when vectorization
 
26977
+     on the unrolled body effectively re-orders stmts.  */
 
26978
+  if (ncopies > 1
 
26979
+      && STMT_VINFO_MIN_NEG_DIST (stmt_info) != 0
 
26980
+      && ((unsigned)LOOP_VINFO_VECT_FACTOR (loop_vinfo)
 
26981
+         > STMT_VINFO_MIN_NEG_DIST (stmt_info)))
 
26982
+    {
 
26983
+      if (dump_enabled_p ())
 
26984
+       dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
 
26985
+                        "cannot perform implicit CSE when unrolling "
 
26986
+                        "with negative dependence distance\n");
 
26987
+      return false;
 
26988
+    }
 
26989
+
 
26990
   if (!STMT_VINFO_RELEVANT_P (stmt_info) && !bb_vinfo)
 
26991
     return false;
 
26992
 
 
26993
@@ -4425,6 +4439,20 @@
 
26994
          else if (!vect_grouped_load_supported (vectype, group_size))
 
26995
            return false;
 
26996
        }
 
26997
+
 
26998
+      /* Invalidate assumptions made by dependence analysis when vectorization
 
26999
+        on the unrolled body effectively re-orders stmts.  */
 
27000
+      if (!PURE_SLP_STMT (stmt_info)
 
27001
+         && STMT_VINFO_MIN_NEG_DIST (stmt_info) != 0
 
27002
+         && ((unsigned)LOOP_VINFO_VECT_FACTOR (loop_vinfo)
 
27003
+             > STMT_VINFO_MIN_NEG_DIST (stmt_info)))
 
27004
+       {
 
27005
+         if (dump_enabled_p ())
 
27006
+           dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
 
27007
+                            "cannot perform implicit CSE when performing "
 
27008
+                            "group loads with negative dependence distance\n");
 
27009
+         return false;
 
27010
+       }
 
27011
     }
 
27012
 
 
27013
 
 
27014
@@ -6054,8 +6082,7 @@
 
27015
      corresponding to that mode.  The theory is that any use that
 
27016
      would cause problems with this will disable vectorization anyway.  */
 
27017
   else if (!SCALAR_FLOAT_TYPE_P (scalar_type)
 
27018
-          && !INTEGRAL_TYPE_P (scalar_type)
 
27019
-          && !POINTER_TYPE_P (scalar_type))
 
27020
+          && !INTEGRAL_TYPE_P (scalar_type))
 
27021
     scalar_type = lang_hooks.types.type_for_mode (inner_mode, 1);
 
27022
 
 
27023
   /* We can't build a vector type of elements with alignment bigger than
 
27024
Index: gcc/tree-ssa-phiprop.c
 
27025
===================================================================
 
27026
--- a/src/gcc/tree-ssa-phiprop.c        (.../tags/gcc_4_8_2_release)
 
27027
+++ b/src/gcc/tree-ssa-phiprop.c        (.../branches/gcc-4_8-branch)
 
27028
@@ -307,6 +307,12 @@
 
27029
       gimple def_stmt;
 
27030
       tree vuse;
 
27031
 
 
27032
+      /* Only replace loads in blocks that post-dominate the PHI node.  That
 
27033
+         makes sure we don't end up speculating loads.  */
 
27034
+      if (!dominated_by_p (CDI_POST_DOMINATORS,
 
27035
+                          bb, gimple_bb (use_stmt)))
 
27036
+       continue;
 
27037
+         
 
27038
       /* Check whether this is a load of *ptr.  */
 
27039
       if (!(is_gimple_assign (use_stmt)
 
27040
            && TREE_CODE (gimple_assign_lhs (use_stmt)) == SSA_NAME
 
27041
@@ -378,6 +384,7 @@
 
27042
   size_t n;
 
27043
 
 
27044
   calculate_dominance_info (CDI_DOMINATORS);
 
27045
+  calculate_dominance_info (CDI_POST_DOMINATORS);
 
27046
 
 
27047
   n = num_ssa_names;
 
27048
   phivn = XCNEWVEC (struct phiprop_d, n);
 
27049
@@ -395,6 +402,8 @@
 
27050
   bbs.release ();
 
27051
   free (phivn);
 
27052
 
 
27053
+  free_dominance_info (CDI_POST_DOMINATORS);
 
27054
+
 
27055
   return 0;
 
27056
 }
 
27057
 
 
27058
Index: gcc/tree-object-size.c
 
27059
===================================================================
 
27060
--- a/src/gcc/tree-object-size.c        (.../tags/gcc_4_8_2_release)
 
27061
+++ b/src/gcc/tree-object-size.c        (.../branches/gcc-4_8-branch)
 
27062
@@ -64,7 +64,7 @@
 
27063
    the subobject (innermost array or field with address taken).
 
27064
    object_sizes[2] is lower bound for number of bytes till the end of
 
27065
    the object and object_sizes[3] lower bound for subobject.  */
 
27066
-static unsigned HOST_WIDE_INT *object_sizes[4];
 
27067
+static vec<unsigned HOST_WIDE_INT> object_sizes[4];
 
27068
 
 
27069
 /* Bitmaps what object sizes have been computed already.  */
 
27070
 static bitmap computed[4];
 
27071
@@ -493,7 +493,7 @@
 
27072
 
 
27073
   if (TREE_CODE (ptr) == SSA_NAME
 
27074
       && POINTER_TYPE_P (TREE_TYPE (ptr))
 
27075
-      && object_sizes[object_size_type] != NULL)
 
27076
+      && computed[object_size_type] != NULL)
 
27077
     {
 
27078
       if (!bitmap_bit_p (computed[object_size_type], SSA_NAME_VERSION (ptr)))
 
27079
        {
 
27080
@@ -501,6 +501,8 @@
 
27081
          bitmap_iterator bi;
 
27082
          unsigned int i;
 
27083
 
 
27084
+         if (num_ssa_names > object_sizes[object_size_type].length ())
 
27085
+           object_sizes[object_size_type].safe_grow (num_ssa_names);
 
27086
          if (dump_file)
 
27087
            {
 
27088
              fprintf (dump_file, "Computing %s %sobject size for ",
 
27089
@@ -1162,12 +1164,12 @@
 
27090
 {
 
27091
   int object_size_type;
 
27092
 
 
27093
-  if (object_sizes[0])
 
27094
+  if (computed[0])
 
27095
     return;
 
27096
 
 
27097
   for (object_size_type = 0; object_size_type <= 3; object_size_type++)
 
27098
     {
 
27099
-      object_sizes[object_size_type] = XNEWVEC (unsigned HOST_WIDE_INT, num_ssa_names);
 
27100
+      object_sizes[object_size_type].safe_grow (num_ssa_names);
 
27101
       computed[object_size_type] = BITMAP_ALLOC (NULL);
 
27102
     }
 
27103
 
 
27104
@@ -1184,9 +1186,8 @@
 
27105
 
 
27106
   for (object_size_type = 0; object_size_type <= 3; object_size_type++)
 
27107
     {
 
27108
-      free (object_sizes[object_size_type]);
 
27109
+      object_sizes[object_size_type].release ();
 
27110
       BITMAP_FREE (computed[object_size_type]);
 
27111
-      object_sizes[object_size_type] = NULL;
 
27112
     }
 
27113
 }
 
27114
 
 
27115
@@ -1202,18 +1203,11 @@
 
27116
       gimple_stmt_iterator i;
 
27117
       for (i = gsi_start_bb (bb); !gsi_end_p (i); gsi_next (&i))
 
27118
        {
 
27119
-         tree callee, result;
 
27120
+         tree result;
 
27121
          gimple call = gsi_stmt (i);
 
27122
-
 
27123
-          if (gimple_code (call) != GIMPLE_CALL)
 
27124
+         if (!gimple_call_builtin_p (call, BUILT_IN_OBJECT_SIZE))
 
27125
            continue;
 
27126
 
 
27127
-         callee = gimple_call_fndecl (call);
 
27128
-         if (!callee
 
27129
-             || DECL_BUILT_IN_CLASS (callee) != BUILT_IN_NORMAL
 
27130
-             || DECL_FUNCTION_CODE (callee) != BUILT_IN_OBJECT_SIZE)
 
27131
-           continue;
 
27132
-
 
27133
          init_object_sizes ();
 
27134
          result = fold_call_stmt (call, false);
 
27135
          if (!result)
 
27136
@@ -1240,20 +1234,32 @@
 
27137
                continue;
 
27138
            }
 
27139
 
 
27140
+         gcc_assert (TREE_CODE (result) == INTEGER_CST);
 
27141
+
 
27142
          if (dump_file && (dump_flags & TDF_DETAILS))
 
27143
            {
 
27144
              fprintf (dump_file, "Simplified\n  ");
 
27145
              print_gimple_stmt (dump_file, call, 0, dump_flags);
 
27146
+             fprintf (dump_file, " to ");
 
27147
+             print_generic_expr (dump_file, result, 0);
 
27148
+             fprintf (dump_file, "\n");
 
27149
            }
 
27150
 
 
27151
-         if (!update_call_from_tree (&i, result))
 
27152
-           gcc_unreachable ();
 
27153
+         tree lhs = gimple_call_lhs (call);
 
27154
+         if (!lhs)
 
27155
+           continue;
 
27156
 
 
27157
-         if (dump_file && (dump_flags & TDF_DETAILS))
 
27158
+         /* Propagate into all uses and fold those stmts.  */
 
27159
+         gimple use_stmt;
 
27160
+         imm_use_iterator iter;
 
27161
+         FOR_EACH_IMM_USE_STMT (use_stmt, iter, lhs)
 
27162
            {
 
27163
-             fprintf (dump_file, "to\n  ");
 
27164
-             print_gimple_stmt (dump_file, gsi_stmt (i), 0, dump_flags);
 
27165
-             fprintf (dump_file, "\n");
 
27166
+             use_operand_p use_p;
 
27167
+             FOR_EACH_IMM_USE_ON_STMT (use_p, iter)
 
27168
+               SET_USE (use_p, result);
 
27169
+             gimple_stmt_iterator gsi = gsi_for_stmt (use_stmt);
 
27170
+             fold_stmt (&gsi);
 
27171
+             update_stmt (gsi_stmt (gsi));
 
27172
            }
 
27173
        }
 
27174
     }
 
27175
Index: gcc/combine.c
 
27176
===================================================================
 
27177
--- a/src/gcc/combine.c (.../tags/gcc_4_8_2_release)
 
27178
+++ b/src/gcc/combine.c (.../branches/gcc-4_8-branch)
 
27179
@@ -3884,15 +3884,19 @@
 
27180
 
 
27181
       PATTERN (undobuf.other_insn) = other_pat;
 
27182
 
 
27183
-      /* If any of the notes in OTHER_INSN were REG_UNUSED, ensure that they
 
27184
-        are still valid.  Then add any non-duplicate notes added by
 
27185
-        recog_for_combine.  */
 
27186
+      /* If any of the notes in OTHER_INSN were REG_DEAD or REG_UNUSED,
 
27187
+        ensure that they are still valid.  Then add any non-duplicate
 
27188
+        notes added by recog_for_combine.  */
 
27189
       for (note = REG_NOTES (undobuf.other_insn); note; note = next)
 
27190
        {
 
27191
          next = XEXP (note, 1);
 
27192
 
 
27193
-         if (REG_NOTE_KIND (note) == REG_UNUSED
 
27194
-             && ! reg_set_p (XEXP (note, 0), PATTERN (undobuf.other_insn)))
 
27195
+         if ((REG_NOTE_KIND (note) == REG_DEAD
 
27196
+              && !reg_referenced_p (XEXP (note, 0),
 
27197
+                                    PATTERN (undobuf.other_insn)))
 
27198
+             ||(REG_NOTE_KIND (note) == REG_UNUSED
 
27199
+                && !reg_set_p (XEXP (note, 0),
 
27200
+                               PATTERN (undobuf.other_insn))))
 
27201
            remove_note (undobuf.other_insn, note);
 
27202
        }
 
27203
 
 
27204
@@ -5798,8 +5802,15 @@
 
27205
                return x;
 
27206
            }
 
27207
 
 
27208
-         /* If the code changed, return a whole new comparison.  */
 
27209
-         if (new_code != code)
 
27210
+         /* If the code changed, return a whole new comparison.
 
27211
+            We also need to avoid using SUBST in cases where
 
27212
+            simplify_comparison has widened a comparison with a CONST_INT,
 
27213
+            since in that case the wider CONST_INT may fail the sanity
 
27214
+            checks in do_SUBST.  */
 
27215
+         if (new_code != code
 
27216
+             || (CONST_INT_P (op1)
 
27217
+                 && GET_MODE (op0) != GET_MODE (XEXP (x, 0))
 
27218
+                 && GET_MODE (op0) != GET_MODE (XEXP (x, 1))))
 
27219
            return gen_rtx_fmt_ee (new_code, mode, op0, op1);
 
27220
 
 
27221
          /* Otherwise, keep this operation, but maybe change its operands.
 
27222
@@ -7991,7 +8002,7 @@
 
27223
   if (code == CALL || code == ASM_OPERANDS || code == CLOBBER)
 
27224
     return x;
 
27225
 
 
27226
-  /* We want to perform the operation is its present mode unless we know
 
27227
+  /* We want to perform the operation in its present mode unless we know
 
27228
      that the operation is valid in MODE, in which case we do the operation
 
27229
      in MODE.  */
 
27230
   op_mode = ((GET_MODE_CLASS (mode) == GET_MODE_CLASS (GET_MODE (x))
 
27231
@@ -8427,9 +8438,10 @@
 
27232
                                            GET_MODE (x), GEN_INT (mask),
 
27233
                                            XEXP (x, 1));
 
27234
          if (temp && CONST_INT_P (temp))
 
27235
-           SUBST (XEXP (x, 0),
 
27236
-                  force_to_mode (XEXP (x, 0), GET_MODE (x),
 
27237
-                                 INTVAL (temp), next_select));
 
27238
+           x = simplify_gen_binary (code, GET_MODE (x),
 
27239
+                                    force_to_mode (XEXP (x, 0), GET_MODE (x),
 
27240
+                                                   INTVAL (temp), next_select),
 
27241
+                                    XEXP (x, 1));
 
27242
        }
 
27243
       break;
 
27244
 
 
27245
@@ -8497,14 +8509,16 @@
 
27246
       /* We have no way of knowing if the IF_THEN_ELSE can itself be
 
27247
         written in a narrower mode.  We play it safe and do not do so.  */
 
27248
 
 
27249
-      SUBST (XEXP (x, 1),
 
27250
-            gen_lowpart_or_truncate (GET_MODE (x),
 
27251
-                                     force_to_mode (XEXP (x, 1), mode,
 
27252
-                                                    mask, next_select)));
 
27253
-      SUBST (XEXP (x, 2),
 
27254
-            gen_lowpart_or_truncate (GET_MODE (x),
 
27255
-                                     force_to_mode (XEXP (x, 2), mode,
 
27256
-                                                    mask, next_select)));
 
27257
+      op0 = gen_lowpart_or_truncate (GET_MODE (x),
 
27258
+                                    force_to_mode (XEXP (x, 1), mode,
 
27259
+                                                   mask, next_select));
 
27260
+      op1 = gen_lowpart_or_truncate (GET_MODE (x),
 
27261
+                                    force_to_mode (XEXP (x, 2), mode,
 
27262
+                                                   mask, next_select));
 
27263
+      if (op0 != XEXP (x, 1) || op1 != XEXP (x, 2))
 
27264
+       x = simplify_gen_ternary (IF_THEN_ELSE, GET_MODE (x),
 
27265
+                                 GET_MODE (XEXP (x, 0)), XEXP (x, 0),
 
27266
+                                 op0, op1);
 
27267
       break;
 
27268
 
 
27269
     default:
 
27270
Index: gcc/tree-flow.h
 
27271
===================================================================
 
27272
--- a/src/gcc/tree-flow.h       (.../tags/gcc_4_8_2_release)
 
27273
+++ b/src/gcc/tree-flow.h       (.../branches/gcc-4_8-branch)
 
27274
@@ -425,6 +425,7 @@
 
27275
                                           basic_block, tree);
 
27276
 void remove_edge_and_dominated_blocks (edge);
 
27277
 bool tree_node_can_be_shared (tree);
 
27278
+extern unsigned int split_critical_edges (void);
 
27279
 
 
27280
 /* In tree-cfgcleanup.c  */
 
27281
 extern bitmap cfgcleanup_altered_bbs;
 
27282
Index: gcc/config.gcc
 
27283
===================================================================
 
27284
--- a/src/gcc/config.gcc        (.../tags/gcc_4_8_2_release)
 
27285
+++ b/src/gcc/config.gcc        (.../branches/gcc-4_8-branch)
 
27286
@@ -1761,6 +1761,14 @@
 
27287
        tmake_file="${tmake_file} microblaze/t-microblaze-linux"
 
27288
        ;;
 
27289
 microblaze*-*-rtems*)
 
27290
+       case $target in
 
27291
+               microblazeel-*)
 
27292
+                       tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=0"
 
27293
+                       ;;
 
27294
+               microblaze-*)
 
27295
+                       tm_defines="${tm_defines} TARGET_BIG_ENDIAN_DEFAULT=4321"
 
27296
+                       ;;
 
27297
+       esac
 
27298
        tm_file="${tm_file} dbxelf.h"
 
27299
        tm_file="${tm_file} microblaze/rtems.h rtems.h newlib-stdint.h"
 
27300
        c_target_objs="${c_target_objs} microblaze-c.o"
 
27301
@@ -2963,11 +2971,18 @@
 
27302
          with_cpu=8540
 
27303
       fi       
 
27304
       ;;
 
27305
-    sparc-leon*-*)
 
27306
-      with_cpu=v8;
 
27307
-      ;;
 
27308
     sparc*-*-*)
 
27309
-      with_cpu="`echo ${target} | sed 's/-.*$//'`"
 
27310
+      case ${target} in
 
27311
+       *-leon-*)
 
27312
+         with_cpu=leon
 
27313
+         ;;
 
27314
+       *-leon[3-9]*)
 
27315
+         with_cpu=leon3
 
27316
+         ;;
 
27317
+       *)
 
27318
+         with_cpu="`echo ${target} | sed 's/-.*$//'`"
 
27319
+         ;;
 
27320
+      esac
 
27321
       ;;
 
27322
   esac
 
27323
 
 
27324
@@ -3587,7 +3602,7 @@
 
27325
                        case ${val} in
 
27326
                        "" | sparc | sparcv9 | sparc64 \
 
27327
                        | v7 | cypress \
 
27328
-                       | v8 | supersparc | hypersparc | leon \
 
27329
+                       | v8 | supersparc | hypersparc | leon | leon3 \
 
27330
                        | sparclite | f930 | f934 | sparclite86x \
 
27331
                        | sparclet | tsc701 \
 
27332
                        | v9 | ultrasparc | ultrasparc3 | niagara | niagara2 \
 
27333
@@ -3745,15 +3760,6 @@
 
27334
                cxx_target_objs="${cxx_target_objs} sh-c.o"
 
27335
                ;;
 
27336
 
 
27337
-       sparc-leon*-*)
 
27338
-               if test x$with_tune = x ; then
 
27339
-                 with_tune=leon;
 
27340
-               fi
 
27341
-
 
27342
-               # The SPARC port checks this value at compile-time.
 
27343
-               target_cpu_default2="TARGET_CPU_$with_cpu"
 
27344
-               ;;
 
27345
-
 
27346
        sparc*-*-*)
 
27347
                # Some standard aliases.
 
27348
                case x$with_cpu in
 
27349
@@ -3765,6 +3771,17 @@
 
27350
                        ;;
 
27351
                esac
 
27352
 
 
27353
+               if test x$with_tune = x ; then
 
27354
+                     case ${target} in
 
27355
+                     *-leon-*)
 
27356
+                         with_tune=leon
 
27357
+                         ;;
 
27358
+                     *-leon[3-9]*)
 
27359
+                         with_tune=leon3
 
27360
+                         ;;
 
27361
+                     esac
 
27362
+               fi
 
27363
+
 
27364
                # The SPARC port checks this value at compile-time.
 
27365
                target_cpu_default2="TARGET_CPU_$with_cpu"
 
27366
                ;;
 
27367
Index: gcc/reginfo.c
 
27368
===================================================================
 
27369
--- a/src/gcc/reginfo.c (.../tags/gcc_4_8_2_release)
 
27370
+++ b/src/gcc/reginfo.c (.../branches/gcc-4_8-branch)
 
27371
@@ -85,7 +85,7 @@
 
27372
 char global_regs[FIRST_PSEUDO_REGISTER];
 
27373
 
 
27374
 /* Declaration for the global register. */
 
27375
-static tree GTY(()) global_regs_decl[FIRST_PSEUDO_REGISTER];
 
27376
+tree global_regs_decl[FIRST_PSEUDO_REGISTER];
 
27377
 
 
27378
 /* Same information as REGS_INVALIDATED_BY_CALL but in regset form to be used
 
27379
    in dataflow more conveniently.  */
 
27380
@@ -620,40 +620,35 @@
 
27381
        mode = GET_MODE_WIDER_MODE (mode))
 
27382
     if ((unsigned) hard_regno_nregs[regno][mode] == nregs
 
27383
        && HARD_REGNO_MODE_OK (regno, mode)
 
27384
-       && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
 
27385
+       && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
 
27386
+       && GET_MODE_SIZE (mode) > GET_MODE_SIZE (found_mode))
 
27387
       found_mode = mode;
 
27388
 
 
27389
-  if (found_mode != VOIDmode)
 
27390
-    return found_mode;
 
27391
-
 
27392
   for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
 
27393
        mode != VOIDmode;
 
27394
        mode = GET_MODE_WIDER_MODE (mode))
 
27395
     if ((unsigned) hard_regno_nregs[regno][mode] == nregs
 
27396
        && HARD_REGNO_MODE_OK (regno, mode)
 
27397
-       && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
 
27398
+       && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
 
27399
+       && GET_MODE_SIZE (mode) > GET_MODE_SIZE (found_mode))
 
27400
       found_mode = mode;
 
27401
 
 
27402
-  if (found_mode != VOIDmode)
 
27403
-    return found_mode;
 
27404
-
 
27405
   for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_FLOAT);
 
27406
        mode != VOIDmode;
 
27407
        mode = GET_MODE_WIDER_MODE (mode))
 
27408
     if ((unsigned) hard_regno_nregs[regno][mode] == nregs
 
27409
        && HARD_REGNO_MODE_OK (regno, mode)
 
27410
-       && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
 
27411
+       && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
 
27412
+       && GET_MODE_SIZE (mode) > GET_MODE_SIZE (found_mode))
 
27413
       found_mode = mode;
 
27414
 
 
27415
-  if (found_mode != VOIDmode)
 
27416
-    return found_mode;
 
27417
-
 
27418
   for (mode = GET_CLASS_NARROWEST_MODE (MODE_VECTOR_INT);
 
27419
        mode != VOIDmode;
 
27420
        mode = GET_MODE_WIDER_MODE (mode))
 
27421
     if ((unsigned) hard_regno_nregs[regno][mode] == nregs
 
27422
        && HARD_REGNO_MODE_OK (regno, mode)
 
27423
-       && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode)))
 
27424
+       && (! call_saved || ! HARD_REGNO_CALL_PART_CLOBBERED (regno, mode))
 
27425
+       && GET_MODE_SIZE (mode) > GET_MODE_SIZE (found_mode))
 
27426
       found_mode = mode;
 
27427
 
 
27428
   if (found_mode != VOIDmode)
 
27429
Index: gcc/Makefile.in
 
27430
===================================================================
 
27431
--- a/src/gcc/Makefile.in       (.../tags/gcc_4_8_2_release)
 
27432
+++ b/src/gcc/Makefile.in       (.../branches/gcc-4_8-branch)
 
27433
@@ -1827,7 +1827,7 @@
 
27434
            "$(MULTILIB_EXCLUSIONS)" \
 
27435
            "$(MULTILIB_OSDIRNAMES)" \
 
27436
            "$(MULTILIB_REQUIRED)" \
 
27437
-           "$(MULTIARCH_DIRNAME)" \
 
27438
+           "$(if $(MULTILIB_OSDIRNAMES),,$(MULTIARCH_DIRNAME))" \
 
27439
            "$(MULTILIB_REUSE)" \
 
27440
            "@enable_multilib@" \
 
27441
            > tmp-mlib.h; \
 
27442
@@ -2256,7 +2256,7 @@
 
27443
    $(FUNCTION_H) $(TM_H) coretypes.h \
 
27444
    $(TREE_PASS_H) $(BASIC_BLOCK_H) $(BITMAP_H) \
 
27445
    $(FLAGS_H) $(HASHTAB_H) pointer-set.h \
 
27446
-   $(GIMPLE_H) $(TREE_INLINE_H) $(GIMPLE_PRETTY_PRINT_H)
 
27447
+   $(GIMPLE_H) $(TREE_INLINE_H) $(GIMPLE_PRETTY_PRINT_H) $(PARAMS_H)
 
27448
 tree-ssa.o : tree-ssa.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
 
27449
    $(TREE_H) $(TM_P_H) $(EXPR_H) $(DIAGNOSTIC_H) \
 
27450
    toplev.h $(FUNCTION_H) $(TM_H) coretypes.h \
 
27451
@@ -3037,7 +3037,7 @@
 
27452
     $(TM_H) coretypes.h $(GIMPLE_H) \
 
27453
     $(TREE_PASS_H) $(FLAGS_H) $(EXPR_H) $(BASIC_BLOCK_H) \
 
27454
     $(GGC_H) $(OBSTACK_H) $(PARAMS_H) $(CPPLIB_H) $(PARAMS_H) \
 
27455
-    $(GIMPLE_PRETTY_PRINT_H) langhooks.h
 
27456
+    $(GIMPLE_PRETTY_PRINT_H) langhooks.h $(OPTABS_H)
 
27457
 tree-complex.o : tree-complex.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TREE_H) \
 
27458
     $(TM_H) $(FLAGS_H) $(TREE_FLOW_H) $(GIMPLE_H) \
 
27459
     tree-iterator.h $(TREE_PASS_H) tree-ssa-propagate.h
 
27460
@@ -3276,12 +3276,12 @@
 
27461
    $(TM_H) $(RTL_H) $(REGS_H) insn-config.h insn-codes.h $(DF_H) \
 
27462
    $(RECOG_H) output.h addresses.h $(REGS_H) hard-reg-set.h $(FLAGS_H) \
 
27463
    $(FUNCTION_H) $(EXPR_H) $(BASIC_BLOCK_H) $(TM_P_H) $(EXCEPT_H) \
 
27464
-   ira.h rtl-error.h $(LRA_INT_H)
 
27465
+   ira.h rtl-error.h $(LRA_INT_H) $(OPTABS_H)
 
27466
 lra-eliminations.o : lra-eliminations.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
 
27467
    $(TM_H) $(RTL_H) $(REGS_H) insn-config.h $(DF_H) \
 
27468
    $(RECOG_H) output.h $(REGS_H) hard-reg-set.h $(FLAGS_H) $(FUNCTION_H) \
 
27469
    $(EXPR_H) $(BASIC_BLOCK_H) $(TM_P_H) $(EXCEPT_H) ira.h \
 
27470
-   rtl-error.h $(LRA_INT_H)
 
27471
+   rtl-error.h $(LRA_INT_H) $(OPTABS_H)
 
27472
 lra-lives.o : lra-lives.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
 
27473
    $(RTL_H) $(REGS_H) insn-config.h $(DF_H) \
 
27474
    $(RECOG_H) output.h $(REGS_H) hard-reg-set.h $(FLAGS_H) $(FUNCTION_H) \
 
27475
Index: gcc/gimple.c
 
27476
===================================================================
 
27477
--- a/src/gcc/gimple.c  (.../tags/gcc_4_8_2_release)
 
27478
+++ b/src/gcc/gimple.c  (.../branches/gcc-4_8-branch)
 
27479
@@ -3841,42 +3841,46 @@
 
27480
 
 
27481
 /* For the statement STMT call the callbacks VISIT_LOAD, VISIT_STORE and
 
27482
    VISIT_ADDR if non-NULL on loads, store and address-taken operands
 
27483
-   passing the STMT, the base of the operand and DATA to it.  The base
 
27484
-   will be either a decl, an indirect reference (including TARGET_MEM_REF)
 
27485
-   or the argument of an address expression.
 
27486
+   passing the STMT, the base of the operand, the operand itself containing
 
27487
+   the base and DATA to it.  The base will be either a decl, an indirect
 
27488
+   reference (including TARGET_MEM_REF) or the argument of an address
 
27489
+   expression.
 
27490
    Returns the results of these callbacks or'ed.  */
 
27491
 
 
27492
 bool
 
27493
 walk_stmt_load_store_addr_ops (gimple stmt, void *data,
 
27494
-                              bool (*visit_load)(gimple, tree, void *),
 
27495
-                              bool (*visit_store)(gimple, tree, void *),
 
27496
-                              bool (*visit_addr)(gimple, tree, void *))
 
27497
+                              walk_stmt_load_store_addr_fn visit_load,
 
27498
+                              walk_stmt_load_store_addr_fn visit_store,
 
27499
+                              walk_stmt_load_store_addr_fn visit_addr)
 
27500
 {
 
27501
   bool ret = false;
 
27502
   unsigned i;
 
27503
   if (gimple_assign_single_p (stmt))
 
27504
     {
 
27505
-      tree lhs, rhs;
 
27506
+      tree lhs, rhs, arg;
 
27507
       if (visit_store)
 
27508
        {
 
27509
-         lhs = get_base_loadstore (gimple_assign_lhs (stmt));
 
27510
+         arg = gimple_assign_lhs (stmt);
 
27511
+         lhs = get_base_loadstore (arg);
 
27512
          if (lhs)
 
27513
-           ret |= visit_store (stmt, lhs, data);
 
27514
+           ret |= visit_store (stmt, lhs, arg, data);
 
27515
        }
 
27516
-      rhs = gimple_assign_rhs1 (stmt);
 
27517
+      arg = gimple_assign_rhs1 (stmt);
 
27518
+      rhs = arg;
 
27519
       while (handled_component_p (rhs))
 
27520
        rhs = TREE_OPERAND (rhs, 0);
 
27521
       if (visit_addr)
 
27522
        {
 
27523
          if (TREE_CODE (rhs) == ADDR_EXPR)
 
27524
-           ret |= visit_addr (stmt, TREE_OPERAND (rhs, 0), data);
 
27525
+           ret |= visit_addr (stmt, TREE_OPERAND (rhs, 0), arg, data);
 
27526
          else if (TREE_CODE (rhs) == TARGET_MEM_REF
 
27527
                   && TREE_CODE (TMR_BASE (rhs)) == ADDR_EXPR)
 
27528
-           ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (rhs), 0), data);
 
27529
+           ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (rhs), 0), arg,
 
27530
+                              data);
 
27531
          else if (TREE_CODE (rhs) == OBJ_TYPE_REF
 
27532
                   && TREE_CODE (OBJ_TYPE_REF_OBJECT (rhs)) == ADDR_EXPR)
 
27533
            ret |= visit_addr (stmt, TREE_OPERAND (OBJ_TYPE_REF_OBJECT (rhs),
 
27534
-                                                  0), data);
 
27535
+                                                  0), arg, data);
 
27536
          else if (TREE_CODE (rhs) == CONSTRUCTOR)
 
27537
            {
 
27538
              unsigned int ix;
 
27539
@@ -3884,23 +3888,23 @@
 
27540
 
 
27541
              FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (rhs), ix, val)
 
27542
                if (TREE_CODE (val) == ADDR_EXPR)
 
27543
-                 ret |= visit_addr (stmt, TREE_OPERAND (val, 0), data);
 
27544
+                 ret |= visit_addr (stmt, TREE_OPERAND (val, 0), arg, data);
 
27545
                else if (TREE_CODE (val) == OBJ_TYPE_REF
 
27546
                         && TREE_CODE (OBJ_TYPE_REF_OBJECT (val)) == ADDR_EXPR)
 
27547
                  ret |= visit_addr (stmt,
 
27548
                                     TREE_OPERAND (OBJ_TYPE_REF_OBJECT (val),
 
27549
-                                                  0), data);
 
27550
+                                                  0), arg, data);
 
27551
            }
 
27552
           lhs = gimple_assign_lhs (stmt);
 
27553
          if (TREE_CODE (lhs) == TARGET_MEM_REF
 
27554
               && TREE_CODE (TMR_BASE (lhs)) == ADDR_EXPR)
 
27555
-            ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (lhs), 0), data);
 
27556
+           ret |= visit_addr (stmt, TREE_OPERAND (TMR_BASE (lhs), 0), lhs, data);
 
27557
        }
 
27558
       if (visit_load)
 
27559
        {
 
27560
          rhs = get_base_loadstore (rhs);
 
27561
          if (rhs)
 
27562
-           ret |= visit_load (stmt, rhs, data);
 
27563
+           ret |= visit_load (stmt, rhs, arg, data);
 
27564
        }
 
27565
     }
 
27566
   else if (visit_addr
 
27567
@@ -3913,7 +3917,7 @@
 
27568
          if (op == NULL_TREE)
 
27569
            ;
 
27570
          else if (TREE_CODE (op) == ADDR_EXPR)
 
27571
-           ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
 
27572
+           ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
 
27573
          /* COND_EXPR and VCOND_EXPR rhs1 argument is a comparison
 
27574
             tree with two operands.  */
 
27575
          else if (i == 1 && COMPARISON_CLASS_P (op))
 
27576
@@ -3920,10 +3924,10 @@
 
27577
            {
 
27578
              if (TREE_CODE (TREE_OPERAND (op, 0)) == ADDR_EXPR)
 
27579
                ret |= visit_addr (stmt, TREE_OPERAND (TREE_OPERAND (op, 0),
 
27580
-                                                      0), data);
 
27581
+                                                      0), op, data);
 
27582
              if (TREE_CODE (TREE_OPERAND (op, 1)) == ADDR_EXPR)
 
27583
                ret |= visit_addr (stmt, TREE_OPERAND (TREE_OPERAND (op, 1),
 
27584
-                                                      0), data);
 
27585
+                                                      0), op, data);
 
27586
            }
 
27587
        }
 
27588
     }
 
27589
@@ -3931,26 +3935,26 @@
 
27590
     {
 
27591
       if (visit_store)
 
27592
        {
 
27593
-         tree lhs = gimple_call_lhs (stmt);
 
27594
-         if (lhs)
 
27595
+         tree arg = gimple_call_lhs (stmt);
 
27596
+         if (arg)
 
27597
            {
 
27598
-             lhs = get_base_loadstore (lhs);
 
27599
+             tree lhs = get_base_loadstore (arg);
 
27600
              if (lhs)
 
27601
-               ret |= visit_store (stmt, lhs, data);
 
27602
+               ret |= visit_store (stmt, lhs, arg, data);
 
27603
            }
 
27604
        }
 
27605
       if (visit_load || visit_addr)
 
27606
        for (i = 0; i < gimple_call_num_args (stmt); ++i)
 
27607
          {
 
27608
-           tree rhs = gimple_call_arg (stmt, i);
 
27609
+           tree arg = gimple_call_arg (stmt, i);
 
27610
            if (visit_addr
 
27611
-               && TREE_CODE (rhs) == ADDR_EXPR)
 
27612
-             ret |= visit_addr (stmt, TREE_OPERAND (rhs, 0), data);
 
27613
+               && TREE_CODE (arg) == ADDR_EXPR)
 
27614
+             ret |= visit_addr (stmt, TREE_OPERAND (arg, 0), arg, data);
 
27615
            else if (visit_load)
 
27616
              {
 
27617
-               rhs = get_base_loadstore (rhs);
 
27618
+               tree rhs = get_base_loadstore (arg);
 
27619
                if (rhs)
 
27620
-                 ret |= visit_load (stmt, rhs, data);
 
27621
+                 ret |= visit_load (stmt, rhs, arg, data);
 
27622
              }
 
27623
          }
 
27624
       if (visit_addr
 
27625
@@ -3957,12 +3961,13 @@
 
27626
          && gimple_call_chain (stmt)
 
27627
          && TREE_CODE (gimple_call_chain (stmt)) == ADDR_EXPR)
 
27628
        ret |= visit_addr (stmt, TREE_OPERAND (gimple_call_chain (stmt), 0),
 
27629
-                          data);
 
27630
+                          gimple_call_chain (stmt), data);
 
27631
       if (visit_addr
 
27632
          && gimple_call_return_slot_opt_p (stmt)
 
27633
          && gimple_call_lhs (stmt) != NULL_TREE
 
27634
          && TREE_ADDRESSABLE (TREE_TYPE (gimple_call_lhs (stmt))))
 
27635
-       ret |= visit_addr (stmt, gimple_call_lhs (stmt), data);
 
27636
+       ret |= visit_addr (stmt, gimple_call_lhs (stmt),
 
27637
+                          gimple_call_lhs (stmt), data);
 
27638
     }
 
27639
   else if (gimple_code (stmt) == GIMPLE_ASM)
 
27640
     {
 
27641
@@ -3978,7 +3983,7 @@
 
27642
            tree link = gimple_asm_output_op (stmt, i);
 
27643
            tree op = get_base_loadstore (TREE_VALUE (link));
 
27644
            if (op && visit_store)
 
27645
-             ret |= visit_store (stmt, op, data);
 
27646
+             ret |= visit_store (stmt, op, TREE_VALUE (link), data);
 
27647
            if (visit_addr)
 
27648
              {
 
27649
                constraint = TREE_STRING_POINTER
 
27650
@@ -3987,7 +3992,7 @@
 
27651
                parse_output_constraint (&constraint, i, 0, 0, &allows_mem,
 
27652
                                         &allows_reg, &is_inout);
 
27653
                if (op && !allows_reg && allows_mem)
 
27654
-                 ret |= visit_addr (stmt, op, data);
 
27655
+                 ret |= visit_addr (stmt, op, TREE_VALUE (link), data);
 
27656
              }
 
27657
          }
 
27658
       if (visit_load || visit_addr)
 
27659
@@ -3997,7 +4002,7 @@
 
27660
            tree op = TREE_VALUE (link);
 
27661
            if (visit_addr
 
27662
                && TREE_CODE (op) == ADDR_EXPR)
 
27663
-             ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
 
27664
+             ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
 
27665
            else if (visit_load || visit_addr)
 
27666
              {
 
27667
                op = get_base_loadstore (op);
 
27668
@@ -4004,7 +4009,7 @@
 
27669
                if (op)
 
27670
                  {
 
27671
                    if (visit_load)
 
27672
-                     ret |= visit_load (stmt, op, data);
 
27673
+                     ret |= visit_load (stmt, op, TREE_VALUE (link), data);
 
27674
                    if (visit_addr)
 
27675
                      {
 
27676
                        constraint = TREE_STRING_POINTER
 
27677
@@ -4013,7 +4018,8 @@
 
27678
                                                0, oconstraints,
 
27679
                                                &allows_mem, &allows_reg);
 
27680
                        if (!allows_reg && allows_mem)
 
27681
-                         ret |= visit_addr (stmt, op, data);
 
27682
+                         ret |= visit_addr (stmt, op, TREE_VALUE (link),
 
27683
+                                            data);
 
27684
                      }
 
27685
                  }
 
27686
              }
 
27687
@@ -4026,12 +4032,12 @@
 
27688
        {
 
27689
          if (visit_addr
 
27690
              && TREE_CODE (op) == ADDR_EXPR)
 
27691
-           ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
 
27692
+           ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
 
27693
          else if (visit_load)
 
27694
            {
 
27695
-             op = get_base_loadstore (op);
 
27696
-             if (op)
 
27697
-               ret |= visit_load (stmt, op, data);
 
27698
+             tree base = get_base_loadstore (op);
 
27699
+             if (base)
 
27700
+               ret |= visit_load (stmt, base, op, data);
 
27701
            }
 
27702
        }
 
27703
     }
 
27704
@@ -4042,7 +4048,7 @@
 
27705
        {
 
27706
          tree op = PHI_ARG_DEF (stmt, i);
 
27707
          if (TREE_CODE (op) == ADDR_EXPR)
 
27708
-           ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
 
27709
+           ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
 
27710
        }
 
27711
     }
 
27712
   else if (visit_addr
 
27713
@@ -4050,7 +4056,7 @@
 
27714
     {
 
27715
       tree op = gimple_goto_dest (stmt);
 
27716
       if (TREE_CODE (op) == ADDR_EXPR)
 
27717
-       ret |= visit_addr (stmt, TREE_OPERAND (op, 0), data);
 
27718
+       ret |= visit_addr (stmt, TREE_OPERAND (op, 0), op, data);
 
27719
     }
 
27720
 
 
27721
   return ret;
 
27722
@@ -4061,8 +4067,8 @@
 
27723
 
 
27724
 bool
 
27725
 walk_stmt_load_store_ops (gimple stmt, void *data,
 
27726
-                         bool (*visit_load)(gimple, tree, void *),
 
27727
-                         bool (*visit_store)(gimple, tree, void *))
 
27728
+                         walk_stmt_load_store_addr_fn visit_load,
 
27729
+                         walk_stmt_load_store_addr_fn visit_store)
 
27730
 {
 
27731
   return walk_stmt_load_store_addr_ops (stmt, data,
 
27732
                                        visit_load, visit_store, NULL);
 
27733
@@ -4071,8 +4077,7 @@
 
27734
 /* Helper for gimple_ior_addresses_taken_1.  */
 
27735
 
 
27736
 static bool
 
27737
-gimple_ior_addresses_taken_1 (gimple stmt ATTRIBUTE_UNUSED,
 
27738
-                             tree addr, void *data)
 
27739
+gimple_ior_addresses_taken_1 (gimple, tree addr, tree, void *data)
 
27740
 {
 
27741
   bitmap addresses_taken = (bitmap)data;
 
27742
   addr = get_base_address (addr);
 
27743
Index: gcc/tree-ssa-structalias.c
 
27744
===================================================================
 
27745
--- a/src/gcc/tree-ssa-structalias.c    (.../tags/gcc_4_8_2_release)
 
27746
+++ b/src/gcc/tree-ssa-structalias.c    (.../branches/gcc-4_8-branch)
 
27747
@@ -949,24 +949,27 @@
 
27748
        bitmap_set_bit (result, i);
 
27749
       else
 
27750
        {
 
27751
-         unsigned HOST_WIDE_INT fieldoffset = vi->offset + offset;
 
27752
+         HOST_WIDE_INT fieldoffset = vi->offset + offset;
 
27753
+         unsigned HOST_WIDE_INT size = vi->size;
 
27754
 
 
27755
          /* If the offset makes the pointer point to before the
 
27756
             variable use offset zero for the field lookup.  */
 
27757
-         if (offset < 0
 
27758
-             && fieldoffset > vi->offset)
 
27759
-           fieldoffset = 0;
 
27760
-
 
27761
-         if (offset != 0)
 
27762
+         if (fieldoffset < 0)
 
27763
+           vi = lookup_vi_for_tree (vi->decl);
 
27764
+         else
 
27765
            vi = first_or_preceding_vi_for_offset (vi, fieldoffset);
 
27766
 
 
27767
-         bitmap_set_bit (result, vi->id);
 
27768
-         /* If the result is not exactly at fieldoffset include the next
 
27769
-            field as well.  See get_constraint_for_ptr_offset for more
 
27770
-            rationale.  */
 
27771
-         if (vi->offset != fieldoffset
 
27772
-             && vi->next != NULL)
 
27773
-           bitmap_set_bit (result, vi->next->id);
 
27774
+         do
 
27775
+           {
 
27776
+             bitmap_set_bit (result, vi->id);
 
27777
+             if (!vi->next)
 
27778
+               break;
 
27779
+
 
27780
+             /* We have to include all fields that overlap the current field
 
27781
+                shifted by offset.  */
 
27782
+             vi = vi->next;
 
27783
+           }
 
27784
+         while (vi->offset < fieldoffset + size);
 
27785
        }
 
27786
     }
 
27787
 
 
27788
@@ -1607,16 +1610,21 @@
 
27789
     {
 
27790
       varinfo_t v = get_varinfo (j);
 
27791
       HOST_WIDE_INT fieldoffset = v->offset + roffset;
 
27792
+      unsigned HOST_WIDE_INT size = v->size;
 
27793
       unsigned int t;
 
27794
 
 
27795
       if (v->is_full_var)
 
27796
-       fieldoffset = v->offset;
 
27797
+       ;
 
27798
       else if (roffset != 0)
 
27799
-       v = first_vi_for_offset (v, fieldoffset);
 
27800
-      /* If the access is outside of the variable we can ignore it.  */
 
27801
-      if (!v)
 
27802
-       continue;
 
27803
+       {
 
27804
+         if (fieldoffset < 0)
 
27805
+           v = lookup_vi_for_tree (v->decl);
 
27806
+         else
 
27807
+           v = first_or_preceding_vi_for_offset (v, fieldoffset);
 
27808
+       }
 
27809
 
 
27810
+      /* We have to include all fields that overlap the current field
 
27811
+        shifted by roffset.  */
 
27812
       do
 
27813
        {
 
27814
          t = find (v->id);
 
27815
@@ -1633,16 +1641,13 @@
 
27816
                   && add_graph_edge (graph, lhs, t))
 
27817
            flag |= bitmap_ior_into (sol, get_varinfo (t)->solution);
 
27818
 
 
27819
-         /* If the variable is not exactly at the requested offset
 
27820
-            we have to include the next one.  */
 
27821
-         if (v->offset == (unsigned HOST_WIDE_INT)fieldoffset
 
27822
+         if (v->is_full_var
 
27823
              || v->next == NULL)
 
27824
            break;
 
27825
 
 
27826
          v = v->next;
 
27827
-         fieldoffset = v->offset;
 
27828
        }
 
27829
-      while (1);
 
27830
+      while (v->offset < fieldoffset + size);
 
27831
     }
 
27832
 
 
27833
 done:
 
27834
@@ -1705,15 +1710,20 @@
 
27835
       varinfo_t v = get_varinfo (j);
 
27836
       unsigned int t;
 
27837
       HOST_WIDE_INT fieldoffset = v->offset + loff;
 
27838
+      unsigned HOST_WIDE_INT size = v->size;
 
27839
 
 
27840
       if (v->is_full_var)
 
27841
-       fieldoffset = v->offset;
 
27842
+       ;
 
27843
       else if (loff != 0)
 
27844
-       v = first_vi_for_offset (v, fieldoffset);
 
27845
-      /* If the access is outside of the variable we can ignore it.  */
 
27846
-      if (!v)
 
27847
-       continue;
 
27848
+       {
 
27849
+         if (fieldoffset < 0)
 
27850
+           v = lookup_vi_for_tree (v->decl);
 
27851
+         else
 
27852
+           v = first_or_preceding_vi_for_offset (v, fieldoffset);
 
27853
+       }
 
27854
 
 
27855
+      /* We have to include all fields that overlap the current field
 
27856
+        shifted by loff.  */
 
27857
       do
 
27858
        {
 
27859
          if (v->may_have_pointers)
 
27860
@@ -1739,16 +1749,13 @@
 
27861
                bitmap_set_bit (changed, t);
 
27862
            }
 
27863
 
 
27864
-         /* If the variable is not exactly at the requested offset
 
27865
-            we have to include the next one.  */
 
27866
-         if (v->offset == (unsigned HOST_WIDE_INT)fieldoffset
 
27867
+         if (v->is_full_var
 
27868
              || v->next == NULL)
 
27869
            break;
 
27870
 
 
27871
          v = v->next;
 
27872
-         fieldoffset = v->offset;
 
27873
        }
 
27874
-      while (1);
 
27875
+      while (v->offset < fieldoffset + size);
 
27876
     }
 
27877
 }
 
27878
 
 
27879
@@ -2997,35 +3004,31 @@
 
27880
          varinfo_t temp;
 
27881
          unsigned HOST_WIDE_INT offset = curr->offset + rhsoffset;
 
27882
 
 
27883
-         /* Search the sub-field which overlaps with the
 
27884
-            pointed-to offset.  If the result is outside of the variable
 
27885
-            we have to provide a conservative result, as the variable is
 
27886
-            still reachable from the resulting pointer (even though it
 
27887
-            technically cannot point to anything).  The last and first
 
27888
-            sub-fields are such conservative results.
 
27889
-            ???  If we always had a sub-field for &object + 1 then
 
27890
-            we could represent this in a more precise way.  */
 
27891
+         /* If curr->offset + rhsoffset is less than zero adjust it.  */
 
27892
          if (rhsoffset < 0
 
27893
              && curr->offset < offset)
 
27894
            offset = 0;
 
27895
+
 
27896
+         /* We have to include all fields that overlap the current
 
27897
+            field shifted by rhsoffset.  And we include at least
 
27898
+            the last or the first field of the variable to represent
 
27899
+            reachability of off-bound addresses, in particular &object + 1,
 
27900
+            conservatively correct.  */
 
27901
          temp = first_or_preceding_vi_for_offset (curr, offset);
 
27902
-
 
27903
-         /* If the found variable is not exactly at the pointed to
 
27904
-            result, we have to include the next variable in the
 
27905
-            solution as well.  Otherwise two increments by offset / 2
 
27906
-            do not result in the same or a conservative superset
 
27907
-            solution.  */
 
27908
-         if (temp->offset != offset
 
27909
-             && temp->next != NULL)
 
27910
+         temp = first_or_preceding_vi_for_offset (curr, offset);
 
27911
+         c.var = temp->id;
 
27912
+         c.offset = 0;
 
27913
+         temp = temp->next;
 
27914
+         while (temp
 
27915
+                && temp->offset < offset + curr->size)
 
27916
            {
 
27917
              struct constraint_expr c2;
 
27918
-             c2.var = temp->next->id;
 
27919
+             c2.var = temp->id;
 
27920
              c2.type = ADDRESSOF;
 
27921
              c2.offset = 0;
 
27922
              results->safe_push (c2);
 
27923
+             temp = temp->next;
 
27924
            }
 
27925
-         c.var = temp->id;
 
27926
-         c.offset = 0;
 
27927
        }
 
27928
       else
 
27929
        c.offset = rhsoffset;
 
27930
Index: gcc/gimple.h
 
27931
===================================================================
 
27932
--- a/src/gcc/gimple.h  (.../tags/gcc_4_8_2_release)
 
27933
+++ b/src/gcc/gimple.h  (.../branches/gcc-4_8-branch)
 
27934
@@ -888,13 +888,14 @@
 
27935
 extern alias_set_type gimple_get_alias_set (tree);
 
27936
 extern void count_uses_and_derefs (tree, gimple, unsigned *, unsigned *,
 
27937
                                   unsigned *);
 
27938
+typedef bool (*walk_stmt_load_store_addr_fn) (gimple, tree, tree, void *);
 
27939
 extern bool walk_stmt_load_store_addr_ops (gimple, void *,
 
27940
-                                          bool (*)(gimple, tree, void *),
 
27941
-                                          bool (*)(gimple, tree, void *),
 
27942
-                                          bool (*)(gimple, tree, void *));
 
27943
+                                          walk_stmt_load_store_addr_fn,
 
27944
+                                          walk_stmt_load_store_addr_fn,
 
27945
+                                          walk_stmt_load_store_addr_fn);
 
27946
 extern bool walk_stmt_load_store_ops (gimple, void *,
 
27947
-                                     bool (*)(gimple, tree, void *),
 
27948
-                                     bool (*)(gimple, tree, void *));
 
27949
+                                     walk_stmt_load_store_addr_fn,
 
27950
+                                     walk_stmt_load_store_addr_fn);
 
27951
 extern bool gimple_ior_addresses_taken (bitmap, gimple);
 
27952
 extern bool gimple_call_builtin_p (gimple, enum built_in_class);
 
27953
 extern bool gimple_call_builtin_p (gimple, enum built_in_function);
 
27954
Index: gcc/tree-cfg.c
 
27955
===================================================================
 
27956
--- a/src/gcc/tree-cfg.c        (.../tags/gcc_4_8_2_release)
 
27957
+++ b/src/gcc/tree-cfg.c        (.../branches/gcc-4_8-branch)
 
27958
@@ -104,7 +104,6 @@
 
27959
 static void assign_discriminator (location_t, basic_block);
 
27960
 static edge gimple_redirect_edge_and_branch (edge, basic_block);
 
27961
 static edge gimple_try_redirect_by_replacing_jump (edge, basic_block);
 
27962
-static unsigned int split_critical_edges (void);
 
27963
 
 
27964
 /* Various helpers.  */
 
27965
 static inline bool stmt_starts_bb_p (gimple, gimple);
 
27966
@@ -1535,6 +1534,11 @@
 
27967
 
 
27968
   FOR_EACH_IMM_USE_STMT (stmt, imm_iter, name)
 
27969
     {
 
27970
+      /* Mark the block if we change the last stmt in it.  */
 
27971
+      if (cfgcleanup_altered_bbs
 
27972
+         && stmt_ends_bb_p (stmt))
 
27973
+       bitmap_set_bit (cfgcleanup_altered_bbs, gimple_bb (stmt)->index);
 
27974
+
 
27975
       FOR_EACH_IMM_USE_ON_STMT (use, imm_iter)
 
27976
         {
 
27977
          replace_exp (use, val);
 
27978
@@ -1559,11 +1563,6 @@
 
27979
          gimple orig_stmt = stmt;
 
27980
          size_t i;
 
27981
 
 
27982
-         /* Mark the block if we changed the last stmt in it.  */
 
27983
-         if (cfgcleanup_altered_bbs
 
27984
-             && stmt_ends_bb_p (stmt))
 
27985
-           bitmap_set_bit (cfgcleanup_altered_bbs, gimple_bb (stmt)->index);
 
27986
-
 
27987
          /* FIXME.  It shouldn't be required to keep TREE_CONSTANT
 
27988
             on ADDR_EXPRs up-to-date on GIMPLE.  Propagation will
 
27989
             only change sth from non-invariant to invariant, and only
 
27990
@@ -3513,11 +3512,10 @@
 
27991
     case PLUS_EXPR:
 
27992
     case MINUS_EXPR:
 
27993
       {
 
27994
-       /* We use regular PLUS_EXPR and MINUS_EXPR for vectors.
 
27995
-          ???  This just makes the checker happy and may not be what is
 
27996
-          intended.  */
 
27997
-       if (TREE_CODE (lhs_type) == VECTOR_TYPE
 
27998
-           && POINTER_TYPE_P (TREE_TYPE (lhs_type)))
 
27999
+       tree lhs_etype = lhs_type;
 
28000
+       tree rhs1_etype = rhs1_type;
 
28001
+       tree rhs2_etype = rhs2_type;
 
28002
+       if (TREE_CODE (lhs_type) == VECTOR_TYPE)
 
28003
          {
 
28004
            if (TREE_CODE (rhs1_type) != VECTOR_TYPE
 
28005
                || TREE_CODE (rhs2_type) != VECTOR_TYPE)
 
28006
@@ -3525,22 +3523,13 @@
 
28007
                error ("invalid non-vector operands to vector valued plus");
 
28008
                return true;
 
28009
              }
 
28010
-           lhs_type = TREE_TYPE (lhs_type);
 
28011
-           rhs1_type = TREE_TYPE (rhs1_type);
 
28012
-           rhs2_type = TREE_TYPE (rhs2_type);
 
28013
-           /* PLUS_EXPR is commutative, so we might end up canonicalizing
 
28014
-              the pointer to 2nd place.  */
 
28015
-           if (POINTER_TYPE_P (rhs2_type))
 
28016
-             {
 
28017
-               tree tem = rhs1_type;
 
28018
-               rhs1_type = rhs2_type;
 
28019
-               rhs2_type = tem;
 
28020
-             }
 
28021
-           goto do_pointer_plus_expr_check;
 
28022
+           lhs_etype = TREE_TYPE (lhs_type);
 
28023
+           rhs1_etype = TREE_TYPE (rhs1_type);
 
28024
+           rhs2_etype = TREE_TYPE (rhs2_type);
 
28025
          }
 
28026
-       if (POINTER_TYPE_P (lhs_type)
 
28027
-           || POINTER_TYPE_P (rhs1_type)
 
28028
-           || POINTER_TYPE_P (rhs2_type))
 
28029
+       if (POINTER_TYPE_P (lhs_etype)
 
28030
+           || POINTER_TYPE_P (rhs1_etype)
 
28031
+           || POINTER_TYPE_P (rhs2_etype))
 
28032
          {
 
28033
            error ("invalid (pointer) operands to plus/minus");
 
28034
            return true;
 
28035
@@ -3552,7 +3541,6 @@
 
28036
 
 
28037
     case POINTER_PLUS_EXPR:
 
28038
       {
 
28039
-do_pointer_plus_expr_check:
 
28040
        if (!POINTER_TYPE_P (rhs1_type)
 
28041
            || !useless_type_conversion_p (lhs_type, rhs1_type)
 
28042
            || !ptrofftype_p (rhs2_type))
 
28043
@@ -7658,7 +7646,7 @@
 
28044
 
 
28045
 /* Split all critical edges.  */
 
28046
 
 
28047
-static unsigned int
 
28048
+unsigned int
 
28049
 split_critical_edges (void)
 
28050
 {
 
28051
   basic_block bb;
 
28052
Index: gcc/passes.c
 
28053
===================================================================
 
28054
--- a/src/gcc/passes.c  (.../tags/gcc_4_8_2_release)
 
28055
+++ b/src/gcc/passes.c  (.../branches/gcc-4_8-branch)
 
28056
@@ -1398,6 +1398,7 @@
 
28057
       /* After CCP we rewrite no longer addressed locals into SSA
 
28058
         form if possible.  */
 
28059
       NEXT_PASS (pass_forwprop);
 
28060
+      NEXT_PASS (pass_object_sizes);
 
28061
       /* pass_build_alias is a dummy pass that ensures that we
 
28062
         execute TODO_rebuild_alias at this point.  */
 
28063
       NEXT_PASS (pass_build_alias);
 
28064
@@ -1435,7 +1436,6 @@
 
28065
       NEXT_PASS (pass_dce);
 
28066
       NEXT_PASS (pass_forwprop);
 
28067
       NEXT_PASS (pass_phiopt);
 
28068
-      NEXT_PASS (pass_object_sizes);
 
28069
       NEXT_PASS (pass_strlen);
 
28070
       NEXT_PASS (pass_ccp);
 
28071
       /* After CCP we rewrite no longer addressed locals into SSA
 
28072
Index: gcc/tree-ssa-reassoc.c
 
28073
===================================================================
 
28074
--- a/src/gcc/tree-ssa-reassoc.c        (.../tags/gcc_4_8_2_release)
 
28075
+++ b/src/gcc/tree-ssa-reassoc.c        (.../branches/gcc-4_8-branch)
 
28076
@@ -1980,8 +1980,15 @@
 
28077
 
 
28078
   tem = fold_convert_loc (loc, optype, tem);
 
28079
   gsi = gsi_for_stmt (stmt);
 
28080
-  tem = force_gimple_operand_gsi (&gsi, tem, true, NULL_TREE, true,
 
28081
-                                 GSI_SAME_STMT);
 
28082
+  /* In rare cases range->exp can be equal to lhs of stmt.
 
28083
+     In that case we have to insert after the stmt rather then before
 
28084
+     it.  */
 
28085
+  if (op == range->exp)
 
28086
+    tem = force_gimple_operand_gsi (&gsi, tem, true, NULL_TREE, false,
 
28087
+                                   GSI_SAME_STMT);
 
28088
+  else
 
28089
+    tem = force_gimple_operand_gsi (&gsi, tem, true, NULL_TREE, true,
 
28090
+                                   GSI_SAME_STMT);
 
28091
 
 
28092
   /* If doing inter-bb range test optimization, update the
 
28093
      stmts immediately.  Start with changing the first range test
 
28094
Index: gcc/config/s390/s390.c
 
28095
===================================================================
 
28096
--- a/src/gcc/config/s390/s390.c        (.../tags/gcc_4_8_2_release)
 
28097
+++ b/src/gcc/config/s390/s390.c        (.../branches/gcc-4_8-branch)
 
28098
@@ -407,6 +407,65 @@
 
28099
    bytes on a z10 (or higher) CPU.  */
 
28100
 #define PREDICT_DISTANCE (TARGET_Z10 ? 384 : 2048)
 
28101
 
 
28102
+static const int s390_hotpatch_trampoline_halfwords_default = 12;
 
28103
+static const int s390_hotpatch_trampoline_halfwords_max = 1000000;
 
28104
+static int s390_hotpatch_trampoline_halfwords = -1;
 
28105
+
 
28106
+/* Return the argument of the given hotpatch attribute or the default value if
 
28107
+   no argument is present.  */
 
28108
+
 
28109
+static inline int
 
28110
+get_hotpatch_attribute (tree hotpatch_attr)
 
28111
+{
 
28112
+  const_tree args;
 
28113
+
 
28114
+  args = TREE_VALUE (hotpatch_attr);
 
28115
+
 
28116
+  return (args) ?
 
28117
+    TREE_INT_CST_LOW (TREE_VALUE (args)):
 
28118
+    s390_hotpatch_trampoline_halfwords_default;
 
28119
+}
 
28120
+
 
28121
+/* Check whether the hotpatch attribute is applied to a function and, if it has
 
28122
+   an argument, the argument is valid.  */
 
28123
+
 
28124
+static tree
 
28125
+s390_handle_hotpatch_attribute (tree *node, tree name, tree args,
 
28126
+                               int flags ATTRIBUTE_UNUSED, bool *no_add_attrs)
 
28127
+{
 
28128
+  if (TREE_CODE (*node) != FUNCTION_DECL)
 
28129
+    {
 
28130
+      warning (OPT_Wattributes, "%qE attribute only applies to functions",
 
28131
+              name);
 
28132
+      *no_add_attrs = true;
 
28133
+    }
 
28134
+  else if (args)
 
28135
+    {
 
28136
+      tree expr = TREE_VALUE (args);
 
28137
+
 
28138
+      if (TREE_CODE (expr) != INTEGER_CST
 
28139
+         || !INTEGRAL_TYPE_P (TREE_TYPE (expr))
 
28140
+         || TREE_INT_CST_HIGH (expr) != 0
 
28141
+         || TREE_INT_CST_LOW (expr) > (unsigned int)
 
28142
+         s390_hotpatch_trampoline_halfwords_max)
 
28143
+       {
 
28144
+         error ("requested %qE attribute is not a non-negative integer"
 
28145
+                " constant or too large (max. %d)", name,
 
28146
+                s390_hotpatch_trampoline_halfwords_max);
 
28147
+         *no_add_attrs = true;
 
28148
+       }
 
28149
+    }
 
28150
+
 
28151
+  return NULL_TREE;
 
28152
+}
 
28153
+
 
28154
+static const struct attribute_spec s390_attribute_table[] = {
 
28155
+  { "hotpatch", 0, 1, true, false, false, s390_handle_hotpatch_attribute, false
 
28156
+  },
 
28157
+  /* End element.  */
 
28158
+  { NULL,        0, 0, false, false, false, NULL, false }
 
28159
+};
 
28160
+
 
28161
 /* Return the alignment for LABEL.  We default to the -falign-labels
 
28162
    value except for the literal pool base label.  */
 
28163
 int
 
28164
@@ -883,7 +942,8 @@
 
28165
        {
 
28166
          /* For CCRAWmode put the required cc mask into the second
 
28167
             operand.  */
 
28168
-         if (GET_MODE (XVECEXP (*op0, 0, 0)) == CCRAWmode)
 
28169
+        if (GET_MODE (XVECEXP (*op0, 0, 0)) == CCRAWmode
 
28170
+            && INTVAL (*op1) >= 0 && INTVAL (*op1) <= 3)
 
28171
            *op1 = gen_rtx_CONST_INT (VOIDmode, 1 << (3 - INTVAL (*op1)));
 
28172
          *op0 = XVECEXP (*op0, 0, 0);
 
28173
          *code = new_code;
 
28174
@@ -1594,6 +1654,46 @@
 
28175
 static void
 
28176
 s390_option_override (void)
 
28177
 {
 
28178
+  unsigned int i;
 
28179
+  cl_deferred_option *opt;
 
28180
+  vec<cl_deferred_option> *v =
 
28181
+    (vec<cl_deferred_option> *) s390_deferred_options;
 
28182
+
 
28183
+  if (v)
 
28184
+    FOR_EACH_VEC_ELT (*v, i, opt)
 
28185
+      {
 
28186
+       switch (opt->opt_index)
 
28187
+         {
 
28188
+         case OPT_mhotpatch:
 
28189
+           s390_hotpatch_trampoline_halfwords = (opt->value) ?
 
28190
+             s390_hotpatch_trampoline_halfwords_default : -1;
 
28191
+           break;
 
28192
+         case OPT_mhotpatch_:
 
28193
+           {
 
28194
+             int val;
 
28195
+
 
28196
+             val = integral_argument (opt->arg);
 
28197
+             if (val == -1)
 
28198
+               {
 
28199
+                 /* argument is not a plain number */
 
28200
+                 error ("argument to %qs should be a non-negative integer",
 
28201
+                        "-mhotpatch=");
 
28202
+                 break;
 
28203
+               }
 
28204
+             else if (val > s390_hotpatch_trampoline_halfwords_max)
 
28205
+               {
 
28206
+                 error ("argument to %qs is too large (max. %d)",
 
28207
+                        "-mhotpatch=", s390_hotpatch_trampoline_halfwords_max);
 
28208
+                 break;
 
28209
+               }
 
28210
+             s390_hotpatch_trampoline_halfwords = val;
 
28211
+             break;
 
28212
+           }
 
28213
+         default:
 
28214
+           gcc_unreachable ();
 
28215
+         }
 
28216
+      }
 
28217
+
 
28218
   /* Set up function hooks.  */
 
28219
   init_machine_status = s390_init_machine_status;
 
28220
 
 
28221
@@ -3015,15 +3115,22 @@
 
28222
         prefer ADDR_REGS.  If 'class' is not a superset
 
28223
         of ADDR_REGS, e.g. FP_REGS, reject this reload.  */
 
28224
       case CONST:
 
28225
-       /* A larl operand with odd addend will get fixed via secondary
 
28226
-          reload.  So don't request it to be pushed into literal
 
28227
-          pool.  */
 
28228
+       /* Symrefs cannot be pushed into the literal pool with -fPIC
 
28229
+          so we *MUST NOT* return NO_REGS for these cases
 
28230
+          (s390_cannot_force_const_mem will return true).  
 
28231
+
 
28232
+          On the other hand we MUST return NO_REGS for symrefs with
 
28233
+          invalid addend which might have been pushed to the literal
 
28234
+          pool (no -fPIC).  Usually we would expect them to be
 
28235
+          handled via secondary reload but this does not happen if
 
28236
+          they are used as literal pool slot replacement in reload
 
28237
+          inheritance (see emit_input_reload_insns).  */
 
28238
        if (TARGET_CPU_ZARCH
 
28239
            && GET_CODE (XEXP (op, 0)) == PLUS
 
28240
            && GET_CODE (XEXP (XEXP(op, 0), 0)) == SYMBOL_REF
 
28241
            && GET_CODE (XEXP (XEXP(op, 0), 1)) == CONST_INT)
 
28242
          {
 
28243
-           if (reg_class_subset_p (ADDR_REGS, rclass))
 
28244
+           if (flag_pic && reg_class_subset_p (ADDR_REGS, rclass))
 
28245
              return ADDR_REGS;
 
28246
            else
 
28247
              return NO_REGS;
 
28248
@@ -5311,6 +5418,101 @@
 
28249
   gcc_unreachable ();
 
28250
 }
 
28251
 
 
28252
+/* Returns -1 if the function should not be made hotpatchable.  Otherwise it
 
28253
+   returns a number >= 0 that is the desired size of the hotpatch trampoline
 
28254
+   in halfwords. */
 
28255
+
 
28256
+static int s390_function_num_hotpatch_trampoline_halfwords (tree decl,
 
28257
+                                                           bool do_warn)
 
28258
+{
 
28259
+  tree attr;
 
28260
+
 
28261
+  if (DECL_DECLARED_INLINE_P (decl)
 
28262
+      || DECL_ARTIFICIAL (decl)
 
28263
+      || MAIN_NAME_P (DECL_NAME (decl)))
 
28264
+    {
 
28265
+      /* - Explicitly inlined functions cannot be hotpatched.
 
28266
+        - Artificial functions need not be hotpatched.
 
28267
+        - Making the main function hotpatchable is useless. */
 
28268
+      return -1;
 
28269
+    }
 
28270
+  attr = lookup_attribute ("hotpatch", DECL_ATTRIBUTES (decl));
 
28271
+  if (attr || s390_hotpatch_trampoline_halfwords >= 0)
 
28272
+    {
 
28273
+      if (lookup_attribute ("always_inline", DECL_ATTRIBUTES (decl)))
 
28274
+       {
 
28275
+         if (do_warn)
 
28276
+           warning (OPT_Wattributes, "function %qE with the %qs attribute"
 
28277
+                    " is not hotpatchable", DECL_NAME (decl), "always_inline");
 
28278
+         return -1;
 
28279
+       }
 
28280
+      else
 
28281
+       {
 
28282
+         return (attr) ?
 
28283
+           get_hotpatch_attribute (attr) : s390_hotpatch_trampoline_halfwords;
 
28284
+       }
 
28285
+    }
 
28286
+
 
28287
+  return -1;
 
28288
+}
 
28289
+
 
28290
+/* Hook to determine if one function can safely inline another.  */
 
28291
+
 
28292
+static bool
 
28293
+s390_can_inline_p (tree caller, tree callee)
 
28294
+{
 
28295
+  if (s390_function_num_hotpatch_trampoline_halfwords (callee, false) >= 0)
 
28296
+    return false;
 
28297
+
 
28298
+  return default_target_can_inline_p (caller, callee);
 
28299
+}
 
28300
+
 
28301
+/* Write the extra assembler code needed to declare a function properly.  */
 
28302
+
 
28303
+void
 
28304
+s390_asm_output_function_label (FILE *asm_out_file, const char *fname,
 
28305
+                               tree decl)
 
28306
+{
 
28307
+  int hotpatch_trampoline_halfwords = -1;
 
28308
+
 
28309
+  if (decl)
 
28310
+    {
 
28311
+      hotpatch_trampoline_halfwords =
 
28312
+       s390_function_num_hotpatch_trampoline_halfwords (decl, true);
 
28313
+      if (hotpatch_trampoline_halfwords >= 0
 
28314
+         && decl_function_context (decl) != NULL_TREE)
 
28315
+       {
 
28316
+         warning_at (DECL_SOURCE_LOCATION (decl), OPT_mhotpatch,
 
28317
+                     "hotpatching is not compatible with nested functions");
 
28318
+         hotpatch_trampoline_halfwords = -1;
 
28319
+       }
 
28320
+    }
 
28321
+
 
28322
+  if (hotpatch_trampoline_halfwords > 0)
 
28323
+    {
 
28324
+      int i;
 
28325
+
 
28326
+      /* Add a trampoline code area before the function label and initialize it
 
28327
+        with two-byte nop instructions.  This area can be overwritten with code
 
28328
+        that jumps to a patched version of the function.  */
 
28329
+      for (i = 0; i < hotpatch_trampoline_halfwords; i++)
 
28330
+       asm_fprintf (asm_out_file, "\tnopr\t%%r7\n");
 
28331
+      /* Note:  The function label must be aligned so that (a) the bytes of the
 
28332
+        following nop do not cross a cacheline boundary, and (b) a jump address
 
28333
+        (eight bytes for 64 bit targets, 4 bytes for 32 bit targets) can be
 
28334
+        stored directly before the label without crossing a cacheline
 
28335
+        boundary.  All this is necessary to make sure the trampoline code can
 
28336
+        be changed atomically.  */
 
28337
+    }
 
28338
+
 
28339
+  ASM_OUTPUT_LABEL (asm_out_file, fname);
 
28340
+
 
28341
+  /* Output a four-byte nop if hotpatching is enabled.  This can be overwritten
 
28342
+     atomically with a relative backwards jump to the trampoline area.  */
 
28343
+  if (hotpatch_trampoline_halfwords >= 0)
 
28344
+    asm_fprintf (asm_out_file, "\tnop\t0\n");
 
28345
+}
 
28346
+
 
28347
 /* Output machine-dependent UNSPECs occurring in address constant X
 
28348
    in assembler syntax to stdio stream FILE.  Returns true if the
 
28349
    constant X could be recognized, false otherwise.  */
 
28350
@@ -7846,6 +8048,9 @@
 
28351
     {
 
28352
       bb = BASIC_BLOCK (bb_index);
 
28353
 
 
28354
+      if (!bb)
 
28355
+       continue;
 
28356
+
 
28357
       FOR_BB_INSNS (bb, insn)
 
28358
        {
 
28359
          rtx ite, cc, pat, target;
 
28360
@@ -7959,7 +8164,10 @@
 
28361
   if (!result)
 
28362
     return;
 
28363
 
 
28364
-  PATTERN (tbegin_insn) = XVECEXP (PATTERN (tbegin_insn), 0, 0);
 
28365
+  PATTERN (tbegin_insn) = gen_rtx_PARALLEL (VOIDmode,
 
28366
+                           gen_rtvec (2,
 
28367
+                                      XVECEXP (PATTERN (tbegin_insn), 0, 0),
 
28368
+                                      XVECEXP (PATTERN (tbegin_insn), 0, 1)));
 
28369
   INSN_CODE (tbegin_insn) = -1;
 
28370
   df_insn_rescan (tbegin_insn);
 
28371
 
 
28372
@@ -9568,61 +9776,47 @@
 
28373
 void
 
28374
 s390_expand_tbegin (rtx dest, rtx tdb, rtx retry, bool clobber_fprs_p)
 
28375
 {
 
28376
-  const int CC0 = 1 << 3;
 
28377
-  const int CC1 = 1 << 2;
 
28378
-  const int CC3 = 1 << 0;
 
28379
-  rtx abort_label = gen_label_rtx ();
 
28380
-  rtx leave_label = gen_label_rtx ();
 
28381
+  rtx retry_plus_two = gen_reg_rtx (SImode);
 
28382
   rtx retry_reg = gen_reg_rtx (SImode);
 
28383
   rtx retry_label = NULL_RTX;
 
28384
-  rtx jump;
 
28385
-  rtx very_unlikely = GEN_INT (REG_BR_PROB_BASE / 100 - 1);
 
28386
 
 
28387
   if (retry != NULL_RTX)
 
28388
     {
 
28389
       emit_move_insn (retry_reg, retry);
 
28390
+      emit_insn (gen_addsi3 (retry_plus_two, retry_reg, const2_rtx));
 
28391
+      emit_insn (gen_addsi3 (retry_reg, retry_reg, const1_rtx));
 
28392
       retry_label = gen_label_rtx ();
 
28393
       emit_label (retry_label);
 
28394
     }
 
28395
 
 
28396
   if (clobber_fprs_p)
 
28397
-    emit_insn (gen_tbegin_1 (tdb,
 
28398
-                gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK)));
 
28399
+    emit_insn (gen_tbegin_1 (gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK), tdb));
 
28400
   else
 
28401
-    emit_insn (gen_tbegin_nofloat_1 (tdb,
 
28402
-                gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK)));
 
28403
+    emit_insn (gen_tbegin_nofloat_1 (gen_rtx_CONST_INT (VOIDmode, TBEGIN_MASK),
 
28404
+                                    tdb));
 
28405
 
 
28406
-  jump = s390_emit_jump (abort_label,
 
28407
-                        gen_rtx_NE (VOIDmode,
 
28408
-                                    gen_rtx_REG (CCRAWmode, CC_REGNUM),
 
28409
-                                    gen_rtx_CONST_INT (VOIDmode, CC0)));
 
28410
-
 
28411
-  JUMP_LABEL (jump) = abort_label;
 
28412
-  LABEL_NUSES (abort_label) = 1;
 
28413
-  add_reg_note (jump, REG_BR_PROB, very_unlikely);
 
28414
-
 
28415
-  /* Initialize CC return value.  */
 
28416
-  emit_move_insn (dest, const0_rtx);
 
28417
-
 
28418
-  s390_emit_jump (leave_label, NULL_RTX);
 
28419
-  LABEL_NUSES (leave_label) = 1;
 
28420
-  emit_barrier ();
 
28421
-
 
28422
-  /* Abort handler code.  */
 
28423
-
 
28424
-  emit_label (abort_label);
 
28425
+  emit_move_insn (dest, gen_rtx_UNSPEC (SImode,
 
28426
+                                       gen_rtvec (1, gen_rtx_REG (CCRAWmode,
 
28427
+                                                                  CC_REGNUM)),
 
28428
+                                       UNSPEC_CC_TO_INT));
 
28429
   if (retry != NULL_RTX)
 
28430
     {
 
28431
+      const int CC0 = 1 << 3;
 
28432
+      const int CC1 = 1 << 2;
 
28433
+      const int CC3 = 1 << 0;
 
28434
+      rtx jump;
 
28435
       rtx count = gen_reg_rtx (SImode);
 
28436
+      rtx leave_label = gen_label_rtx ();
 
28437
+
 
28438
+      /* Exit for success and permanent failures.  */
 
28439
       jump = s390_emit_jump (leave_label,
 
28440
                             gen_rtx_EQ (VOIDmode,
 
28441
                               gen_rtx_REG (CCRAWmode, CC_REGNUM),
 
28442
-                              gen_rtx_CONST_INT (VOIDmode, CC1 | CC3)));
 
28443
-      LABEL_NUSES (leave_label) = 2;
 
28444
-      add_reg_note (jump, REG_BR_PROB, very_unlikely);
 
28445
+                              gen_rtx_CONST_INT (VOIDmode, CC0 | CC1 | CC3)));
 
28446
+      LABEL_NUSES (leave_label) = 1;
 
28447
 
 
28448
       /* CC2 - transient failure. Perform retry with ppa.  */
 
28449
-      emit_move_insn (count, retry);
 
28450
+      emit_move_insn (count, retry_plus_two);
 
28451
       emit_insn (gen_subsi3 (count, count, retry_reg));
 
28452
       emit_insn (gen_tx_assist (count));
 
28453
       jump = emit_jump_insn (gen_doloop_si64 (retry_label,
 
28454
@@ -9630,13 +9824,8 @@
 
28455
                                              retry_reg));
 
28456
       JUMP_LABEL (jump) = retry_label;
 
28457
       LABEL_NUSES (retry_label) = 1;
 
28458
+      emit_label (leave_label);
 
28459
     }
 
28460
-
 
28461
-  emit_move_insn (dest, gen_rtx_UNSPEC (SImode,
 
28462
-                                       gen_rtvec (1, gen_rtx_REG (CCRAWmode,
 
28463
-                                                                  CC_REGNUM)),
 
28464
-                                       UNSPEC_CC_TO_INT));
 
28465
-  emit_label (leave_label);
 
28466
 }
 
28467
 
 
28468
 /* Builtins.  */
 
28469
@@ -9674,6 +9863,9 @@
 
28470
 s390_init_builtins (void)
 
28471
 {
 
28472
   tree ftype, uint64_type;
 
28473
+  tree returns_twice_attr = tree_cons (get_identifier ("returns_twice"),
 
28474
+                                      NULL, NULL);
 
28475
+  tree noreturn_attr = tree_cons (get_identifier ("noreturn"), NULL, NULL);
 
28476
 
 
28477
   /* void foo (void) */
 
28478
   ftype = build_function_type_list (void_type_node, NULL_TREE);
 
28479
@@ -9684,7 +9876,7 @@
 
28480
   ftype = build_function_type_list (void_type_node, integer_type_node,
 
28481
                                    NULL_TREE);
 
28482
   add_builtin_function ("__builtin_tabort", ftype,
 
28483
-                       S390_BUILTIN_TABORT, BUILT_IN_MD, NULL, NULL_TREE);
 
28484
+                       S390_BUILTIN_TABORT, BUILT_IN_MD, NULL, noreturn_attr);
 
28485
   add_builtin_function ("__builtin_tx_assist", ftype,
 
28486
                        S390_BUILTIN_TX_ASSIST, BUILT_IN_MD, NULL, NULL_TREE);
 
28487
 
 
28488
@@ -9691,10 +9883,10 @@
 
28489
   /* int foo (void *) */
 
28490
   ftype = build_function_type_list (integer_type_node, ptr_type_node, NULL_TREE);
 
28491
   add_builtin_function ("__builtin_tbegin", ftype, S390_BUILTIN_TBEGIN,
 
28492
-                       BUILT_IN_MD, NULL, NULL_TREE);
 
28493
+                       BUILT_IN_MD, NULL, returns_twice_attr);
 
28494
   add_builtin_function ("__builtin_tbegin_nofloat", ftype,
 
28495
                        S390_BUILTIN_TBEGIN_NOFLOAT,
 
28496
-                       BUILT_IN_MD, NULL, NULL_TREE);
 
28497
+                       BUILT_IN_MD, NULL, returns_twice_attr);
 
28498
 
 
28499
   /* int foo (void *, int) */
 
28500
   ftype = build_function_type_list (integer_type_node, ptr_type_node,
 
28501
@@ -9702,11 +9894,11 @@
 
28502
   add_builtin_function ("__builtin_tbegin_retry", ftype,
 
28503
                        S390_BUILTIN_TBEGIN_RETRY,
 
28504
                        BUILT_IN_MD,
 
28505
-                       NULL, NULL_TREE);
 
28506
+                       NULL, returns_twice_attr);
 
28507
   add_builtin_function ("__builtin_tbegin_retry_nofloat", ftype,
 
28508
                        S390_BUILTIN_TBEGIN_RETRY_NOFLOAT,
 
28509
                        BUILT_IN_MD,
 
28510
-                       NULL, NULL_TREE);
 
28511
+                       NULL, returns_twice_attr);
 
28512
 
 
28513
   /* int foo (void) */
 
28514
   ftype = build_function_type_list (integer_type_node, NULL_TREE);
 
28515
@@ -11622,6 +11814,12 @@
 
28516
 #undef TARGET_CANONICALIZE_COMPARISON
 
28517
 #define TARGET_CANONICALIZE_COMPARISON s390_canonicalize_comparison
 
28518
 
 
28519
+#undef TARGET_ATTRIBUTE_TABLE
 
28520
+#define TARGET_ATTRIBUTE_TABLE s390_attribute_table
 
28521
+
 
28522
+#undef TARGET_CAN_INLINE_P
 
28523
+#define TARGET_CAN_INLINE_P s390_can_inline_p
 
28524
+
 
28525
 struct gcc_target targetm = TARGET_INITIALIZER;
 
28526
 
 
28527
 #include "gt-s390.h"
 
28528
Index: gcc/config/s390/s390.h
 
28529
===================================================================
 
28530
--- a/src/gcc/config/s390/s390.h        (.../tags/gcc_4_8_2_release)
 
28531
+++ b/src/gcc/config/s390/s390.h        (.../branches/gcc-4_8-branch)
 
28532
@@ -217,7 +217,7 @@
 
28533
 #define STACK_BOUNDARY 64
 
28534
 
 
28535
 /* Allocation boundary (in *bits*) for the code of a function.  */
 
28536
-#define FUNCTION_BOUNDARY 32
 
28537
+#define FUNCTION_BOUNDARY 64
 
28538
 
 
28539
 /* There is no point aligning anything to a rounder boundary than this.  */
 
28540
 #define BIGGEST_ALIGNMENT 64
 
28541
@@ -878,6 +878,9 @@
 
28542
   fputc ('\n', (FILE));                                                        \
 
28543
 } while (0)
 
28544
 
 
28545
+#undef ASM_OUTPUT_FUNCTION_LABEL
 
28546
+#define ASM_OUTPUT_FUNCTION_LABEL(FILE, NAME, DECL) \
 
28547
+  s390_asm_output_function_label (FILE, NAME, DECL)
 
28548
 
 
28549
 /* Miscellaneous parameters.  */
 
28550
 
 
28551
Index: gcc/config/s390/s390.md
 
28552
===================================================================
 
28553
--- a/src/gcc/config/s390/s390.md       (.../tags/gcc_4_8_2_release)
 
28554
+++ b/src/gcc/config/s390/s390.md       (.../branches/gcc-4_8-branch)
 
28555
@@ -147,6 +147,7 @@
 
28556
 
 
28557
    ; Transactional Execution support
 
28558
    UNSPECV_TBEGIN
 
28559
+   UNSPECV_TBEGIN_TDB
 
28560
    UNSPECV_TBEGINC
 
28561
    UNSPECV_TEND
 
28562
    UNSPECV_TABORT
 
28563
@@ -9896,9 +9897,10 @@
 
28564
 
 
28565
 (define_insn "tbegin_1"
 
28566
   [(set (reg:CCRAW CC_REGNUM)
 
28567
-       (unspec_volatile:CCRAW [(match_operand:BLK 0 "memory_operand"    "=Q")
 
28568
-                               (match_operand     1 "const_int_operand" " D")]
 
28569
+       (unspec_volatile:CCRAW [(match_operand 0 "const_int_operand" "D")]
 
28570
                               UNSPECV_TBEGIN))
 
28571
+   (set (match_operand:BLK 1 "memory_operand" "=Q")
 
28572
+       (unspec_volatile:BLK [(match_dup 0)] UNSPECV_TBEGIN_TDB))
 
28573
    (clobber (reg:DF 16))
 
28574
    (clobber (reg:DF 17))
 
28575
    (clobber (reg:DF 18))
 
28576
@@ -9917,18 +9919,19 @@
 
28577
    (clobber (reg:DF 31))]
 
28578
 ; CONST_OK_FOR_CONSTRAINT_P does not work with D constraint since D is
 
28579
 ; not supposed to be used for immediates (see genpreds.c).
 
28580
-  "TARGET_HTM && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 0xffff"
 
28581
-  "tbegin\t%0,%x1"
 
28582
+  "TARGET_HTM && INTVAL (operands[0]) >= 0 && INTVAL (operands[0]) <= 0xffff"
 
28583
+  "tbegin\t%1,%x0"
 
28584
   [(set_attr "op_type" "SIL")])
 
28585
 
 
28586
 ; Same as above but without the FPR clobbers
 
28587
 (define_insn "tbegin_nofloat_1"
 
28588
   [(set (reg:CCRAW CC_REGNUM)
 
28589
-       (unspec_volatile:CCRAW [(match_operand:BLK 0 "memory_operand"    "=Q")
 
28590
-                               (match_operand     1 "const_int_operand" " D")]
 
28591
-                              UNSPECV_TBEGIN))]
 
28592
-  "TARGET_HTM && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 0xffff"
 
28593
-  "tbegin\t%0,%x1"
 
28594
+       (unspec_volatile:CCRAW [(match_operand 0 "const_int_operand" "D")]
 
28595
+                              UNSPECV_TBEGIN))
 
28596
+   (set (match_operand:BLK 1 "memory_operand" "=Q")
 
28597
+       (unspec_volatile:BLK [(match_dup 0)] UNSPECV_TBEGIN_TDB))]
 
28598
+  "TARGET_HTM && INTVAL (operands[0]) >= 0 && INTVAL (operands[0]) <= 0xffff"
 
28599
+  "tbegin\t%1,%x0"
 
28600
   [(set_attr "op_type" "SIL")])
 
28601
 
 
28602
 
 
28603
@@ -10012,15 +10015,12 @@
 
28604
 ; Transaction perform processor assist
 
28605
 
 
28606
 (define_expand "tx_assist"
 
28607
-  [(set (match_dup 1) (const_int 0))
 
28608
-   (unspec_volatile [(match_operand:SI 0 "register_operand" "")
 
28609
-                    (match_dup 1)
 
28610
+  [(unspec_volatile [(match_operand:SI 0 "register_operand" "")
 
28611
+                    (reg:SI GPR0_REGNUM)
 
28612
                     (const_int 1)]
 
28613
                    UNSPECV_PPA)]
 
28614
   "TARGET_HTM"
 
28615
-{
 
28616
-  operands[1] = gen_reg_rtx (SImode);
 
28617
-})
 
28618
+  "")
 
28619
 
 
28620
 (define_insn "*ppa"
 
28621
   [(unspec_volatile [(match_operand:SI 0 "register_operand" "d")
 
28622
@@ -10028,5 +10028,5 @@
 
28623
                     (match_operand 2 "const_int_operand" "I")]
 
28624
                    UNSPECV_PPA)]
 
28625
   "TARGET_HTM && INTVAL (operands[2]) < 16"
 
28626
-  "ppa\t%0,%1,1"
 
28627
+  "ppa\t%0,%1,%2"
 
28628
   [(set_attr "op_type" "RRF")])
 
28629
Index: gcc/config/s390/s390.opt
 
28630
===================================================================
 
28631
--- a/src/gcc/config/s390/s390.opt      (.../tags/gcc_4_8_2_release)
 
28632
+++ b/src/gcc/config/s390/s390.opt      (.../branches/gcc-4_8-branch)
 
28633
@@ -96,6 +96,14 @@
 
28634
 Target Report RejectNegative Negative(msoft-float) InverseMask(SOFT_FLOAT, HARD_FLOAT)
 
28635
 Enable hardware floating point
 
28636
 
 
28637
+mhotpatch
 
28638
+Target Report Var(s390_deferred_options) Defer
 
28639
+Prepend the function label with 12 two-byte Nop instructions, and add a four byte Nop instruction after the label for hotpatching.
 
28640
+
 
28641
+mhotpatch=
 
28642
+Target RejectNegative Report Joined Var(s390_deferred_options) Defer
 
28643
+Prepend the function label with the given number of two-byte Nop instructions, and add a four byte Nop instruction after the label for hotpatching.
 
28644
+
 
28645
 mlong-double-128
 
28646
 Target Report RejectNegative Negative(mlong-double-64) Mask(LONG_DOUBLE_128)
 
28647
 Use 128-bit long double
 
28648
Index: gcc/config/s390/htmxlintrin.h
 
28649
===================================================================
 
28650
--- a/src/gcc/config/s390/htmxlintrin.h (.../tags/gcc_4_8_2_release)
 
28651
+++ b/src/gcc/config/s390/htmxlintrin.h (.../branches/gcc-4_8-branch)
 
28652
@@ -33,13 +33,20 @@
 
28653
    the IBM XL compiler.  For documentation please see the "z/OS XL
 
28654
    C/C++ Programming Guide" publically available on the web.  */
 
28655
 
 
28656
-extern __inline long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 
28657
+/* FIXME: __TM_simple_begin and __TM_begin should be marked
 
28658
+   __always_inline__ as well but this currently produces an error
 
28659
+   since the tbegin builtins are "returns_twice" and setjmp_call_p
 
28660
+   (calls.c) therefore identifies the functions as calling setjmp.
 
28661
+   The tree inliner currently refuses to inline functions calling
 
28662
+   setjmp.  */
 
28663
+
 
28664
+long
 
28665
 __TM_simple_begin ()
 
28666
 {
 
28667
   return __builtin_tbegin_nofloat (0);
 
28668
 }
 
28669
 
 
28670
-extern __inline long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 
28671
+long
 
28672
 __TM_begin (void* const tdb)
 
28673
 {
 
28674
   return __builtin_tbegin_nofloat (tdb);
 
28675
@@ -78,7 +85,7 @@
 
28676
   if (depth != 0)
 
28677
     return depth;
 
28678
 
 
28679
-  if (tdb->format == 0)
 
28680
+  if (tdb->format != 1)
 
28681
     return 0;
 
28682
   return tdb->nesting_depth;
 
28683
 }
 
28684
@@ -90,7 +97,7 @@
 
28685
 {
 
28686
   struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
 
28687
 
 
28688
-  if (tdb->format == 0)
 
28689
+  if (tdb->format != 1)
 
28690
     return 0;
 
28691
 
 
28692
   return !!(tdb->abort_code >= _HTM_FIRST_USER_ABORT_CODE);
 
28693
@@ -101,7 +108,7 @@
 
28694
 {
 
28695
   struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
 
28696
 
 
28697
-  if (tdb->format == 0)
 
28698
+  if (tdb->format != 1)
 
28699
     return 0;
 
28700
 
 
28701
   if (tdb->abort_code >= _HTM_FIRST_USER_ABORT_CODE)
 
28702
@@ -117,7 +124,7 @@
 
28703
 {
 
28704
   struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
 
28705
 
 
28706
-  return (tdb->format == 0
 
28707
+  return (tdb->format == 1
 
28708
          && (tdb->abort_code == 4 /* unfiltered program interruption */
 
28709
              || tdb->abort_code == 11 /* restricted instruction */));
 
28710
 }
 
28711
@@ -127,7 +134,7 @@
 
28712
 {
 
28713
   struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
 
28714
 
 
28715
-  return (tdb->format == 0
 
28716
+  return (tdb->format == 1
 
28717
          && (tdb->abort_code == 7 /* fetch overflow */
 
28718
              || tdb->abort_code == 8 /* store overflow */));
 
28719
 }
 
28720
@@ -137,7 +144,7 @@
 
28721
 {
 
28722
   struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
 
28723
 
 
28724
-  return tdb->format == 0 && tdb->abort_code == 13; /* depth exceeded */
 
28725
+  return tdb->format == 1 && tdb->abort_code == 13; /* depth exceeded */
 
28726
 }
 
28727
 
 
28728
 extern __inline long __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 
28729
@@ -145,7 +152,7 @@
 
28730
 {
 
28731
   struct __htm_tdb *tdb = (struct __htm_tdb*)tdb_ptr;
 
28732
 
 
28733
-  return (tdb->format == 0
 
28734
+  return (tdb->format == 1
 
28735
          && (tdb->abort_code == 9 /* fetch conflict */
 
28736
              || tdb->abort_code == 10 /* store conflict */));
 
28737
 }
 
28738
Index: gcc/config/s390/s390-protos.h
 
28739
===================================================================
 
28740
--- a/src/gcc/config/s390/s390-protos.h (.../tags/gcc_4_8_2_release)
 
28741
+++ b/src/gcc/config/s390/s390-protos.h (.../branches/gcc-4_8-branch)
 
28742
@@ -110,5 +110,6 @@
 
28743
 extern int s390_branch_condition_mask (rtx);
 
28744
 extern int s390_compare_and_branch_condition_mask (rtx);
 
28745
 extern bool s390_extzv_shift_ok (int, int, unsigned HOST_WIDE_INT);
 
28746
+extern void s390_asm_output_function_label (FILE *, const char *, tree);
 
28747
 
 
28748
 #endif /* RTX_CODE */
 
28749
Index: gcc/config/sparc/t-rtems
 
28750
===================================================================
 
28751
--- a/src/gcc/config/sparc/t-rtems      (.../tags/gcc_4_8_2_release)
 
28752
+++ b/src/gcc/config/sparc/t-rtems      (.../branches/gcc-4_8-branch)
 
28753
@@ -17,6 +17,6 @@
 
28754
 # <http://www.gnu.org/licenses/>.
 
28755
 #
 
28756
 
 
28757
-MULTILIB_OPTIONS = msoft-float mcpu=v8
 
28758
-MULTILIB_DIRNAMES = soft v8
 
28759
+MULTILIB_OPTIONS = msoft-float mcpu=v8/mcpu=leon3
 
28760
+MULTILIB_DIRNAMES = soft v8 leon3
 
28761
 MULTILIB_MATCHES = msoft-float=mno-fpu
 
28762
Index: gcc/config/sparc/sparc.md
 
28763
===================================================================
 
28764
--- a/src/gcc/config/sparc/sparc.md     (.../tags/gcc_4_8_2_release)
 
28765
+++ b/src/gcc/config/sparc/sparc.md     (.../branches/gcc-4_8-branch)
 
28766
@@ -206,7 +206,7 @@
 
28767
 ;; 'f' for all DF/TFmode values, including those that are specific to the v8.
 
28768
 
 
28769
 ;; Attribute for cpu type.
 
28770
-;; These must match the values for enum processor_type in sparc.h.
 
28771
+;; These must match the values of the enum processor_type in sparc-opts.h.
 
28772
 (define_attr "cpu"
 
28773
   "v7,
 
28774
    cypress,
 
28775
@@ -214,6 +214,7 @@
 
28776
    supersparc,
 
28777
    hypersparc,
 
28778
    leon,
 
28779
+   leon3,
 
28780
    sparclite,
 
28781
    f930,
 
28782
    f934,
 
28783
@@ -284,7 +285,8 @@
 
28784
   (const_string "none"))
 
28785
 
 
28786
 (define_attr "pic" "false,true"
 
28787
-  (symbol_ref "(flag_pic != 0 ? PIC_TRUE : PIC_FALSE)"))
 
28788
+  (symbol_ref "(flag_pic != 0
 
28789
+               ? PIC_TRUE : PIC_FALSE)"))
 
28790
 
 
28791
 (define_attr "calls_alloca" "false,true"
 
28792
   (symbol_ref "(cfun->calls_alloca != 0
 
28793
@@ -306,6 +308,10 @@
 
28794
   (symbol_ref "(TARGET_FLAT != 0
 
28795
                ? FLAT_TRUE : FLAT_FALSE)"))
 
28796
 
 
28797
+(define_attr "fix_ut699" "false,true"
 
28798
+   (symbol_ref "(sparc_fix_ut699 != 0
 
28799
+                ? FIX_UT699_TRUE : FIX_UT699_FALSE)"))
 
28800
+
 
28801
 ;; Length (in # of insns).
 
28802
 ;; Beware that setting a length greater or equal to 3 for conditional branches
 
28803
 ;; has a side-effect (see output_cbranch and output_v9branch).
 
28804
@@ -420,32 +426,18 @@
 
28805
   [(set_attr "length" "2")
 
28806
    (set_attr "type" "multi")])
 
28807
 
 
28808
-;; Attributes for instruction and branch scheduling
 
28809
-(define_attr "tls_call_delay" "false,true"
 
28810
-  (symbol_ref "(tls_call_delay (insn)
 
28811
-               ? TLS_CALL_DELAY_TRUE : TLS_CALL_DELAY_FALSE)"))
 
28812
-
 
28813
+;; Attributes for branch scheduling
 
28814
 (define_attr "in_call_delay" "false,true"
 
28815
-  (cond [(eq_attr "type" "uncond_branch,branch,cbcond,uncond_cbcond,call,sibcall,call_no_delay_slot,multi")
 
28816
-               (const_string "false")
 
28817
-        (eq_attr "type" "load,fpload,store,fpstore")
 
28818
-               (if_then_else (eq_attr "length" "1")
 
28819
-                             (const_string "true")
 
28820
-                             (const_string "false"))]
 
28821
-        (if_then_else (and (eq_attr "length" "1")
 
28822
-                           (eq_attr "tls_call_delay" "true"))
 
28823
-                      (const_string "true")
 
28824
-                      (const_string "false"))))
 
28825
+  (symbol_ref "(eligible_for_call_delay (insn)
 
28826
+               ? IN_CALL_DELAY_TRUE : IN_CALL_DELAY_FALSE)"))
 
28827
 
 
28828
-(define_attr "eligible_for_sibcall_delay" "false,true"
 
28829
+(define_attr "in_sibcall_delay" "false,true"
 
28830
   (symbol_ref "(eligible_for_sibcall_delay (insn)
 
28831
-               ? ELIGIBLE_FOR_SIBCALL_DELAY_TRUE
 
28832
-               : ELIGIBLE_FOR_SIBCALL_DELAY_FALSE)"))
 
28833
+               ? IN_SIBCALL_DELAY_TRUE : IN_SIBCALL_DELAY_FALSE)"))
 
28834
 
 
28835
-(define_attr "eligible_for_return_delay" "false,true"
 
28836
+(define_attr "in_return_delay" "false,true"
 
28837
   (symbol_ref "(eligible_for_return_delay (insn)
 
28838
-               ? ELIGIBLE_FOR_RETURN_DELAY_TRUE
 
28839
-               : ELIGIBLE_FOR_RETURN_DELAY_FALSE)"))
 
28840
+               ? IN_RETURN_DELAY_TRUE : IN_RETURN_DELAY_FALSE)"))
 
28841
 
 
28842
 ;; ??? !v9: Should implement the notion of predelay slots for floating-point
 
28843
 ;; branches.  This would allow us to remove the nop always inserted before
 
28844
@@ -460,41 +452,34 @@
 
28845
 ;; because it prevents us from moving back the final store of inner loops.
 
28846
 
 
28847
 (define_attr "in_branch_delay" "false,true"
 
28848
-  (if_then_else (and (eq_attr "type" "!uncond_branch,branch,cbcond,uncond_cbcond,call,sibcall,call_no_delay_slot,multi")
 
28849
-                    (eq_attr "length" "1"))
 
28850
-               (const_string "true")
 
28851
-               (const_string "false")))
 
28852
+  (cond [(eq_attr "type" "uncond_branch,branch,cbcond,uncond_cbcond,call,sibcall,call_no_delay_slot,multi")
 
28853
+          (const_string "false")
 
28854
+        (and (eq_attr "fix_ut699" "true") (eq_attr "type" "load,sload"))
 
28855
+          (const_string "false")
 
28856
+        (and (eq_attr "fix_ut699" "true")
 
28857
+             (and (eq_attr "type" "fpload,fp,fpmove,fpmul,fpdivs,fpsqrts")
 
28858
+                  (eq_attr "fptype" "single")))
 
28859
+          (const_string "false")
 
28860
+        (eq_attr "length" "1")
 
28861
+          (const_string "true")
 
28862
+       ] (const_string "false")))
 
28863
 
 
28864
-(define_attr "in_uncond_branch_delay" "false,true"
 
28865
-  (if_then_else (and (eq_attr "type" "!uncond_branch,branch,cbcond,uncond_cbcond,call,sibcall,call_no_delay_slot,multi")
 
28866
-                    (eq_attr "length" "1"))
 
28867
-               (const_string "true")
 
28868
-               (const_string "false")))
 
28869
-
 
28870
-(define_attr "in_annul_branch_delay" "false,true"
 
28871
-  (if_then_else (and (eq_attr "type" "!uncond_branch,branch,cbcond,uncond_cbcond,call,sibcall,call_no_delay_slot,multi")
 
28872
-                    (eq_attr "length" "1"))
 
28873
-               (const_string "true")
 
28874
-               (const_string "false")))
 
28875
-
 
28876
 (define_delay (eq_attr "type" "call")
 
28877
   [(eq_attr "in_call_delay" "true") (nil) (nil)])
 
28878
 
 
28879
 (define_delay (eq_attr "type" "sibcall")
 
28880
-  [(eq_attr "eligible_for_sibcall_delay" "true") (nil) (nil)])
 
28881
+  [(eq_attr "in_sibcall_delay" "true") (nil) (nil)])
 
28882
 
 
28883
+(define_delay (eq_attr "type" "return")
 
28884
+  [(eq_attr "in_return_delay" "true") (nil) (nil)])
 
28885
+
 
28886
 (define_delay (eq_attr "type" "branch")
 
28887
-  [(eq_attr "in_branch_delay" "true")
 
28888
-   (nil) (eq_attr "in_annul_branch_delay" "true")])
 
28889
+  [(eq_attr "in_branch_delay" "true") (nil) (eq_attr "in_branch_delay" "true")])
 
28890
 
 
28891
 (define_delay (eq_attr "type" "uncond_branch")
 
28892
-  [(eq_attr "in_uncond_branch_delay" "true")
 
28893
-   (nil) (nil)])
 
28894
+  [(eq_attr "in_branch_delay" "true") (nil) (nil)])
 
28895
 
 
28896
-(define_delay (eq_attr "type" "return")
 
28897
-  [(eq_attr "eligible_for_return_delay" "true") (nil) (nil)])
 
28898
 
 
28899
-
 
28900
 ;; Include SPARC DFA schedulers
 
28901
 
 
28902
 (include "cypress.md")
 
28903
@@ -5548,7 +5533,7 @@
 
28904
   [(set (match_operand:DF 0 "register_operand" "=e")
 
28905
        (mult:DF (float_extend:DF (match_operand:SF 1 "register_operand" "f"))
 
28906
                 (float_extend:DF (match_operand:SF 2 "register_operand" "f"))))]
 
28907
-  "(TARGET_V8 || TARGET_V9) && TARGET_FPU"
 
28908
+  "(TARGET_V8 || TARGET_V9) && TARGET_FPU && !sparc_fix_ut699"
 
28909
   "fsmuld\t%1, %2, %0"
 
28910
   [(set_attr "type" "fpmul")
 
28911
    (set_attr "fptype" "double")])
 
28912
@@ -5575,22 +5560,39 @@
 
28913
                (match_operand:TF 2 "register_operand" "e")))]
 
28914
   "TARGET_FPU && TARGET_HARD_QUAD"
 
28915
   "fdivq\t%1, %2, %0"
 
28916
-  [(set_attr "type" "fpdivd")])
 
28917
+  [(set_attr "type" "fpdivs")])
 
28918
 
 
28919
-(define_insn "divdf3"
 
28920
+(define_expand "divdf3"
 
28921
   [(set (match_operand:DF 0 "register_operand" "=e")
 
28922
        (div:DF (match_operand:DF 1 "register_operand" "e")
 
28923
                (match_operand:DF 2 "register_operand" "e")))]
 
28924
   "TARGET_FPU"
 
28925
+  "")
 
28926
+
 
28927
+(define_insn "*divdf3_nofix"
 
28928
+  [(set (match_operand:DF 0 "register_operand" "=e")
 
28929
+       (div:DF (match_operand:DF 1 "register_operand" "e")
 
28930
+               (match_operand:DF 2 "register_operand" "e")))]
 
28931
+  "TARGET_FPU && !sparc_fix_ut699"
 
28932
   "fdivd\t%1, %2, %0"
 
28933
   [(set_attr "type" "fpdivd")
 
28934
    (set_attr "fptype" "double")])
 
28935
 
 
28936
+(define_insn "*divdf3_fix"
 
28937
+  [(set (match_operand:DF 0 "register_operand" "=e")
 
28938
+       (div:DF (match_operand:DF 1 "register_operand" "e")
 
28939
+               (match_operand:DF 2 "register_operand" "e")))]
 
28940
+  "TARGET_FPU && sparc_fix_ut699"
 
28941
+  "fdivd\t%1, %2, %0\n\tstd\t%0, [%%sp-8]"
 
28942
+  [(set_attr "type" "fpdivd")
 
28943
+   (set_attr "fptype" "double")
 
28944
+   (set_attr "length" "2")])
 
28945
+
 
28946
 (define_insn "divsf3"
 
28947
   [(set (match_operand:SF 0 "register_operand" "=f")
 
28948
        (div:SF (match_operand:SF 1 "register_operand" "f")
 
28949
                (match_operand:SF 2 "register_operand" "f")))]
 
28950
-  "TARGET_FPU"
 
28951
+  "TARGET_FPU && !sparc_fix_ut699"
 
28952
   "fdivs\t%1, %2, %0"
 
28953
   [(set_attr "type" "fpdivs")])
 
28954
 
 
28955
@@ -5789,20 +5791,35 @@
 
28956
        (sqrt:TF (match_operand:TF 1 "register_operand" "e")))]
 
28957
   "TARGET_FPU && TARGET_HARD_QUAD"
 
28958
   "fsqrtq\t%1, %0"
 
28959
-  [(set_attr "type" "fpsqrtd")])
 
28960
+  [(set_attr "type" "fpsqrts")])
 
28961
 
 
28962
-(define_insn "sqrtdf2"
 
28963
+(define_expand "sqrtdf2"
 
28964
   [(set (match_operand:DF 0 "register_operand" "=e")
 
28965
        (sqrt:DF (match_operand:DF 1 "register_operand" "e")))]
 
28966
   "TARGET_FPU"
 
28967
+  "")
 
28968
+
 
28969
+(define_insn "*sqrtdf2_nofix"
 
28970
+  [(set (match_operand:DF 0 "register_operand" "=e")
 
28971
+       (sqrt:DF (match_operand:DF 1 "register_operand" "e")))]
 
28972
+  "TARGET_FPU && !sparc_fix_ut699"
 
28973
   "fsqrtd\t%1, %0"
 
28974
   [(set_attr "type" "fpsqrtd")
 
28975
    (set_attr "fptype" "double")])
 
28976
 
 
28977
+(define_insn "*sqrtdf2_fix"
 
28978
+  [(set (match_operand:DF 0 "register_operand" "=e")
 
28979
+       (sqrt:DF (match_operand:DF 1 "register_operand" "e")))]
 
28980
+  "TARGET_FPU && sparc_fix_ut699"
 
28981
+  "fsqrtd\t%1, %0\n\tstd\t%0, [%%sp-8]"
 
28982
+  [(set_attr "type" "fpsqrtd")
 
28983
+   (set_attr "fptype" "double")
 
28984
+   (set_attr "length" "2")])
 
28985
+
 
28986
 (define_insn "sqrtsf2"
 
28987
   [(set (match_operand:SF 0 "register_operand" "=f")
 
28988
        (sqrt:SF (match_operand:SF 1 "register_operand" "f")))]
 
28989
-  "TARGET_FPU"
 
28990
+  "TARGET_FPU && !sparc_fix_ut699"
 
28991
   "fsqrts\t%1, %0"
 
28992
   [(set_attr "type" "fpsqrts")])
 
28993
 
 
28994
Index: gcc/config/sparc/t-sparc
 
28995
===================================================================
 
28996
--- a/src/gcc/config/sparc/t-sparc      (.../tags/gcc_4_8_2_release)
 
28997
+++ b/src/gcc/config/sparc/t-sparc      (.../branches/gcc-4_8-branch)
 
28998
@@ -23,7 +23,7 @@
 
28999
   insn-codes.h conditions.h output.h $(INSN_ATTR_H) $(FLAGS_H) \
 
29000
   $(FUNCTION_H) $(EXCEPT_H) $(EXPR_H) $(OPTABS_H) $(RECOG_H) \
 
29001
   $(DIAGNOSTIC_CORE_H) $(GGC_H) $(TM_P_H) debug.h $(TARGET_H) \
 
29002
-  $(TARGET_DEF_H) $(COMMON_TARGET_H) $(GIMPLE_H) \
 
29003
+  $(TARGET_DEF_H) $(COMMON_TARGET_H) $(GIMPLE_H) $(TREE_PASS_H) \
 
29004
   langhooks.h reload.h $(PARAMS_H) $(DF_H) $(OPTS_H) \
 
29005
   gt-sparc.h
 
29006
 
 
29007
Index: gcc/config/sparc/sparc.opt
 
29008
===================================================================
 
29009
--- a/src/gcc/config/sparc/sparc.opt    (.../tags/gcc_4_8_2_release)
 
29010
+++ b/src/gcc/config/sparc/sparc.opt    (.../branches/gcc-4_8-branch)
 
29011
@@ -146,6 +146,9 @@
 
29012
 Enum(sparc_processor_type) String(leon) Value(PROCESSOR_LEON)
 
29013
 
 
29014
 EnumValue
 
29015
+Enum(sparc_processor_type) String(leon3) Value(PROCESSOR_LEON3)
 
29016
+
 
29017
+EnumValue
 
29018
 Enum(sparc_processor_type) String(sparclite) Value(PROCESSOR_SPARCLITE)
 
29019
 
 
29020
 EnumValue
 
29021
@@ -201,9 +204,19 @@
 
29022
 Enable workaround for single erratum of AT697F processor
 
29023
 (corresponding to erratum #13 of AT697E processor)
 
29024
 
 
29025
+mfix-ut699
 
29026
+Target Report RejectNegative Var(sparc_fix_ut699)
 
29027
+Enable workarounds for the errata of the UT699 processor
 
29028
+
 
29029
 Mask(LONG_DOUBLE_128)
 
29030
 ;; Use 128-bit long double
 
29031
 
 
29032
+Mask(LEON)
 
29033
+;; Generate code for LEON
 
29034
+
 
29035
+Mask(LEON3)
 
29036
+;; Generate code for LEON3
 
29037
+
 
29038
 Mask(SPARCLITE)
 
29039
 ;; Generate code for SPARClite
 
29040
 
 
29041
Index: gcc/config/sparc/sync.md
 
29042
===================================================================
 
29043
--- a/src/gcc/config/sparc/sync.md      (.../tags/gcc_4_8_2_release)
 
29044
+++ b/src/gcc/config/sparc/sync.md      (.../branches/gcc-4_8-branch)
 
29045
@@ -161,7 +161,8 @@
 
29046
    (match_operand:SI 5 "const_int_operand" "")         ;; is_weak
 
29047
    (match_operand:SI 6 "const_int_operand" "")         ;; mod_s
 
29048
    (match_operand:SI 7 "const_int_operand" "")]                ;; mod_f
 
29049
-  "TARGET_V9 && (<MODE>mode != DImode || TARGET_ARCH64 || TARGET_V8PLUS)"
 
29050
+  "(TARGET_V9 || TARGET_LEON3)
 
29051
+   && (<MODE>mode != DImode || TARGET_ARCH64 || TARGET_V8PLUS)"
 
29052
 {
 
29053
   sparc_expand_compare_and_swap (operands);
 
29054
   DONE;
 
29055
@@ -176,7 +177,7 @@
 
29056
             [(match_operand:I48MODE 2 "register_operand" "")
 
29057
              (match_operand:I48MODE 3 "register_operand" "")]
 
29058
             UNSPECV_CAS))])]
 
29059
-  "TARGET_V9"
 
29060
+  "TARGET_V9 || TARGET_LEON3"
 
29061
   "")
 
29062
 
 
29063
 (define_insn "*atomic_compare_and_swap<mode>_1"
 
29064
@@ -187,7 +188,7 @@
 
29065
          [(match_operand:I48MODE 2 "register_operand" "r")
 
29066
           (match_operand:I48MODE 3 "register_operand" "0")]
 
29067
          UNSPECV_CAS))]
 
29068
-  "TARGET_V9 && (<MODE>mode == SImode || TARGET_ARCH64)"
 
29069
+  "(TARGET_V9 || TARGET_LEON3) && (<MODE>mode != DImode || TARGET_ARCH64)"
 
29070
   "cas<modesuffix>\t%1, %2, %0"
 
29071
   [(set_attr "type" "multi")])
 
29072
 
 
29073
@@ -220,7 +221,7 @@
 
29074
    (match_operand:SI 1 "memory_operand" "")
 
29075
    (match_operand:SI 2 "register_operand" "")
 
29076
    (match_operand:SI 3 "const_int_operand" "")]
 
29077
-  "TARGET_V8 || TARGET_V9"
 
29078
+  "(TARGET_V8 || TARGET_V9) && !sparc_fix_ut699"
 
29079
 {
 
29080
   enum memmodel model = (enum memmodel) INTVAL (operands[3]);
 
29081
 
 
29082
@@ -236,7 +237,7 @@
 
29083
                            UNSPECV_SWAP))
 
29084
    (set (match_dup 1)
 
29085
        (match_operand:SI 2 "register_operand" "0"))]
 
29086
-  "TARGET_V8 || TARGET_V9"
 
29087
+  "(TARGET_V8 || TARGET_V9) && !sparc_fix_ut699"
 
29088
   "swap\t%1, %0"
 
29089
   [(set_attr "type" "multi")])
 
29090
 
 
29091
@@ -244,7 +245,7 @@
 
29092
   [(match_operand:QI 0 "register_operand" "")
 
29093
    (match_operand:QI 1 "memory_operand" "")
 
29094
    (match_operand:SI 2 "const_int_operand" "")]
 
29095
-  ""
 
29096
+  "!sparc_fix_ut699"
 
29097
 {
 
29098
   enum memmodel model = (enum memmodel) INTVAL (operands[2]);
 
29099
   rtx ret;
 
29100
@@ -268,6 +269,6 @@
 
29101
        (unspec_volatile:QI [(match_operand:QI 1 "memory_operand" "+m")]
 
29102
                            UNSPECV_LDSTUB))
 
29103
    (set (match_dup 1) (const_int -1))]
 
29104
-  ""
 
29105
+  "!sparc_fix_ut699"
 
29106
   "ldstub\t%1, %0"
 
29107
   [(set_attr "type" "multi")])
 
29108
Index: gcc/config/sparc/sparc-opts.h
 
29109
===================================================================
 
29110
--- a/src/gcc/config/sparc/sparc-opts.h (.../tags/gcc_4_8_2_release)
 
29111
+++ b/src/gcc/config/sparc/sparc-opts.h (.../branches/gcc-4_8-branch)
 
29112
@@ -30,6 +30,7 @@
 
29113
   PROCESSOR_SUPERSPARC,
 
29114
   PROCESSOR_HYPERSPARC,
 
29115
   PROCESSOR_LEON,
 
29116
+  PROCESSOR_LEON3,
 
29117
   PROCESSOR_SPARCLITE,
 
29118
   PROCESSOR_F930,
 
29119
   PROCESSOR_F934,
 
29120
Index: gcc/config/sparc/sparc-protos.h
 
29121
===================================================================
 
29122
--- a/src/gcc/config/sparc/sparc-protos.h       (.../tags/gcc_4_8_2_release)
 
29123
+++ b/src/gcc/config/sparc/sparc-protos.h       (.../branches/gcc-4_8-branch)
 
29124
@@ -84,9 +84,9 @@
 
29125
 extern int mems_ok_for_ldd_peep (rtx, rtx, rtx);
 
29126
 extern int empty_delay_slot (rtx);
 
29127
 extern int emit_cbcond_nop (rtx);
 
29128
+extern int eligible_for_call_delay (rtx);
 
29129
 extern int eligible_for_return_delay (rtx);
 
29130
 extern int eligible_for_sibcall_delay (rtx);
 
29131
-extern int tls_call_delay (rtx);
 
29132
 extern int emit_move_sequence (rtx, enum machine_mode);
 
29133
 extern int fp_sethi_p (rtx);
 
29134
 extern int fp_mov_p (rtx);
 
29135
Index: gcc/config/sparc/sparc.c
 
29136
===================================================================
 
29137
--- a/src/gcc/config/sparc/sparc.c      (.../tags/gcc_4_8_2_release)
 
29138
+++ b/src/gcc/config/sparc/sparc.c      (.../branches/gcc-4_8-branch)
 
29139
@@ -52,6 +52,7 @@
 
29140
 #include "params.h"
 
29141
 #include "df.h"
 
29142
 #include "opts.h"
 
29143
+#include "tree-pass.h"
 
29144
 
 
29145
 /* Processor costs */
 
29146
 
 
29147
@@ -226,6 +227,30 @@
 
29148
 };
 
29149
 
 
29150
 static const
 
29151
+struct processor_costs leon3_costs = {
 
29152
+  COSTS_N_INSNS (1), /* int load */
 
29153
+  COSTS_N_INSNS (1), /* int signed load */
 
29154
+  COSTS_N_INSNS (1), /* int zeroed load */
 
29155
+  COSTS_N_INSNS (1), /* float load */
 
29156
+  COSTS_N_INSNS (1), /* fmov, fneg, fabs */
 
29157
+  COSTS_N_INSNS (1), /* fadd, fsub */
 
29158
+  COSTS_N_INSNS (1), /* fcmp */
 
29159
+  COSTS_N_INSNS (1), /* fmov, fmovr */
 
29160
+  COSTS_N_INSNS (1), /* fmul */
 
29161
+  COSTS_N_INSNS (14), /* fdivs */
 
29162
+  COSTS_N_INSNS (15), /* fdivd */
 
29163
+  COSTS_N_INSNS (22), /* fsqrts */
 
29164
+  COSTS_N_INSNS (23), /* fsqrtd */
 
29165
+  COSTS_N_INSNS (5), /* imul */
 
29166
+  COSTS_N_INSNS (5), /* imulX */
 
29167
+  0, /* imul bit factor */
 
29168
+  COSTS_N_INSNS (35), /* idiv */
 
29169
+  COSTS_N_INSNS (35), /* idivX */
 
29170
+  COSTS_N_INSNS (1), /* movcc/movr */
 
29171
+  0, /* shift penalty */
 
29172
+};
 
29173
+
 
29174
+static const
 
29175
 struct processor_costs sparclet_costs = {
 
29176
   COSTS_N_INSNS (3), /* int load */
 
29177
   COSTS_N_INSNS (3), /* int signed load */
 
29178
@@ -538,7 +563,6 @@
 
29179
                                   HOST_WIDE_INT, tree);
 
29180
 static bool sparc_can_output_mi_thunk (const_tree, HOST_WIDE_INT,
 
29181
                                       HOST_WIDE_INT, const_tree);
 
29182
-static void sparc_reorg (void);
 
29183
 static struct machine_function * sparc_init_machine_status (void);
 
29184
 static bool sparc_cannot_force_const_mem (enum machine_mode, rtx);
 
29185
 static rtx sparc_tls_get_addr (void);
 
29186
@@ -680,9 +704,6 @@
 
29187
 #undef TARGET_ASM_CAN_OUTPUT_MI_THUNK
 
29188
 #define TARGET_ASM_CAN_OUTPUT_MI_THUNK sparc_can_output_mi_thunk
 
29189
 
 
29190
-#undef TARGET_MACHINE_DEPENDENT_REORG
 
29191
-#define TARGET_MACHINE_DEPENDENT_REORG sparc_reorg
 
29192
-
 
29193
 #undef TARGET_RTX_COSTS
 
29194
 #define TARGET_RTX_COSTS sparc_rtx_costs
 
29195
 #undef TARGET_ADDRESS_COST
 
29196
@@ -804,6 +825,306 @@
 
29197
 
 
29198
 struct gcc_target targetm = TARGET_INITIALIZER;
 
29199
 
 
29200
+/* Return the memory reference contained in X if any, zero otherwise.  */
 
29201
+
 
29202
+static rtx
 
29203
+mem_ref (rtx x)
 
29204
+{
 
29205
+  if (GET_CODE (x) == SIGN_EXTEND || GET_CODE (x) == ZERO_EXTEND)
 
29206
+    x = XEXP (x, 0);
 
29207
+
 
29208
+  if (MEM_P (x))
 
29209
+    return x;
 
29210
+
 
29211
+  return NULL_RTX;
 
29212
+}
 
29213
+
 
29214
+/* We use a machine specific pass to enable workarounds for errata.
 
29215
+   We need to have the (essentially) final form of the insn stream in order
 
29216
+   to properly detect the various hazards.  Therefore, this machine specific
 
29217
+   pass runs as late as possible.  The pass is inserted in the pass pipeline
 
29218
+   at the end of sparc_option_override.  */
 
29219
+
 
29220
+static bool
 
29221
+sparc_gate_work_around_errata (void)
 
29222
+{
 
29223
+  /* The only errata we handle are those of the AT697F and UT699.  */
 
29224
+  return sparc_fix_at697f != 0 || sparc_fix_ut699 != 0;
 
29225
+}
 
29226
+
 
29227
+static unsigned int
 
29228
+sparc_do_work_around_errata (void)
 
29229
+{
 
29230
+  rtx insn, next;
 
29231
+
 
29232
+  /* Force all instructions to be split into their final form.  */
 
29233
+  split_all_insns_noflow ();
 
29234
+
 
29235
+  /* Now look for specific patterns in the insn stream.  */
 
29236
+  for (insn = get_insns (); insn; insn = next)
 
29237
+    {
 
29238
+      bool insert_nop = false;
 
29239
+      rtx set;
 
29240
+
 
29241
+      /* Look into the instruction in a delay slot.  */
 
29242
+      if (NONJUMP_INSN_P (insn) && GET_CODE (PATTERN (insn)) == SEQUENCE)
 
29243
+       insn = XVECEXP (PATTERN (insn), 0, 1);
 
29244
+
 
29245
+      /* Look for a single-word load into an odd-numbered FP register.  */
 
29246
+      if (sparc_fix_at697f
 
29247
+         && NONJUMP_INSN_P (insn)
 
29248
+         && (set = single_set (insn)) != NULL_RTX
 
29249
+         && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) == 4
 
29250
+         && MEM_P (SET_SRC (set))
 
29251
+         && REG_P (SET_DEST (set))
 
29252
+         && REGNO (SET_DEST (set)) > 31
 
29253
+         && REGNO (SET_DEST (set)) % 2 != 0)
 
29254
+       {
 
29255
+         /* The wrong dependency is on the enclosing double register.  */
 
29256
+         const unsigned int x = REGNO (SET_DEST (set)) - 1;
 
29257
+         unsigned int src1, src2, dest;
 
29258
+         int code;
 
29259
+
 
29260
+         next = next_active_insn (insn);
 
29261
+         if (!next)
 
29262
+           break;
 
29263
+         /* If the insn is a branch, then it cannot be problematic.  */
 
29264
+         if (!NONJUMP_INSN_P (next) || GET_CODE (PATTERN (next)) == SEQUENCE)
 
29265
+           continue;
 
29266
+
 
29267
+         extract_insn (next);
 
29268
+         code = INSN_CODE (next);
 
29269
+
 
29270
+         switch (code)
 
29271
+           {
 
29272
+           case CODE_FOR_adddf3:
 
29273
+           case CODE_FOR_subdf3:
 
29274
+           case CODE_FOR_muldf3:
 
29275
+           case CODE_FOR_divdf3:
 
29276
+             dest = REGNO (recog_data.operand[0]);
 
29277
+             src1 = REGNO (recog_data.operand[1]);
 
29278
+             src2 = REGNO (recog_data.operand[2]);
 
29279
+             if (src1 != src2)
 
29280
+               {
 
29281
+                 /* Case [1-4]:
 
29282
+                                ld [address], %fx+1
 
29283
+                                FPOPd %f{x,y}, %f{y,x}, %f{x,y}  */
 
29284
+                 if ((src1 == x || src2 == x)
 
29285
+                     && (dest == src1 || dest == src2))
 
29286
+                   insert_nop = true;
 
29287
+               }
 
29288
+             else
 
29289
+               {
 
29290
+                 /* Case 5:
 
29291
+                            ld [address], %fx+1
 
29292
+                            FPOPd %fx, %fx, %fx  */
 
29293
+                 if (src1 == x
 
29294
+                     && dest == src1
 
29295
+                     && (code == CODE_FOR_adddf3 || code == CODE_FOR_muldf3))
 
29296
+                   insert_nop = true;
 
29297
+               }
 
29298
+             break;
 
29299
+
 
29300
+           case CODE_FOR_sqrtdf2:
 
29301
+             dest = REGNO (recog_data.operand[0]);
 
29302
+             src1 = REGNO (recog_data.operand[1]);
 
29303
+             /* Case 6:
 
29304
+                        ld [address], %fx+1
 
29305
+                        fsqrtd %fx, %fx  */
 
29306
+             if (src1 == x && dest == src1)
 
29307
+               insert_nop = true;
 
29308
+             break;
 
29309
+
 
29310
+           default:
 
29311
+             break;
 
29312
+           }
 
29313
+       }
 
29314
+
 
29315
+      /* Look for a single-word load into an integer register.  */
 
29316
+      else if (sparc_fix_ut699
 
29317
+              && NONJUMP_INSN_P (insn)
 
29318
+              && (set = single_set (insn)) != NULL_RTX
 
29319
+              && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) <= 4
 
29320
+              && mem_ref (SET_SRC (set)) != NULL_RTX
 
29321
+              && REG_P (SET_DEST (set))
 
29322
+              && REGNO (SET_DEST (set)) < 32)
 
29323
+       {
 
29324
+         /* There is no problem if the second memory access has a data
 
29325
+            dependency on the first single-cycle load.  */
 
29326
+         rtx x = SET_DEST (set);
 
29327
+
 
29328
+         next = next_active_insn (insn);
 
29329
+         if (!next)
 
29330
+           break;
 
29331
+         /* If the insn is a branch, then it cannot be problematic.  */
 
29332
+         if (!NONJUMP_INSN_P (next) || GET_CODE (PATTERN (next)) == SEQUENCE)
 
29333
+           continue;
 
29334
+
 
29335
+         /* Look for a second memory access to/from an integer register.  */
 
29336
+         if ((set = single_set (next)) != NULL_RTX)
 
29337
+           {
 
29338
+             rtx src = SET_SRC (set);
 
29339
+             rtx dest = SET_DEST (set);
 
29340
+             rtx mem;
 
29341
+
 
29342
+             /* LDD is affected.  */
 
29343
+             if ((mem = mem_ref (src)) != NULL_RTX
 
29344
+                 && REG_P (dest)
 
29345
+                 && REGNO (dest) < 32
 
29346
+                 && !reg_mentioned_p (x, XEXP (mem, 0)))
 
29347
+               insert_nop = true;
 
29348
+
 
29349
+             /* STD is *not* affected.  */
 
29350
+             else if (MEM_P (dest)
 
29351
+                      && GET_MODE_SIZE (GET_MODE (dest)) <= 4
 
29352
+                      && (src == CONST0_RTX (GET_MODE (dest))
 
29353
+                          || (REG_P (src)
 
29354
+                              && REGNO (src) < 32
 
29355
+                              && REGNO (src) != REGNO (x)))
 
29356
+                      && !reg_mentioned_p (x, XEXP (dest, 0)))
 
29357
+               insert_nop = true;
 
29358
+           }
 
29359
+       }
 
29360
+
 
29361
+      /* Look for a single-word load/operation into an FP register.  */
 
29362
+      else if (sparc_fix_ut699
 
29363
+              && NONJUMP_INSN_P (insn)
 
29364
+              && (set = single_set (insn)) != NULL_RTX
 
29365
+              && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) == 4
 
29366
+              && REG_P (SET_DEST (set))
 
29367
+              && REGNO (SET_DEST (set)) > 31)
 
29368
+       {
 
29369
+         /* Number of instructions in the problematic window.  */
 
29370
+         const int n_insns = 4;
 
29371
+         /* The problematic combination is with the sibling FP register.  */
 
29372
+         const unsigned int x = REGNO (SET_DEST (set));
 
29373
+         const unsigned int y = x ^ 1;
 
29374
+         rtx after;
 
29375
+         int i;
 
29376
+
 
29377
+         next = next_active_insn (insn);
 
29378
+         if (!next)
 
29379
+           break;
 
29380
+         /* If the insn is a branch, then it cannot be problematic.  */
 
29381
+         if (!NONJUMP_INSN_P (next) || GET_CODE (PATTERN (next)) == SEQUENCE)
 
29382
+           continue;
 
29383
+
 
29384
+         /* Look for a second load/operation into the sibling FP register.  */
 
29385
+         if (!((set = single_set (next)) != NULL_RTX
 
29386
+               && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) == 4
 
29387
+               && REG_P (SET_DEST (set))
 
29388
+               && REGNO (SET_DEST (set)) == y))
 
29389
+           continue;
 
29390
+
 
29391
+         /* Look for a (possible) store from the FP register in the next N
 
29392
+            instructions, but bail out if it is again modified or if there
 
29393
+            is a store from the sibling FP register before this store.  */
 
29394
+         for (after = next, i = 0; i < n_insns; i++)
 
29395
+           {
 
29396
+             bool branch_p;
 
29397
+
 
29398
+             after = next_active_insn (after);
 
29399
+             if (!after)
 
29400
+               break;
 
29401
+
 
29402
+             /* This is a branch with an empty delay slot.  */
 
29403
+             if (!NONJUMP_INSN_P (after))
 
29404
+               {
 
29405
+                 if (++i == n_insns)
 
29406
+                   break;
 
29407
+                 branch_p = true;
 
29408
+                 after = NULL_RTX;
 
29409
+               }
 
29410
+             /* This is a branch with a filled delay slot.  */
 
29411
+             else if (GET_CODE (PATTERN (after)) == SEQUENCE)
 
29412
+               {
 
29413
+                 if (++i == n_insns)
 
29414
+                   break;
 
29415
+                 branch_p = true;
 
29416
+                 after = XVECEXP (PATTERN (after), 0, 1);
 
29417
+               }
 
29418
+             /* This is a regular instruction.  */
 
29419
+             else
 
29420
+               branch_p = false;
 
29421
+
 
29422
+             if (after && (set = single_set (after)) != NULL_RTX)
 
29423
+               {
 
29424
+                 const rtx src = SET_SRC (set);
 
29425
+                 const rtx dest = SET_DEST (set);
 
29426
+                 const unsigned int size = GET_MODE_SIZE (GET_MODE (dest));
 
29427
+
 
29428
+                 /* If the FP register is again modified before the store,
 
29429
+                    then the store isn't affected.  */
 
29430
+                 if (REG_P (dest)
 
29431
+                     && (REGNO (dest) == x
 
29432
+                         || (REGNO (dest) == y && size == 8)))
 
29433
+                   break;
 
29434
+
 
29435
+                 if (MEM_P (dest) && REG_P (src))
 
29436
+                   {
 
29437
+                     /* If there is a store from the sibling FP register
 
29438
+                        before the store, then the store is not affected.  */
 
29439
+                     if (REGNO (src) == y || (REGNO (src) == x && size == 8))
 
29440
+                       break;
 
29441
+
 
29442
+                     /* Otherwise, the store is affected.  */
 
29443
+                     if (REGNO (src) == x && size == 4)
 
29444
+                       {
 
29445
+                         insert_nop = true;
 
29446
+                         break;
 
29447
+                       }
 
29448
+                   }
 
29449
+               }
 
29450
+
 
29451
+             /* If we have a branch in the first M instructions, then we
 
29452
+                cannot see the (M+2)th instruction so we play safe.  */
 
29453
+             if (branch_p && i <= (n_insns - 2))
 
29454
+               {
 
29455
+                 insert_nop = true;
 
29456
+                 break;
 
29457
+               }
 
29458
+           }
 
29459
+       }
 
29460
+
 
29461
+      else
 
29462
+       next = NEXT_INSN (insn);
 
29463
+
 
29464
+      if (insert_nop)
 
29465
+       emit_insn_before (gen_nop (), next);
 
29466
+    }
 
29467
+
 
29468
+  return 0;
 
29469
+}
 
29470
+
 
29471
+struct rtl_opt_pass pass_work_around_errata =
 
29472
+{
 
29473
+ {
 
29474
+  RTL_PASS,
 
29475
+  "errata",                            /* name */
 
29476
+  OPTGROUP_NONE,                       /* optinfo_flags */
 
29477
+  sparc_gate_work_around_errata,       /* gate */
 
29478
+  sparc_do_work_around_errata,         /* execute */
 
29479
+  NULL,                                        /* sub */
 
29480
+  NULL,                                        /* next */
 
29481
+  0,                                   /* static_pass_number */
 
29482
+  TV_MACH_DEP,                         /* tv_id */
 
29483
+  0,                                   /* properties_required */
 
29484
+  0,                                   /* properties_provided */
 
29485
+  0,                                   /* properties_destroyed */
 
29486
+  0,                                   /* todo_flags_start */
 
29487
+  TODO_verify_rtl_sharing,             /* todo_flags_finish */
 
29488
+ }
 
29489
+};
 
29490
+
 
29491
+struct register_pass_info insert_pass_work_around_errata =
 
29492
+{
 
29493
+  &pass_work_around_errata.pass,       /* pass */
 
29494
+  "dbr",                               /* reference_pass_name */
 
29495
+  1,                                   /* ref_pass_instance_number */
 
29496
+  PASS_POS_INSERT_AFTER                        /* po_op */
 
29497
+};
 
29498
+
 
29499
+/* Helpers for TARGET_DEBUG_OPTIONS.  */
 
29500
 static void
 
29501
 dump_target_flag_bits (const int flags)
 
29502
 {
 
29503
@@ -888,6 +1209,7 @@
 
29504
     { TARGET_CPU_supersparc, PROCESSOR_SUPERSPARC },
 
29505
     { TARGET_CPU_hypersparc, PROCESSOR_HYPERSPARC },
 
29506
     { TARGET_CPU_leon, PROCESSOR_LEON },
 
29507
+    { TARGET_CPU_leon3, PROCESSOR_LEON3 },
 
29508
     { TARGET_CPU_sparclite, PROCESSOR_F930 },
 
29509
     { TARGET_CPU_sparclite86x, PROCESSOR_SPARCLITE86X },
 
29510
     { TARGET_CPU_sparclet, PROCESSOR_TSC701 },
 
29511
@@ -902,7 +1224,7 @@
 
29512
   };
 
29513
   const struct cpu_default *def;
 
29514
   /* Table of values for -m{cpu,tune}=.  This must match the order of
 
29515
-     the PROCESSOR_* enumeration.  */
 
29516
+     the enum processor_type in sparc-opts.h.  */
 
29517
   static struct cpu_table {
 
29518
     const char *const name;
 
29519
     const int disable;
 
29520
@@ -914,8 +1236,8 @@
 
29521
     /* TI TMS390Z55 supersparc */
 
29522
     { "supersparc",    MASK_ISA, MASK_V8 },
 
29523
     { "hypersparc",    MASK_ISA, MASK_V8|MASK_FPU },
 
29524
-    /* LEON */
 
29525
-    { "leon",          MASK_ISA, MASK_V8|MASK_FPU },
 
29526
+    { "leon",          MASK_ISA, MASK_V8|MASK_LEON|MASK_FPU },
 
29527
+    { "leon3",         MASK_ISA, MASK_V8|MASK_LEON3|MASK_FPU },
 
29528
     { "sparclite",     MASK_ISA, MASK_SPARCLITE },
 
29529
     /* The Fujitsu MB86930 is the original sparclite chip, with no FPU.  */
 
29530
     { "f930",          MASK_ISA|MASK_FPU, MASK_SPARCLITE },
 
29531
@@ -1075,6 +1397,9 @@
 
29532
 #ifndef HAVE_AS_SPARC4
 
29533
                   & ~MASK_CBCOND
 
29534
 #endif
 
29535
+#ifndef HAVE_AS_LEON
 
29536
+                  & ~(MASK_LEON | MASK_LEON3)
 
29537
+#endif
 
29538
                   );
 
29539
 
 
29540
   /* If -mfpu or -mno-fpu was explicitly used, don't override with
 
29541
@@ -1164,6 +1489,9 @@
 
29542
     case PROCESSOR_LEON:
 
29543
       sparc_costs = &leon_costs;
 
29544
       break;
 
29545
+    case PROCESSOR_LEON3:
 
29546
+      sparc_costs = &leon3_costs;
 
29547
+      break;
 
29548
     case PROCESSOR_SPARCLET:
 
29549
     case PROCESSOR_TSC701:
 
29550
       sparc_costs = &sparclet_costs;
 
29551
@@ -1200,6 +1528,10 @@
 
29552
       /* Choose the most relaxed model for the processor.  */
 
29553
       else if (TARGET_V9)
 
29554
        sparc_memory_model = SMM_RMO;
 
29555
+      else if (TARGET_LEON3)
 
29556
+       sparc_memory_model = SMM_TSO;
 
29557
+      else if (TARGET_LEON)
 
29558
+       sparc_memory_model = SMM_SC;
 
29559
       else if (TARGET_V8)
 
29560
        sparc_memory_model = SMM_PSO;
 
29561
       else
 
29562
@@ -1241,6 +1573,13 @@
 
29563
      pessimizes for double floating-point registers.  */
 
29564
   if (!global_options_set.x_flag_ira_share_save_slots)
 
29565
     flag_ira_share_save_slots = 0;
 
29566
+
 
29567
+  /* We register a machine specific pass to work around errata, if any.
 
29568
+     The pass mut be scheduled as late as possible so that we have the
 
29569
+     (essentially) final form of the insn stream to work on.
 
29570
+     Registering the pass must be done at start up.  It's convenient to
 
29571
+     do it here.  */
 
29572
+  register_pass (&insert_pass_work_around_errata);
 
29573
 }
 
29574
 
 
29575
 /* Miscellaneous utilities.  */
 
29576
@@ -3090,10 +3429,13 @@
 
29577
 /* Return nonzero if TRIAL can go into the call delay slot.  */
 
29578
 
 
29579
 int
 
29580
-tls_call_delay (rtx trial)
 
29581
+eligible_for_call_delay (rtx trial)
 
29582
 {
 
29583
   rtx pat;
 
29584
 
 
29585
+  if (get_attr_in_branch_delay (trial) == IN_BRANCH_DELAY_FALSE)
 
29586
+    return 0;
 
29587
+
 
29588
   /* Binutils allows
 
29589
        call __tls_get_addr, %tgd_call (foo)
 
29590
         add %l7, %o0, %o0, %tgd_add (foo)
 
29591
@@ -3175,11 +3517,7 @@
 
29592
 
 
29593
   /* If we have the 'return' instruction, anything that does not use
 
29594
      local or output registers and can go into a delay slot wins.  */
 
29595
-  else if (return_p
 
29596
-          && TARGET_V9
 
29597
-          && !epilogue_renumber (&pat, 1)
 
29598
-          && get_attr_in_uncond_branch_delay (trial)
 
29599
-              == IN_UNCOND_BRANCH_DELAY_TRUE)
 
29600
+  else if (return_p && TARGET_V9 && !epilogue_renumber (&pat, 1))
 
29601
     return 1;
 
29602
 
 
29603
   /* The 'restore src1,src2,dest' pattern for SImode.  */
 
29604
@@ -3222,22 +3560,21 @@
 
29605
   int regno;
 
29606
   rtx pat;
 
29607
 
 
29608
-  if (GET_CODE (trial) != INSN)
 
29609
-    return 0;
 
29610
-
 
29611
-  if (get_attr_length (trial) != 1)
 
29612
-    return 0;
 
29613
-
 
29614
   /* If the function uses __builtin_eh_return, the eh_return machinery
 
29615
      occupies the delay slot.  */
 
29616
   if (crtl->calls_eh_return)
 
29617
     return 0;
 
29618
 
 
29619
+  if (get_attr_in_branch_delay (trial) == IN_BRANCH_DELAY_FALSE)
 
29620
+    return 0;
 
29621
+
 
29622
   /* In the case of a leaf or flat function, anything can go into the slot.  */
 
29623
   if (sparc_leaf_function_p || TARGET_FLAT)
 
29624
-    return
 
29625
-      get_attr_in_uncond_branch_delay (trial) == IN_UNCOND_BRANCH_DELAY_TRUE;
 
29626
+    return 1;
 
29627
 
 
29628
+  if (!NONJUMP_INSN_P (trial))
 
29629
+    return 0;
 
29630
+
 
29631
   pat = PATTERN (trial);
 
29632
   if (GET_CODE (pat) == PARALLEL)
 
29633
     {
 
29634
@@ -3256,9 +3593,7 @@
 
29635
          if (regno >= 8 && regno < 24)
 
29636
            return 0;
 
29637
        }
 
29638
-      return !epilogue_renumber (&pat, 1)
 
29639
-       && (get_attr_in_uncond_branch_delay (trial)
 
29640
-           == IN_UNCOND_BRANCH_DELAY_TRUE);
 
29641
+      return !epilogue_renumber (&pat, 1);
 
29642
     }
 
29643
 
 
29644
   if (GET_CODE (pat) != SET)
 
29645
@@ -3278,10 +3613,7 @@
 
29646
      instruction, it can probably go in.  But restore will not work
 
29647
      with FP_REGS.  */
 
29648
   if (! SPARC_INT_REG_P (regno))
 
29649
-    return (TARGET_V9
 
29650
-           && !epilogue_renumber (&pat, 1)
 
29651
-           && get_attr_in_uncond_branch_delay (trial)
 
29652
-              == IN_UNCOND_BRANCH_DELAY_TRUE);
 
29653
+    return TARGET_V9 && !epilogue_renumber (&pat, 1);
 
29654
 
 
29655
   return eligible_for_restore_insn (trial, true);
 
29656
 }
 
29657
@@ -3293,10 +3625,10 @@
 
29658
 {
 
29659
   rtx pat;
 
29660
 
 
29661
-  if (GET_CODE (trial) != INSN || GET_CODE (PATTERN (trial)) != SET)
 
29662
+  if (get_attr_in_branch_delay (trial) == IN_BRANCH_DELAY_FALSE)
 
29663
     return 0;
 
29664
 
 
29665
-  if (get_attr_length (trial) != 1)
 
29666
+  if (!NONJUMP_INSN_P (trial))
 
29667
     return 0;
 
29668
 
 
29669
   pat = PATTERN (trial);
 
29670
@@ -3315,6 +3647,9 @@
 
29671
       return 1;
 
29672
     }
 
29673
 
 
29674
+  if (GET_CODE (pat) != SET)
 
29675
+    return 0;
 
29676
+
 
29677
   /* Otherwise, only operations which can be done in tandem with
 
29678
      a `restore' insn can go into the delay slot.  */
 
29679
   if (GET_CODE (SET_DEST (pat)) != REG
 
29680
@@ -10355,7 +10690,8 @@
 
29681
              tmp = e0.add_with_sign (tmp, false, &add1_ovf);
 
29682
              if (tmp.is_negative ())
 
29683
                tmp = tmp.neg_with_overflow (&neg2_ovf);
 
29684
-
 
29685
+             else
 
29686
+               neg2_ovf = false;
 
29687
              result = result.add_with_sign (tmp, false, &add2_ovf);
 
29688
              overflow |= neg1_ovf | neg2_ovf | add1_ovf | add2_ovf;
 
29689
            }
 
29690
@@ -10897,107 +11233,6 @@
 
29691
   return (vcall_offset >= -32768 || ! fixed_regs[5]);
 
29692
 }
 
29693
 
 
29694
-/* We use the machine specific reorg pass to enable workarounds for errata.  */
 
29695
-
 
29696
-static void
 
29697
-sparc_reorg (void)
 
29698
-{
 
29699
-  rtx insn, next;
 
29700
-
 
29701
-  /* The only erratum we handle for now is that of the AT697F processor.  */
 
29702
-  if (!sparc_fix_at697f)
 
29703
-    return;
 
29704
-
 
29705
-  /* We need to have the (essentially) final form of the insn stream in order
 
29706
-     to properly detect the various hazards.  Run delay slot scheduling.  */
 
29707
-  if (optimize > 0 && flag_delayed_branch)
 
29708
-    {
 
29709
-      cleanup_barriers ();
 
29710
-      dbr_schedule (get_insns ());
 
29711
-    }
 
29712
-
 
29713
-  /* Now look for specific patterns in the insn stream.  */
 
29714
-  for (insn = get_insns (); insn; insn = next)
 
29715
-    {
 
29716
-      bool insert_nop = false;
 
29717
-      rtx set;
 
29718
-
 
29719
-      /* Look for a single-word load into an odd-numbered FP register.  */
 
29720
-      if (NONJUMP_INSN_P (insn)
 
29721
-         && (set = single_set (insn)) != NULL_RTX
 
29722
-         && GET_MODE_SIZE (GET_MODE (SET_SRC (set))) == 4
 
29723
-         && MEM_P (SET_SRC (set))
 
29724
-         && REG_P (SET_DEST (set))
 
29725
-         && REGNO (SET_DEST (set)) > 31
 
29726
-         && REGNO (SET_DEST (set)) % 2 != 0)
 
29727
-       {
 
29728
-         /* The wrong dependency is on the enclosing double register.  */
 
29729
-         unsigned int x = REGNO (SET_DEST (set)) - 1;
 
29730
-         unsigned int src1, src2, dest;
 
29731
-         int code;
 
29732
-
 
29733
-         /* If the insn has a delay slot, then it cannot be problematic.  */
 
29734
-         next = next_active_insn (insn);
 
29735
-         if (NONJUMP_INSN_P (next) && GET_CODE (PATTERN (next)) == SEQUENCE)
 
29736
-           code = -1;
 
29737
-         else
 
29738
-           {
 
29739
-             extract_insn (next);
 
29740
-             code = INSN_CODE (next);
 
29741
-           }
 
29742
-
 
29743
-         switch (code)
 
29744
-           {
 
29745
-           case CODE_FOR_adddf3:
 
29746
-           case CODE_FOR_subdf3:
 
29747
-           case CODE_FOR_muldf3:
 
29748
-           case CODE_FOR_divdf3:
 
29749
-             dest = REGNO (recog_data.operand[0]);
 
29750
-             src1 = REGNO (recog_data.operand[1]);
 
29751
-             src2 = REGNO (recog_data.operand[2]);
 
29752
-             if (src1 != src2)
 
29753
-               {
 
29754
-                 /* Case [1-4]:
 
29755
-                                ld [address], %fx+1
 
29756
-                                FPOPd %f{x,y}, %f{y,x}, %f{x,y}  */
 
29757
-                 if ((src1 == x || src2 == x)
 
29758
-                     && (dest == src1 || dest == src2))
 
29759
-                   insert_nop = true;
 
29760
-               }
 
29761
-             else
 
29762
-               {
 
29763
-                 /* Case 5:
 
29764
-                            ld [address], %fx+1
 
29765
-                            FPOPd %fx, %fx, %fx  */
 
29766
-                 if (src1 == x
 
29767
-                     && dest == src1
 
29768
-                     && (code == CODE_FOR_adddf3 || code == CODE_FOR_muldf3))
 
29769
-                   insert_nop = true;
 
29770
-               }
 
29771
-             break;
 
29772
-
 
29773
-           case CODE_FOR_sqrtdf2:
 
29774
-             dest = REGNO (recog_data.operand[0]);
 
29775
-             src1 = REGNO (recog_data.operand[1]);
 
29776
-             /* Case 6:
 
29777
-                        ld [address], %fx+1
 
29778
-                        fsqrtd %fx, %fx  */
 
29779
-             if (src1 == x && dest == src1)
 
29780
-               insert_nop = true;
 
29781
-             break;
 
29782
-
 
29783
-           default:
 
29784
-             break;
 
29785
-           }
 
29786
-       }
 
29787
-      else
 
29788
-       next = NEXT_INSN (insn);
 
29789
-
 
29790
-      if (insert_nop)
 
29791
-       emit_insn_after (gen_nop (), insn);
 
29792
-    }
 
29793
-}
 
29794
-
 
29795
 /* How to allocate a 'struct machine_function'.  */
 
29796
 
 
29797
 static struct machine_function *
 
29798
Index: gcc/config/sparc/leon.md
 
29799
===================================================================
 
29800
--- a/src/gcc/config/sparc/leon.md      (.../tags/gcc_4_8_2_release)
 
29801
+++ b/src/gcc/config/sparc/leon.md      (.../branches/gcc-4_8-branch)
 
29802
@@ -17,40 +17,48 @@
 
29803
 ;; along with GCC; see the file COPYING3.  If not see
 
29804
 ;; <http://www.gnu.org/licenses/>.
 
29805
 
 
29806
+;; Leon is a single-issue processor.
 
29807
 
 
29808
 (define_automaton "leon")
 
29809
 
 
29810
-(define_cpu_unit "leon_memory, leon_fpalu" "leon")
 
29811
-(define_cpu_unit "leon_fpmds" "leon")
 
29812
-(define_cpu_unit "write_buf" "leon")
 
29813
+(define_cpu_unit "leon_memory" "leon")
 
29814
 
 
29815
 (define_insn_reservation "leon_load" 1
 
29816
-  (and (eq_attr "cpu" "leon")
 
29817
-    (eq_attr "type" "load,sload,fpload"))
 
29818
+  (and (eq_attr "cpu" "leon") (eq_attr "type" "load,sload"))
 
29819
   "leon_memory")
 
29820
 
 
29821
-(define_insn_reservation "leon_store" 1
 
29822
-  (and (eq_attr "cpu" "leon")
 
29823
-    (eq_attr "type" "store,fpstore"))
 
29824
-  "leon_memory+write_buf")
 
29825
-  
 
29826
-(define_insn_reservation "leon_fp_alu" 1
 
29827
-  (and (eq_attr "cpu" "leon")
 
29828
-    (eq_attr "type" "fp,fpmove"))
 
29829
-  "leon_fpalu, nothing")
 
29830
+;; Use a double reservation to work around the load pipeline hazard on UT699.
 
29831
+(define_insn_reservation "leon3_load" 1
 
29832
+  (and (eq_attr "cpu" "leon3") (eq_attr "type" "load,sload"))
 
29833
+  "leon_memory*2")
 
29834
 
 
29835
-(define_insn_reservation "leon_fp_mult" 1
 
29836
-  (and (eq_attr "cpu" "leon")
 
29837
-    (eq_attr "type" "fpmul"))
 
29838
-  "leon_fpmds, nothing")
 
29839
+(define_insn_reservation "leon_store" 2
 
29840
+  (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "store"))
 
29841
+  "leon_memory*2")
 
29842
 
 
29843
-(define_insn_reservation "leon_fp_div" 16
 
29844
-  (and (eq_attr "cpu" "leon")
 
29845
-    (eq_attr "type" "fpdivs,fpdivd"))
 
29846
-  "leon_fpmds, nothing*15")
 
29847
+;; This describes Gaisler Research's FPU
 
29848
 
 
29849
-(define_insn_reservation "leon_fp_sqrt" 23
 
29850
-  (and (eq_attr "cpu" "leon")
 
29851
-    (eq_attr "type" "fpsqrts,fpsqrtd"))
 
29852
-  "leon_fpmds, nothing*21")
 
29853
+(define_automaton "grfpu")
 
29854
 
 
29855
+(define_cpu_unit "grfpu_alu" "grfpu")
 
29856
+(define_cpu_unit "grfpu_ds" "grfpu")
 
29857
+
 
29858
+(define_insn_reservation "leon_fp_alu" 4
 
29859
+  (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fp,fpcmp,fpmul"))
 
29860
+  "grfpu_alu, nothing*3")
 
29861
+
 
29862
+(define_insn_reservation "leon_fp_divs" 16
 
29863
+  (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpdivs"))
 
29864
+  "grfpu_ds*14, nothing*2")
 
29865
+
 
29866
+(define_insn_reservation "leon_fp_divd" 17
 
29867
+  (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpdivd"))
 
29868
+  "grfpu_ds*15, nothing*2")
 
29869
+
 
29870
+(define_insn_reservation "leon_fp_sqrts" 24
 
29871
+  (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpsqrts"))
 
29872
+  "grfpu_ds*22, nothing*2")
 
29873
+
 
29874
+(define_insn_reservation "leon_fp_sqrtd" 25
 
29875
+  (and (eq_attr "cpu" "leon,leon3") (eq_attr "type" "fpsqrtd"))
 
29876
+  "grfpu_ds*23, nothing*2")
 
29877
Index: gcc/config/sparc/sparc.h
 
29878
===================================================================
 
29879
--- a/src/gcc/config/sparc/sparc.h      (.../tags/gcc_4_8_2_release)
 
29880
+++ b/src/gcc/config/sparc/sparc.h      (.../branches/gcc-4_8-branch)
 
29881
@@ -136,21 +136,22 @@
 
29882
 #define TARGET_CPU_supersparc  2
 
29883
 #define TARGET_CPU_hypersparc  3
 
29884
 #define TARGET_CPU_leon                4
 
29885
-#define TARGET_CPU_sparclite   5
 
29886
-#define TARGET_CPU_f930                5       /* alias */
 
29887
-#define TARGET_CPU_f934                5       /* alias */
 
29888
-#define TARGET_CPU_sparclite86x        6
 
29889
-#define TARGET_CPU_sparclet    7
 
29890
-#define TARGET_CPU_tsc701      7       /* alias */
 
29891
-#define TARGET_CPU_v9          8       /* generic v9 implementation */
 
29892
-#define TARGET_CPU_sparcv9     8       /* alias */
 
29893
-#define TARGET_CPU_sparc64     8       /* alias */
 
29894
-#define TARGET_CPU_ultrasparc  9
 
29895
-#define TARGET_CPU_ultrasparc3 10
 
29896
-#define TARGET_CPU_niagara     11
 
29897
-#define TARGET_CPU_niagara2    12
 
29898
-#define TARGET_CPU_niagara3    13
 
29899
-#define TARGET_CPU_niagara4    14
 
29900
+#define TARGET_CPU_leon3       5
 
29901
+#define TARGET_CPU_sparclite   6
 
29902
+#define TARGET_CPU_f930                6       /* alias */
 
29903
+#define TARGET_CPU_f934                6       /* alias */
 
29904
+#define TARGET_CPU_sparclite86x        7
 
29905
+#define TARGET_CPU_sparclet    8
 
29906
+#define TARGET_CPU_tsc701      8       /* alias */
 
29907
+#define TARGET_CPU_v9          9       /* generic v9 implementation */
 
29908
+#define TARGET_CPU_sparcv9     9       /* alias */
 
29909
+#define TARGET_CPU_sparc64     9       /* alias */
 
29910
+#define TARGET_CPU_ultrasparc  10
 
29911
+#define TARGET_CPU_ultrasparc3 11
 
29912
+#define TARGET_CPU_niagara     12
 
29913
+#define TARGET_CPU_niagara2    13
 
29914
+#define TARGET_CPU_niagara3    14
 
29915
+#define TARGET_CPU_niagara4    15
 
29916
 
 
29917
 #if TARGET_CPU_DEFAULT == TARGET_CPU_v9 \
 
29918
  || TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc \
 
29919
@@ -232,9 +233,10 @@
 
29920
 #define ASM_CPU32_DEFAULT_SPEC ""
 
29921
 #endif
 
29922
 
 
29923
-#if TARGET_CPU_DEFAULT == TARGET_CPU_leon
 
29924
+#if TARGET_CPU_DEFAULT == TARGET_CPU_leon \
 
29925
+ || TARGET_CPU_DEFAULT == TARGET_CPU_leon3
 
29926
 #define CPP_CPU32_DEFAULT_SPEC "-D__leon__ -D__sparc_v8__"
 
29927
-#define ASM_CPU32_DEFAULT_SPEC ""
 
29928
+#define ASM_CPU32_DEFAULT_SPEC AS_LEON_FLAG
 
29929
 #endif
 
29930
 
 
29931
 #endif
 
29932
@@ -282,6 +284,7 @@
 
29933
 %{mcpu=supersparc:-D__supersparc__ -D__sparc_v8__} \
 
29934
 %{mcpu=hypersparc:-D__hypersparc__ -D__sparc_v8__} \
 
29935
 %{mcpu=leon:-D__leon__ -D__sparc_v8__} \
 
29936
+%{mcpu=leon3:-D__leon__ -D__sparc_v8__} \
 
29937
 %{mcpu=v9:-D__sparc_v9__} \
 
29938
 %{mcpu=ultrasparc:-D__sparc_v9__} \
 
29939
 %{mcpu=ultrasparc3:-D__sparc_v9__} \
 
29940
@@ -329,7 +332,8 @@
 
29941
 %{mcpu=v8:-Av8} \
 
29942
 %{mcpu=supersparc:-Av8} \
 
29943
 %{mcpu=hypersparc:-Av8} \
 
29944
-%{mcpu=leon:-Av8} \
 
29945
+%{mcpu=leon:" AS_LEON_FLAG "} \
 
29946
+%{mcpu=leon3:" AS_LEON_FLAG "} \
 
29947
 %{mv8plus:-Av8plus} \
 
29948
 %{mcpu=v9:-Av9} \
 
29949
 %{mcpu=ultrasparc:%{!mv8plus:-Av9a}} \
 
29950
@@ -1754,6 +1758,12 @@
 
29951
 #define AS_NIAGARA4_FLAG "-Av9" AS_NIAGARA3_FLAG
 
29952
 #endif
 
29953
 
 
29954
+#ifdef HAVE_AS_LEON
 
29955
+#define AS_LEON_FLAG "-Aleon"
 
29956
+#else
 
29957
+#define AS_LEON_FLAG "-Av8"
 
29958
+#endif
 
29959
+
 
29960
 /* We use gcc _mcount for profiling.  */
 
29961
 #define NO_PROFILE_COUNTERS 0
 
29962
 
 
29963
Index: gcc/config/i386/i386.h
 
29964
===================================================================
 
29965
--- a/src/gcc/config/i386/i386.h        (.../tags/gcc_4_8_2_release)
 
29966
+++ b/src/gcc/config/i386/i386.h        (.../branches/gcc-4_8-branch)
 
29967
@@ -197,10 +197,10 @@
 
29968
 
 
29969
 /* Macros used in the machine description to test the flags.  */
 
29970
 
 
29971
-/* configure can arrange to make this 2, to force a 486.  */
 
29972
+/* configure can arrange to change it.  */
 
29973
 
 
29974
 #ifndef TARGET_CPU_DEFAULT
 
29975
-#define TARGET_CPU_DEFAULT TARGET_CPU_DEFAULT_generic
 
29976
+#define TARGET_CPU_DEFAULT PROCESSOR_GENERIC32
 
29977
 #endif
 
29978
 
 
29979
 #ifndef TARGET_FPMATH_DEFAULT
 
29980
@@ -591,43 +591,6 @@
 
29981
 /* Target Pragmas.  */
 
29982
 #define REGISTER_TARGET_PRAGMAS() ix86_register_pragmas ()
 
29983
 
 
29984
-enum target_cpu_default
 
29985
-{
 
29986
-  TARGET_CPU_DEFAULT_generic = 0,
 
29987
-
 
29988
-  TARGET_CPU_DEFAULT_i386,
 
29989
-  TARGET_CPU_DEFAULT_i486,
 
29990
-  TARGET_CPU_DEFAULT_pentium,
 
29991
-  TARGET_CPU_DEFAULT_pentium_mmx,
 
29992
-  TARGET_CPU_DEFAULT_pentiumpro,
 
29993
-  TARGET_CPU_DEFAULT_pentium2,
 
29994
-  TARGET_CPU_DEFAULT_pentium3,
 
29995
-  TARGET_CPU_DEFAULT_pentium4,
 
29996
-  TARGET_CPU_DEFAULT_pentium_m,
 
29997
-  TARGET_CPU_DEFAULT_prescott,
 
29998
-  TARGET_CPU_DEFAULT_nocona,
 
29999
-  TARGET_CPU_DEFAULT_core2,
 
30000
-  TARGET_CPU_DEFAULT_corei7,
 
30001
-  TARGET_CPU_DEFAULT_haswell,
 
30002
-  TARGET_CPU_DEFAULT_atom,
 
30003
-
 
30004
-  TARGET_CPU_DEFAULT_geode,
 
30005
-  TARGET_CPU_DEFAULT_k6,
 
30006
-  TARGET_CPU_DEFAULT_k6_2,
 
30007
-  TARGET_CPU_DEFAULT_k6_3,
 
30008
-  TARGET_CPU_DEFAULT_athlon,
 
30009
-  TARGET_CPU_DEFAULT_athlon_sse,
 
30010
-  TARGET_CPU_DEFAULT_k8,
 
30011
-  TARGET_CPU_DEFAULT_amdfam10,
 
30012
-  TARGET_CPU_DEFAULT_bdver1,
 
30013
-  TARGET_CPU_DEFAULT_bdver2,
 
30014
-  TARGET_CPU_DEFAULT_bdver3,
 
30015
-  TARGET_CPU_DEFAULT_btver1,
 
30016
-  TARGET_CPU_DEFAULT_btver2,
 
30017
-
 
30018
-  TARGET_CPU_DEFAULT_max
 
30019
-};
 
30020
-
 
30021
 #ifndef CC1_SPEC
 
30022
 #define CC1_SPEC "%(cc1_cpu) "
 
30023
 #endif
 
30024
@@ -2089,25 +2052,27 @@
 
30025
    with x86-64 medium memory model */
 
30026
 #define DEFAULT_LARGE_SECTION_THRESHOLD 65536
 
30027
 
 
30028
-/* Which processor to tune code generation for.  */
 
30029
+/* Which processor to tune code generation for.  These must be in sync
 
30030
+   with processor_target_table in i386.c.  */ 
 
30031
 
 
30032
 enum processor_type
 
30033
 {
 
30034
-  PROCESSOR_I386 = 0,                  /* 80386 */
 
30035
+  PROCESSOR_GENERIC32 = 0,
 
30036
+  PROCESSOR_GENERIC64,
 
30037
+  PROCESSOR_I386,                      /* 80386 */
 
30038
   PROCESSOR_I486,                      /* 80486DX, 80486SX, 80486DX[24] */
 
30039
   PROCESSOR_PENTIUM,
 
30040
   PROCESSOR_PENTIUMPRO,
 
30041
-  PROCESSOR_GEODE,
 
30042
-  PROCESSOR_K6,
 
30043
-  PROCESSOR_ATHLON,
 
30044
   PROCESSOR_PENTIUM4,
 
30045
-  PROCESSOR_K8,
 
30046
   PROCESSOR_NOCONA,
 
30047
   PROCESSOR_CORE2,
 
30048
   PROCESSOR_COREI7,
 
30049
   PROCESSOR_HASWELL,
 
30050
-  PROCESSOR_GENERIC32,
 
30051
-  PROCESSOR_GENERIC64,
 
30052
+  PROCESSOR_ATOM,
 
30053
+  PROCESSOR_GEODE,
 
30054
+  PROCESSOR_K6,
 
30055
+  PROCESSOR_ATHLON,
 
30056
+  PROCESSOR_K8,
 
30057
   PROCESSOR_AMDFAM10,
 
30058
   PROCESSOR_BDVER1,
 
30059
   PROCESSOR_BDVER2,
 
30060
@@ -2114,7 +2079,6 @@
 
30061
   PROCESSOR_BDVER3,
 
30062
   PROCESSOR_BTVER1,
 
30063
   PROCESSOR_BTVER2,
 
30064
-  PROCESSOR_ATOM,
 
30065
   PROCESSOR_max
 
30066
 };
 
30067
 
 
30068
Index: gcc/config/i386/i386.md
 
30069
===================================================================
 
30070
--- a/src/gcc/config/i386/i386.md       (.../tags/gcc_4_8_2_release)
 
30071
+++ b/src/gcc/config/i386/i386.md       (.../branches/gcc-4_8-branch)
 
30072
@@ -363,6 +363,13 @@
 
30073
           (const_string "unknown")]
 
30074
         (const_string "integer")))
 
30075
 
 
30076
+;; The minimum required alignment of vector mode memory operands of the SSE
 
30077
+;; (non-VEX/EVEX) instruction in bits, if it is different from
 
30078
+;; GET_MODE_ALIGNMENT of the operand, otherwise 0.  If an instruction has
 
30079
+;; multiple alternatives, this should be conservative maximum of those minimum
 
30080
+;; required alignments.
 
30081
+(define_attr "ssememalign" "" (const_int 0))
 
30082
+
 
30083
 ;; The (bounding maximum) length of an instruction immediate.
 
30084
 (define_attr "length_immediate" ""
 
30085
   (cond [(eq_attr "type" "incdec,setcc,icmov,str,lea,other,multi,idiv,leave,
 
30086
@@ -1570,7 +1577,7 @@
 
30087
   split_double_mode (DImode, &operands[1], 1, &operands[2], &operands[3]);
 
30088
 
 
30089
   operands[1] = gen_lowpart (DImode, operands[2]);
 
30090
-  operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (DImode, stack_pointer_rtx,
 
30091
+  operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (Pmode, stack_pointer_rtx,
 
30092
                                                   GEN_INT (4)));
 
30093
 })
 
30094
 
 
30095
@@ -1587,7 +1594,7 @@
 
30096
   split_double_mode (DImode, &operands[1], 1, &operands[2], &operands[3]);
 
30097
 
 
30098
   operands[1] = gen_lowpart (DImode, operands[2]);
 
30099
-  operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (DImode, stack_pointer_rtx,
 
30100
+  operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (Pmode, stack_pointer_rtx,
 
30101
                                                   GEN_INT (4)));
 
30102
 })
 
30103
 
 
30104
@@ -2715,7 +2722,20 @@
 
30105
   "reload_completed"
 
30106
   [(set (reg:P SP_REG) (plus:P (reg:P SP_REG) (match_dup 2)))
 
30107
    (set (mem:SF (reg:P SP_REG)) (match_dup 1))]
 
30108
-  "operands[2] = GEN_INT (-GET_MODE_SIZE (<P:MODE>mode));")
 
30109
+{
 
30110
+  rtx op = XEXP (operands[0], 0);
 
30111
+  if (GET_CODE (op) == PRE_DEC)
 
30112
+    {
 
30113
+      gcc_assert (!TARGET_64BIT);
 
30114
+      op = GEN_INT (-4);
 
30115
+    }
 
30116
+  else
 
30117
+    {
 
30118
+      op = XEXP (XEXP (op, 1), 1);
 
30119
+      gcc_assert (CONST_INT_P (op));
 
30120
+    }
 
30121
+  operands[2] = op;
 
30122
+})
 
30123
 
 
30124
 (define_split
 
30125
   [(set (match_operand:SF 0 "push_operand")
 
30126
@@ -5443,6 +5463,12 @@
 
30127
     mode = SImode;
 
30128
 
 
30129
   ix86_split_lea_for_addr (curr_insn, operands, mode);
 
30130
+
 
30131
+  /* Zero-extend return register to DImode for zero-extended addresses.  */
 
30132
+  if (mode != <MODE>mode)
 
30133
+    emit_insn (gen_zero_extendsidi2
 
30134
+              (operands[0], gen_lowpart (mode, operands[0])));
 
30135
+
 
30136
   DONE;
 
30137
 }
 
30138
   [(set_attr "type" "lea")
 
30139
@@ -6589,7 +6615,7 @@
 
30140
    (set_attr "use_carry" "1")
 
30141
    (set_attr "mode" "<MODE>")])
 
30142
 
 
30143
-;; Overflow setting add and subtract instructions
 
30144
+;; Overflow setting add instructions
 
30145
 
 
30146
 (define_insn "*add<mode>3_cconly_overflow"
 
30147
   [(set (reg:CCC FLAGS_REG)
 
30148
@@ -6604,43 +6630,31 @@
 
30149
   [(set_attr "type" "alu")
 
30150
    (set_attr "mode" "<MODE>")])
 
30151
 
 
30152
-(define_insn "*sub<mode>3_cconly_overflow"
 
30153
+(define_insn "*add<mode>3_cc_overflow"
 
30154
   [(set (reg:CCC FLAGS_REG)
 
30155
        (compare:CCC
 
30156
-         (minus:SWI
 
30157
-           (match_operand:SWI 0 "nonimmediate_operand" "<r>m,<r>")
 
30158
-           (match_operand:SWI 1 "<general_operand>" "<r><i>,<r>m"))
 
30159
-         (match_dup 0)))]
 
30160
-  ""
 
30161
-  "cmp{<imodesuffix>}\t{%1, %0|%0, %1}"
 
30162
-  [(set_attr "type" "icmp")
 
30163
-   (set_attr "mode" "<MODE>")])
 
30164
-
 
30165
-(define_insn "*<plusminus_insn><mode>3_cc_overflow"
 
30166
-  [(set (reg:CCC FLAGS_REG)
 
30167
-       (compare:CCC
 
30168
-           (plusminus:SWI
 
30169
-               (match_operand:SWI 1 "nonimmediate_operand" "<comm>0,0")
 
30170
+           (plus:SWI
 
30171
+               (match_operand:SWI 1 "nonimmediate_operand" "%0,0")
 
30172
                (match_operand:SWI 2 "<general_operand>" "<r><i>,<r>m"))
 
30173
            (match_dup 1)))
 
30174
    (set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m,<r>")
 
30175
-       (plusminus:SWI (match_dup 1) (match_dup 2)))]
 
30176
-  "ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)"
 
30177
-  "<plusminus_mnemonic>{<imodesuffix>}\t{%2, %0|%0, %2}"
 
30178
+       (plus:SWI (match_dup 1) (match_dup 2)))]
 
30179
+  "ix86_binary_operator_ok (PLUS, <MODE>mode, operands)"
 
30180
+  "add{<imodesuffix>}\t{%2, %0|%0, %2}"
 
30181
   [(set_attr "type" "alu")
 
30182
    (set_attr "mode" "<MODE>")])
 
30183
 
 
30184
-(define_insn "*<plusminus_insn>si3_zext_cc_overflow"
 
30185
+(define_insn "*addsi3_zext_cc_overflow"
 
30186
   [(set (reg:CCC FLAGS_REG)
 
30187
        (compare:CCC
 
30188
-         (plusminus:SI
 
30189
-           (match_operand:SI 1 "nonimmediate_operand" "<comm>0")
 
30190
+         (plus:SI
 
30191
+           (match_operand:SI 1 "nonimmediate_operand" "%0")
 
30192
            (match_operand:SI 2 "x86_64_general_operand" "rme"))
 
30193
          (match_dup 1)))
 
30194
    (set (match_operand:DI 0 "register_operand" "=r")
 
30195
-       (zero_extend:DI (plusminus:SI (match_dup 1) (match_dup 2))))]
 
30196
-  "TARGET_64BIT && ix86_binary_operator_ok (<CODE>, SImode, operands)"
 
30197
-  "<plusminus_mnemonic>{l}\t{%2, %k0|%k0, %2}"
 
30198
+       (zero_extend:DI (plus:SI (match_dup 1) (match_dup 2))))]
 
30199
+  "TARGET_64BIT && ix86_binary_operator_ok (PLUS, SImode, operands)"
 
30200
+  "add{l}\t{%2, %k0|%k0, %2}"
 
30201
   [(set_attr "type" "alu")
 
30202
    (set_attr "mode" "SI")])
 
30203
 
 
30204
@@ -8012,7 +8026,18 @@
 
30205
         (const_int 0)))
 
30206
    (set (match_operand:DI 0 "nonimmediate_operand" "=r,r,rm")
 
30207
        (and:DI (match_dup 1) (match_dup 2)))]
 
30208
-  "TARGET_64BIT && ix86_match_ccmode (insn, CCNOmode)
 
30209
+  "TARGET_64BIT
 
30210
+   && ix86_match_ccmode
 
30211
+       (insn,
 
30212
+        /* If we are going to emit andl instead of andq, and the operands[2]
 
30213
+           constant might have the SImode sign bit set, make sure the sign
 
30214
+           flag isn't tested, because the instruction will set the sign flag
 
30215
+           based on bit 31 rather than bit 63.  If it isn't CONST_INT,
 
30216
+           conservatively assume it might have bit 31 set.  */
 
30217
+        (satisfies_constraint_Z (operands[2])
 
30218
+         && (!CONST_INT_P (operands[2])
 
30219
+             || val_signbit_known_set_p (SImode, INTVAL (operands[2]))))
 
30220
+        ? CCZmode : CCNOmode)
 
30221
    && ix86_binary_operator_ok (AND, DImode, operands)"
 
30222
   "@
 
30223
    and{l}\t{%k2, %k0|%k0, %k2}
 
30224
@@ -17569,7 +17594,13 @@
 
30225
 (define_insn "trap"
 
30226
   [(trap_if (const_int 1) (const_int 6))]
 
30227
   ""
 
30228
-  { return ASM_SHORT "0x0b0f"; }
 
30229
+{
 
30230
+#ifdef HAVE_AS_IX86_UD2
 
30231
+  return "ud2";
 
30232
+#else
 
30233
+  return ASM_SHORT "0x0b0f";
 
30234
+#endif
 
30235
+}
 
30236
   [(set_attr "length" "2")])
 
30237
 
 
30238
 (define_expand "prefetch"
 
30239
Index: gcc/config/i386/f16cintrin.h
 
30240
===================================================================
 
30241
--- a/src/gcc/config/i386/f16cintrin.h  (.../tags/gcc_4_8_2_release)
 
30242
+++ b/src/gcc/config/i386/f16cintrin.h  (.../branches/gcc-4_8-branch)
 
30243
@@ -35,7 +35,7 @@
 
30244
 extern __inline float __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 
30245
 _cvtsh_ss (unsigned short __S)
 
30246
 {
 
30247
-  __v8hi __H = __extension__ (__v8hi){ __S, 0, 0, 0, 0, 0, 0, 0 };
 
30248
+  __v8hi __H = __extension__ (__v8hi){ (short) __S, 0, 0, 0, 0, 0, 0, 0 };
 
30249
   __v4sf __A = __builtin_ia32_vcvtph2ps (__H);
 
30250
   return __builtin_ia32_vec_ext_v4sf (__A, 0);
 
30251
 }
 
30252
Index: gcc/config/i386/t-rtems
 
30253
===================================================================
 
30254
--- a/src/gcc/config/i386/t-rtems       (.../tags/gcc_4_8_2_release)
 
30255
+++ b/src/gcc/config/i386/t-rtems       (.../branches/gcc-4_8-branch)
 
30256
@@ -17,11 +17,10 @@
 
30257
 # <http://www.gnu.org/licenses/>.
 
30258
 #
 
30259
 
 
30260
-MULTILIB_OPTIONS = mtune=i486/mtune=pentium/mtune=pentiumpro \
 
30261
-msoft-float
 
30262
+MULTILIB_OPTIONS = mtune=i486/mtune=pentium/mtune=pentiumpro msoft-float
 
30263
 MULTILIB_DIRNAMES= m486 mpentium mpentiumpro soft-float
 
30264
-MULTILIB_MATCHES = msoft-float=mno-m80387
 
30265
-MULTILIB_MATCHES += mtune?pentium=mtune?k6 mtune?pentiumpro=mtune?mathlon
 
30266
+MULTILIB_MATCHES = msoft-float=mno-80387
 
30267
+MULTILIB_MATCHES += mtune?pentium=mtune?k6 mtune?pentiumpro=mtune?athlon
 
30268
 MULTILIB_EXCEPTIONS = \
 
30269
 mtune=pentium/*msoft-float* \
 
30270
 mtune=pentiumpro/*msoft-float*
 
30271
Index: gcc/config/i386/winnt.c
 
30272
===================================================================
 
30273
--- a/src/gcc/config/i386/winnt.c       (.../tags/gcc_4_8_2_release)
 
30274
+++ b/src/gcc/config/i386/winnt.c       (.../branches/gcc-4_8-branch)
 
30275
@@ -547,8 +547,9 @@
 
30276
         sets 'discard' characteristic, rather than telling linker
 
30277
         to warn of size or content mismatch, so do the same.  */ 
 
30278
       bool discard = (flags & SECTION_CODE)
 
30279
-                     || lookup_attribute ("selectany",
 
30280
-                                          DECL_ATTRIBUTES (decl));      
 
30281
+                     || (TREE_CODE (decl) != IDENTIFIER_NODE
 
30282
+                         && lookup_attribute ("selectany",
 
30283
+                                              DECL_ATTRIBUTES (decl)));
 
30284
       fprintf (asm_out_file, "\t.linkonce %s\n",
 
30285
               (discard  ? "discard" : "same_size"));
 
30286
     }
 
30287
Index: gcc/config/i386/sse.md
 
30288
===================================================================
 
30289
--- a/src/gcc/config/i386/sse.md        (.../tags/gcc_4_8_2_release)
 
30290
+++ b/src/gcc/config/i386/sse.md        (.../branches/gcc-4_8-branch)
 
30291
@@ -605,6 +605,7 @@
 
30292
 }
 
30293
   [(set_attr "type" "ssemov")
 
30294
    (set_attr "movu" "1")
 
30295
+   (set_attr "ssememalign" "8")
 
30296
    (set_attr "prefix" "maybe_vex")
 
30297
    (set (attr "mode")
 
30298
        (cond [(match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
 
30299
@@ -634,6 +635,7 @@
 
30300
 }
 
30301
   [(set_attr "type" "ssemov")
 
30302
    (set_attr "movu" "1")
 
30303
+   (set_attr "ssememalign" "8")
 
30304
    (set_attr "prefix" "maybe_vex")
 
30305
    (set (attr "mode")
 
30306
        (cond [(ior (match_test "TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL")
 
30307
@@ -663,6 +665,7 @@
 
30308
 }
 
30309
   [(set_attr "type" "ssemov")
 
30310
    (set_attr "movu" "1")
 
30311
+   (set_attr "ssememalign" "8")
 
30312
    (set (attr "prefix_data16")
 
30313
      (if_then_else
 
30314
        (match_test "TARGET_AVX")
 
30315
@@ -696,6 +699,7 @@
 
30316
 }
 
30317
   [(set_attr "type" "ssemov")
 
30318
    (set_attr "movu" "1")
 
30319
+   (set_attr "ssememalign" "8")
 
30320
    (set (attr "prefix_data16")
 
30321
      (if_then_else
 
30322
        (match_test "TARGET_AVX")
 
30323
@@ -721,6 +725,7 @@
 
30324
   "%vlddqu\t{%1, %0|%0, %1}"
 
30325
   [(set_attr "type" "ssemov")
 
30326
    (set_attr "movu" "1")
 
30327
+   (set_attr "ssememalign" "8")
 
30328
    (set (attr "prefix_data16")
 
30329
      (if_then_else
 
30330
        (match_test "TARGET_AVX")
 
30331
@@ -1001,6 +1006,7 @@
 
30332
    vrcpss\t{%1, %2, %0|%0, %2, %1}"
 
30333
   [(set_attr "isa" "noavx,avx")
 
30334
    (set_attr "type" "sse")
 
30335
+   (set_attr "ssememalign" "32")
 
30336
    (set_attr "atom_sse_attr" "rcp")
 
30337
    (set_attr "btver2_sse_attr" "rcp")
 
30338
    (set_attr "prefix" "orig,vex")
 
30339
@@ -1089,6 +1095,7 @@
 
30340
    vrsqrtss\t{%1, %2, %0|%0, %2, %1}"
 
30341
   [(set_attr "isa" "noavx,avx")
 
30342
    (set_attr "type" "sse")
 
30343
+   (set_attr "ssememalign" "32")
 
30344
    (set_attr "prefix" "orig,vex")
 
30345
    (set_attr "mode" "SF")])
 
30346
 
 
30347
@@ -2844,6 +2851,7 @@
 
30348
   "%vcvtdq2pd\t{%1, %0|%0, %q1}"
 
30349
   [(set_attr "type" "ssecvt")
 
30350
    (set_attr "prefix" "maybe_vex")
 
30351
+   (set_attr "ssememalign" "64")
 
30352
    (set_attr "mode" "V2DF")])
 
30353
 
 
30354
 (define_insn "avx_cvtpd2dq256"
 
30355
@@ -3572,6 +3580,7 @@
 
30356
    %vmovhps\t{%2, %0|%0, %2}"
 
30357
   [(set_attr "isa" "noavx,avx,noavx,avx,*")
 
30358
    (set_attr "type" "ssemov")
 
30359
+   (set_attr "ssememalign" "64")
 
30360
    (set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
 
30361
    (set_attr "mode" "V4SF,V4SF,V2SF,V2SF,V2SF")])
 
30362
 
 
30363
@@ -3617,6 +3626,7 @@
 
30364
    %vmovlps\t{%2, %H0|%H0, %2}"
 
30365
   [(set_attr "isa" "noavx,avx,noavx,avx,*")
 
30366
    (set_attr "type" "ssemov")
 
30367
+   (set_attr "ssememalign" "64")
 
30368
    (set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
 
30369
    (set_attr "mode" "V4SF,V4SF,V2SF,V2SF,V2SF")])
 
30370
 
 
30371
@@ -3941,6 +3951,7 @@
 
30372
    %vmovhlps\t{%1, %d0|%d0, %1}
 
30373
    %vmovlps\t{%H1, %d0|%d0, %H1}"
 
30374
   [(set_attr "type" "ssemov")
 
30375
+   (set_attr "ssememalign" "64")
 
30376
    (set_attr "prefix" "maybe_vex")
 
30377
    (set_attr "mode" "V2SF,V4SF,V2SF")])
 
30378
 
 
30379
@@ -3980,6 +3991,7 @@
 
30380
    %vmovlps\t{%2, %H0|%H0, %2}"
 
30381
   [(set_attr "isa" "noavx,avx,noavx,avx,*")
 
30382
    (set_attr "type" "ssemov")
 
30383
+   (set_attr "ssememalign" "64")
 
30384
    (set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
 
30385
    (set_attr "mode" "V2SF,V2SF,V4SF,V4SF,V2SF")])
 
30386
 
 
30387
@@ -4033,6 +4045,7 @@
 
30388
    %vmovlps\t{%2, %0|%0, %2}"
 
30389
   [(set_attr "isa" "noavx,avx,noavx,avx,*")
 
30390
    (set_attr "type" "sseshuf,sseshuf,ssemov,ssemov,ssemov")
 
30391
+   (set_attr "ssememalign" "64")
 
30392
    (set_attr "length_immediate" "1,1,*,*,*")
 
30393
    (set_attr "prefix" "orig,vex,orig,vex,maybe_vex")
 
30394
    (set_attr "mode" "V4SF,V4SF,V2SF,V2SF,V2SF")])
 
30395
@@ -4642,7 +4655,8 @@
 
30396
    vmovlpd\t{%H1, %2, %0|%0, %2, %H1}
 
30397
    %vmovhpd\t{%1, %0|%0, %1}"
 
30398
   [(set_attr "isa" "noavx,avx,sse3,noavx,avx,*")
 
30399
-  (set_attr "type" "sselog,sselog,sselog,ssemov,ssemov,ssemov")
 
30400
+   (set_attr "type" "sselog,sselog,sselog,ssemov,ssemov,ssemov")
 
30401
+   (set_attr "ssememalign" "64")
 
30402
    (set_attr "prefix_data16" "*,*,*,1,*,1")
 
30403
    (set_attr "prefix" "orig,vex,maybe_vex,orig,vex,maybe_vex")
 
30404
    (set_attr "mode" "V2DF,V2DF,DF,V1DF,V1DF,V1DF")])
 
30405
@@ -4744,6 +4758,7 @@
 
30406
    %vmovlpd\t{%2, %H0|%H0, %2}"
 
30407
   [(set_attr "isa" "noavx,avx,sse3,noavx,avx,*")
 
30408
    (set_attr "type" "sselog,sselog,sselog,ssemov,ssemov,ssemov")
 
30409
+   (set_attr "ssememalign" "64")
 
30410
    (set_attr "prefix_data16" "*,*,*,1,*,1")
 
30411
    (set_attr "prefix" "orig,vex,maybe_vex,orig,vex,maybe_vex")
 
30412
    (set_attr "mode" "V2DF,V2DF,DF,V1DF,V1DF,V1DF")])
 
30413
@@ -4982,6 +4997,7 @@
 
30414
    movhlps\t{%1, %0|%0, %1}
 
30415
    movlps\t{%H1, %0|%0, %H1}"
 
30416
   [(set_attr "type" "ssemov")
 
30417
+   (set_attr "ssememalign" "64")
 
30418
    (set_attr "mode" "V2SF,V4SF,V2SF")])
 
30419
 
 
30420
 ;; Avoid combining registers from different units in a single alternative,
 
30421
@@ -5077,6 +5093,7 @@
 
30422
    #"
 
30423
   [(set_attr "isa" "noavx,avx,noavx,avx,*,*,*")
 
30424
    (set_attr "type" "ssemov,ssemov,sselog,sselog,ssemov,fmov,imov")
 
30425
+   (set_attr "ssememalign" "64")
 
30426
    (set_attr "prefix_data16" "1,*,*,*,*,*,*")
 
30427
    (set_attr "prefix" "orig,vex,orig,vex,*,*,*")
 
30428
    (set_attr "mode" "V1DF,V1DF,V2DF,V2DF,DF,DF,DF")])
 
30429
@@ -5145,6 +5162,7 @@
 
30430
              (const_string "imov")
 
30431
           ]
 
30432
           (const_string "ssemov")))
 
30433
+   (set_attr "ssememalign" "64")
 
30434
    (set_attr "prefix_data16" "*,1,*,*,*,*,1,*,*,*,*")
 
30435
    (set_attr "length_immediate" "*,*,*,*,*,1,*,*,*,*,*")
 
30436
    (set_attr "prefix" "maybe_vex,orig,vex,orig,vex,orig,orig,vex,*,*,*")
 
30437
@@ -5189,6 +5207,7 @@
 
30438
        (const_string "1")
 
30439
        (const_string "*")))
 
30440
    (set_attr "length_immediate" "*,*,*,*,*,1,*,*,*")
 
30441
+   (set_attr "ssememalign" "64")
 
30442
    (set_attr "prefix" "orig,vex,orig,vex,maybe_vex,orig,orig,vex,maybe_vex")
 
30443
    (set_attr "mode" "DF,DF,V1DF,V1DF,V1DF,V2DF,V1DF,V1DF,V1DF")])
 
30444
 
 
30445
@@ -8736,6 +8755,7 @@
 
30446
   "TARGET_SSE4_1"
 
30447
   "%vpmov<extsuffix>bw\t{%1, %0|%0, %q1}"
 
30448
   [(set_attr "type" "ssemov")
 
30449
+   (set_attr "ssememalign" "64")
 
30450
    (set_attr "prefix_extra" "1")
 
30451
    (set_attr "prefix" "maybe_vex")
 
30452
    (set_attr "mode" "TI")])
 
30453
@@ -8766,6 +8786,7 @@
 
30454
   "TARGET_SSE4_1"
 
30455
   "%vpmov<extsuffix>bd\t{%1, %0|%0, %k1}"
 
30456
   [(set_attr "type" "ssemov")
 
30457
+   (set_attr "ssememalign" "32")
 
30458
    (set_attr "prefix_extra" "1")
 
30459
    (set_attr "prefix" "maybe_vex")
 
30460
    (set_attr "mode" "TI")])
 
30461
@@ -8791,6 +8812,7 @@
 
30462
   "TARGET_SSE4_1"
 
30463
   "%vpmov<extsuffix>wd\t{%1, %0|%0, %q1}"
 
30464
   [(set_attr "type" "ssemov")
 
30465
+   (set_attr "ssememalign" "64")
 
30466
    (set_attr "prefix_extra" "1")
 
30467
    (set_attr "prefix" "maybe_vex")
 
30468
    (set_attr "mode" "TI")])
 
30469
@@ -8818,6 +8840,7 @@
 
30470
   "TARGET_SSE4_1"
 
30471
   "%vpmov<extsuffix>bq\t{%1, %0|%0, %w1}"
 
30472
   [(set_attr "type" "ssemov")
 
30473
+   (set_attr "ssememalign" "16")
 
30474
    (set_attr "prefix_extra" "1")
 
30475
    (set_attr "prefix" "maybe_vex")
 
30476
    (set_attr "mode" "TI")])
 
30477
@@ -8845,6 +8868,7 @@
 
30478
   "TARGET_SSE4_1"
 
30479
   "%vpmov<extsuffix>wq\t{%1, %0|%0, %k1}"
 
30480
   [(set_attr "type" "ssemov")
 
30481
+   (set_attr "ssememalign" "32")
 
30482
    (set_attr "prefix_extra" "1")
 
30483
    (set_attr "prefix" "maybe_vex")
 
30484
    (set_attr "mode" "TI")])
 
30485
@@ -8868,6 +8892,7 @@
 
30486
   "TARGET_SSE4_1"
 
30487
   "%vpmov<extsuffix>dq\t{%1, %0|%0, %q1}"
 
30488
   [(set_attr "type" "ssemov")
 
30489
+   (set_attr "ssememalign" "64")
 
30490
    (set_attr "prefix_extra" "1")
 
30491
    (set_attr "prefix" "maybe_vex")
 
30492
    (set_attr "mode" "TI")])
 
30493
@@ -9151,6 +9176,7 @@
 
30494
   [(set_attr "type" "sselog")
 
30495
    (set_attr "prefix_data16" "1")
 
30496
    (set_attr "prefix_extra" "1")
 
30497
+   (set_attr "ssememalign" "8")
 
30498
    (set_attr "length_immediate" "1")
 
30499
    (set_attr "memory" "none,load")
 
30500
    (set_attr "mode" "TI")])
 
30501
@@ -9213,6 +9239,7 @@
 
30502
   [(set_attr "type" "sselog")
 
30503
    (set_attr "prefix_data16" "1")
 
30504
    (set_attr "prefix_extra" "1")
 
30505
+   (set_attr "ssememalign" "8")
 
30506
    (set_attr "length_immediate" "1")
 
30507
    (set_attr "memory" "load")
 
30508
    (set_attr "mode" "TI")])
 
30509
@@ -9240,6 +9267,7 @@
 
30510
    (set_attr "prefix_data16" "1")
 
30511
    (set_attr "prefix_extra" "1")
 
30512
    (set_attr "prefix" "maybe_vex")
 
30513
+   (set_attr "ssememalign" "8")
 
30514
    (set_attr "length_immediate" "1")
 
30515
    (set_attr "btver2_decode" "vector")
 
30516
    (set_attr "memory" "none,load")
 
30517
@@ -9267,6 +9295,7 @@
 
30518
   [(set_attr "type" "sselog")
 
30519
    (set_attr "prefix_data16" "1")
 
30520
    (set_attr "prefix_extra" "1")
 
30521
+   (set_attr "ssememalign" "8")
 
30522
    (set_attr "length_immediate" "1")
 
30523
    (set_attr "prefix" "maybe_vex")
 
30524
    (set_attr "btver2_decode" "vector")
 
30525
@@ -9293,6 +9322,7 @@
 
30526
   [(set_attr "type" "sselog")
 
30527
    (set_attr "prefix_data16" "1")
 
30528
    (set_attr "prefix_extra" "1")
 
30529
+   (set_attr "ssememalign" "8")
 
30530
    (set_attr "length_immediate" "1")
 
30531
    (set_attr "memory" "none,load,none,load")
 
30532
    (set_attr "btver2_decode" "vector,vector,vector,vector") 
 
30533
@@ -9346,6 +9376,7 @@
 
30534
   [(set_attr "type" "sselog")
 
30535
    (set_attr "prefix_data16" "1")
 
30536
    (set_attr "prefix_extra" "1")
 
30537
+   (set_attr "ssememalign" "8")
 
30538
    (set_attr "length_immediate" "1")
 
30539
    (set_attr "memory" "none,load")
 
30540
    (set_attr "mode" "TI")])
 
30541
@@ -9399,6 +9430,7 @@
 
30542
   [(set_attr "type" "sselog")
 
30543
    (set_attr "prefix_data16" "1")
 
30544
    (set_attr "prefix_extra" "1")
 
30545
+   (set_attr "ssememalign" "8")
 
30546
    (set_attr "length_immediate" "1")
 
30547
    (set_attr "memory" "load")
 
30548
    (set_attr "mode" "TI")])
 
30549
@@ -9421,6 +9453,7 @@
 
30550
   [(set_attr "type" "sselog")
 
30551
    (set_attr "prefix_data16" "1")
 
30552
    (set_attr "prefix_extra" "1")
 
30553
+   (set_attr "ssememalign" "8")
 
30554
    (set_attr "length_immediate" "1")
 
30555
    (set_attr "prefix" "maybe_vex")
 
30556
    (set_attr "memory" "none,load")
 
30557
@@ -9445,6 +9478,7 @@
 
30558
   [(set_attr "type" "sselog")
 
30559
    (set_attr "prefix_data16" "1")
 
30560
    (set_attr "prefix_extra" "1")
 
30561
+   (set_attr "ssememalign" "8")
 
30562
    (set_attr "length_immediate" "1")
 
30563
    (set_attr "prefix" "maybe_vex")
 
30564
    (set_attr "memory" "none,load")
 
30565
@@ -9469,6 +9503,7 @@
 
30566
   [(set_attr "type" "sselog")
 
30567
    (set_attr "prefix_data16" "1")
 
30568
    (set_attr "prefix_extra" "1")
 
30569
+   (set_attr "ssememalign" "8")
 
30570
    (set_attr "length_immediate" "1")
 
30571
    (set_attr "memory" "none,load,none,load")
 
30572
    (set_attr "prefix" "maybe_vex")
 
30573
@@ -10213,7 +10248,6 @@
 
30574
   [(set_attr "type" "ssecvt1")
 
30575
    (set_attr "mode" "<MODE>")])
 
30576
 
 
30577
-;; scalar insns
 
30578
 (define_expand "xop_vmfrcz<mode>2"
 
30579
   [(set (match_operand:VF_128 0 "register_operand")
 
30580
        (vec_merge:VF_128
 
30581
@@ -10220,14 +10254,12 @@
 
30582
          (unspec:VF_128
 
30583
           [(match_operand:VF_128 1 "nonimmediate_operand")]
 
30584
           UNSPEC_FRCZ)
 
30585
-         (match_dup 3)
 
30586
+         (match_dup 2)
 
30587
          (const_int 1)))]
 
30588
   "TARGET_XOP"
 
30589
-{
 
30590
-  operands[3] = CONST0_RTX (<MODE>mode);
 
30591
-})
 
30592
+  "operands[2] = CONST0_RTX (<MODE>mode);")
 
30593
 
 
30594
-(define_insn "*xop_vmfrcz_<mode>"
 
30595
+(define_insn "*xop_vmfrcz<mode>2"
 
30596
   [(set (match_operand:VF_128 0 "register_operand" "=x")
 
30597
        (vec_merge:VF_128
 
30598
          (unspec:VF_128
 
30599
Index: gcc/config/i386/xopintrin.h
 
30600
===================================================================
 
30601
--- a/src/gcc/config/i386/xopintrin.h   (.../tags/gcc_4_8_2_release)
 
30602
+++ b/src/gcc/config/i386/xopintrin.h   (.../branches/gcc-4_8-branch)
 
30603
@@ -745,13 +745,17 @@
 
30604
 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 
30605
 _mm_frcz_ss (__m128 __A, __m128 __B)
 
30606
 {
 
30607
-  return (__m128) __builtin_ia32_vfrczss ((__v4sf)__A, (__v4sf)__B);
 
30608
+  return (__m128) __builtin_ia32_movss ((__v4sf)__A,
 
30609
+                                       (__v4sf)
 
30610
+                                       __builtin_ia32_vfrczss ((__v4sf)__B));
 
30611
 }
 
30612
 
 
30613
 extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 
30614
 _mm_frcz_sd (__m128d __A, __m128d __B)
 
30615
 {
 
30616
-  return (__m128d) __builtin_ia32_vfrczsd ((__v2df)__A, (__v2df)__B);
 
30617
+  return (__m128d) __builtin_ia32_movsd ((__v2df)__A,
 
30618
+                                        (__v2df)
 
30619
+                                        __builtin_ia32_vfrczsd ((__v2df)__B));
 
30620
 }
 
30621
 
 
30622
 extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
 
30623
Index: gcc/config/i386/driver-i386.c
 
30624
===================================================================
 
30625
--- a/src/gcc/config/i386/driver-i386.c (.../tags/gcc_4_8_2_release)
 
30626
+++ b/src/gcc/config/i386/driver-i386.c (.../branches/gcc-4_8-branch)
 
30627
@@ -126,6 +126,18 @@
 
30628
       case 0x0c:
 
30629
        level1->sizekb = 16; level1->assoc = 4; level1->line = 32;
 
30630
        break;
 
30631
+      case 0x0d:
 
30632
+       level1->sizekb = 16; level1->assoc = 4; level1->line = 64;
 
30633
+       break;
 
30634
+      case 0x0e:
 
30635
+       level1->sizekb = 24; level1->assoc = 6; level1->line = 64;
 
30636
+       break;
 
30637
+      case 0x21:
 
30638
+       level2->sizekb = 256; level2->assoc = 8; level2->line = 64;
 
30639
+       break;
 
30640
+      case 0x24:
 
30641
+       level2->sizekb = 1024; level2->assoc = 16; level2->line = 64;
 
30642
+       break;
 
30643
       case 0x2c:
 
30644
        level1->sizekb = 32; level1->assoc = 8; level1->line = 64;
 
30645
        break;
 
30646
@@ -162,6 +174,9 @@
 
30647
       case 0x45:
 
30648
        level2->sizekb = 2048; level2->assoc = 4; level2->line = 32;
 
30649
        break;
 
30650
+      case 0x48:
 
30651
+       level2->sizekb = 3072; level2->assoc = 12; level2->line = 64;
 
30652
+       break;
 
30653
       case 0x49:
 
30654
        if (xeon_mp)
 
30655
          break;
 
30656
@@ -203,6 +218,9 @@
 
30657
       case 0x7f:
 
30658
        level2->sizekb = 512; level2->assoc = 2; level2->line = 64;
 
30659
        break;
 
30660
+      case 0x80:
 
30661
+       level2->sizekb = 512; level2->assoc = 8; level2->line = 64;
 
30662
+       break;
 
30663
       case 0x82:
 
30664
        level2->sizekb = 256; level2->assoc = 8; level2->line = 32;
 
30665
        break;
 
30666
@@ -470,6 +488,28 @@
 
30667
       has_xsaveopt = eax & bit_XSAVEOPT;
 
30668
     }
 
30669
 
 
30670
+  /* Check cpuid level of extended features.  */
 
30671
+  __cpuid (0x80000000, ext_level, ebx, ecx, edx);
 
30672
+
 
30673
+  if (ext_level > 0x80000000)
 
30674
+    {
 
30675
+      __cpuid (0x80000001, eax, ebx, ecx, edx);
 
30676
+
 
30677
+      has_lahf_lm = ecx & bit_LAHF_LM;
 
30678
+      has_sse4a = ecx & bit_SSE4a;
 
30679
+      has_abm = ecx & bit_ABM;
 
30680
+      has_lwp = ecx & bit_LWP;
 
30681
+      has_fma4 = ecx & bit_FMA4;
 
30682
+      has_xop = ecx & bit_XOP;
 
30683
+      has_tbm = ecx & bit_TBM;
 
30684
+      has_lzcnt = ecx & bit_LZCNT;
 
30685
+      has_prfchw = ecx & bit_PRFCHW;
 
30686
+
 
30687
+      has_longmode = edx & bit_LM;
 
30688
+      has_3dnowp = edx & bit_3DNOWP;
 
30689
+      has_3dnow = edx & bit_3DNOW;
 
30690
+    }
 
30691
+
 
30692
   /* Get XCR_XFEATURE_ENABLED_MASK register with xgetbv.  */
 
30693
 #define XCR_XFEATURE_ENABLED_MASK      0x0
 
30694
 #define XSTATE_FP                      0x1
 
30695
@@ -488,33 +528,12 @@
 
30696
       has_avx2 = 0;
 
30697
       has_fma = 0;
 
30698
       has_fma4 = 0;
 
30699
+      has_f16c = 0;
 
30700
       has_xop = 0;
 
30701
       has_xsave = 0;
 
30702
       has_xsaveopt = 0;
 
30703
     }
 
30704
 
 
30705
-  /* Check cpuid level of extended features.  */
 
30706
-  __cpuid (0x80000000, ext_level, ebx, ecx, edx);
 
30707
-
 
30708
-  if (ext_level > 0x80000000)
 
30709
-    {
 
30710
-      __cpuid (0x80000001, eax, ebx, ecx, edx);
 
30711
-
 
30712
-      has_lahf_lm = ecx & bit_LAHF_LM;
 
30713
-      has_sse4a = ecx & bit_SSE4a;
 
30714
-      has_abm = ecx & bit_ABM;
 
30715
-      has_lwp = ecx & bit_LWP;
 
30716
-      has_fma4 = ecx & bit_FMA4;
 
30717
-      has_xop = ecx & bit_XOP;
 
30718
-      has_tbm = ecx & bit_TBM;
 
30719
-      has_lzcnt = ecx & bit_LZCNT;
 
30720
-      has_prfchw = ecx & bit_PRFCHW;
 
30721
-
 
30722
-      has_longmode = edx & bit_LM;
 
30723
-      has_3dnowp = edx & bit_3DNOWP;
 
30724
-      has_3dnow = edx & bit_3DNOW;
 
30725
-    }
 
30726
-
 
30727
   if (!arch)
 
30728
     {
 
30729
       if (vendor == signature_AMD_ebx
 
30730
Index: gcc/config/i386/i386.c
 
30731
===================================================================
 
30732
--- a/src/gcc/config/i386/i386.c        (.../tags/gcc_4_8_2_release)
 
30733
+++ b/src/gcc/config/i386/i386.c        (.../branches/gcc-4_8-branch)
 
30734
@@ -1378,7 +1378,7 @@
 
30735
   8,                                   /* MMX or SSE register to integer */
 
30736
   8,                                   /* size of l1 cache.  */
 
30737
   1024,                                        /* size of l2 cache.  */
 
30738
-  128,                                 /* size of prefetch block */
 
30739
+  64,                                  /* size of prefetch block */
 
30740
   8,                                   /* number of parallel prefetches */
 
30741
   1,                                   /* Branch cost */
 
30742
   COSTS_N_INSNS (6),                   /* cost of FADD and FSUB insns.  */
 
30743
@@ -1894,10 +1894,10 @@
 
30744
   m_PPRO | m_P4_NOCONA | m_CORE_ALL | m_ATOM  | m_AMDFAM10 | m_BDVER | m_GENERIC,
 
30745
 
 
30746
   /* X86_TUNE_SSE_UNALIGNED_LOAD_OPTIMAL */
 
30747
-  m_COREI7 | m_AMDFAM10 | m_BDVER | m_BTVER,
 
30748
+  m_COREI7 | m_HASWELL | m_AMDFAM10 | m_BDVER | m_BTVER,
 
30749
 
 
30750
   /* X86_TUNE_SSE_UNALIGNED_STORE_OPTIMAL */
 
30751
-  m_COREI7 | m_BDVER,
 
30752
+  m_COREI7 | m_HASWELL| m_BDVER,
 
30753
 
 
30754
   /* X86_TUNE_SSE_PACKED_SINGLE_INSN_OPTIMAL */
 
30755
   m_BDVER ,
 
30756
@@ -2409,6 +2409,7 @@
 
30757
 /* Processor target table, indexed by processor number */
 
30758
 struct ptt
 
30759
 {
 
30760
+  const char *const name;                      /* processor name  */
 
30761
   const struct processor_costs *cost;          /* Processor costs */
 
30762
   const int align_loop;                                /* Default alignments.  */
 
30763
   const int align_loop_max_skip;
 
30764
@@ -2417,67 +2418,32 @@
 
30765
   const int align_func;
 
30766
 };
 
30767
 
 
30768
+/* This table must be in sync with enum processor_type in i386.h.  */ 
 
30769
 static const struct ptt processor_target_table[PROCESSOR_max] =
 
30770
 {
 
30771
-  {&i386_cost, 4, 3, 4, 3, 4},
 
30772
-  {&i486_cost, 16, 15, 16, 15, 16},
 
30773
-  {&pentium_cost, 16, 7, 16, 7, 16},
 
30774
-  {&pentiumpro_cost, 16, 15, 16, 10, 16},
 
30775
-  {&geode_cost, 0, 0, 0, 0, 0},
 
30776
-  {&k6_cost, 32, 7, 32, 7, 32},
 
30777
-  {&athlon_cost, 16, 7, 16, 7, 16},
 
30778
-  {&pentium4_cost, 0, 0, 0, 0, 0},
 
30779
-  {&k8_cost, 16, 7, 16, 7, 16},
 
30780
-  {&nocona_cost, 0, 0, 0, 0, 0},
 
30781
-  /* Core 2  */
 
30782
-  {&core_cost, 16, 10, 16, 10, 16},
 
30783
-  /* Core i7  */
 
30784
-  {&core_cost, 16, 10, 16, 10, 16},
 
30785
-  /* Core avx2  */
 
30786
-  {&core_cost, 16, 10, 16, 10, 16},
 
30787
-  {&generic32_cost, 16, 7, 16, 7, 16},
 
30788
-  {&generic64_cost, 16, 10, 16, 10, 16},
 
30789
-  {&amdfam10_cost, 32, 24, 32, 7, 32},
 
30790
-  {&bdver1_cost, 16, 10, 16, 7, 11},
 
30791
-  {&bdver2_cost, 16, 10, 16, 7, 11},
 
30792
-  {&bdver3_cost, 16, 10, 16, 7, 11},
 
30793
-  {&btver1_cost, 16, 10, 16, 7, 11},
 
30794
-  {&btver2_cost, 16, 10, 16, 7, 11},
 
30795
-  {&atom_cost, 16, 15, 16, 7, 16}
 
30796
+  {"generic", &generic32_cost, 16, 7, 16, 7, 16},
 
30797
+  {"generic", &generic64_cost, 16, 10, 16, 10, 16},
 
30798
+  {"i386", &i386_cost, 4, 3, 4, 3, 4},
 
30799
+  {"i486", &i486_cost, 16, 15, 16, 15, 16},
 
30800
+  {"pentium", &pentium_cost, 16, 7, 16, 7, 16},
 
30801
+  {"pentiumpro", &pentiumpro_cost, 16, 15, 16, 10, 16},
 
30802
+  {"pentium4", &pentium4_cost, 0, 0, 0, 0, 0},
 
30803
+  {"nocona", &nocona_cost, 0, 0, 0, 0, 0},
 
30804
+  {"core2", &core_cost, 16, 10, 16, 10, 16},
 
30805
+  {"corei7", &core_cost, 16, 10, 16, 10, 16},
 
30806
+  {"core-avx2", &core_cost, 16, 10, 16, 10, 16},
 
30807
+  {"atom", &atom_cost, 16, 15, 16, 7, 16},
 
30808
+  {"geode", &geode_cost, 0, 0, 0, 0, 0},
 
30809
+  {"k6", &k6_cost, 32, 7, 32, 7, 32},
 
30810
+  {"athlon", &athlon_cost, 16, 7, 16, 7, 16},
 
30811
+  {"k8", &k8_cost, 16, 7, 16, 7, 16},
 
30812
+  {"amdfam10", &amdfam10_cost, 32, 24, 32, 7, 32},
 
30813
+  {"bdver1", &bdver1_cost, 16, 10, 16, 7, 11},
 
30814
+  {"bdver2", &bdver2_cost, 16, 10, 16, 7, 11},
 
30815
+  {"bdver3", &bdver3_cost, 16, 10, 16, 7, 11},
 
30816
+  {"btver1", &btver1_cost, 16, 10, 16, 7, 11},
 
30817
+  {"btver2", &btver2_cost, 16, 10, 16, 7, 11}
 
30818
 };
 
30819
-
 
30820
-static const char *const cpu_names[TARGET_CPU_DEFAULT_max] =
 
30821
-{
 
30822
-  "generic",
 
30823
-  "i386",
 
30824
-  "i486",
 
30825
-  "pentium",
 
30826
-  "pentium-mmx",
 
30827
-  "pentiumpro",
 
30828
-  "pentium2",
 
30829
-  "pentium3",
 
30830
-  "pentium4",
 
30831
-  "pentium-m",
 
30832
-  "prescott",
 
30833
-  "nocona",
 
30834
-  "core2",
 
30835
-  "corei7",
 
30836
-  "core-avx2",
 
30837
-  "atom",
 
30838
-  "geode",
 
30839
-  "k6",
 
30840
-  "k6-2",
 
30841
-  "k6-3",
 
30842
-  "athlon",
 
30843
-  "athlon-4",
 
30844
-  "k8",
 
30845
-  "amdfam10",
 
30846
-  "bdver1",
 
30847
-  "bdver2",
 
30848
-  "bdver3",
 
30849
-  "btver1",
 
30850
-  "btver2"
 
30851
-};
 
30852
 
 
30853
 static bool
 
30854
 gate_insert_vzeroupper (void)
 
30855
@@ -2983,7 +2949,7 @@
 
30856
       {"bdver3", PROCESSOR_BDVER3, CPU_BDVER3,
 
30857
        PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
 
30858
        | PTA_SSE4A | PTA_CX16 | PTA_ABM | PTA_SSSE3 | PTA_SSE4_1
 
30859
-       | PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX
 
30860
+       | PTA_SSE4_2 | PTA_AES | PTA_PCLMUL | PTA_AVX | PTA_FMA4
 
30861
        | PTA_XOP | PTA_LWP | PTA_BMI | PTA_TBM | PTA_F16C
 
30862
        | PTA_FMA | PTA_PRFCHW | PTA_FXSR | PTA_XSAVE 
 
30863
        | PTA_XSAVEOPT},
 
30864
@@ -3125,7 +3091,8 @@
 
30865
        ix86_tune_string = ix86_arch_string;
 
30866
       if (!ix86_tune_string)
 
30867
        {
 
30868
-         ix86_tune_string = cpu_names[TARGET_CPU_DEFAULT];
 
30869
+         ix86_tune_string
 
30870
+           = processor_target_table[TARGET_CPU_DEFAULT].name;
 
30871
          ix86_tune_defaulted = 1;
 
30872
        }
 
30873
 
 
30874
@@ -4078,19 +4045,15 @@
 
30875
     = ix86_target_string (ptr->x_ix86_isa_flags, ptr->x_target_flags,
 
30876
                          NULL, NULL, ptr->x_ix86_fpmath, false);
 
30877
 
 
30878
+  gcc_assert (ptr->arch < PROCESSOR_max);
 
30879
   fprintf (file, "%*sarch = %d (%s)\n",
 
30880
           indent, "",
 
30881
-          ptr->arch,
 
30882
-          ((ptr->arch < TARGET_CPU_DEFAULT_max)
 
30883
-           ? cpu_names[ptr->arch]
 
30884
-           : "<unknown>"));
 
30885
+          ptr->arch, processor_target_table[ptr->arch].name);
 
30886
 
 
30887
+  gcc_assert (ptr->tune < PROCESSOR_max);
 
30888
   fprintf (file, "%*stune = %d (%s)\n",
 
30889
           indent, "",
 
30890
-          ptr->tune,
 
30891
-          ((ptr->tune < TARGET_CPU_DEFAULT_max)
 
30892
-           ? cpu_names[ptr->tune]
 
30893
-           : "<unknown>"));
 
30894
+          ptr->tune, processor_target_table[ptr->tune].name);
 
30895
 
 
30896
   fprintf (file, "%*sbranch_cost = %d\n", indent, "", ptr->branch_cost);
 
30897
 
 
30898
@@ -5213,7 +5176,12 @@
 
30899
   /* Use register calling convention for local functions when possible.  */
 
30900
   if (decl
 
30901
       && TREE_CODE (decl) == FUNCTION_DECL
 
30902
-      && optimize
 
30903
+      /* Caller and callee must agree on the calling convention, so
 
30904
+        checking here just optimize means that with
 
30905
+        __attribute__((optimize (...))) caller could use regparm convention
 
30906
+        and callee not, or vice versa.  Instead look at whether the callee
 
30907
+        is optimized or not.  */
 
30908
+      && opt_for_fn (decl, optimize)
 
30909
       && !(profile_flag && !flag_fentry))
 
30910
     {
 
30911
       /* FIXME: remove this CONST_CAST when cgraph.[ch] is constified.  */
 
30912
@@ -5409,6 +5377,17 @@
 
30913
          bool win;
 
30914
          int j;
 
30915
 
 
30916
+         /* For pre-AVX disallow unaligned loads/stores where the
 
30917
+            instructions don't support it.  */
 
30918
+         if (!TARGET_AVX
 
30919
+             && VECTOR_MODE_P (GET_MODE (op))
 
30920
+             && misaligned_operand (op, GET_MODE (op)))
 
30921
+           {
 
30922
+             int min_align = get_attr_ssememalign (insn);
 
30923
+             if (min_align == 0)
 
30924
+               return false;
 
30925
+           }
 
30926
+
 
30927
          /* A unary operator may be accepted by the predicate, but it
 
30928
             is irrelevant for matching constraints.  */
 
30929
          if (UNARY_P (op))
 
30930
@@ -5747,9 +5726,9 @@
 
30931
          cum->nregs = 0;
 
30932
          cum->sse_nregs = 0;
 
30933
          cum->mmx_nregs = 0;
 
30934
-         cum->warn_avx = 0;
 
30935
-         cum->warn_sse = 0;
 
30936
-         cum->warn_mmx = 0;
 
30937
+         cum->warn_avx = false;
 
30938
+         cum->warn_sse = false;
 
30939
+         cum->warn_mmx = false;
 
30940
          return;
 
30941
        }
 
30942
 
 
30943
@@ -5790,10 +5769,14 @@
 
30944
 
 
30945
    The midde-end can't deal with the vector types > 16 bytes.  In this
 
30946
    case, we return the original mode and warn ABI change if CUM isn't
 
30947
-   NULL.  */
 
30948
+   NULL. 
 
30949
 
 
30950
+   If INT_RETURN is true, warn ABI change if the vector mode isn't
 
30951
+   available for function return value.  */
 
30952
+
 
30953
 static enum machine_mode
 
30954
-type_natural_mode (const_tree type, const CUMULATIVE_ARGS *cum)
 
30955
+type_natural_mode (const_tree type, const CUMULATIVE_ARGS *cum,
 
30956
+                  bool in_return)
 
30957
 {
 
30958
   enum machine_mode mode = TYPE_MODE (type);
 
30959
 
 
30960
@@ -5819,33 +5802,61 @@
 
30961
                if (size == 32 && !TARGET_AVX)
 
30962
                  {
 
30963
                    static bool warnedavx;
 
30964
+                   static bool warnedavx_ret;
 
30965
 
 
30966
-                   if (cum
 
30967
-                       && !warnedavx
 
30968
-                       && cum->warn_avx)
 
30969
+                   if (cum && cum->warn_avx && !warnedavx)
 
30970
                      {
 
30971
-                       warnedavx = true;
 
30972
-                       warning (0, "AVX vector argument without AVX "
 
30973
-                                "enabled changes the ABI");
 
30974
+                       if (warning (OPT_Wpsabi, "AVX vector argument "
 
30975
+                                    "without AVX enabled changes the ABI"))
 
30976
+                         warnedavx = true;
 
30977
                      }
 
30978
+                   else if (in_return && !warnedavx_ret)
 
30979
+                     {
 
30980
+                       if (warning (OPT_Wpsabi, "AVX vector return "
 
30981
+                                    "without AVX enabled changes the ABI"))
 
30982
+                         warnedavx_ret = true;
 
30983
+                     }
 
30984
+
 
30985
                    return TYPE_MODE (type);
 
30986
                  }
 
30987
-               else if ((size == 8 || size == 16) && !TARGET_SSE)
 
30988
+               else if (((size == 8 && TARGET_64BIT) || size == 16)
 
30989
+                        && !TARGET_SSE)
 
30990
                  {
 
30991
                    static bool warnedsse;
 
30992
+                   static bool warnedsse_ret;
 
30993
 
 
30994
-                   if (cum
 
30995
-                       && !warnedsse
 
30996
-                       && cum->warn_sse)
 
30997
+                   if (cum && cum->warn_sse && !warnedsse)
 
30998
                      {
 
30999
-                       warnedsse = true;
 
31000
-                       warning (0, "SSE vector argument without SSE "
 
31001
-                                "enabled changes the ABI");
 
31002
+                       if (warning (OPT_Wpsabi, "SSE vector argument "
 
31003
+                                    "without SSE enabled changes the ABI"))
 
31004
+                         warnedsse = true;
 
31005
                      }
 
31006
-                   return mode;
 
31007
+                   else if (!TARGET_64BIT && in_return && !warnedsse_ret)
 
31008
+                     {
 
31009
+                       if (warning (OPT_Wpsabi, "SSE vector return "
 
31010
+                                    "without SSE enabled changes the ABI"))
 
31011
+                         warnedsse_ret = true;
 
31012
+                     }
 
31013
                  }
 
31014
-               else
 
31015
-                 return mode;
 
31016
+               else if ((size == 8 && !TARGET_64BIT) && !TARGET_MMX)
 
31017
+                 {
 
31018
+                   static bool warnedmmx;
 
31019
+                   static bool warnedmmx_ret;
 
31020
+
 
31021
+                   if (cum && cum->warn_mmx && !warnedmmx)
 
31022
+                     {
 
31023
+                       if (warning (OPT_Wpsabi, "MMX vector argument "
 
31024
+                                    "without MMX enabled changes the ABI"))
 
31025
+                         warnedmmx = true;
 
31026
+                     }
 
31027
+                   else if (in_return && !warnedmmx_ret)
 
31028
+                     {
 
31029
+                       if (warning (OPT_Wpsabi, "MMX vector return "
 
31030
+                                    "without MMX enabled changes the ABI"))
 
31031
+                         warnedmmx_ret = true;
 
31032
+                     }
 
31033
+                 }
 
31034
+               return mode;
 
31035
              }
 
31036
 
 
31037
          gcc_unreachable ();
 
31038
@@ -6190,25 +6201,28 @@
 
31039
     case CHImode:
 
31040
     case CQImode:
 
31041
       {
 
31042
-       int size = (bit_offset % 64)+ (int) GET_MODE_BITSIZE (mode);
 
31043
+       int size = bit_offset + (int) GET_MODE_BITSIZE (mode);
 
31044
 
 
31045
-       if (size <= 32)
 
31046
+       /* Analyze last 128 bits only.  */
 
31047
+       size = (size - 1) & 0x7f;
 
31048
+
 
31049
+       if (size < 32)
 
31050
          {
 
31051
            classes[0] = X86_64_INTEGERSI_CLASS;
 
31052
            return 1;
 
31053
          }
 
31054
-       else if (size <= 64)
 
31055
+       else if (size < 64)
 
31056
          {
 
31057
            classes[0] = X86_64_INTEGER_CLASS;
 
31058
            return 1;
 
31059
          }
 
31060
-       else if (size <= 64+32)
 
31061
+       else if (size < 64+32)
 
31062
          {
 
31063
            classes[0] = X86_64_INTEGER_CLASS;
 
31064
            classes[1] = X86_64_INTEGERSI_CLASS;
 
31065
            return 2;
 
31066
          }
 
31067
-       else if (size <= 64+64)
 
31068
+       else if (size < 64+64)
 
31069
          {
 
31070
            classes[0] = classes[1] = X86_64_INTEGER_CLASS;
 
31071
            return 2;
 
31072
@@ -6475,7 +6489,7 @@
 
31073
   if (n == 2
 
31074
       && regclass[0] == X86_64_INTEGER_CLASS
 
31075
       && regclass[1] == X86_64_INTEGER_CLASS
 
31076
-      && (mode == CDImode || mode == TImode || mode == TFmode)
 
31077
+      && (mode == CDImode || mode == TImode)
 
31078
       && intreg[0] + 1 == intreg[1])
 
31079
     return gen_rtx_REG (mode, intreg[0]);
 
31080
 
 
31081
@@ -6725,7 +6739,7 @@
 
31082
   words = (bytes + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
 
31083
 
 
31084
   if (type)
 
31085
-    mode = type_natural_mode (type, NULL);
 
31086
+    mode = type_natural_mode (type, NULL, false);
 
31087
 
 
31088
   if (TARGET_64BIT && (cum ? cum->call_abi : ix86_abi) == MS_ABI)
 
31089
     function_arg_advance_ms_64 (cum, bytes, words);
 
31090
@@ -6753,8 +6767,6 @@
 
31091
                 enum machine_mode orig_mode, const_tree type,
 
31092
                 HOST_WIDE_INT bytes, HOST_WIDE_INT words)
 
31093
 {
 
31094
-  static bool warnedsse, warnedmmx;
 
31095
-
 
31096
   /* Avoid the AL settings for the Unix64 ABI.  */
 
31097
   if (mode == VOIDmode)
 
31098
     return constm1_rtx;
 
31099
@@ -6811,12 +6823,6 @@
 
31100
     case V2DFmode:
 
31101
       if (!type || !AGGREGATE_TYPE_P (type))
 
31102
        {
 
31103
-         if (!TARGET_SSE && !warnedsse && cum->warn_sse)
 
31104
-           {
 
31105
-             warnedsse = true;
 
31106
-             warning (0, "SSE vector argument without SSE enabled "
 
31107
-                      "changes the ABI");
 
31108
-           }
 
31109
          if (cum->sse_nregs)
 
31110
            return gen_reg_or_parallel (mode, orig_mode,
 
31111
                                        cum->sse_regno + FIRST_SSE_REG);
 
31112
@@ -6849,12 +6855,6 @@
 
31113
     case V1DImode:
 
31114
       if (!type || !AGGREGATE_TYPE_P (type))
 
31115
        {
 
31116
-         if (!TARGET_MMX && !warnedmmx && cum->warn_mmx)
 
31117
-           {
 
31118
-             warnedmmx = true;
 
31119
-             warning (0, "MMX vector argument without MMX enabled "
 
31120
-                      "changes the ABI");
 
31121
-           }
 
31122
          if (cum->mmx_nregs)
 
31123
            return gen_reg_or_parallel (mode, orig_mode,
 
31124
                                        cum->mmx_regno + FIRST_MMX_REG);
 
31125
@@ -6977,7 +6977,7 @@
 
31126
   /* To simplify the code below, represent vector types with a vector mode
 
31127
      even if MMX/SSE are not active.  */
 
31128
   if (type && TREE_CODE (type) == VECTOR_TYPE)
 
31129
-    mode = type_natural_mode (type, cum);
 
31130
+    mode = type_natural_mode (type, cum, false);
 
31131
 
 
31132
   if (TARGET_64BIT && (cum ? cum->call_abi : ix86_abi) == MS_ABI)
 
31133
     arg = function_arg_ms_64 (cum, mode, omode, named, bytes);
 
31134
@@ -7235,9 +7235,15 @@
 
31135
   switch (regno)
 
31136
     {
 
31137
     case AX_REG:
 
31138
+    case DX_REG:
 
31139
       return true;
 
31140
+    case DI_REG:
 
31141
+    case SI_REG:
 
31142
+      return TARGET_64BIT && ix86_abi != MS_ABI;
 
31143
 
 
31144
-    case FIRST_FLOAT_REG:
 
31145
+      /* Complex values are returned in %st(0)/%st(1) pair.  */
 
31146
+    case ST0_REG:
 
31147
+    case ST1_REG:
 
31148
       /* TODO: The function should depend on current function ABI but
 
31149
        builtins.c would need updating then. Therefore we use the
 
31150
        default ABI.  */
 
31151
@@ -7245,10 +7251,12 @@
 
31152
        return false;
 
31153
       return TARGET_FLOAT_RETURNS_IN_80387;
 
31154
 
 
31155
-    case FIRST_SSE_REG:
 
31156
+      /* Complex values are returned in %xmm0/%xmm1 pair.  */
 
31157
+    case XMM0_REG:
 
31158
+    case XMM1_REG:
 
31159
       return TARGET_SSE;
 
31160
 
 
31161
-    case FIRST_MMX_REG:
 
31162
+    case MM0_REG:
 
31163
       if (TARGET_MACHO || TARGET_64BIT)
 
31164
        return false;
 
31165
       return TARGET_MMX;
 
31166
@@ -7420,7 +7428,7 @@
 
31167
   enum machine_mode mode, orig_mode;
 
31168
 
 
31169
   orig_mode = TYPE_MODE (valtype);
 
31170
-  mode = type_natural_mode (valtype, NULL);
 
31171
+  mode = type_natural_mode (valtype, NULL, true);
 
31172
   return ix86_function_value_1 (valtype, fntype_or_decl, orig_mode, mode);
 
31173
 }
 
31174
 
 
31175
@@ -7535,7 +7543,7 @@
 
31176
 #ifdef SUBTARGET_RETURN_IN_MEMORY
 
31177
   return SUBTARGET_RETURN_IN_MEMORY (type, fntype);
 
31178
 #else
 
31179
-  const enum machine_mode mode = type_natural_mode (type, NULL);
 
31180
+  const enum machine_mode mode = type_natural_mode (type, NULL, true);
 
31181
 
 
31182
   if (TARGET_64BIT)
 
31183
     {
 
31184
@@ -7549,52 +7557,6 @@
 
31185
 #endif
 
31186
 }
 
31187
 
 
31188
-/* When returning SSE vector types, we have a choice of either
 
31189
-     (1) being abi incompatible with a -march switch, or
 
31190
-     (2) generating an error.
 
31191
-   Given no good solution, I think the safest thing is one warning.
 
31192
-   The user won't be able to use -Werror, but....
 
31193
-
 
31194
-   Choose the STRUCT_VALUE_RTX hook because that's (at present) only
 
31195
-   called in response to actually generating a caller or callee that
 
31196
-   uses such a type.  As opposed to TARGET_RETURN_IN_MEMORY, which is called
 
31197
-   via aggregate_value_p for general type probing from tree-ssa.  */
 
31198
-
 
31199
-static rtx
 
31200
-ix86_struct_value_rtx (tree type, int incoming ATTRIBUTE_UNUSED)
 
31201
-{
 
31202
-  static bool warnedsse, warnedmmx;
 
31203
-
 
31204
-  if (!TARGET_64BIT && type)
 
31205
-    {
 
31206
-      /* Look at the return type of the function, not the function type.  */
 
31207
-      enum machine_mode mode = TYPE_MODE (TREE_TYPE (type));
 
31208
-
 
31209
-      if (!TARGET_SSE && !warnedsse)
 
31210
-       {
 
31211
-         if (mode == TImode
 
31212
-             || (VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 16))
 
31213
-           {
 
31214
-             warnedsse = true;
 
31215
-             warning (0, "SSE vector return without SSE enabled "
 
31216
-                      "changes the ABI");
 
31217
-           }
 
31218
-       }
 
31219
-
 
31220
-      if (!TARGET_MMX && !warnedmmx)
 
31221
-       {
 
31222
-         if (VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 8)
 
31223
-           {
 
31224
-             warnedmmx = true;
 
31225
-             warning (0, "MMX vector return without MMX enabled "
 
31226
-                      "changes the ABI");
 
31227
-           }
 
31228
-       }
 
31229
-    }
 
31230
-
 
31231
-  return NULL;
 
31232
-}
 
31233
-
 
31234
 
 
31235
 /* Create the va_list data type.  */
 
31236
 
 
31237
@@ -8019,7 +7981,7 @@
 
31238
   size = int_size_in_bytes (type);
 
31239
   rsize = (size + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
 
31240
 
 
31241
-  nat_mode = type_natural_mode (type, NULL);
 
31242
+  nat_mode = type_natural_mode (type, NULL, false);
 
31243
   switch (nat_mode)
 
31244
     {
 
31245
     case V8SFmode:
 
31246
@@ -10560,18 +10522,20 @@
 
31247
        }
 
31248
       m->fs.sp_offset += allocate;
 
31249
 
 
31250
+      /* Use stack_pointer_rtx for relative addressing so that code
 
31251
+        works for realigned stack, too.  */
 
31252
       if (r10_live && eax_live)
 
31253
         {
 
31254
-         t = choose_baseaddr (m->fs.sp_offset - allocate);
 
31255
+         t = gen_rtx_PLUS (Pmode, stack_pointer_rtx, eax);
 
31256
          emit_move_insn (gen_rtx_REG (word_mode, R10_REG),
 
31257
                          gen_frame_mem (word_mode, t));
 
31258
-         t = choose_baseaddr (m->fs.sp_offset - allocate - UNITS_PER_WORD);
 
31259
+         t = plus_constant (Pmode, t, UNITS_PER_WORD);
 
31260
          emit_move_insn (gen_rtx_REG (word_mode, AX_REG),
 
31261
                          gen_frame_mem (word_mode, t));
 
31262
        }
 
31263
       else if (eax_live || r10_live)
 
31264
        {
 
31265
-         t = choose_baseaddr (m->fs.sp_offset - allocate);
 
31266
+         t = gen_rtx_PLUS (Pmode, stack_pointer_rtx, eax);
 
31267
          emit_move_insn (gen_rtx_REG (word_mode,
 
31268
                                       (eax_live ? AX_REG : R10_REG)),
 
31269
                          gen_frame_mem (word_mode, t));
 
31270
@@ -11561,30 +11525,6 @@
 
31271
     }
 
31272
 }
 
31273
 
 
31274
-/* Determine if op is suitable SUBREG RTX for address.  */
 
31275
-
 
31276
-static bool
 
31277
-ix86_address_subreg_operand (rtx op)
 
31278
-{
 
31279
-  enum machine_mode mode;
 
31280
-
 
31281
-  if (!REG_P (op))
 
31282
-    return false;
 
31283
-
 
31284
-  mode = GET_MODE (op);
 
31285
-
 
31286
-  if (GET_MODE_CLASS (mode) != MODE_INT)
 
31287
-    return false;
 
31288
-
 
31289
-  /* Don't allow SUBREGs that span more than a word.  It can lead to spill
 
31290
-     failures when the register is one word out of a two word structure.  */
 
31291
-  if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
 
31292
-    return false;
 
31293
-
 
31294
-  /* Allow only SUBREGs of non-eliminable hard registers.  */
 
31295
-  return register_no_elim_operand (op, mode);
 
31296
-}
 
31297
-
 
31298
 /* Extract the parts of an RTL expression that is a valid memory address
 
31299
    for an instruction.  Return 0 if the structure of the address is
 
31300
    grossly off.  Return -1 if the address contains ASHIFT, so it is not
 
31301
@@ -11641,7 +11581,7 @@
 
31302
     base = addr;
 
31303
   else if (GET_CODE (addr) == SUBREG)
 
31304
     {
 
31305
-      if (ix86_address_subreg_operand (SUBREG_REG (addr)))
 
31306
+      if (REG_P (SUBREG_REG (addr)))
 
31307
        base = addr;
 
31308
       else
 
31309
        return 0;
 
31310
@@ -11705,7 +11645,7 @@
 
31311
              break;
 
31312
 
 
31313
            case SUBREG:
 
31314
-             if (!ix86_address_subreg_operand (SUBREG_REG (op)))
 
31315
+             if (!REG_P (SUBREG_REG (op)))
 
31316
                return 0;
 
31317
              /* FALLTHRU */
 
31318
 
 
31319
@@ -11750,19 +11690,6 @@
 
31320
       scale = 1 << scale;
 
31321
       retval = -1;
 
31322
     }
 
31323
-  else if (CONST_INT_P (addr))
 
31324
-    {
 
31325
-      if (!x86_64_immediate_operand (addr, VOIDmode))
 
31326
-       return 0;
 
31327
-
 
31328
-      /* Constant addresses are sign extended to 64bit, we have to
 
31329
-        prevent addresses from 0x80000000 to 0xffffffff in x32 mode.  */
 
31330
-      if (TARGET_X32
 
31331
-         && val_signbit_known_set_p (SImode, INTVAL (addr)))
 
31332
-       return 0;
 
31333
-
 
31334
-      disp = addr;
 
31335
-    }
 
31336
   else
 
31337
     disp = addr;                       /* displacement */
 
31338
 
 
31339
@@ -11771,18 +11698,12 @@
 
31340
       if (REG_P (index))
 
31341
        ;
 
31342
       else if (GET_CODE (index) == SUBREG
 
31343
-              && ix86_address_subreg_operand (SUBREG_REG (index)))
 
31344
+              && REG_P (SUBREG_REG (index)))
 
31345
        ;
 
31346
       else
 
31347
        return 0;
 
31348
     }
 
31349
 
 
31350
-/* Address override works only on the (%reg) part of %fs:(%reg).  */
 
31351
-  if (seg != SEG_DEFAULT
 
31352
-      && ((base && GET_MODE (base) != word_mode)
 
31353
-         || (index && GET_MODE (index) != word_mode)))
 
31354
-    return 0;
 
31355
-
 
31356
   /* Extract the integral value of scale.  */
 
31357
   if (scale_rtx)
 
31358
     {
 
31359
@@ -12258,6 +12179,45 @@
 
31360
   return false;
 
31361
 }
 
31362
 
 
31363
+/* Determine if op is suitable RTX for an address register.
 
31364
+   Return naked register if a register or a register subreg is
 
31365
+   found, otherwise return NULL_RTX.  */
 
31366
+
 
31367
+static rtx
 
31368
+ix86_validate_address_register (rtx op)
 
31369
+{
 
31370
+  enum machine_mode mode = GET_MODE (op);
 
31371
+
 
31372
+  /* Only SImode or DImode registers can form the address.  */
 
31373
+  if (mode != SImode && mode != DImode)
 
31374
+    return NULL_RTX;
 
31375
+
 
31376
+  if (REG_P (op))
 
31377
+    return op;
 
31378
+  else if (GET_CODE (op) == SUBREG)
 
31379
+    {
 
31380
+      rtx reg = SUBREG_REG (op);
 
31381
+
 
31382
+      if (!REG_P (reg))
 
31383
+       return NULL_RTX;
 
31384
+
 
31385
+      mode = GET_MODE (reg);
 
31386
+
 
31387
+      /* Don't allow SUBREGs that span more than a word.  It can
 
31388
+        lead to spill failures when the register is one word out
 
31389
+        of a two word structure.  */
 
31390
+      if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
 
31391
+       return NULL_RTX;
 
31392
+
 
31393
+      /* Allow only SUBREGs of non-eliminable hard registers.  */
 
31394
+      if (register_no_elim_operand (reg, mode))
 
31395
+       return reg;
 
31396
+    }
 
31397
+
 
31398
+  /* Op is not a register.  */
 
31399
+  return NULL_RTX;
 
31400
+}
 
31401
+
 
31402
 /* Recognizes RTL expressions that are valid memory addresses for an
 
31403
    instruction.  The MODE argument is the machine mode for the MEM
 
31404
    expression that wants to use this address.
 
31405
@@ -12273,6 +12233,7 @@
 
31406
   struct ix86_address parts;
 
31407
   rtx base, index, disp;
 
31408
   HOST_WIDE_INT scale;
 
31409
+  enum ix86_address_seg seg;
 
31410
 
 
31411
   if (ix86_decompose_address (addr, &parts) <= 0)
 
31412
     /* Decomposition failed.  */
 
31413
@@ -12282,23 +12243,16 @@
 
31414
   index = parts.index;
 
31415
   disp = parts.disp;
 
31416
   scale = parts.scale;
 
31417
+  seg = parts.seg;
 
31418
 
 
31419
   /* Validate base register.  */
 
31420
   if (base)
 
31421
     {
 
31422
-      rtx reg;
 
31423
+      rtx reg = ix86_validate_address_register (base);
 
31424
 
 
31425
-      if (REG_P (base))
 
31426
-       reg = base;
 
31427
-      else if (GET_CODE (base) == SUBREG && REG_P (SUBREG_REG (base)))
 
31428
-       reg = SUBREG_REG (base);
 
31429
-      else
 
31430
-       /* Base is not a register.  */
 
31431
+      if (reg == NULL_RTX)
 
31432
        return false;
 
31433
 
 
31434
-      if (GET_MODE (base) != SImode && GET_MODE (base) != DImode)
 
31435
-       return false;
 
31436
-
 
31437
       if ((strict && ! REG_OK_FOR_BASE_STRICT_P (reg))
 
31438
          || (! strict && ! REG_OK_FOR_BASE_NONSTRICT_P (reg)))
 
31439
        /* Base is not valid.  */
 
31440
@@ -12308,19 +12262,11 @@
 
31441
   /* Validate index register.  */
 
31442
   if (index)
 
31443
     {
 
31444
-      rtx reg;
 
31445
+      rtx reg = ix86_validate_address_register (index);
 
31446
 
 
31447
-      if (REG_P (index))
 
31448
-       reg = index;
 
31449
-      else if (GET_CODE (index) == SUBREG && REG_P (SUBREG_REG (index)))
 
31450
-       reg = SUBREG_REG (index);
 
31451
-      else
 
31452
-       /* Index is not a register.  */
 
31453
+      if (reg == NULL_RTX)
 
31454
        return false;
 
31455
 
 
31456
-      if (GET_MODE (index) != SImode && GET_MODE (index) != DImode)
 
31457
-       return false;
 
31458
-
 
31459
       if ((strict && ! REG_OK_FOR_INDEX_STRICT_P (reg))
 
31460
          || (! strict && ! REG_OK_FOR_INDEX_NONSTRICT_P (reg)))
 
31461
        /* Index is not valid.  */
 
31462
@@ -12332,6 +12278,12 @@
 
31463
       && GET_MODE (base) != GET_MODE (index))
 
31464
     return false;
 
31465
 
 
31466
+  /* Address override works only on the (%reg) part of %fs:(%reg).  */
 
31467
+  if (seg != SEG_DEFAULT
 
31468
+      && ((base && GET_MODE (base) != word_mode)
 
31469
+         || (index && GET_MODE (index) != word_mode)))
 
31470
+    return false;
 
31471
+
 
31472
   /* Validate scale factor.  */
 
31473
   if (scale != 1)
 
31474
     {
 
31475
@@ -12453,6 +12405,12 @@
 
31476
               && !x86_64_immediate_operand (disp, VOIDmode))
 
31477
        /* Displacement is out of range.  */
 
31478
        return false;
 
31479
+      /* In x32 mode, constant addresses are sign extended to 64bit, so
 
31480
+        we have to prevent addresses from 0x80000000 to 0xffffffff.  */
 
31481
+      else if (TARGET_X32 && !(index || base)
 
31482
+              && CONST_INT_P (disp)
 
31483
+              && val_signbit_known_set_p (SImode, INTVAL (disp)))
 
31484
+       return false;
 
31485
     }
 
31486
 
 
31487
   /* Everything looks valid.  */
 
31488
@@ -13817,8 +13775,6 @@
 
31489
         Those same assemblers have the same but opposite lossage on cmov.  */
 
31490
       if (mode == CCmode)
 
31491
        suffix = fp ? "nbe" : "a";
 
31492
-      else if (mode == CCCmode)
 
31493
-       suffix = "b";
 
31494
       else
 
31495
        gcc_unreachable ();
 
31496
       break;
 
31497
@@ -13840,8 +13796,12 @@
 
31498
        }
 
31499
       break;
 
31500
     case LTU:
 
31501
-      gcc_assert (mode == CCmode || mode == CCCmode);
 
31502
-      suffix = "b";
 
31503
+      if (mode == CCmode)
 
31504
+       suffix = "b";
 
31505
+      else if (mode == CCCmode)
 
31506
+       suffix = "c";
 
31507
+      else
 
31508
+       gcc_unreachable ();
 
31509
       break;
 
31510
     case GE:
 
31511
       switch (mode)
 
31512
@@ -13861,9 +13821,12 @@
 
31513
        }
 
31514
       break;
 
31515
     case GEU:
 
31516
-      /* ??? As above.  */
 
31517
-      gcc_assert (mode == CCmode || mode == CCCmode);
 
31518
-      suffix = fp ? "nb" : "ae";
 
31519
+      if (mode == CCmode)
 
31520
+       suffix = fp ? "nb" : "ae";
 
31521
+      else if (mode == CCCmode)
 
31522
+       suffix = "nc";
 
31523
+      else
 
31524
+       gcc_unreachable ();
 
31525
       break;
 
31526
     case LE:
 
31527
       gcc_assert (mode == CCmode || mode == CCGCmode || mode == CCNOmode);
 
31528
@@ -13870,11 +13833,8 @@
 
31529
       suffix = "le";
 
31530
       break;
 
31531
     case LEU:
 
31532
-      /* ??? As above.  */
 
31533
       if (mode == CCmode)
 
31534
        suffix = "be";
 
31535
-      else if (mode == CCCmode)
 
31536
-       suffix = fp ? "nb" : "ae";
 
31537
       else
 
31538
        gcc_unreachable ();
 
31539
       break;
 
31540
@@ -15340,7 +15300,7 @@
 
31541
              rtx arg = XEXP (XEXP (link, 0), 0);
 
31542
 
 
31543
              if (ix86_check_avx256_register (&arg, NULL))
 
31544
-               return AVX_U128_ANY;
 
31545
+               return AVX_U128_DIRTY;
 
31546
            }
 
31547
        }
 
31548
 
 
31549
@@ -15460,8 +15420,8 @@
 
31550
     {
 
31551
       bool avx_reg256_found = false;
 
31552
       note_stores (pat, ix86_check_avx256_stores, &avx_reg256_found);
 
31553
-      if (!avx_reg256_found)
 
31554
-       return AVX_U128_CLEAN;
 
31555
+
 
31556
+      return avx_reg256_found ? AVX_U128_DIRTY : AVX_U128_CLEAN;
 
31557
     }
 
31558
 
 
31559
   /* Otherwise, return current mode.  Remember that if insn
 
31560
@@ -17350,10 +17310,20 @@
 
31561
   if (!TARGET_OPT_AGU || optimize_function_for_size_p (cfun))
 
31562
     return false;
 
31563
 
 
31564
-  /* Check it is correct to split here.  */
 
31565
-  if (!ix86_ok_to_clobber_flags(insn))
 
31566
+  /* The "at least two components" test below might not catch simple
 
31567
+     move or zero extension insns if parts.base is non-NULL and parts.disp
 
31568
+     is const0_rtx as the only components in the address, e.g. if the
 
31569
+     register is %rbp or %r13.  As this test is much cheaper and moves or
 
31570
+     zero extensions are the common case, do this check first.  */
 
31571
+  if (REG_P (operands[1])
 
31572
+      || (SImode_address_operand (operands[1], VOIDmode)
 
31573
+         && REG_P (XEXP (operands[1], 0))))
 
31574
     return false;
 
31575
 
 
31576
+  /* Check if it is OK to split here.  */
 
31577
+  if (!ix86_ok_to_clobber_flags (insn))
 
31578
+    return false;
 
31579
+
 
31580
   ok = ix86_decompose_address (operands[1], &parts);
 
31581
   gcc_assert (ok);
 
31582
 
 
31583
@@ -18486,12 +18456,7 @@
 
31584
        return CCmode;
 
31585
     case GTU:                  /* CF=0 & ZF=0 */
 
31586
     case LEU:                  /* CF=1 | ZF=1 */
 
31587
-      /* Detect overflow checks.  They need just the carry flag.  */
 
31588
-      if (GET_CODE (op0) == MINUS
 
31589
-         && rtx_equal_p (op1, XEXP (op0, 0)))
 
31590
-       return CCCmode;
 
31591
-      else
 
31592
-       return CCmode;
 
31593
+      return CCmode;
 
31594
       /* Codes possibly doable only with sign flag when
 
31595
          comparing against zero.  */
 
31596
     case GE:                   /* SF=OF   or   SF=0 */
 
31597
@@ -20500,7 +20465,7 @@
 
31598
          return;
 
31599
 
 
31600
        case V8SFmode:
 
31601
-         mask = gen_lowpart (V8SFmode, mask);
 
31602
+         mask = gen_lowpart (V8SImode, mask);
 
31603
          if (one_operand_shuffle)
 
31604
            emit_insn (gen_avx2_permvarv8sf (target, op0, mask));
 
31605
          else
 
31606
@@ -21740,6 +21705,21 @@
 
31607
   return SImode;
 
31608
 }
 
31609
 
 
31610
+/* Copy the address to a Pmode register.  This is used for x32 to
 
31611
+   truncate DImode TLS address to a SImode register. */
 
31612
+
 
31613
+static rtx
 
31614
+ix86_copy_addr_to_reg (rtx addr)
 
31615
+{
 
31616
+  if (GET_MODE (addr) == Pmode)
 
31617
+    return copy_addr_to_reg (addr);
 
31618
+  else
 
31619
+    {
 
31620
+      gcc_assert (GET_MODE (addr) == DImode && Pmode == SImode);
 
31621
+      return gen_rtx_SUBREG (SImode, copy_to_mode_reg (DImode, addr), 0);
 
31622
+    }
 
31623
+}
 
31624
+
 
31625
 /* When SRCPTR is non-NULL, output simple loop to move memory
 
31626
    pointer to SRCPTR to DESTPTR via chunks of MODE unrolled UNROLL times,
 
31627
    overall size is COUNT specified in bytes.  When SRCPTR is NULL, output the
 
31628
@@ -22728,8 +22708,8 @@
 
31629
   gcc_assert (alg != no_stringop);
 
31630
   if (!count)
 
31631
     count_exp = copy_to_mode_reg (GET_MODE (count_exp), count_exp);
 
31632
-  destreg = copy_addr_to_reg (XEXP (dst, 0));
 
31633
-  srcreg = copy_addr_to_reg (XEXP (src, 0));
 
31634
+  destreg = ix86_copy_addr_to_reg (XEXP (dst, 0));
 
31635
+  srcreg = ix86_copy_addr_to_reg (XEXP (src, 0));
 
31636
   switch (alg)
 
31637
     {
 
31638
     case libcall:
 
31639
@@ -23119,7 +23099,7 @@
 
31640
   gcc_assert (alg != no_stringop);
 
31641
   if (!count)
 
31642
     count_exp = copy_to_mode_reg (counter_mode (count_exp), count_exp);
 
31643
-  destreg = copy_addr_to_reg (XEXP (dst, 0));
 
31644
+  destreg = ix86_copy_addr_to_reg (XEXP (dst, 0));
 
31645
   switch (alg)
 
31646
     {
 
31647
     case libcall:
 
31648
@@ -24988,7 +24968,8 @@
 
31649
 int
 
31650
 ix86_data_alignment (tree type, int align)
 
31651
 {
 
31652
-  int max_align = optimize_size ? BITS_PER_WORD : MIN (256, MAX_OFILE_ALIGNMENT);
 
31653
+  int max_align
 
31654
+    = optimize_size ? BITS_PER_WORD : MIN (256, MAX_OFILE_ALIGNMENT);
 
31655
 
 
31656
   if (AGGREGATE_TYPE_P (type)
 
31657
       && TYPE_SIZE (type)
 
31658
@@ -27984,8 +27965,8 @@
 
31659
   { OPTION_MASK_ISA_XOP, CODE_FOR_xop_shlv8hi3,         "__builtin_ia32_vpshlw",      IX86_BUILTIN_VPSHLW,      UNKNOWN,      (int)MULTI_ARG_2_HI },
 
31660
   { OPTION_MASK_ISA_XOP, CODE_FOR_xop_shlv16qi3,        "__builtin_ia32_vpshlb",      IX86_BUILTIN_VPSHLB,      UNKNOWN,      (int)MULTI_ARG_2_QI },
 
31661
 
 
31662
-  { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv4sf2,       "__builtin_ia32_vfrczss",     IX86_BUILTIN_VFRCZSS,     UNKNOWN,      (int)MULTI_ARG_2_SF },
 
31663
-  { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv2df2,       "__builtin_ia32_vfrczsd",     IX86_BUILTIN_VFRCZSD,     UNKNOWN,      (int)MULTI_ARG_2_DF },
 
31664
+  { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv4sf2,       "__builtin_ia32_vfrczss",     IX86_BUILTIN_VFRCZSS,     UNKNOWN,      (int)MULTI_ARG_1_SF },
 
31665
+  { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv2df2,       "__builtin_ia32_vfrczsd",     IX86_BUILTIN_VFRCZSD,     UNKNOWN,      (int)MULTI_ARG_1_DF },
 
31666
   { OPTION_MASK_ISA_XOP, CODE_FOR_xop_frczv4sf2,         "__builtin_ia32_vfrczps",     IX86_BUILTIN_VFRCZPS,     UNKNOWN,      (int)MULTI_ARG_1_SF },
 
31667
   { OPTION_MASK_ISA_XOP, CODE_FOR_xop_frczv2df2,         "__builtin_ia32_vfrczpd",     IX86_BUILTIN_VFRCZPD,     UNKNOWN,      (int)MULTI_ARG_1_DF },
 
31668
   { OPTION_MASK_ISA_XOP, CODE_FOR_xop_frczv8sf2,         "__builtin_ia32_vfrczps256",  IX86_BUILTIN_VFRCZPS256,  UNKNOWN,      (int)MULTI_ARG_1_SF2 },
 
31669
@@ -31245,11 +31226,12 @@
 
31670
 
 
31671
 static rtx
 
31672
 ix86_expand_special_args_builtin (const struct builtin_description *d,
 
31673
-                                   tree exp, rtx target)
 
31674
+                                 tree exp, rtx target)
 
31675
 {
 
31676
   tree arg;
 
31677
   rtx pat, op;
 
31678
   unsigned int i, nargs, arg_adjust, memory;
 
31679
+  bool aligned_mem = false;
 
31680
   struct
 
31681
     {
 
31682
       rtx op;
 
31683
@@ -31295,6 +31277,15 @@
 
31684
       nargs = 1;
 
31685
       klass = load;
 
31686
       memory = 0;
 
31687
+      switch (icode)
 
31688
+       {
 
31689
+       case CODE_FOR_sse4_1_movntdqa:
 
31690
+       case CODE_FOR_avx2_movntdqa:
 
31691
+         aligned_mem = true;
 
31692
+         break;
 
31693
+       default:
 
31694
+         break;
 
31695
+       }
 
31696
       break;
 
31697
     case VOID_FTYPE_PV2SF_V4SF:
 
31698
     case VOID_FTYPE_PV4DI_V4DI:
 
31699
@@ -31312,6 +31303,26 @@
 
31700
       klass = store;
 
31701
       /* Reserve memory operand for target.  */
 
31702
       memory = ARRAY_SIZE (args);
 
31703
+      switch (icode)
 
31704
+       {
 
31705
+       /* These builtins and instructions require the memory
 
31706
+          to be properly aligned.  */
 
31707
+       case CODE_FOR_avx_movntv4di:
 
31708
+       case CODE_FOR_sse2_movntv2di:
 
31709
+       case CODE_FOR_avx_movntv8sf:
 
31710
+       case CODE_FOR_sse_movntv4sf:
 
31711
+       case CODE_FOR_sse4a_vmmovntv4sf:
 
31712
+       case CODE_FOR_avx_movntv4df:
 
31713
+       case CODE_FOR_sse2_movntv2df:
 
31714
+       case CODE_FOR_sse4a_vmmovntv2df:
 
31715
+       case CODE_FOR_sse2_movntidi:
 
31716
+       case CODE_FOR_sse_movntq:
 
31717
+       case CODE_FOR_sse2_movntisi:
 
31718
+         aligned_mem = true;
 
31719
+         break;
 
31720
+       default:
 
31721
+         break;
 
31722
+       }
 
31723
       break;
 
31724
     case V4SF_FTYPE_V4SF_PCV2SF:
 
31725
     case V2DF_FTYPE_V2DF_PCDOUBLE:
 
31726
@@ -31368,6 +31379,17 @@
 
31727
        {
 
31728
          op = force_reg (Pmode, convert_to_mode (Pmode, op, 1));
 
31729
          target = gen_rtx_MEM (tmode, op);
 
31730
+         /* target at this point has just BITS_PER_UNIT MEM_ALIGN
 
31731
+            on it.  Try to improve it using get_pointer_alignment,
 
31732
+            and if the special builtin is one that requires strict
 
31733
+            mode alignment, also from it's GET_MODE_ALIGNMENT.
 
31734
+            Failure to do so could lead to ix86_legitimate_combined_insn
 
31735
+            rejecting all changes to such insns.  */
 
31736
+         unsigned int align = get_pointer_alignment (arg);
 
31737
+         if (aligned_mem && align < GET_MODE_ALIGNMENT (tmode))
 
31738
+           align = GET_MODE_ALIGNMENT (tmode);
 
31739
+         if (MEM_ALIGN (target) < align)
 
31740
+           set_mem_align (target, align);
 
31741
        }
 
31742
       else
 
31743
        target = force_reg (tmode, op);
 
31744
@@ -31413,8 +31435,17 @@
 
31745
              /* This must be the memory operand.  */
 
31746
              op = force_reg (Pmode, convert_to_mode (Pmode, op, 1));
 
31747
              op = gen_rtx_MEM (mode, op);
 
31748
-             gcc_assert (GET_MODE (op) == mode
 
31749
-                         || GET_MODE (op) == VOIDmode);
 
31750
+             /* op at this point has just BITS_PER_UNIT MEM_ALIGN
 
31751
+                on it.  Try to improve it using get_pointer_alignment,
 
31752
+                and if the special builtin is one that requires strict
 
31753
+                mode alignment, also from it's GET_MODE_ALIGNMENT.
 
31754
+                Failure to do so could lead to ix86_legitimate_combined_insn
 
31755
+                rejecting all changes to such insns.  */
 
31756
+             unsigned int align = get_pointer_alignment (arg);
 
31757
+             if (aligned_mem && align < GET_MODE_ALIGNMENT (mode))
 
31758
+               align = GET_MODE_ALIGNMENT (mode);
 
31759
+             if (MEM_ALIGN (op) < align)
 
31760
+               set_mem_align (op, align);
 
31761
            }
 
31762
          else
 
31763
            {
 
31764
@@ -32208,7 +32239,9 @@
 
31765
       mode4 = insn_data[icode].operand[5].mode;
 
31766
 
 
31767
       if (target == NULL_RTX
 
31768
-         || GET_MODE (target) != insn_data[icode].operand[0].mode)
 
31769
+         || GET_MODE (target) != insn_data[icode].operand[0].mode
 
31770
+         || !insn_data[icode].operand[0].predicate (target,
 
31771
+                                                    GET_MODE (target)))
 
31772
        subtarget = gen_reg_rtx (insn_data[icode].operand[0].mode);
 
31773
       else
 
31774
        subtarget = target;
 
31775
@@ -33879,10 +33912,10 @@
 
31776
     {
 
31777
       /* We implement the move patterns for all vector modes into and
 
31778
         out of SSE registers, even when no operation instructions
 
31779
-        are available.  OImode move is available only when AVX is
 
31780
-        enabled.  */
 
31781
-      return ((TARGET_AVX && mode == OImode)
 
31782
-             || VALID_AVX256_REG_MODE (mode)
 
31783
+        are available.  OImode and AVX modes are available only when
 
31784
+        AVX is enabled.  */
 
31785
+      return ((TARGET_AVX
 
31786
+              && VALID_AVX256_REG_OR_OI_MODE (mode))
 
31787
              || VALID_SSE_REG_MODE (mode)
 
31788
              || VALID_SSE2_REG_MODE (mode)
 
31789
              || VALID_MMX_REG_MODE (mode)
 
31790
@@ -35020,7 +35053,7 @@
 
31791
        {
 
31792
          tmp = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, fnaddr), UNSPEC_GOTPCREL);
 
31793
          tmp = gen_rtx_CONST (Pmode, tmp);
 
31794
-         fnaddr = gen_rtx_MEM (Pmode, tmp);
 
31795
+         fnaddr = gen_const_mem (Pmode, tmp);
 
31796
        }
 
31797
     }
 
31798
   else
 
31799
@@ -35040,8 +35073,9 @@
 
31800
          output_set_got (tmp, NULL_RTX);
 
31801
 
 
31802
          fnaddr = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, fnaddr), UNSPEC_GOT);
 
31803
-         fnaddr = gen_rtx_PLUS (Pmode, fnaddr, tmp);
 
31804
-         fnaddr = gen_rtx_MEM (Pmode, fnaddr);
 
31805
+         fnaddr = gen_rtx_CONST (Pmode, fnaddr);
 
31806
+         fnaddr = gen_rtx_PLUS (Pmode, tmp, fnaddr);
 
31807
+         fnaddr = gen_const_mem (Pmode, fnaddr);
 
31808
        }
 
31809
     }
 
31810
 
 
31811
@@ -35232,7 +35266,10 @@
 
31812
      The smallest offset in the page INSN can start is the case where START
 
31813
      ends on the offset 0.  Offset of INSN is then NBYTES - sizeof (INSN).
 
31814
      We add p2align to 16byte window with maxskip 15 - NBYTES + sizeof (INSN).
 
31815
-     */
 
31816
+
 
31817
+     Don't consider asm goto as jump, while it can contain a jump, it doesn't
 
31818
+     have to, control transfer to label(s) can be performed through other
 
31819
+     means, and also we estimate minimum length of all asm stmts as 0.  */
 
31820
   for (insn = start; insn; insn = NEXT_INSN (insn))
 
31821
     {
 
31822
       int min_size;
 
31823
@@ -35260,6 +35297,7 @@
 
31824
                {
 
31825
                  start = NEXT_INSN (start);
 
31826
                  if ((JUMP_P (start)
 
31827
+                      && asm_noperands (PATTERN (start)) < 0
 
31828
                       && GET_CODE (PATTERN (start)) != ADDR_VEC
 
31829
                       && GET_CODE (PATTERN (start)) != ADDR_DIFF_VEC)
 
31830
                      || CALL_P (start))
 
31831
@@ -35278,6 +35316,7 @@
 
31832
        fprintf (dump_file, "Insn %i estimated to %i bytes\n",
 
31833
                 INSN_UID (insn), min_size);
 
31834
       if ((JUMP_P (insn)
 
31835
+          && asm_noperands (PATTERN (insn)) < 0
 
31836
           && GET_CODE (PATTERN (insn)) != ADDR_VEC
 
31837
           && GET_CODE (PATTERN (insn)) != ADDR_DIFF_VEC)
 
31838
          || CALL_P (insn))
 
31839
@@ -35289,6 +35328,7 @@
 
31840
        {
 
31841
          start = NEXT_INSN (start);
 
31842
          if ((JUMP_P (start)
 
31843
+              && asm_noperands (PATTERN (start)) < 0
 
31844
               && GET_CODE (PATTERN (start)) != ADDR_VEC
 
31845
               && GET_CODE (PATTERN (start)) != ADDR_DIFF_VEC)
 
31846
              || CALL_P (start))
 
31847
@@ -39371,7 +39411,9 @@
 
31848
       else
 
31849
        dfinal.perm[i] = e;
 
31850
     }
 
31851
-  dfinal.op0 = gen_reg_rtx (dfinal.vmode);
 
31852
+
 
31853
+  if (!d->testing_p)
 
31854
+    dfinal.op0 = gen_reg_rtx (dfinal.vmode);
 
31855
   dfinal.op1 = dfinal.op0;
 
31856
   dfinal.one_operand_p = true;
 
31857
   dremap.target = dfinal.op0;
 
31858
@@ -39806,6 +39848,9 @@
 
31859
     return false;
 
31860
   gcc_assert (!d->one_operand_p);
 
31861
 
 
31862
+  if (d->testing_p)
 
31863
+    return true;
 
31864
+
 
31865
   nelt = d->nelt;
 
31866
   eltsz = GET_MODE_SIZE (GET_MODE_INNER (d->vmode));
 
31867
 
 
31868
@@ -40005,6 +40050,8 @@
 
31869
   switch (d->vmode)
 
31870
     {
 
31871
     case V4DFmode:
 
31872
+      if (d->testing_p)
 
31873
+       break;
 
31874
       t1 = gen_reg_rtx (V4DFmode);
 
31875
       t2 = gen_reg_rtx (V4DFmode);
 
31876
 
 
31877
@@ -40024,6 +40071,8 @@
 
31878
       {
 
31879
        int mask = odd ? 0xdd : 0x88;
 
31880
 
 
31881
+       if (d->testing_p)
 
31882
+         break;
 
31883
        t1 = gen_reg_rtx (V8SFmode);
 
31884
        t2 = gen_reg_rtx (V8SFmode);
 
31885
        t3 = gen_reg_rtx (V8SFmode);
 
31886
@@ -40065,6 +40114,8 @@
 
31887
        return expand_vec_perm_pshufb2 (d);
 
31888
       else
 
31889
        {
 
31890
+         if (d->testing_p)
 
31891
+           break;
 
31892
          /* We need 2*log2(N)-1 operations to achieve odd/even
 
31893
             with interleave. */
 
31894
          t1 = gen_reg_rtx (V8HImode);
 
31895
@@ -40086,6 +40137,8 @@
 
31896
        return expand_vec_perm_pshufb2 (d);
 
31897
       else
 
31898
        {
 
31899
+         if (d->testing_p)
 
31900
+           break;
 
31901
          t1 = gen_reg_rtx (V16QImode);
 
31902
          t2 = gen_reg_rtx (V16QImode);
 
31903
          t3 = gen_reg_rtx (V16QImode);
 
31904
@@ -40118,6 +40171,9 @@
 
31905
          return expand_vec_perm_even_odd_1 (&d_copy, odd);
 
31906
        }
 
31907
 
 
31908
+      if (d->testing_p)
 
31909
+       break;
 
31910
+
 
31911
       t1 = gen_reg_rtx (V4DImode);
 
31912
       t2 = gen_reg_rtx (V4DImode);
 
31913
 
 
31914
@@ -40144,6 +40200,9 @@
 
31915
          return expand_vec_perm_even_odd_1 (&d_copy, odd);
 
31916
        }
 
31917
 
 
31918
+      if (d->testing_p)
 
31919
+       break;
 
31920
+
 
31921
       t1 = gen_reg_rtx (V8SImode);
 
31922
       t2 = gen_reg_rtx (V8SImode);
 
31923
 
 
31924
@@ -40236,6 +40295,8 @@
 
31925
     case V16QImode:
 
31926
       /* These can be implemented via interleave.  We save one insn by
 
31927
         stopping once we have promoted to V4SImode and then use pshufd.  */
 
31928
+      if (d->testing_p)
 
31929
+       return true;
 
31930
       do
 
31931
        {
 
31932
          rtx dest;
 
31933
@@ -42473,8 +42534,6 @@
 
31934
 
 
31935
 #undef TARGET_PROMOTE_PROTOTYPES
 
31936
 #define TARGET_PROMOTE_PROTOTYPES hook_bool_const_tree_true
 
31937
-#undef TARGET_STRUCT_VALUE_RTX
 
31938
-#define TARGET_STRUCT_VALUE_RTX ix86_struct_value_rtx
 
31939
 #undef TARGET_SETUP_INCOMING_VARARGS
 
31940
 #define TARGET_SETUP_INCOMING_VARARGS ix86_setup_incoming_varargs
 
31941
 #undef TARGET_MUST_PASS_IN_STACK
 
31942
Index: gcc/config/tilegx/tilegx.md
 
31943
===================================================================
 
31944
--- a/src/gcc/config/tilegx/tilegx.md   (.../tags/gcc_4_8_2_release)
 
31945
+++ b/src/gcc/config/tilegx/tilegx.md   (.../branches/gcc-4_8-branch)
 
31946
@@ -5076,10 +5076,8 @@
 
31947
 
 
31948
 ;; Network intrinsics
 
31949
 
 
31950
-;; Note the "pseudo" text is handled specially by the
 
31951
-;; asm_output_opcode routine.  If the output is an empty string, the
 
31952
-;; instruction would bypass the asm_output_opcode routine, bypassing
 
31953
-;; the bundle handling code.
 
31954
+;; Note the this barrier is of type "nothing," which is deleted after
 
31955
+;; the final scheduling pass so that nothing is emitted for it.
 
31956
 (define_insn "tilegx_network_barrier"
 
31957
   [(unspec_volatile:SI [(const_int 0)] UNSPEC_NETWORK_BARRIER)]
 
31958
   ""
 
31959
Index: gcc/config/tilegx/tilegx-c.c
 
31960
===================================================================
 
31961
--- a/src/gcc/config/tilegx/tilegx-c.c  (.../tags/gcc_4_8_2_release)
 
31962
+++ b/src/gcc/config/tilegx/tilegx-c.c  (.../branches/gcc-4_8-branch)
 
31963
@@ -47,6 +47,9 @@
 
31964
   if (TARGET_32BIT)
 
31965
     builtin_define ("__tilegx32__");
 
31966
 
 
31967
+  builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
 
31968
+  builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
 
31969
+
 
31970
   TILEGX_CPU_CPP_ENDIAN_BUILTINS ();
 
31971
   GNU_USER_TARGET_OS_CPP_BUILTINS ();
 
31972
 }
 
31973
Index: gcc/config/tilegx/sync.md
 
31974
===================================================================
 
31975
--- a/src/gcc/config/tilegx/sync.md     (.../tags/gcc_4_8_2_release)
 
31976
+++ b/src/gcc/config/tilegx/sync.md     (.../branches/gcc-4_8-branch)
 
31977
@@ -150,15 +150,22 @@
 
31978
    (match_operand:SI 3 "const_int_operand" "")]         ;; model
 
31979
   ""
 
31980
 {
 
31981
+  rtx addend;
 
31982
   enum memmodel model = (enum memmodel) INTVAL (operands[3]);
 
31983
 
 
31984
   if (operands[2] != const0_rtx)
 
31985
-    emit_move_insn (operands[2], gen_rtx_NEG (<MODE>mode, operands[2]));
 
31986
+    {
 
31987
+       addend = gen_reg_rtx (<MODE>mode);
 
31988
+       emit_move_insn (addend,
 
31989
+                       gen_rtx_MINUS (<MODE>mode, const0_rtx, operands[2]));
 
31990
+    }
 
31991
+  else
 
31992
+    addend = operands[2];
 
31993
 
 
31994
   tilegx_pre_atomic_barrier (model);
 
31995
   emit_insn (gen_atomic_fetch_add_bare<mode> (operands[0],
 
31996
                                               operands[1],
 
31997
-                                              operands[2]));
 
31998
+                                              addend));
 
31999
   tilegx_post_atomic_barrier (model);
 
32000
   DONE;
 
32001
 })
 
32002
Index: gcc/config/tilegx/tilegx.c
 
32003
===================================================================
 
32004
--- a/src/gcc/config/tilegx/tilegx.c    (.../tags/gcc_4_8_2_release)
 
32005
+++ b/src/gcc/config/tilegx/tilegx.c    (.../branches/gcc-4_8-branch)
 
32006
@@ -702,6 +702,16 @@
 
32007
 }
 
32008
 
 
32009
 
 
32010
+/* Implement TARGET_EXPAND_TO_RTL_HOOK.  */
 
32011
+static void
 
32012
+tilegx_expand_to_rtl_hook (void)
 
32013
+{
 
32014
+  /* Exclude earlier sets of crtl->uses_pic_offset_table, because we
 
32015
+     only care about uses actually emitted.  */
 
32016
+  crtl->uses_pic_offset_table = 0;
 
32017
+}
 
32018
+
 
32019
+
 
32020
 /* Implement TARGET_SHIFT_TRUNCATION_MASK.  DImode shifts use the mode
 
32021
    matching insns and therefore guarantee that the shift count is
 
32022
    modulo 64.  SImode shifts sometimes use the 64 bit version so do
 
32023
@@ -3543,6 +3553,12 @@
 
32024
     }
 
32025
   if (!pat)
 
32026
     return NULL_RTX;
 
32027
+
 
32028
+  /* If we are generating a prefetch, tell the scheduler not to move
 
32029
+     it around.  */
 
32030
+  if (GET_CODE (pat) == PREFETCH)
 
32031
+    PREFETCH_SCHEDULE_BARRIER_P (pat) = true;
 
32032
+
 
32033
   emit_insn (pat);
 
32034
 
 
32035
   if (nonvoid)
 
32036
@@ -4368,10 +4384,12 @@
 
32037
   basic_block bb;
 
32038
   FOR_EACH_BB (bb)
 
32039
     {
 
32040
-      rtx insn, next;
 
32041
+      rtx insn, next, prev;
 
32042
       rtx end = NEXT_INSN (BB_END (bb));
 
32043
 
 
32044
-      for (insn = next_insn_to_bundle (BB_HEAD (bb), end); insn; insn = next)
 
32045
+      prev = NULL_RTX;
 
32046
+      for (insn = next_insn_to_bundle (BB_HEAD (bb), end); insn;
 
32047
+          prev = insn, insn = next)
 
32048
        {
 
32049
          next = next_insn_to_bundle (NEXT_INSN (insn), end);
 
32050
 
 
32051
@@ -4396,6 +4414,18 @@
 
32052
                  PUT_MODE (insn, SImode);
 
32053
                }
 
32054
            }
 
32055
+
 
32056
+         /* Delete barrier insns, because they can mess up the
 
32057
+            emitting of bundle braces.  If it is end-of-bundle, then
 
32058
+            the previous insn must be marked end-of-bundle.  */
 
32059
+         if (get_attr_type (insn) == TYPE_NOTHING) {
 
32060
+           if (GET_MODE (insn) == QImode && prev != NULL
 
32061
+               && GET_MODE (prev) == SImode)
 
32062
+             {
 
32063
+               PUT_MODE (prev, QImode);
 
32064
+             }
 
32065
+           delete_insn (insn);
 
32066
+         }
 
32067
        }
 
32068
     }
 
32069
 }
 
32070
@@ -5498,6 +5528,9 @@
 
32071
 #undef  TARGET_RTX_COSTS
 
32072
 #define TARGET_RTX_COSTS tilegx_rtx_costs
 
32073
 
 
32074
+#undef  TARGET_EXPAND_TO_RTL_HOOK
 
32075
+#define TARGET_EXPAND_TO_RTL_HOOK tilegx_expand_to_rtl_hook
 
32076
+
 
32077
 #undef  TARGET_SHIFT_TRUNCATION_MASK
 
32078
 #define TARGET_SHIFT_TRUNCATION_MASK tilegx_shift_truncation_mask
 
32079
 
 
32080
Index: gcc/config/sh/predicates.md
 
32081
===================================================================
 
32082
--- a/src/gcc/config/sh/predicates.md   (.../tags/gcc_4_8_2_release)
 
32083
+++ b/src/gcc/config/sh/predicates.md   (.../branches/gcc-4_8-branch)
 
32084
@@ -389,6 +389,12 @@
 
32085
                                           XEXP (XEXP (op, 0), 1),
 
32086
                                           TARGET_SH2A, true)")))
 
32087
 
 
32088
+;; Returns true if OP is a displacement address that can fit into a
 
32089
+;; 16 bit (non-SH2A) memory load / store insn.
 
32090
+(define_predicate "short_displacement_mem_operand"
 
32091
+  (match_test "sh_disp_addr_displacement (op)
 
32092
+              <= sh_max_mov_insn_displacement (GET_MODE (op), false)"))
 
32093
+
 
32094
 ;; Returns 1 if the operand can be used in an SH2A movu.{b|w} insn.
 
32095
 (define_predicate "zero_extend_movu_operand"
 
32096
   (and (match_operand 0 "displacement_mem_operand")
 
32097
@@ -413,6 +419,11 @@
 
32098
   if (t_reg_operand (op, mode))
 
32099
     return 0;
 
32100
 
 
32101
+  /* Disallow PC relative QImode loads, since these is no insn to do that
 
32102
+     and an imm8 load should be used instead.  */
 
32103
+  if (IS_PC_RELATIVE_LOAD_ADDR_P (op) && GET_MODE (op) == QImode)
 
32104
+    return false;
 
32105
+
 
32106
   if (MEM_P (op))
 
32107
     {
 
32108
       rtx inside = XEXP (op, 0);
 
32109
Index: gcc/config/sh/sh-protos.h
 
32110
===================================================================
 
32111
--- a/src/gcc/config/sh/sh-protos.h     (.../tags/gcc_4_8_2_release)
 
32112
+++ b/src/gcc/config/sh/sh-protos.h     (.../branches/gcc-4_8-branch)
 
32113
@@ -159,6 +159,8 @@
 
32114
 extern bool sh_cfun_trap_exit_p (void);
 
32115
 extern rtx sh_find_equiv_gbr_addr (rtx cur_insn, rtx mem);
 
32116
 extern int sh_eval_treg_value (rtx op);
 
32117
+extern HOST_WIDE_INT sh_disp_addr_displacement (rtx mem_op);
 
32118
+extern int sh_max_mov_insn_displacement (machine_mode mode, bool consider_sh2a);
 
32119
 
 
32120
 /* Result value of sh_find_set_of_reg.  */
 
32121
 struct set_of_reg
 
32122
Index: gcc/config/sh/sh.c
 
32123
===================================================================
 
32124
--- a/src/gcc/config/sh/sh.c    (.../tags/gcc_4_8_2_release)
 
32125
+++ b/src/gcc/config/sh/sh.c    (.../branches/gcc-4_8-branch)
 
32126
@@ -310,9 +310,7 @@
 
32127
 static void sh_conditional_register_usage (void);
 
32128
 static bool sh_legitimate_constant_p (enum machine_mode, rtx);
 
32129
 static int mov_insn_size (enum machine_mode, bool);
 
32130
-static int max_mov_insn_displacement (enum machine_mode, bool);
 
32131
 static int mov_insn_alignment_mask (enum machine_mode, bool);
 
32132
-static HOST_WIDE_INT disp_addr_displacement (rtx);
 
32133
 static bool sequence_insn_p (rtx);
 
32134
 static void sh_canonicalize_comparison (int *, rtx *, rtx *, bool);
 
32135
 static void sh_canonicalize_comparison (enum rtx_code&, rtx&, rtx&,
 
32136
@@ -3628,8 +3626,8 @@
 
32137
 
 
32138
 /* Determine the maximum possible displacement for a move insn for the
 
32139
    specified mode.  */
 
32140
-static int
 
32141
-max_mov_insn_displacement (enum machine_mode mode, bool consider_sh2a)
 
32142
+int
 
32143
+sh_max_mov_insn_displacement (machine_mode mode, bool consider_sh2a)
 
32144
 {
 
32145
   /* The 4 byte displacement move insns are the same as the 2 byte
 
32146
      versions but take a 12 bit displacement.  All we need to do is to
 
32147
@@ -3665,8 +3663,8 @@
 
32148
 }
 
32149
 
 
32150
 /* Return the displacement value of a displacement address.  */
 
32151
-static inline HOST_WIDE_INT
 
32152
-disp_addr_displacement (rtx x)
 
32153
+HOST_WIDE_INT
 
32154
+sh_disp_addr_displacement (rtx x)
 
32155
 {
 
32156
   gcc_assert (satisfies_constraint_Sdd (x));
 
32157
   return INTVAL (XEXP (XEXP (x, 0), 1));
 
32158
@@ -3703,12 +3701,12 @@
 
32159
         HImode and QImode loads/stores with displacement put pressure on
 
32160
         R0 which will most likely require another reg copy.  Thus account
 
32161
         a higher cost for that.  */
 
32162
-      if (offset > 0 && offset <= max_mov_insn_displacement (mode, false))
 
32163
+      if (offset > 0 && offset <= sh_max_mov_insn_displacement (mode, false))
 
32164
        return (mode == HImode || mode == QImode) ? 2 : 1;
 
32165
 
 
32166
       /* The displacement would fit into a 4 byte move insn (SH2A).  */
 
32167
       if (TARGET_SH2A
 
32168
-         && offset > 0 && offset <= max_mov_insn_displacement (mode, true))
 
32169
+         && offset > 0 && offset <= sh_max_mov_insn_displacement (mode, true))
 
32170
        return 2;
 
32171
 
 
32172
       /* The displacement is probably out of range and will require extra
 
32173
@@ -10218,7 +10216,7 @@
 
32174
   else
 
32175
     {
 
32176
       const HOST_WIDE_INT offset = INTVAL (op);
 
32177
-      const int max_disp = max_mov_insn_displacement (mode, consider_sh2a);
 
32178
+      const int max_disp = sh_max_mov_insn_displacement (mode, consider_sh2a);
 
32179
       const int align_mask = mov_insn_alignment_mask (mode, consider_sh2a);
 
32180
 
 
32181
       /* If the mode does not support any displacement always return false.
 
32182
@@ -10404,7 +10402,7 @@
 
32183
      effectively disable the small displacement insns.  */
 
32184
   const int mode_sz = GET_MODE_SIZE (mode);
 
32185
   const int mov_insn_sz = mov_insn_size (mode, false);
 
32186
-  const int max_disp = max_mov_insn_displacement (mode, false);
 
32187
+  const int max_disp = sh_max_mov_insn_displacement (mode, false);
 
32188
   const int max_disp_next = max_disp + mov_insn_sz;
 
32189
   HOST_WIDE_INT align_modifier = offset > 127 ? mov_insn_sz : 0;
 
32190
   HOST_WIDE_INT offset_adjust;
 
32191
@@ -13165,7 +13163,8 @@
 
32192
      the insns must have the appropriate alternatives.  */
 
32193
   if ((mode == QImode || mode == HImode) && rclass != R0_REGS
 
32194
       && satisfies_constraint_Sdd (x)
 
32195
-      && disp_addr_displacement (x) <= max_mov_insn_displacement (mode, false))
 
32196
+      && sh_disp_addr_displacement (x)
 
32197
+        <= sh_max_mov_insn_displacement (mode, false))
 
32198
     return R0_REGS;
 
32199
 
 
32200
   /* When reload is trying to address a QImode or HImode subreg on the stack, 
 
32201
Index: gcc/config/sh/constraints.md
 
32202
===================================================================
 
32203
--- a/src/gcc/config/sh/constraints.md  (.../tags/gcc_4_8_2_release)
 
32204
+++ b/src/gcc/config/sh/constraints.md  (.../branches/gcc-4_8-branch)
 
32205
@@ -221,6 +221,7 @@
 
32206
 (define_constraint "Q"
 
32207
   "A pc relative load operand."
 
32208
   (and (match_code "mem")
 
32209
+       (match_test "GET_MODE (op) != QImode")
 
32210
        (match_test "IS_PC_RELATIVE_LOAD_ADDR_P (XEXP (op, 0))")))
 
32211
 
 
32212
 (define_constraint "Bsc"
 
32213
@@ -295,13 +296,15 @@
 
32214
 
 
32215
 (define_memory_constraint "Sdd"
 
32216
   "A memory reference that uses displacement addressing."
 
32217
-  (and (match_test "MEM_P (op) && GET_CODE (XEXP (op, 0)) == PLUS")
 
32218
+  (and (match_code "mem")
 
32219
+       (match_test "GET_CODE (XEXP (op, 0)) == PLUS")
 
32220
        (match_test "REG_P (XEXP (XEXP (op, 0), 0))")
 
32221
        (match_test "CONST_INT_P (XEXP (XEXP (op, 0), 1))")))
 
32222
 
 
32223
 (define_memory_constraint "Snd"
 
32224
   "A memory reference that excludes displacement addressing."
 
32225
-  (match_test "! satisfies_constraint_Sdd (op)"))
 
32226
+  (and (match_code "mem")
 
32227
+       (match_test "! satisfies_constraint_Sdd (op)")))
 
32228
 
 
32229
 (define_memory_constraint "Sbv"
 
32230
   "A memory reference, as used in SH2A bclr.b, bset.b, etc."
 
32231
Index: gcc/config/sh/sh.md
 
32232
===================================================================
 
32233
--- a/src/gcc/config/sh/sh.md   (.../tags/gcc_4_8_2_release)
 
32234
+++ b/src/gcc/config/sh/sh.md   (.../branches/gcc-4_8-branch)
 
32235
@@ -6831,34 +6831,9 @@
 
32236
   prepare_move_operands (operands, QImode);
 
32237
 })
 
32238
 
 
32239
-;; If movqi_reg_reg is specified as an alternative of movqi, movqi will be
 
32240
-;; selected to copy QImode regs.  If one of them happens to be allocated
 
32241
-;; on the stack, reload will stick to movqi insn and generate wrong
 
32242
-;; displacement addressing because of the generic m alternatives.
 
32243
-;; With the movqi_reg_reg being specified before movqi it will be initially
 
32244
-;; picked to load/store regs.  If the regs regs are on the stack reload
 
32245
-;; try other insns and not stick to movqi_reg_reg, unless there were spilled
 
32246
-;; pseudos in which case 'm' constraints pertain.
 
32247
-;; The same applies to the movhi variants.
 
32248
-;;
 
32249
-;; Notice, that T bit is not allowed as a mov src operand here.  This is to
 
32250
-;; avoid things like (set (reg:QI) (subreg:QI (reg:SI T_REG) 0)), which
 
32251
-;; introduces zero extensions after T bit stores and redundant reg copies.
 
32252
-;;
 
32253
-;; FIXME: We can't use 'arith_reg_operand' (which disallows T_REG) as a
 
32254
-;; predicate for the mov src operand because reload will have trouble
 
32255
-;; reloading MAC subregs otherwise.  For that probably special patterns
 
32256
-;; would be required.
 
32257
-(define_insn "*mov<mode>_reg_reg"
 
32258
-  [(set (match_operand:QIHI 0 "arith_reg_dest" "=r,m,*z")
 
32259
-       (match_operand:QIHI 1 "register_operand" "r,*z,m"))]
 
32260
-  "TARGET_SH1 && !t_reg_operand (operands[1], VOIDmode)"
 
32261
-  "@
 
32262
-    mov                %1,%0
 
32263
-    mov.<bw>   %1,%0
 
32264
-    mov.<bw>   %1,%0"
 
32265
-  [(set_attr "type" "move,store,load")])
 
32266
-
 
32267
+;; Specifying the displacement addressing load / store patterns separately
 
32268
+;; before the generic movqi / movhi pattern allows controlling the order
 
32269
+;; in which load / store insns are selected in a more fine grained way.
 
32270
 ;; FIXME: The non-SH2A and SH2A variants should be combined by adding
 
32271
 ;; "enabled" attribute as it is done in other targets.
 
32272
 (define_insn "*mov<mode>_store_mem_disp04"
 
32273
@@ -6908,38 +6883,44 @@
 
32274
   [(set_attr "type" "load")
 
32275
    (set_attr "length" "2,2,4")])
 
32276
 
 
32277
-;; The m constraints basically allow any kind of addresses to be used with any
 
32278
-;; source/target register as the other operand.  This is not true for 
 
32279
-;; displacement addressing modes on anything but SH2A.  That's why the
 
32280
-;; specialized load/store insns are specified above.
 
32281
-(define_insn "*movqi"
 
32282
-  [(set (match_operand:QI 0 "general_movdst_operand" "=r,r,m,r,l")
 
32283
-       (match_operand:QI 1 "general_movsrc_operand"  "i,m,r,l,r"))]
 
32284
+;; The order of the constraint alternatives is important here.
 
32285
+;; Q/r has to come first, otherwise PC relative loads might wrongly get
 
32286
+;; placed into delay slots.  Since there is no QImode PC relative load, the
 
32287
+;; Q constraint and general_movsrc_operand will reject it for QImode.
 
32288
+;; The Snd alternatives should come before Sdd in order to avoid a preference
 
32289
+;; of using r0 als the register operand for addressing modes other than
 
32290
+;; displacement addressing.
 
32291
+;; The Sdd alternatives allow only r0 as register operand, even though on
 
32292
+;; SH2A any register could be allowed by switching to a 32 bit insn.
 
32293
+;; Generally sticking to the r0 is preferrable, since it generates smaller
 
32294
+;; code.  Obvious r0 reloads can then be eliminated with a peephole on SH2A.
 
32295
+(define_insn "*mov<mode>"
 
32296
+  [(set (match_operand:QIHI 0 "general_movdst_operand"
 
32297
+                             "=r,r,r,Snd,r,  Sdd,z,  r,l")
 
32298
+       (match_operand:QIHI 1 "general_movsrc_operand"
 
32299
+                              "Q,r,i,r,  Snd,z,  Sdd,l,r"))]
 
32300
   "TARGET_SH1
 
32301
-   && (arith_reg_operand (operands[0], QImode)
 
32302
-       || arith_reg_operand (operands[1], QImode))"
 
32303
+   && (arith_reg_operand (operands[0], <MODE>mode)
 
32304
+       || arith_reg_operand (operands[1], <MODE>mode))"
 
32305
   "@
 
32306
+       mov.<bw>        %1,%0
 
32307
        mov     %1,%0
 
32308
-       mov.b   %1,%0
 
32309
-       mov.b   %1,%0
 
32310
-       sts     %1,%0
 
32311
-       lds     %1,%0"
 
32312
- [(set_attr "type" "movi8,load,store,prget,prset")])
 
32313
-
 
32314
-(define_insn "*movhi"
 
32315
-  [(set (match_operand:HI 0 "general_movdst_operand" "=r,r,r,m,r,l")
 
32316
-       (match_operand:HI 1 "general_movsrc_operand"  "Q,i,m,r,l,r"))]
 
32317
-  "TARGET_SH1
 
32318
-   && (arith_reg_operand (operands[0], HImode)
 
32319
-       || arith_reg_operand (operands[1], HImode))"
 
32320
-  "@
 
32321
-       mov.w   %1,%0
 
32322
        mov     %1,%0
 
32323
-       mov.w   %1,%0
 
32324
-       mov.w   %1,%0
 
32325
+       mov.<bw>        %1,%0
 
32326
+       mov.<bw>        %1,%0
 
32327
+       mov.<bw>        %1,%0
 
32328
+       mov.<bw>        %1,%0
 
32329
        sts     %1,%0
 
32330
        lds     %1,%0"
 
32331
- [(set_attr "type" "pcload,movi8,load,store,prget,prset")])
 
32332
+  [(set_attr "type" "pcload,move,movi8,store,load,store,load,prget,prset")
 
32333
+   (set (attr "length")
 
32334
+       (cond [(and (match_operand 0 "displacement_mem_operand")
 
32335
+                   (not (match_operand 0 "short_displacement_mem_operand")))
 
32336
+              (const_int 4)
 
32337
+              (and (match_operand 1 "displacement_mem_operand")
 
32338
+                   (not (match_operand 1 "short_displacement_mem_operand")))
 
32339
+              (const_int 4)]
 
32340
+             (const_int 2)))])
 
32341
 
 
32342
 (define_insn "*movqi_media"
 
32343
   [(set (match_operand:QI 0 "general_movdst_operand" "=r,r,r,m")
 
32344
@@ -8427,11 +8408,9 @@
 
32345
 
 
32346
   while (true)
 
32347
     {
 
32348
-      /* It's not safe to go beyond the current basic block after reload.  */
 
32349
       set_of_reg s1 = sh_find_set_of_reg (tested_reg, s0.insn,
 
32350
-                                         reload_completed
 
32351
-                                         ? prev_nonnote_insn_bb
 
32352
-                                         : prev_nonnote_insn);
 
32353
+                                         prev_nonnote_insn);
 
32354
+
 
32355
       if (s1.set_src == NULL_RTX)
 
32356
        break;
 
32357
 
 
32358
@@ -8449,15 +8428,25 @@
 
32359
          continue;
 
32360
        }
 
32361
 
 
32362
-       /* It's only safe to remove the testing insn if the T bit is not
 
32363
-          modified between the testing insn and the insn that stores the
 
32364
-          T bit.  Notice that some T bit stores such as negc also modify
 
32365
-          the T bit.  */
 
32366
-       if (modified_between_p (get_t_reg_rtx (), s1.insn, testing_insn)
 
32367
-           || modified_in_p (get_t_reg_rtx (), s1.insn))
 
32368
-         operands[2] = NULL_RTX;
 
32369
+      /* It's only safe to remove the testing insn if the T bit is not
 
32370
+        modified between the testing insn and the insn that stores the
 
32371
+        T bit.  Notice that some T bit stores such as negc also modify
 
32372
+        the T bit.  */
 
32373
+      if (modified_between_p (get_t_reg_rtx (), s1.insn, testing_insn)
 
32374
+         || modified_in_p (get_t_reg_rtx (), s1.insn)
 
32375
+         || !no_labels_between_p (s1.insn, testing_insn))
 
32376
+       operands[2] = NULL_RTX;
 
32377
+      else
 
32378
+       {
 
32379
+         /* If the insn that sets the tested reg has a REG_DEAD note on
 
32380
+            the T bit remove that note since we're extending the usage
 
32381
+            of the T bit.  */
 
32382
+         rtx n = find_regno_note (s1.insn, REG_DEAD, T_REG);
 
32383
+         if (n != NULL_RTX)
 
32384
+           remove_note (s1.insn, n);
 
32385
+       }
 
32386
 
 
32387
-       break;
 
32388
+      break;
 
32389
     }
 
32390
 
 
32391
   if (operands[2] == NULL_RTX)
 
32392
Index: gcc/config/sh/sh.opt
 
32393
===================================================================
 
32394
--- a/src/gcc/config/sh/sh.opt  (.../tags/gcc_4_8_2_release)
 
32395
+++ b/src/gcc/config/sh/sh.opt  (.../branches/gcc-4_8-branch)
 
32396
@@ -21,7 +21,7 @@
 
32397
 ;; Used for various architecture options.
 
32398
 Mask(SH_E)
 
32399
 
 
32400
-;; Set if the default precision of th FPU is single.
 
32401
+;; Set if the default precision of the FPU is single.
 
32402
 Mask(FPU_SINGLE)
 
32403
 
 
32404
 ;; Set if the a double-precision FPU is present but is restricted to
 
32405
Index: gcc/config/microblaze/predicates.md
 
32406
===================================================================
 
32407
--- a/src/gcc/config/microblaze/predicates.md   (.../tags/gcc_4_8_2_release)
 
32408
+++ b/src/gcc/config/microblaze/predicates.md   (.../branches/gcc-4_8-branch)
 
32409
@@ -85,6 +85,10 @@
 
32410
   (ior (match_operand 0 "const_0_operand")
 
32411
        (match_operand 0 "register_operand")))
 
32412
 
 
32413
+(define_predicate "reg_or_mem_operand"
 
32414
+  (ior (match_operand 0 "memory_operand")
 
32415
+       (match_operand 0 "register_operand")))
 
32416
+
 
32417
 ;;  Return if the operand is either the PC or a label_ref.  
 
32418
 (define_special_predicate "pc_or_label_operand"
 
32419
   (ior (match_code "pc,label_ref")
 
32420
@@ -119,3 +123,7 @@
 
32421
 ;; Test for valid PIC call operand
 
32422
 (define_predicate "call_insn_plt_operand"
 
32423
   (match_test "PLT_ADDR_P (op)"))
 
32424
+
 
32425
+;; Return if the code of this rtx pattern is a comparison.
 
32426
+(define_predicate "cmp_op"
 
32427
+  (match_code "gt,ge,gtu,geu,lt,le,ltu,leu"))
 
32428
Index: gcc/config/microblaze/microblaze.md
 
32429
===================================================================
 
32430
--- a/src/gcc/config/microblaze/microblaze.md   (.../tags/gcc_4_8_2_release)
 
32431
+++ b/src/gcc/config/microblaze/microblaze.md   (.../branches/gcc-4_8-branch)
 
32432
@@ -74,7 +74,7 @@
 
32433
 ;; bshift      Shift operations
 
32434
 
 
32435
 (define_attr "type"
 
32436
-  "unknown,branch,jump,call,load,store,move,arith,darith,imul,idiv,icmp,multi,nop,no_delay_arith,no_delay_load,no_delay_store,no_delay_imul,no_delay_move,bshift,fadd,frsub,fmul,fdiv,fcmp,fsl,fsqrt,fcvt"
 
32437
+  "unknown,branch,jump,call,load,store,move,arith,darith,imul,idiv,icmp,multi,nop,no_delay_arith,no_delay_load,no_delay_store,no_delay_imul,no_delay_move,bshift,fadd,frsub,fmul,fdiv,fcmp,fsl,fsqrt,fcvt,trap"
 
32438
   (const_string "unknown"))
 
32439
 
 
32440
 ;; Main data type used by the insn
 
32441
@@ -365,7 +365,8 @@
 
32442
   [(set (match_operand:HI 0 "register_operand" "=r")
 
32443
         (bswap:HI (match_operand:HI 1 "register_operand" "r")))]
 
32444
   "TARGET_REORDER"
 
32445
-  "swaph %0, %1"
 
32446
+  "swapb %0, %1
 
32447
+   swaph %0, %0"
 
32448
 )
 
32449
 
 
32450
 ;;----------------------------------------------------------------
 
32451
@@ -1118,6 +1119,18 @@
 
32452
   }
 
32453
 )
 
32454
 
 
32455
+;;Load and store reverse
 
32456
+(define_insn "movsi4_rev"
 
32457
+  [(set (match_operand:SI 0 "reg_or_mem_operand" "=r,Q")
 
32458
+        (bswap:SI (match_operand:SF 1 "reg_or_mem_operand" "Q,r")))]
 
32459
+  "TARGET_REORDER"
 
32460
+  "@
 
32461
+   lwr\t%0,%y1,r0
 
32462
+   swr\t%1,%y0,r0"
 
32463
+  [(set_attr "type"     "load,store")
 
32464
+  (set_attr "mode"      "SI")
 
32465
+  (set_attr "length"    "4,4")])
 
32466
+
 
32467
 ;; 32-bit floating point moves
 
32468
 
 
32469
 (define_expand "movsf"
 
32470
@@ -1472,7 +1485,7 @@
 
32471
   (set_attr "length"   "124")]
 
32472
 )
 
32473
 
 
32474
-(define_insn "*ashlri_reg"
 
32475
+(define_insn "*ashrsi_reg"
 
32476
   [(set (match_operand:SI 0 "register_operand" "=&d")
 
32477
        (ashiftrt:SI (match_operand:SI 1 "register_operand"  "d")
 
32478
                    (match_operand:SI 2 "register_operand" "d")))]
 
32479
@@ -1561,7 +1574,7 @@
 
32480
   (set_attr "length"   "124")]
 
32481
 )
 
32482
 
 
32483
-(define_insn "*lshlri_reg"
 
32484
+(define_insn "*lshrsi_reg"
 
32485
   [(set (match_operand:SI 0 "register_operand" "=&d")
 
32486
        (lshiftrt:SI (match_operand:SI 1 "register_operand"  "d")
 
32487
                    (match_operand:SI 2 "register_operand" "d")))]
 
32488
@@ -1622,34 +1635,12 @@
 
32489
   (set_attr "length"   "4")]
 
32490
 )              
 
32491
 
 
32492
-(define_insn "signed_compare"
 
32493
-  [(set (match_operand:SI 0 "register_operand" "=d")
 
32494
-       (unspec
 
32495
-               [(match_operand:SI 1 "register_operand" "d")
 
32496
-                (match_operand:SI 2 "register_operand" "d")] UNSPEC_CMP))]
 
32497
-  ""
 
32498
-  "cmp\t%0,%1,%2"
 
32499
-  [(set_attr "type"    "arith")
 
32500
-  (set_attr "mode"     "SI")
 
32501
-  (set_attr "length"   "4")])
 
32502
-
 
32503
-(define_insn "unsigned_compare"
 
32504
-  [(set (match_operand:SI 0 "register_operand" "=d")
 
32505
-       (unspec 
 
32506
-               [(match_operand:SI 1 "register_operand" "d")
 
32507
-                (match_operand:SI 2 "register_operand" "d")] UNSPEC_CMPU))]
 
32508
-  ""
 
32509
-  "cmpu\t%0,%1,%2"
 
32510
-  [(set_attr "type"    "arith")
 
32511
-  (set_attr "mode"     "SI")
 
32512
-  (set_attr "length"   "4")])
 
32513
-
 
32514
 ;;----------------------------------------------------------------
 
32515
 ;; Setting a register from an floating point comparison. 
 
32516
 ;;----------------------------------------------------------------
 
32517
 (define_insn "cstoresf4"
 
32518
    [(set (match_operand:SI 0 "register_operand" "=r")
 
32519
-        (match_operator 1 "comparison_operator"
 
32520
+        (match_operator:SI 1 "ordered_comparison_operator"
 
32521
              [(match_operand:SF 2 "register_operand" "r")
 
32522
               (match_operand:SF 3 "register_operand" "r")]))]
 
32523
   "TARGET_HARD_FLOAT"
 
32524
@@ -1678,7 +1669,7 @@
 
32525
 
 
32526
 (define_expand "cbranchsf4"
 
32527
   [(set (pc)
 
32528
-       (if_then_else (match_operator 0 "comparison_operator"
 
32529
+       (if_then_else (match_operator 0 "ordered_comparison_operator"
 
32530
                       [(match_operand:SF 1 "register_operand")
 
32531
                        (match_operand:SF 2 "register_operand")])
 
32532
                      (label_ref (match_operand 3 ""))
 
32533
@@ -1717,6 +1708,47 @@
 
32534
    (set_attr "length"  "4")]
 
32535
 )
 
32536
 
 
32537
+(define_insn "branch_compare"
 
32538
+  [(set (pc)
 
32539
+        (if_then_else (match_operator:SI 0 "cmp_op"
 
32540
+                                         [(match_operand:SI 1 "register_operand" "d")
 
32541
+                                          (match_operand:SI 2 "register_operand" "d")
 
32542
+                                         ])
 
32543
+                      (label_ref (match_operand 3))
 
32544
+                      (pc)))
 
32545
+  (clobber(reg:SI R_TMP))]
 
32546
+  ""
 
32547
+  {
 
32548
+    operands[4] = gen_rtx_REG (SImode, MB_ABI_ASM_TEMP_REGNUM);
 
32549
+    enum rtx_code code = GET_CODE (operands[0]);
 
32550
+
 
32551
+    if (code == GT || code == LE)
 
32552
+      {
 
32553
+        output_asm_insn ("cmp\tr18,%z1,%z2", operands);
 
32554
+        code = swap_condition (code);
 
32555
+      }
 
32556
+    else if (code == GTU || code == LEU)
 
32557
+      {
 
32558
+        output_asm_insn ("cmpu\tr18,%z1,%z2", operands);
 
32559
+        code = swap_condition (code);
 
32560
+      }
 
32561
+    else if (code == GE || code == LT)
 
32562
+      {
 
32563
+        output_asm_insn ("cmp\tr18,%z2,%z1", operands);
 
32564
+      }
 
32565
+    else if (code == GEU || code == LTU)
 
32566
+      {
 
32567
+        output_asm_insn ("cmpu\tr18,%z2,%z1", operands);
 
32568
+      }
 
32569
+
 
32570
+    operands[0] = gen_rtx_fmt_ee (signed_condition (code), SImode, operands[4], const0_rtx);
 
32571
+    return "b%C0i%?\tr18,%3";
 
32572
+  }
 
32573
+  [(set_attr "type"     "branch")
 
32574
+   (set_attr "mode"     "none")
 
32575
+   (set_attr "length"   "12")]
 
32576
+)
 
32577
+
 
32578
 ;;----------------------------------------------------------------
 
32579
 ;; Unconditional branches
 
32580
 ;;----------------------------------------------------------------
 
32581
@@ -2201,6 +2233,14 @@
 
32582
   (set_attr "mode"     "none")
 
32583
   (set_attr "length"   "4")])
 
32584
 
 
32585
+;; Trap instruction pattern for __builtin_trap. Same as the glibc ABORT_INSTRUCTION
 
32586
+(define_insn "trap"
 
32587
+  [(trap_if (const_int 1) (const_int 0))]
 
32588
+  ""
 
32589
+  "brki\tr0,-1"
 
32590
+ [(set_attr "type" "trap")]
 
32591
+)
 
32592
+
 
32593
 ;; The insn to set GOT. The hardcoded number "8" accounts for $pc difference
 
32594
 ;; between "mfs" and "addik" instructions.
 
32595
 (define_insn "set_got"
 
32596
Index: gcc/config/microblaze/microblaze.c
 
32597
===================================================================
 
32598
--- a/src/gcc/config/microblaze/microblaze.c    (.../tags/gcc_4_8_2_release)
 
32599
+++ b/src/gcc/config/microblaze/microblaze.c    (.../branches/gcc-4_8-branch)
 
32600
@@ -1609,21 +1609,28 @@
 
32601
 microblaze_version_to_int (const char *version)
 
32602
 {
 
32603
   const char *p, *v;
 
32604
-  const char *tmpl = "vX.YY.Z";
 
32605
+  const char *tmpl = "vXX.YY.Z";
 
32606
   int iver = 0;
 
32607
 
 
32608
   p = version;
 
32609
   v = tmpl;
 
32610
 
 
32611
-  while (*v)
 
32612
+  while (*p)
 
32613
     {
 
32614
       if (*v == 'X')
 
32615
        {                       /* Looking for major  */
 
32616
-         if (!(*p >= '0' && *p <= '9'))
 
32617
-           return -1;
 
32618
-         iver += (int) (*p - '0');
 
32619
-         iver *= 10;
 
32620
-       }
 
32621
+          if (*p == '.')
 
32622
+            {
 
32623
+              *v++;
 
32624
+            }
 
32625
+          else
 
32626
+            {
 
32627
+             if (!(*p >= '0' && *p <= '9'))
 
32628
+               return -1;
 
32629
+             iver += (int) (*p - '0');
 
32630
+              iver *= 10;
 
32631
+            }
 
32632
+        }
 
32633
       else if (*v == 'Y')
 
32634
        {                       /* Looking for minor  */
 
32635
          if (!(*p >= '0' && *p <= '9'))
 
32636
@@ -3064,6 +3071,73 @@
 
32637
   return result;
 
32638
 }
 
32639
 
 
32640
+static void
 
32641
+microblaze_asm_output_mi_thunk (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED,
 
32642
+        HOST_WIDE_INT delta, HOST_WIDE_INT vcall_offset,
 
32643
+        tree function)
 
32644
+{
 
32645
+  rtx this_rtx, insn, funexp;
 
32646
+
 
32647
+  reload_completed = 1;
 
32648
+  epilogue_completed = 1;
 
32649
+
 
32650
+  /* Mark the end of the (empty) prologue.  */
 
32651
+  emit_note (NOTE_INSN_PROLOGUE_END);
 
32652
+
 
32653
+  /* Find the "this" pointer.  If the function returns a structure,
 
32654
+     the structure return pointer is in MB_ABI_FIRST_ARG_REGNUM.  */
 
32655
+  if (aggregate_value_p (TREE_TYPE (TREE_TYPE (function)), function))
 
32656
+    this_rtx = gen_rtx_REG (Pmode, (MB_ABI_FIRST_ARG_REGNUM + 1));
 
32657
+  else
 
32658
+    this_rtx = gen_rtx_REG (Pmode, MB_ABI_FIRST_ARG_REGNUM);
 
32659
+
 
32660
+  /* Apply the constant offset, if required.  */
 
32661
+  if (delta)
 
32662
+    emit_insn (gen_addsi3 (this_rtx, this_rtx, GEN_INT (delta)));
 
32663
+
 
32664
+  /* Apply the offset from the vtable, if required.  */
 
32665
+  if (vcall_offset)
 
32666
+  {
 
32667
+    rtx vcall_offset_rtx = GEN_INT (vcall_offset);
 
32668
+    rtx temp1 = gen_rtx_REG (Pmode, MB_ABI_TEMP1_REGNUM);
 
32669
+
 
32670
+    emit_move_insn (temp1, gen_rtx_MEM (Pmode, this_rtx));
 
32671
+
 
32672
+    rtx loc = gen_rtx_PLUS (Pmode, temp1, vcall_offset_rtx);
 
32673
+    emit_move_insn (temp1, gen_rtx_MEM (Pmode, loc));
 
32674
+
 
32675
+    emit_insn (gen_addsi3 (this_rtx, this_rtx, temp1));
 
32676
+  }
 
32677
+
 
32678
+  /* Generate a tail call to the target function.  */
 
32679
+  if (!TREE_USED (function))
 
32680
+  {
 
32681
+    assemble_external (function);
 
32682
+    TREE_USED (function) = 1;
 
32683
+  }
 
32684
+
 
32685
+  funexp = XEXP (DECL_RTL (function), 0);
 
32686
+  rtx temp2 = gen_rtx_REG (Pmode, MB_ABI_TEMP2_REGNUM);
 
32687
+
 
32688
+  if (flag_pic)
 
32689
+    emit_move_insn (temp2, expand_pic_symbol_ref (Pmode, funexp));
 
32690
+  else
 
32691
+    emit_move_insn (temp2, funexp);
 
32692
+
 
32693
+  emit_insn (gen_indirect_jump (temp2));
 
32694
+
 
32695
+  /* Run just enough of rest_of_compilation.  This sequence was
 
32696
+     "borrowed" from rs6000.c.  */
 
32697
+  insn = get_insns ();
 
32698
+  shorten_branches (insn);
 
32699
+  final_start_function (insn, file, 1);
 
32700
+  final (insn, file, 1);
 
32701
+  final_end_function ();
 
32702
+
 
32703
+  reload_completed = 0;
 
32704
+  epilogue_completed = 0;
 
32705
+}
 
32706
+
 
32707
 bool
 
32708
 microblaze_expand_move (enum machine_mode mode, rtx operands[])
 
32709
 {
 
32710
@@ -3234,67 +3308,47 @@
 
32711
   emit_move_insn (mem, fnaddr);
 
32712
 }
 
32713
 
 
32714
-/* Emit instruction to perform compare.  
 
32715
-   cmp is (compare_op op0 op1).  */
 
32716
-static rtx
 
32717
-microblaze_emit_compare (enum machine_mode mode, rtx cmp, enum rtx_code *cmp_code)
 
32718
+/* Generate conditional branch -- first, generate test condition,
 
32719
+   second, generate correct branch instruction.  */
 
32720
+
 
32721
+void
 
32722
+microblaze_expand_conditional_branch (enum machine_mode mode, rtx operands[])
 
32723
 {
 
32724
-  rtx cmp_op0 = XEXP (cmp, 0);
 
32725
-  rtx cmp_op1 = XEXP (cmp, 1);
 
32726
+  enum rtx_code code = GET_CODE (operands[0]);
 
32727
+  rtx cmp_op0 = operands[1];
 
32728
+  rtx cmp_op1 = operands[2];
 
32729
+  rtx label1 = operands[3];
 
32730
   rtx comp_reg = gen_reg_rtx (SImode);
 
32731
-  enum rtx_code code = *cmp_code;
 
32732
-  
 
32733
+  rtx condition;
 
32734
+
 
32735
   gcc_assert ((GET_CODE (cmp_op0) == REG) || (GET_CODE (cmp_op0) == SUBREG));
 
32736
 
 
32737
   /* If comparing against zero, just test source reg.  */
 
32738
-  if (cmp_op1 == const0_rtx) 
 
32739
-    return cmp_op0;
 
32740
+  if (cmp_op1 == const0_rtx)
 
32741
+    {
 
32742
+      comp_reg = cmp_op0;
 
32743
+      condition = gen_rtx_fmt_ee (signed_condition (code), SImode, comp_reg, const0_rtx);
 
32744
+      emit_jump_insn (gen_condjump (condition, label1));
 
32745
+    }
 
32746
 
 
32747
-  if (code == EQ || code == NE)
 
32748
+  else if (code == EQ || code == NE)
 
32749
     {
 
32750
       /* Use xor for equal/not-equal comparison.  */
 
32751
       emit_insn (gen_xorsi3 (comp_reg, cmp_op0, cmp_op1));
 
32752
+      condition = gen_rtx_fmt_ee (signed_condition (code), SImode, comp_reg, const0_rtx);
 
32753
+      emit_jump_insn (gen_condjump (condition, label1));
 
32754
     }
 
32755
-  else if (code == GT || code == GTU || code == LE || code == LEU)
 
32756
+  else
 
32757
     {
 
32758
-      /* MicroBlaze compare is not symmetrical.  */
 
32759
-      /* Swap argument order.  */
 
32760
+      /* Generate compare and branch in single instruction. */
 
32761
       cmp_op1 = force_reg (mode, cmp_op1);
 
32762
-      if (code == GT || code == LE) 
 
32763
-        emit_insn (gen_signed_compare (comp_reg, cmp_op0, cmp_op1));
 
32764
-      else
 
32765
-        emit_insn (gen_unsigned_compare (comp_reg, cmp_op0, cmp_op1));
 
32766
-      /* Translate test condition.  */
 
32767
-      *cmp_code = swap_condition (code);
 
32768
+      condition = gen_rtx_fmt_ee (code, mode, cmp_op0, cmp_op1);
 
32769
+      emit_jump_insn (gen_branch_compare(condition, cmp_op0, cmp_op1, label1));
 
32770
     }
 
32771
-  else /* if (code == GE || code == GEU || code == LT || code == LTU) */
 
32772
-    {
 
32773
-      cmp_op1 = force_reg (mode, cmp_op1);
 
32774
-      if (code == GE || code == LT) 
 
32775
-        emit_insn (gen_signed_compare (comp_reg, cmp_op1, cmp_op0));
 
32776
-      else
 
32777
-        emit_insn (gen_unsigned_compare (comp_reg, cmp_op1, cmp_op0));
 
32778
-    }
 
32779
-
 
32780
-  return comp_reg;
 
32781
 }
 
32782
 
 
32783
-/* Generate conditional branch -- first, generate test condition,
 
32784
-   second, generate correct branch instruction.  */
 
32785
 
 
32786
 void
 
32787
-microblaze_expand_conditional_branch (enum machine_mode mode, rtx operands[])
 
32788
-{
 
32789
-  enum rtx_code code = GET_CODE (operands[0]);
 
32790
-  rtx comp;
 
32791
-  rtx condition;
 
32792
-
 
32793
-  comp = microblaze_emit_compare (mode, operands[0], &code);
 
32794
-  condition = gen_rtx_fmt_ee (signed_condition (code), SImode, comp, const0_rtx);
 
32795
-  emit_jump_insn (gen_condjump (condition, operands[3]));
 
32796
-}
 
32797
-
 
32798
-void
 
32799
 microblaze_expand_conditional_branch_sf (rtx operands[])
 
32800
 {
 
32801
   rtx condition;
 
32802
@@ -3501,6 +3555,12 @@
 
32803
 #undef TARGET_SECONDARY_RELOAD
 
32804
 #define TARGET_SECONDARY_RELOAD                microblaze_secondary_reload
 
32805
 
 
32806
+#undef  TARGET_ASM_OUTPUT_MI_THUNK
 
32807
+#define TARGET_ASM_OUTPUT_MI_THUNK      microblaze_asm_output_mi_thunk
 
32808
+
 
32809
+#undef  TARGET_ASM_CAN_OUTPUT_MI_THUNK
 
32810
+#define TARGET_ASM_CAN_OUTPUT_MI_THUNK  hook_bool_const_tree_hwi_hwi_const_tree_true
 
32811
+
 
32812
 #undef TARGET_SCHED_ADJUST_COST
 
32813
 #define TARGET_SCHED_ADJUST_COST       microblaze_adjust_cost
 
32814
 
 
32815
Index: gcc/config/microblaze/microblaze.h
 
32816
===================================================================
 
32817
--- a/src/gcc/config/microblaze/microblaze.h    (.../tags/gcc_4_8_2_release)
 
32818
+++ b/src/gcc/config/microblaze/microblaze.h    (.../branches/gcc-4_8-branch)
 
32819
@@ -213,6 +213,12 @@
 
32820
 #define STRICT_ALIGNMENT        1
 
32821
 #define PCC_BITFIELD_TYPE_MATTERS 1
 
32822
 
 
32823
+#undef SIZE_TYPE
 
32824
+#define SIZE_TYPE "unsigned int"
 
32825
+
 
32826
+#undef PTRDIFF_TYPE
 
32827
+#define PTRDIFF_TYPE "int"
 
32828
+
 
32829
 #define CONSTANT_ALIGNMENT(EXP, ALIGN)                                 \
 
32830
   ((TREE_CODE (EXP) == STRING_CST  || TREE_CODE (EXP) == CONSTRUCTOR)  \
 
32831
    && (ALIGN) < BITS_PER_WORD                                          \
 
32832
@@ -407,9 +413,6 @@
 
32833
          || GET_MODE (X) == VOIDmode)                                  \
 
32834
         ? (GR_REGS) : (CLASS))))
 
32835
 
 
32836
-#define SECONDARY_MEMORY_NEEDED(CLASS1, CLASS2, MODE)                  \
 
32837
-  (GET_MODE_CLASS (MODE) == MODE_INT)
 
32838
-
 
32839
 /* Stack layout; function entry, exit and calling.  */
 
32840
 
 
32841
 #define STACK_GROWS_DOWNWARD
 
32842
Index: gcc/config/avr/avr.c
 
32843
===================================================================
 
32844
--- a/src/gcc/config/avr/avr.c  (.../tags/gcc_4_8_2_release)
 
32845
+++ b/src/gcc/config/avr/avr.c  (.../branches/gcc-4_8-branch)
 
32846
@@ -587,10 +587,14 @@
 
32847
       const char *name;
 
32848
 
 
32849
       name = DECL_ASSEMBLER_NAME_SET_P (decl)
 
32850
-        /* Remove the leading '*' added in set_user_assembler_name.  */
 
32851
-        ? 1 + IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))
 
32852
+        ? IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))
 
32853
         : IDENTIFIER_POINTER (DECL_NAME (decl));
 
32854
 
 
32855
+      /* Skip a leading '*' that might still prefix the assembler name,
 
32856
+         e.g. in non-LTO runs.  */
 
32857
+
 
32858
+      name = default_strip_name_encoding (name);
 
32859
+
 
32860
       /* Silently ignore 'signal' if 'interrupt' is present.  AVR-LibC startet
 
32861
          using this when it switched from SIGNAL and INTERRUPT to ISR.  */
 
32862
 
 
32863
@@ -6806,8 +6810,8 @@
 
32864
 
 
32865
   /* Work out the shortest sequence.  */
 
32866
 
 
32867
-  avr_out_plus_1 (op, &len_minus, MINUS, &cc_plus, code_sat, sign, out_label);
 
32868
-  avr_out_plus_1 (op, &len_plus, PLUS, &cc_minus, code_sat, sign, out_label);
 
32869
+  avr_out_plus_1 (op, &len_minus, MINUS, &cc_minus, code_sat, sign, out_label);
 
32870
+  avr_out_plus_1 (op, &len_plus, PLUS, &cc_plus, code_sat, sign, out_label);
 
32871
 
 
32872
   if (plen)
 
32873
     {
 
32874
Index: gcc/config/cris/cris.md
 
32875
===================================================================
 
32876
--- a/src/gcc/config/cris/cris.md       (.../tags/gcc_4_8_2_release)
 
32877
+++ b/src/gcc/config/cris/cris.md       (.../branches/gcc-4_8-branch)
 
32878
@@ -758,7 +758,7 @@
 
32879
                      (match_operand:SI 1 "const_int_operand" ""))
 
32880
             (match_operand:SI 2 "register_operand" ""))])
 
32881
          (match_operand 3 "register_operand" ""))
 
32882
-     (set (match_operand:SI 4 "register_operand" "")
 
32883
+     (set (match_operand:SI 4 "cris_nonsp_register_operand" "")
 
32884
          (plus:SI (mult:SI (match_dup 0)
 
32885
                            (match_dup 1))
 
32886
                   (match_dup 2)))])]
 
32887
@@ -859,7 +859,7 @@
 
32888
             (match_operand:SI 0 "cris_bdap_operand" "")
 
32889
             (match_operand:SI 1 "cris_bdap_operand" ""))])
 
32890
          (match_operand 2 "register_operand" ""))
 
32891
-     (set (match_operand:SI 3 "register_operand" "")
 
32892
+     (set (match_operand:SI 3 "cris_nonsp_register_operand" "")
 
32893
          (plus:SI (match_dup 0) (match_dup 1)))])]
 
32894
   "reload_completed && reg_overlap_mentioned_p (operands[3], operands[2])"
 
32895
   [(set (match_dup 4) (match_dup 2))
 
32896
@@ -3960,7 +3960,7 @@
 
32897
 ;; up.
 
32898
 
 
32899
 (define_split
 
32900
-  [(set (match_operand 0 "register_operand" "")
 
32901
+  [(set (match_operand 0 "cris_nonsp_register_operand" "")
 
32902
        (match_operator
 
32903
         4 "cris_operand_extend_operator"
 
32904
         [(match_operand 1 "register_operand" "")
 
32905
@@ -3990,7 +3990,7 @@
 
32906
 ;; Call this op-extend-split-rx=rz
 
32907
 
 
32908
 (define_split
 
32909
-  [(set (match_operand 0 "register_operand" "")
 
32910
+  [(set (match_operand 0 "cris_nonsp_register_operand" "")
 
32911
        (match_operator
 
32912
         4 "cris_plus_or_bound_operator"
 
32913
         [(match_operand 1 "register_operand" "")
 
32914
@@ -4018,7 +4018,7 @@
 
32915
 ;; Call this op-extend-split-swapped
 
32916
 
 
32917
 (define_split
 
32918
-  [(set (match_operand 0 "register_operand" "")
 
32919
+  [(set (match_operand 0 "cris_nonsp_register_operand" "")
 
32920
        (match_operator
 
32921
         4 "cris_plus_or_bound_operator"
 
32922
         [(match_operator
 
32923
@@ -4044,7 +4044,7 @@
 
32924
 ;; bound.  Call this op-extend-split-swapped-rx=rz.
 
32925
 
 
32926
 (define_split
 
32927
-  [(set (match_operand 0 "register_operand" "")
 
32928
+  [(set (match_operand 0 "cris_nonsp_register_operand" "")
 
32929
        (match_operator
 
32930
         4 "cris_plus_or_bound_operator"
 
32931
         [(match_operator
 
32932
@@ -4075,7 +4075,7 @@
 
32933
 ;; Call this op-extend.
 
32934
 
 
32935
 (define_split
 
32936
-  [(set (match_operand 0 "register_operand" "")
 
32937
+  [(set (match_operand 0 "cris_nonsp_register_operand" "")
 
32938
        (match_operator
 
32939
         3 "cris_orthogonal_operator"
 
32940
         [(match_operand 1 "register_operand" "")
 
32941
@@ -4099,7 +4099,7 @@
 
32942
 ;; Call this op-split-rx=rz
 
32943
 
 
32944
 (define_split
 
32945
-  [(set (match_operand 0 "register_operand" "")
 
32946
+  [(set (match_operand 0 "cris_nonsp_register_operand" "")
 
32947
        (match_operator
 
32948
         3 "cris_commutative_orth_op"
 
32949
         [(match_operand 2 "memory_operand" "")
 
32950
@@ -4123,7 +4123,7 @@
 
32951
 ;; Call this op-split-swapped.
 
32952
 
 
32953
 (define_split
 
32954
-  [(set (match_operand 0 "register_operand" "")
 
32955
+  [(set (match_operand 0 "cris_nonsp_register_operand" "")
 
32956
        (match_operator
 
32957
         3 "cris_commutative_orth_op"
 
32958
         [(match_operand 1 "register_operand" "")
 
32959
@@ -4146,7 +4146,7 @@
 
32960
 ;; Call this op-split-swapped-rx=rz.
 
32961
 
 
32962
 (define_split
 
32963
-  [(set (match_operand 0 "register_operand" "")
 
32964
+  [(set (match_operand 0 "cris_nonsp_register_operand" "")
 
32965
        (match_operator
 
32966
         3 "cris_orthogonal_operator"
 
32967
         [(match_operand 2 "memory_operand" "")
 
32968
@@ -4555,10 +4555,11 @@
 
32969
 ;; We're not allowed to generate copies of registers with different mode
 
32970
 ;; until after reload; copying pseudos upsets reload.  CVS as of
 
32971
 ;; 2001-08-24, unwind-dw2-fde.c, _Unwind_Find_FDE ICE in
 
32972
-;; cselib_invalidate_regno.
 
32973
+;; cselib_invalidate_regno.  Also, don't do this for the stack-pointer,
 
32974
+;; as we don't want it set temporarily to an invalid value.
 
32975
 
 
32976
 (define_split ; indir_to_reg_split
 
32977
-  [(set (match_operand 0 "register_operand" "")
 
32978
+  [(set (match_operand 0 "cris_nonsp_register_operand" "")
 
32979
        (match_operand 1 "indirect_operand" ""))]
 
32980
   "reload_completed
 
32981
    && REG_P (operands[0])
 
32982
@@ -4574,7 +4575,7 @@
 
32983
 ;; As the above, but MOVS and MOVU.
 
32984
 
 
32985
 (define_split
 
32986
-  [(set (match_operand 0 "register_operand" "")
 
32987
+  [(set (match_operand 0 "cris_nonsp_register_operand" "")
 
32988
        (match_operator
 
32989
         4 "cris_extend_operator"
 
32990
         [(match_operand 1 "indirect_operand" "")]))]
 
32991
Index: gcc/config/cris/predicates.md
 
32992
===================================================================
 
32993
--- a/src/gcc/config/cris/predicates.md (.../tags/gcc_4_8_2_release)
 
32994
+++ b/src/gcc/config/cris/predicates.md (.../branches/gcc-4_8-branch)
 
32995
@@ -76,6 +76,10 @@
 
32996
            (match_test "cris_simple_address_operand (XEXP (op, 0),
 
32997
                                                      Pmode)"))))
 
32998
 
 
32999
+(define_predicate "cris_nonsp_register_operand"
 
33000
+  (and (match_operand 0 "register_operand")
 
33001
+       (match_test "op != stack_pointer_rtx")))
 
33002
+
 
33003
 ;; The caller needs to use :SI.
 
33004
 (define_predicate "cris_bdap_sign_extend_operand"
 
33005
 ; Disabled until <URL:http://gcc.gnu.org/ml/gcc-patches/2005-10/msg01376.html>
 
33006
Index: gcc/config/m68k/m68k.c
 
33007
===================================================================
 
33008
--- a/src/gcc/config/m68k/m68k.c        (.../tags/gcc_4_8_2_release)
 
33009
+++ b/src/gcc/config/m68k/m68k.c        (.../branches/gcc-4_8-branch)
 
33010
@@ -3325,12 +3325,12 @@
 
33011
        latehalf[1] = adjust_address (operands[1], SImode, 0);
 
33012
     }
 
33013
 
 
33014
-  /* If insn is effectively movd N(sp),-(sp) then we will do the
 
33015
-     high word first.  We should use the adjusted operand 1 (which is N+4(sp))
 
33016
-     for the low word as well, to compensate for the first decrement of sp.  */
 
33017
+  /* If insn is effectively movd N(REG),-(REG) then we will do the high
 
33018
+     word first.  We should use the adjusted operand 1 (which is N+4(REG))
 
33019
+     for the low word as well, to compensate for the first decrement of
 
33020
+     REG.  */
 
33021
   if (optype0 == PUSHOP
 
33022
-      && REGNO (XEXP (XEXP (operands[0], 0), 0)) == STACK_POINTER_REGNUM
 
33023
-      && reg_overlap_mentioned_p (stack_pointer_rtx, operands[1]))
 
33024
+      && reg_overlap_mentioned_p (XEXP (XEXP (operands[0], 0), 0), operands[1]))
 
33025
     operands[1] = middlehalf[1] = latehalf[1];
 
33026
 
 
33027
   /* For (set (reg:DI N) (mem:DI ... (reg:SI N) ...)),
 
33028
Index: gcc/config/aarch64/aarch64-simd.md
 
33029
===================================================================
 
33030
--- a/src/gcc/config/aarch64/aarch64-simd.md    (.../tags/gcc_4_8_2_release)
 
33031
+++ b/src/gcc/config/aarch64/aarch64-simd.md    (.../branches/gcc-4_8-branch)
 
33032
@@ -21,7 +21,7 @@
 
33033
 
 
33034
 ; Main data types used by the insntructions
 
33035
 
 
33036
-(define_attr "simd_mode" "unknown,none,V8QI,V16QI,V4HI,V8HI,V2SI,V4SI,V2DI,V2SF,V4SF,V2DF,OI,CI,XI,DI,DF,SI,HI,QI"
 
33037
+(define_attr "simd_mode" "unknown,none,V8QI,V16QI,V4HI,V8HI,V2SI,V4SI,V2DI,V2SF,V4SF,V2DF,OI,CI,XI,DI,DF,SI,SF,HI,QI"
 
33038
   (const_string "unknown"))
 
33039
 
 
33040
 
 
33041
@@ -1548,12 +1548,12 @@
 
33042
 
 
33043
     case LTU:
 
33044
     case GEU:
 
33045
-      emit_insn (gen_aarch64_cmhs<mode> (mask, operands[4], operands[5]));
 
33046
+      emit_insn (gen_aarch64_cmgeu<mode> (mask, operands[4], operands[5]));
 
33047
       break;
 
33048
 
 
33049
     case LEU:
 
33050
     case GTU:
 
33051
-      emit_insn (gen_aarch64_cmhi<mode> (mask, operands[4], operands[5]));
 
33052
+      emit_insn (gen_aarch64_cmgtu<mode> (mask, operands[4], operands[5]));
 
33053
       break;
 
33054
 
 
33055
     case NE:
 
33056
@@ -3034,48 +3034,181 @@
 
33057
 )
 
33058
 
 
33059
 
 
33060
-;; cm(eq|ge|le|lt|gt)
 
33061
+;; cm(eq|ge|gt|lt|le)
 
33062
+;; Note, we have constraints for Dz and Z as different expanders
 
33063
+;; have different ideas of what should be passed to this pattern.
 
33064
 
 
33065
-(define_insn "aarch64_cm<cmp><mode>"
 
33066
+(define_insn "aarch64_cm<optab><mode>"
 
33067
   [(set (match_operand:<V_cmp_result> 0 "register_operand" "=w,w")
 
33068
-        (unspec:<V_cmp_result>
 
33069
-         [(match_operand:VSDQ_I_DI 1 "register_operand" "w,w")
 
33070
-          (match_operand:VSDQ_I_DI 2 "aarch64_simd_reg_or_zero" "w,Z")]
 
33071
-          VCMP_S))]
 
33072
+       (neg:<V_cmp_result>
 
33073
+         (COMPARISONS:<V_cmp_result>
 
33074
+           (match_operand:VDQ 1 "register_operand" "w,w")
 
33075
+           (match_operand:VDQ 2 "aarch64_simd_reg_or_zero" "w,ZDz")
 
33076
+         )))]
 
33077
   "TARGET_SIMD"
 
33078
   "@
 
33079
-  cm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>
 
33080
-  cm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, #0"
 
33081
+  cm<n_optab>\t%<v>0<Vmtype>, %<v><cmp_1><Vmtype>, %<v><cmp_2><Vmtype>
 
33082
+  cm<optab>\t%<v>0<Vmtype>, %<v>1<Vmtype>, #0"
 
33083
   [(set_attr "simd_type" "simd_cmp")
 
33084
    (set_attr "simd_mode" "<MODE>")]
 
33085
 )
 
33086
 
 
33087
-;; cm(hs|hi|tst)
 
33088
+(define_insn_and_split "aarch64_cm<optab>di"
 
33089
+  [(set (match_operand:DI 0 "register_operand" "=w,w,r")
 
33090
+       (neg:DI
 
33091
+         (COMPARISONS:DI
 
33092
+           (match_operand:DI 1 "register_operand" "w,w,r")
 
33093
+           (match_operand:DI 2 "aarch64_simd_reg_or_zero" "w,ZDz,r")
 
33094
+         )))]
 
33095
+  "TARGET_SIMD"
 
33096
+  "@
 
33097
+  cm<n_optab>\t%d0, %d<cmp_1>, %d<cmp_2>
 
33098
+  cm<optab>\t%d0, %d1, #0
 
33099
+  #"
 
33100
+  "reload_completed
 
33101
+   /* We need to prevent the split from
 
33102
+      happening in the 'w' constraint cases.  */
 
33103
+   && GP_REGNUM_P (REGNO (operands[0]))
 
33104
+   && GP_REGNUM_P (REGNO (operands[1]))"
 
33105
+  [(set (reg:CC CC_REGNUM)
 
33106
+    (compare:CC
 
33107
+      (match_dup 1)
 
33108
+      (match_dup 2)))
 
33109
+  (set (match_dup 0)
 
33110
+    (neg:DI
 
33111
+      (COMPARISONS:DI
 
33112
+       (match_operand 3 "cc_register" "")
 
33113
+       (const_int 0))))]
 
33114
+  {
 
33115
+    enum machine_mode mode = SELECT_CC_MODE (<CMP>, operands[1], operands[2]);
 
33116
+    rtx cc_reg = aarch64_gen_compare_reg (<CMP>, operands[1], operands[2]);
 
33117
+    rtx comparison = gen_rtx_<CMP> (mode, operands[1], operands[2]);
 
33118
+    emit_insn (gen_cstoredi_neg (operands[0], comparison, cc_reg));
 
33119
+    DONE;
 
33120
+  }
 
33121
+  [(set_attr "simd_type" "simd_cmp")
 
33122
+   (set_attr "simd_mode" "DI")]
 
33123
+)
 
33124
 
 
33125
-(define_insn "aarch64_cm<cmp><mode>"
 
33126
+;; cm(hs|hi)
 
33127
+
 
33128
+(define_insn "aarch64_cm<optab><mode>"
 
33129
   [(set (match_operand:<V_cmp_result> 0 "register_operand" "=w")
 
33130
-        (unspec:<V_cmp_result>
 
33131
-         [(match_operand:VSDQ_I_DI 1 "register_operand" "w")
 
33132
-          (match_operand:VSDQ_I_DI 2 "register_operand" "w")]
 
33133
-          VCMP_U))]
 
33134
+       (neg:<V_cmp_result>
 
33135
+         (UCOMPARISONS:<V_cmp_result>
 
33136
+           (match_operand:VDQ 1 "register_operand" "w")
 
33137
+           (match_operand:VDQ 2 "register_operand" "w")
 
33138
+         )))]
 
33139
   "TARGET_SIMD"
 
33140
-  "cm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
 
33141
+  "cm<n_optab>\t%<v>0<Vmtype>, %<v><cmp_1><Vmtype>, %<v><cmp_2><Vmtype>"
 
33142
   [(set_attr "simd_type" "simd_cmp")
 
33143
    (set_attr "simd_mode" "<MODE>")]
 
33144
 )
 
33145
 
 
33146
-;; fcm(eq|ge|le|lt|gt)
 
33147
+(define_insn_and_split "aarch64_cm<optab>di"
 
33148
+  [(set (match_operand:DI 0 "register_operand" "=w,r")
 
33149
+       (neg:DI
 
33150
+         (UCOMPARISONS:DI
 
33151
+           (match_operand:DI 1 "register_operand" "w,r")
 
33152
+           (match_operand:DI 2 "aarch64_simd_reg_or_zero" "w,r")
 
33153
+         )))]
 
33154
+  "TARGET_SIMD"
 
33155
+  "@
 
33156
+  cm<n_optab>\t%d0, %d<cmp_1>, %d<cmp_2>
 
33157
+  #"
 
33158
+  "reload_completed
 
33159
+   /* We need to prevent the split from
 
33160
+      happening in the 'w' constraint cases.  */
 
33161
+   && GP_REGNUM_P (REGNO (operands[0]))
 
33162
+   && GP_REGNUM_P (REGNO (operands[1]))"
 
33163
+  [(set (reg:CC CC_REGNUM)
 
33164
+    (compare:CC
 
33165
+      (match_dup 1)
 
33166
+      (match_dup 2)))
 
33167
+  (set (match_dup 0)
 
33168
+    (neg:DI
 
33169
+      (UCOMPARISONS:DI
 
33170
+       (match_operand 3 "cc_register" "")
 
33171
+       (const_int 0))))]
 
33172
+  {
 
33173
+    enum machine_mode mode = SELECT_CC_MODE (<CMP>, operands[1], operands[2]);
 
33174
+    rtx cc_reg = aarch64_gen_compare_reg (<CMP>, operands[1], operands[2]);
 
33175
+    rtx comparison = gen_rtx_<CMP> (mode, operands[1], operands[2]);
 
33176
+    emit_insn (gen_cstoredi_neg (operands[0], comparison, cc_reg));
 
33177
+    DONE;
 
33178
+  }
 
33179
+  [(set_attr "simd_type" "simd_cmp")
 
33180
+   (set_attr "simd_mode" "DI")]
 
33181
+)
 
33182
 
 
33183
-(define_insn "aarch64_cm<cmp><mode>"
 
33184
+;; cmtst
 
33185
+
 
33186
+(define_insn "aarch64_cmtst<mode>"
 
33187
+  [(set (match_operand:<V_cmp_result> 0 "register_operand" "=w")
 
33188
+       (neg:<V_cmp_result>
 
33189
+         (ne:<V_cmp_result>
 
33190
+           (and:VDQ
 
33191
+             (match_operand:VDQ 1 "register_operand" "w")
 
33192
+             (match_operand:VDQ 2 "register_operand" "w"))
 
33193
+           (vec_duplicate:<V_cmp_result> (const_int 0)))))]
 
33194
+  "TARGET_SIMD"
 
33195
+  "cmtst\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
 
33196
+  [(set_attr "simd_type" "simd_cmp")
 
33197
+   (set_attr "simd_mode" "<MODE>")]
 
33198
+)
 
33199
+
 
33200
+(define_insn_and_split "aarch64_cmtstdi"
 
33201
+  [(set (match_operand:DI 0 "register_operand" "=w,r")
 
33202
+       (neg:DI
 
33203
+         (ne:DI
 
33204
+           (and:DI
 
33205
+             (match_operand:DI 1 "register_operand" "w,r")
 
33206
+             (match_operand:DI 2 "register_operand" "w,r"))
 
33207
+           (const_int 0))))]
 
33208
+  "TARGET_SIMD"
 
33209
+  "@
 
33210
+  cmtst\t%d0, %d1, %d2
 
33211
+  #"
 
33212
+  "reload_completed
 
33213
+   /* We need to prevent the split from
 
33214
+      happening in the 'w' constraint cases.  */
 
33215
+   && GP_REGNUM_P (REGNO (operands[0]))
 
33216
+   && GP_REGNUM_P (REGNO (operands[1]))"
 
33217
+   [(set (reg:CC_NZ CC_REGNUM)
 
33218
+       (compare:CC_NZ
 
33219
+        (and:DI (match_dup 1)
 
33220
+                 (match_dup 2))
 
33221
+        (const_int 0)))
 
33222
+  (set (match_dup 0)
 
33223
+    (neg:DI
 
33224
+      (ne:DI
 
33225
+       (match_operand 3 "cc_register" "")
 
33226
+       (const_int 0))))]
 
33227
+  {
 
33228
+    rtx and_tree = gen_rtx_AND (DImode, operands[1], operands[2]);
 
33229
+    enum machine_mode mode = SELECT_CC_MODE (NE, and_tree, const0_rtx);
 
33230
+    rtx cc_reg = aarch64_gen_compare_reg (NE, and_tree, const0_rtx);
 
33231
+    rtx comparison = gen_rtx_NE (mode, and_tree, const0_rtx);
 
33232
+    emit_insn (gen_cstoredi_neg (operands[0], comparison, cc_reg));
 
33233
+    DONE;
 
33234
+  }
 
33235
+  [(set_attr "simd_type" "simd_cmp")
 
33236
+   (set_attr "simd_mode" "DI")]
 
33237
+)
 
33238
+
 
33239
+;; fcm(eq|ge|gt|le|lt)
 
33240
+
 
33241
+(define_insn "aarch64_cm<optab><mode>"
 
33242
   [(set (match_operand:<V_cmp_result> 0 "register_operand" "=w,w")
 
33243
-       (unspec:<V_cmp_result>
 
33244
-         [(match_operand:VDQF 1 "register_operand" "w,w")
 
33245
-          (match_operand:VDQF 2 "aarch64_simd_reg_or_zero" "w,Dz")]
 
33246
-          VCMP_S))]
 
33247
+       (neg:<V_cmp_result>
 
33248
+         (COMPARISONS:<V_cmp_result>
 
33249
+           (match_operand:VALLF 1 "register_operand" "w,w")
 
33250
+           (match_operand:VALLF 2 "aarch64_simd_reg_or_zero" "w,YDz")
 
33251
+         )))]
 
33252
   "TARGET_SIMD"
 
33253
   "@
 
33254
-  fcm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>
 
33255
-  fcm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, 0"
 
33256
+  fcm<n_optab>\t%<v>0<Vmtype>, %<v><cmp_1><Vmtype>, %<v><cmp_2><Vmtype>
 
33257
+  fcm<optab>\t%<v>0<Vmtype>, %<v>1<Vmtype>, 0"
 
33258
   [(set_attr "simd_type" "simd_fcmp")
 
33259
    (set_attr "simd_mode" "<MODE>")]
 
33260
 )
 
33261
Index: gcc/config/aarch64/predicates.md
 
33262
===================================================================
 
33263
--- a/src/gcc/config/aarch64/predicates.md      (.../tags/gcc_4_8_2_release)
 
33264
+++ b/src/gcc/config/aarch64/predicates.md      (.../branches/gcc-4_8-branch)
 
33265
@@ -31,6 +31,11 @@
 
33266
        (ior (match_operand 0 "register_operand")
 
33267
            (match_test "op == const0_rtx"))))
 
33268
 
 
33269
+(define_predicate "aarch64_reg_or_fp_zero"
 
33270
+  (and (match_code "reg,subreg,const_double")
 
33271
+       (ior (match_operand 0 "register_operand")
 
33272
+           (match_test "aarch64_float_const_zero_rtx_p (op)"))))
 
33273
+
 
33274
 (define_predicate "aarch64_reg_zero_or_m1_or_1"
 
33275
   (and (match_code "reg,subreg,const_int")
 
33276
        (ior (match_operand 0 "register_operand")
 
33277
Index: gcc/config/aarch64/arm_neon.h
 
33278
===================================================================
 
33279
--- a/src/gcc/config/aarch64/arm_neon.h (.../tags/gcc_4_8_2_release)
 
33280
+++ b/src/gcc/config/aarch64/arm_neon.h (.../branches/gcc-4_8-branch)
 
33281
@@ -19551,7 +19551,7 @@
 
33282
 __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
 
33283
 vcge_u8 (uint8x8_t __a, uint8x8_t __b)
 
33284
 {
 
33285
-  return (uint8x8_t) __builtin_aarch64_cmhsv8qi ((int8x8_t) __a,
 
33286
+  return (uint8x8_t) __builtin_aarch64_cmgeuv8qi ((int8x8_t) __a,
 
33287
                                                 (int8x8_t) __b);
 
33288
 }
 
33289
 
 
33290
@@ -19558,7 +19558,7 @@
 
33291
 __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
 
33292
 vcge_u16 (uint16x4_t __a, uint16x4_t __b)
 
33293
 {
 
33294
-  return (uint16x4_t) __builtin_aarch64_cmhsv4hi ((int16x4_t) __a,
 
33295
+  return (uint16x4_t) __builtin_aarch64_cmgeuv4hi ((int16x4_t) __a,
 
33296
                                                  (int16x4_t) __b);
 
33297
 }
 
33298
 
 
33299
@@ -19565,7 +19565,7 @@
 
33300
 __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
 
33301
 vcge_u32 (uint32x2_t __a, uint32x2_t __b)
 
33302
 {
 
33303
-  return (uint32x2_t) __builtin_aarch64_cmhsv2si ((int32x2_t) __a,
 
33304
+  return (uint32x2_t) __builtin_aarch64_cmgeuv2si ((int32x2_t) __a,
 
33305
                                                  (int32x2_t) __b);
 
33306
 }
 
33307
 
 
33308
@@ -19572,7 +19572,7 @@
 
33309
 __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
 
33310
 vcge_u64 (uint64x1_t __a, uint64x1_t __b)
 
33311
 {
 
33312
-  return (uint64x1_t) __builtin_aarch64_cmhsdi ((int64x1_t) __a,
 
33313
+  return (uint64x1_t) __builtin_aarch64_cmgeudi ((int64x1_t) __a,
 
33314
                                                (int64x1_t) __b);
 
33315
 }
 
33316
 
 
33317
@@ -19603,7 +19603,7 @@
 
33318
 __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
 
33319
 vcgeq_u8 (uint8x16_t __a, uint8x16_t __b)
 
33320
 {
 
33321
-  return (uint8x16_t) __builtin_aarch64_cmhsv16qi ((int8x16_t) __a,
 
33322
+  return (uint8x16_t) __builtin_aarch64_cmgeuv16qi ((int8x16_t) __a,
 
33323
                                                   (int8x16_t) __b);
 
33324
 }
 
33325
 
 
33326
@@ -19610,7 +19610,7 @@
 
33327
 __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
 
33328
 vcgeq_u16 (uint16x8_t __a, uint16x8_t __b)
 
33329
 {
 
33330
-  return (uint16x8_t) __builtin_aarch64_cmhsv8hi ((int16x8_t) __a,
 
33331
+  return (uint16x8_t) __builtin_aarch64_cmgeuv8hi ((int16x8_t) __a,
 
33332
                                                  (int16x8_t) __b);
 
33333
 }
 
33334
 
 
33335
@@ -19617,7 +19617,7 @@
 
33336
 __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
 
33337
 vcgeq_u32 (uint32x4_t __a, uint32x4_t __b)
 
33338
 {
 
33339
-  return (uint32x4_t) __builtin_aarch64_cmhsv4si ((int32x4_t) __a,
 
33340
+  return (uint32x4_t) __builtin_aarch64_cmgeuv4si ((int32x4_t) __a,
 
33341
                                                  (int32x4_t) __b);
 
33342
 }
 
33343
 
 
33344
@@ -19624,7 +19624,7 @@
 
33345
 __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
 
33346
 vcgeq_u64 (uint64x2_t __a, uint64x2_t __b)
 
33347
 {
 
33348
-  return (uint64x2_t) __builtin_aarch64_cmhsv2di ((int64x2_t) __a,
 
33349
+  return (uint64x2_t) __builtin_aarch64_cmgeuv2di ((int64x2_t) __a,
 
33350
                                                  (int64x2_t) __b);
 
33351
 }
 
33352
 
 
33353
@@ -19637,7 +19637,7 @@
 
33354
 __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
 
33355
 vcged_u64 (uint64x1_t __a, uint64x1_t __b)
 
33356
 {
 
33357
-  return (uint64x1_t) __builtin_aarch64_cmhsdi ((int64x1_t) __a,
 
33358
+  return (uint64x1_t) __builtin_aarch64_cmgeudi ((int64x1_t) __a,
 
33359
                                                (int64x1_t) __b);
 
33360
 }
 
33361
 
 
33362
@@ -19676,7 +19676,7 @@
 
33363
 __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
 
33364
 vcgt_u8 (uint8x8_t __a, uint8x8_t __b)
 
33365
 {
 
33366
-  return (uint8x8_t) __builtin_aarch64_cmhiv8qi ((int8x8_t) __a,
 
33367
+  return (uint8x8_t) __builtin_aarch64_cmgtuv8qi ((int8x8_t) __a,
 
33368
                                                 (int8x8_t) __b);
 
33369
 }
 
33370
 
 
33371
@@ -19683,7 +19683,7 @@
 
33372
 __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
 
33373
 vcgt_u16 (uint16x4_t __a, uint16x4_t __b)
 
33374
 {
 
33375
-  return (uint16x4_t) __builtin_aarch64_cmhiv4hi ((int16x4_t) __a,
 
33376
+  return (uint16x4_t) __builtin_aarch64_cmgtuv4hi ((int16x4_t) __a,
 
33377
                                                  (int16x4_t) __b);
 
33378
 }
 
33379
 
 
33380
@@ -19690,7 +19690,7 @@
 
33381
 __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
 
33382
 vcgt_u32 (uint32x2_t __a, uint32x2_t __b)
 
33383
 {
 
33384
-  return (uint32x2_t) __builtin_aarch64_cmhiv2si ((int32x2_t) __a,
 
33385
+  return (uint32x2_t) __builtin_aarch64_cmgtuv2si ((int32x2_t) __a,
 
33386
                                                  (int32x2_t) __b);
 
33387
 }
 
33388
 
 
33389
@@ -19697,7 +19697,7 @@
 
33390
 __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
 
33391
 vcgt_u64 (uint64x1_t __a, uint64x1_t __b)
 
33392
 {
 
33393
-  return (uint64x1_t) __builtin_aarch64_cmhidi ((int64x1_t) __a,
 
33394
+  return (uint64x1_t) __builtin_aarch64_cmgtudi ((int64x1_t) __a,
 
33395
                                                (int64x1_t) __b);
 
33396
 }
 
33397
 
 
33398
@@ -19728,7 +19728,7 @@
 
33399
 __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
 
33400
 vcgtq_u8 (uint8x16_t __a, uint8x16_t __b)
 
33401
 {
 
33402
-  return (uint8x16_t) __builtin_aarch64_cmhiv16qi ((int8x16_t) __a,
 
33403
+  return (uint8x16_t) __builtin_aarch64_cmgtuv16qi ((int8x16_t) __a,
 
33404
                                                   (int8x16_t) __b);
 
33405
 }
 
33406
 
 
33407
@@ -19735,7 +19735,7 @@
 
33408
 __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
 
33409
 vcgtq_u16 (uint16x8_t __a, uint16x8_t __b)
 
33410
 {
 
33411
-  return (uint16x8_t) __builtin_aarch64_cmhiv8hi ((int16x8_t) __a,
 
33412
+  return (uint16x8_t) __builtin_aarch64_cmgtuv8hi ((int16x8_t) __a,
 
33413
                                                  (int16x8_t) __b);
 
33414
 }
 
33415
 
 
33416
@@ -19742,7 +19742,7 @@
 
33417
 __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
 
33418
 vcgtq_u32 (uint32x4_t __a, uint32x4_t __b)
 
33419
 {
 
33420
-  return (uint32x4_t) __builtin_aarch64_cmhiv4si ((int32x4_t) __a,
 
33421
+  return (uint32x4_t) __builtin_aarch64_cmgtuv4si ((int32x4_t) __a,
 
33422
                                                  (int32x4_t) __b);
 
33423
 }
 
33424
 
 
33425
@@ -19749,7 +19749,7 @@
 
33426
 __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
 
33427
 vcgtq_u64 (uint64x2_t __a, uint64x2_t __b)
 
33428
 {
 
33429
-  return (uint64x2_t) __builtin_aarch64_cmhiv2di ((int64x2_t) __a,
 
33430
+  return (uint64x2_t) __builtin_aarch64_cmgtuv2di ((int64x2_t) __a,
 
33431
                                                  (int64x2_t) __b);
 
33432
 }
 
33433
 
 
33434
@@ -19762,7 +19762,7 @@
 
33435
 __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
 
33436
 vcgtd_u64 (uint64x1_t __a, uint64x1_t __b)
 
33437
 {
 
33438
-  return (uint64x1_t) __builtin_aarch64_cmhidi ((int64x1_t) __a,
 
33439
+  return (uint64x1_t) __builtin_aarch64_cmgtudi ((int64x1_t) __a,
 
33440
                                                (int64x1_t) __b);
 
33441
 }
 
33442
 
 
33443
@@ -19801,7 +19801,7 @@
 
33444
 __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
 
33445
 vcle_u8 (uint8x8_t __a, uint8x8_t __b)
 
33446
 {
 
33447
-  return (uint8x8_t) __builtin_aarch64_cmhsv8qi ((int8x8_t) __b,
 
33448
+  return (uint8x8_t) __builtin_aarch64_cmgeuv8qi ((int8x8_t) __b,
 
33449
                                                 (int8x8_t) __a);
 
33450
 }
 
33451
 
 
33452
@@ -19808,7 +19808,7 @@
 
33453
 __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
 
33454
 vcle_u16 (uint16x4_t __a, uint16x4_t __b)
 
33455
 {
 
33456
-  return (uint16x4_t) __builtin_aarch64_cmhsv4hi ((int16x4_t) __b,
 
33457
+  return (uint16x4_t) __builtin_aarch64_cmgeuv4hi ((int16x4_t) __b,
 
33458
                                                  (int16x4_t) __a);
 
33459
 }
 
33460
 
 
33461
@@ -19815,7 +19815,7 @@
 
33462
 __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
 
33463
 vcle_u32 (uint32x2_t __a, uint32x2_t __b)
 
33464
 {
 
33465
-  return (uint32x2_t) __builtin_aarch64_cmhsv2si ((int32x2_t) __b,
 
33466
+  return (uint32x2_t) __builtin_aarch64_cmgeuv2si ((int32x2_t) __b,
 
33467
                                                  (int32x2_t) __a);
 
33468
 }
 
33469
 
 
33470
@@ -19822,7 +19822,7 @@
 
33471
 __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
 
33472
 vcle_u64 (uint64x1_t __a, uint64x1_t __b)
 
33473
 {
 
33474
-  return (uint64x1_t) __builtin_aarch64_cmhsdi ((int64x1_t) __b,
 
33475
+  return (uint64x1_t) __builtin_aarch64_cmgeudi ((int64x1_t) __b,
 
33476
                                                (int64x1_t) __a);
 
33477
 }
 
33478
 
 
33479
@@ -19853,7 +19853,7 @@
 
33480
 __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
 
33481
 vcleq_u8 (uint8x16_t __a, uint8x16_t __b)
 
33482
 {
 
33483
-  return (uint8x16_t) __builtin_aarch64_cmhsv16qi ((int8x16_t) __b,
 
33484
+  return (uint8x16_t) __builtin_aarch64_cmgeuv16qi ((int8x16_t) __b,
 
33485
                                                   (int8x16_t) __a);
 
33486
 }
 
33487
 
 
33488
@@ -19860,7 +19860,7 @@
 
33489
 __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
 
33490
 vcleq_u16 (uint16x8_t __a, uint16x8_t __b)
 
33491
 {
 
33492
-  return (uint16x8_t) __builtin_aarch64_cmhsv8hi ((int16x8_t) __b,
 
33493
+  return (uint16x8_t) __builtin_aarch64_cmgeuv8hi ((int16x8_t) __b,
 
33494
                                                  (int16x8_t) __a);
 
33495
 }
 
33496
 
 
33497
@@ -19867,7 +19867,7 @@
 
33498
 __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
 
33499
 vcleq_u32 (uint32x4_t __a, uint32x4_t __b)
 
33500
 {
 
33501
-  return (uint32x4_t) __builtin_aarch64_cmhsv4si ((int32x4_t) __b,
 
33502
+  return (uint32x4_t) __builtin_aarch64_cmgeuv4si ((int32x4_t) __b,
 
33503
                                                  (int32x4_t) __a);
 
33504
 }
 
33505
 
 
33506
@@ -19874,7 +19874,7 @@
 
33507
 __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
 
33508
 vcleq_u64 (uint64x2_t __a, uint64x2_t __b)
 
33509
 {
 
33510
-  return (uint64x2_t) __builtin_aarch64_cmhsv2di ((int64x2_t) __b,
 
33511
+  return (uint64x2_t) __builtin_aarch64_cmgeuv2di ((int64x2_t) __b,
 
33512
                                                  (int64x2_t) __a);
 
33513
 }
 
33514
 
 
33515
@@ -19919,7 +19919,7 @@
 
33516
 __extension__ static __inline uint8x8_t __attribute__ ((__always_inline__))
 
33517
 vclt_u8 (uint8x8_t __a, uint8x8_t __b)
 
33518
 {
 
33519
-  return (uint8x8_t) __builtin_aarch64_cmhiv8qi ((int8x8_t) __b,
 
33520
+  return (uint8x8_t) __builtin_aarch64_cmgtuv8qi ((int8x8_t) __b,
 
33521
                                                 (int8x8_t) __a);
 
33522
 }
 
33523
 
 
33524
@@ -19926,7 +19926,7 @@
 
33525
 __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
 
33526
 vclt_u16 (uint16x4_t __a, uint16x4_t __b)
 
33527
 {
 
33528
-  return (uint16x4_t) __builtin_aarch64_cmhiv4hi ((int16x4_t) __b,
 
33529
+  return (uint16x4_t) __builtin_aarch64_cmgtuv4hi ((int16x4_t) __b,
 
33530
                                                  (int16x4_t) __a);
 
33531
 }
 
33532
 
 
33533
@@ -19933,7 +19933,7 @@
 
33534
 __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
 
33535
 vclt_u32 (uint32x2_t __a, uint32x2_t __b)
 
33536
 {
 
33537
-  return (uint32x2_t) __builtin_aarch64_cmhiv2si ((int32x2_t) __b,
 
33538
+  return (uint32x2_t) __builtin_aarch64_cmgtuv2si ((int32x2_t) __b,
 
33539
                                                  (int32x2_t) __a);
 
33540
 }
 
33541
 
 
33542
@@ -19940,7 +19940,7 @@
 
33543
 __extension__ static __inline uint64x1_t __attribute__ ((__always_inline__))
 
33544
 vclt_u64 (uint64x1_t __a, uint64x1_t __b)
 
33545
 {
 
33546
-  return (uint64x1_t) __builtin_aarch64_cmhidi ((int64x1_t) __b,
 
33547
+  return (uint64x1_t) __builtin_aarch64_cmgtudi ((int64x1_t) __b,
 
33548
                                                (int64x1_t) __a);
 
33549
 }
 
33550
 
 
33551
@@ -19971,7 +19971,7 @@
 
33552
 __extension__ static __inline uint8x16_t __attribute__ ((__always_inline__))
 
33553
 vcltq_u8 (uint8x16_t __a, uint8x16_t __b)
 
33554
 {
 
33555
-  return (uint8x16_t) __builtin_aarch64_cmhiv16qi ((int8x16_t) __b,
 
33556
+  return (uint8x16_t) __builtin_aarch64_cmgtuv16qi ((int8x16_t) __b,
 
33557
                                                   (int8x16_t) __a);
 
33558
 }
 
33559
 
 
33560
@@ -19978,7 +19978,7 @@
 
33561
 __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
 
33562
 vcltq_u16 (uint16x8_t __a, uint16x8_t __b)
 
33563
 {
 
33564
-  return (uint16x8_t) __builtin_aarch64_cmhiv8hi ((int16x8_t) __b,
 
33565
+  return (uint16x8_t) __builtin_aarch64_cmgtuv8hi ((int16x8_t) __b,
 
33566
                                                  (int16x8_t) __a);
 
33567
 }
 
33568
 
 
33569
@@ -19985,7 +19985,7 @@
 
33570
 __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
 
33571
 vcltq_u32 (uint32x4_t __a, uint32x4_t __b)
 
33572
 {
 
33573
-  return (uint32x4_t) __builtin_aarch64_cmhiv4si ((int32x4_t) __b,
 
33574
+  return (uint32x4_t) __builtin_aarch64_cmgtuv4si ((int32x4_t) __b,
 
33575
                                                  (int32x4_t) __a);
 
33576
 }
 
33577
 
 
33578
@@ -19992,7 +19992,7 @@
 
33579
 __extension__ static __inline uint64x2_t __attribute__ ((__always_inline__))
 
33580
 vcltq_u64 (uint64x2_t __a, uint64x2_t __b)
 
33581
 {
 
33582
-  return (uint64x2_t) __builtin_aarch64_cmhiv2di ((int64x2_t) __b,
 
33583
+  return (uint64x2_t) __builtin_aarch64_cmgtuv2di ((int64x2_t) __b,
 
33584
                                                  (int64x2_t) __a);
 
33585
 }
 
33586
 
 
33587
Index: gcc/config/aarch64/aarch64.md
 
33588
===================================================================
 
33589
--- a/src/gcc/config/aarch64/aarch64.md (.../tags/gcc_4_8_2_release)
 
33590
+++ b/src/gcc/config/aarch64/aarch64.md (.../branches/gcc-4_8-branch)
 
33591
@@ -2211,7 +2211,7 @@
 
33592
    (set_attr "mode" "SI")]
 
33593
 )
 
33594
 
 
33595
-(define_insn "*cstore<mode>_neg"
 
33596
+(define_insn "cstore<mode>_neg"
 
33597
   [(set (match_operand:ALLI 0 "register_operand" "=r")
 
33598
        (neg:ALLI (match_operator:ALLI 1 "aarch64_comparison_operator"
 
33599
                  [(match_operand 2 "cc_register" "") (const_int 0)])))]
 
33600
Index: gcc/config/aarch64/aarch64-simd-builtins.def
 
33601
===================================================================
 
33602
--- a/src/gcc/config/aarch64/aarch64-simd-builtins.def  (.../tags/gcc_4_8_2_release)
 
33603
+++ b/src/gcc/config/aarch64/aarch64-simd-builtins.def  (.../branches/gcc-4_8-branch)
 
33604
@@ -217,8 +217,8 @@
 
33605
   BUILTIN_VSDQ_I_DI (BINOP, cmle)
 
33606
   BUILTIN_VSDQ_I_DI (BINOP, cmlt)
 
33607
   /* Implemented by aarch64_cm<cmp><mode>.  */
 
33608
-  BUILTIN_VSDQ_I_DI (BINOP, cmhs)
 
33609
-  BUILTIN_VSDQ_I_DI (BINOP, cmhi)
 
33610
+  BUILTIN_VSDQ_I_DI (BINOP, cmgeu)
 
33611
+  BUILTIN_VSDQ_I_DI (BINOP, cmgtu)
 
33612
   BUILTIN_VSDQ_I_DI (BINOP, cmtst)
 
33613
 
 
33614
   /* Implemented by aarch64_<fmaxmin><mode>.  */
 
33615
Index: gcc/config/aarch64/aarch64.c
 
33616
===================================================================
 
33617
--- a/src/gcc/config/aarch64/aarch64.c  (.../tags/gcc_4_8_2_release)
 
33618
+++ b/src/gcc/config/aarch64/aarch64.c  (.../branches/gcc-4_8-branch)
 
33619
@@ -2274,7 +2274,7 @@
 
33620
       if (ncount < zcount)
 
33621
        {
 
33622
          emit_move_insn (gen_rtx_REG (Pmode, regnum),
 
33623
-                         GEN_INT ((~val) & 0xffff));
 
33624
+                         GEN_INT (val | ~(HOST_WIDE_INT) 0xffff));
 
33625
          tval = 0xffff;
 
33626
        }
 
33627
       else
 
33628
Index: gcc/config/aarch64/iterators.md
 
33629
===================================================================
 
33630
--- a/src/gcc/config/aarch64/iterators.md       (.../tags/gcc_4_8_2_release)
 
33631
+++ b/src/gcc/config/aarch64/iterators.md       (.../branches/gcc-4_8-branch)
 
33632
@@ -83,6 +83,9 @@
 
33633
 ;; Vector Float modes.
 
33634
 (define_mode_iterator VDQF [V2SF V4SF V2DF])
 
33635
 
 
33636
+;; All Float modes.
 
33637
+(define_mode_iterator VALLF [V2SF V4SF V2DF SF DF])
 
33638
+
 
33639
 ;; Vector Float modes with 2 elements.
 
33640
 (define_mode_iterator V2F [V2SF V2DF])
 
33641
 
 
33642
@@ -213,13 +216,6 @@
 
33643
     UNSPEC_URSHL       ; Used in aarch64-simd.md.
 
33644
     UNSPEC_SQRSHL      ; Used in aarch64-simd.md.
 
33645
     UNSPEC_UQRSHL      ; Used in aarch64-simd.md.
 
33646
-    UNSPEC_CMEQ                ; Used in aarch64-simd.md.
 
33647
-    UNSPEC_CMLE                ; Used in aarch64-simd.md.
 
33648
-    UNSPEC_CMLT                ; Used in aarch64-simd.md.
 
33649
-    UNSPEC_CMGE                ; Used in aarch64-simd.md.
 
33650
-    UNSPEC_CMGT                ; Used in aarch64-simd.md.
 
33651
-    UNSPEC_CMHS                ; Used in aarch64-simd.md.
 
33652
-    UNSPEC_CMHI                ; Used in aarch64-simd.md.
 
33653
     UNSPEC_SSLI                ; Used in aarch64-simd.md.
 
33654
     UNSPEC_USLI                ; Used in aarch64-simd.md.
 
33655
     UNSPEC_SSRI                ; Used in aarch64-simd.md.
 
33656
@@ -227,7 +223,6 @@
 
33657
     UNSPEC_SSHLL       ; Used in aarch64-simd.md.
 
33658
     UNSPEC_USHLL       ; Used in aarch64-simd.md.
 
33659
     UNSPEC_ADDP                ; Used in aarch64-simd.md.
 
33660
-    UNSPEC_CMTST       ; Used in aarch64-simd.md.
 
33661
     UNSPEC_FMAX                ; Used in aarch64-simd.md.
 
33662
     UNSPEC_FMIN                ; Used in aarch64-simd.md.
 
33663
     UNSPEC_BSL         ; Used in aarch64-simd.md.
 
33664
@@ -251,6 +246,7 @@
 
33665
 
 
33666
 ;; For scalar usage of vector/FP registers
 
33667
 (define_mode_attr v [(QI "b") (HI "h") (SI "s") (DI "d")
 
33668
+                   (SF "s") (DF "d")
 
33669
                    (V8QI "") (V16QI "")
 
33670
                    (V4HI "") (V8HI "")
 
33671
                    (V2SI "") (V4SI  "")
 
33672
@@ -305,7 +301,8 @@
 
33673
                         (V4SF ".4s") (V2DF ".2d")
 
33674
                         (DI   "")    (SI   "")
 
33675
                         (HI   "")    (QI   "")
 
33676
-                        (TI   "")])
 
33677
+                        (TI   "")    (SF   "")
 
33678
+                        (DF   "")])
 
33679
 
 
33680
 ;; Register suffix narrowed modes for VQN.
 
33681
 (define_mode_attr Vmntype [(V8HI ".8b") (V4SI ".4h")
 
33682
@@ -444,7 +441,8 @@
 
33683
                                (V2SI "V2SI") (V4SI  "V4SI")
 
33684
                                (DI   "DI")   (V2DI  "V2DI")
 
33685
                                (V2SF "V2SI") (V4SF  "V4SI")
 
33686
-                               (V2DF "V2DI")])
 
33687
+                               (V2DF "V2DI") (DF    "DI")
 
33688
+                               (SF   "SI")])
 
33689
 
 
33690
 ;; Lower case mode of results of comparison operations.
 
33691
 (define_mode_attr v_cmp_result [(V8QI "v8qi") (V16QI "v16qi")
 
33692
@@ -452,7 +450,8 @@
 
33693
                                (V2SI "v2si") (V4SI  "v4si")
 
33694
                                (DI   "di")   (V2DI  "v2di")
 
33695
                                (V2SF "v2si") (V4SF  "v4si")
 
33696
-                               (V2DF "v2di")])
 
33697
+                               (V2DF "v2di") (DF    "di")
 
33698
+                               (SF   "si")])
 
33699
 
 
33700
 ;; Vm for lane instructions is restricted to FP_LO_REGS.
 
33701
 (define_mode_attr vwx [(V4HI "x") (V8HI "x") (HI "x")
 
33702
@@ -543,6 +542,12 @@
 
33703
 ;; Code iterator for signed variants of vector saturating binary ops.
 
33704
 (define_code_iterator SBINQOPS [ss_plus ss_minus])
 
33705
 
 
33706
+;; Comparison operators for <F>CM.
 
33707
+(define_code_iterator COMPARISONS [lt le eq ge gt])
 
33708
+
 
33709
+;; Unsigned comparison operators.
 
33710
+(define_code_iterator UCOMPARISONS [ltu leu geu gtu])
 
33711
+
 
33712
 ;; -------------------------------------------------------------------
 
33713
 ;; Code Attributes
 
33714
 ;; -------------------------------------------------------------------
 
33715
@@ -571,8 +576,29 @@
 
33716
                         (eq "eq")
 
33717
                         (ne "ne")
 
33718
                         (lt "lt")
 
33719
-                        (ge "ge")])
 
33720
+                        (ge "ge")
 
33721
+                        (le "le")
 
33722
+                        (gt "gt")
 
33723
+                        (ltu "ltu")
 
33724
+                        (leu "leu")
 
33725
+                        (geu "geu")
 
33726
+                        (gtu "gtu")])
 
33727
 
 
33728
+;; For comparison operators we use the FCM* and CM* instructions.
 
33729
+;; As there are no CMLE or CMLT instructions which act on 3 vector
 
33730
+;; operands, we must use CMGE or CMGT and swap the order of the
 
33731
+;; source operands.
 
33732
+
 
33733
+(define_code_attr n_optab [(lt "gt") (le "ge") (eq "eq") (ge "ge") (gt "gt")
 
33734
+                          (ltu "hi") (leu "hs") (geu "hs") (gtu "hi")])
 
33735
+(define_code_attr cmp_1   [(lt "2") (le "2") (eq "1") (ge "1") (gt "1")
 
33736
+                          (ltu "2") (leu "2") (geu "1") (gtu "1")])
 
33737
+(define_code_attr cmp_2   [(lt "1") (le "1") (eq "2") (ge "2") (gt "2")
 
33738
+                          (ltu "1") (leu "1") (geu "2") (gtu "2")])
 
33739
+
 
33740
+(define_code_attr CMP [(lt "LT") (le "LE") (eq "EQ") (ge "GE") (gt "GT")
 
33741
+                          (ltu "LTU") (leu "LEU") (geu "GEU") (gtu "GTU")])
 
33742
+
 
33743
 ;; Optab prefix for sign/zero-extending operations
 
33744
 (define_code_attr su_optab [(sign_extend "") (zero_extend "u")
 
33745
                            (div "") (udiv "u")
 
33746
@@ -680,11 +706,6 @@
 
33747
                                UNSPEC_SQSHRN UNSPEC_UQSHRN
 
33748
                                UNSPEC_SQRSHRN UNSPEC_UQRSHRN])
 
33749
 
 
33750
-(define_int_iterator VCMP_S [UNSPEC_CMEQ UNSPEC_CMGE UNSPEC_CMGT
 
33751
-                            UNSPEC_CMLE UNSPEC_CMLT])
 
33752
-
 
33753
-(define_int_iterator VCMP_U [UNSPEC_CMHS UNSPEC_CMHI UNSPEC_CMTST])
 
33754
-
 
33755
 (define_int_iterator PERMUTE [UNSPEC_ZIP1 UNSPEC_ZIP2
 
33756
                              UNSPEC_TRN1 UNSPEC_TRN2
 
33757
                              UNSPEC_UZP1 UNSPEC_UZP2])
 
33758
@@ -768,12 +789,6 @@
 
33759
                         (UNSPEC_RADDHN2 "add")
 
33760
                         (UNSPEC_RSUBHN2 "sub")])
 
33761
 
 
33762
-(define_int_attr cmp [(UNSPEC_CMGE "ge") (UNSPEC_CMGT "gt")
 
33763
-                     (UNSPEC_CMLE "le") (UNSPEC_CMLT "lt")
 
33764
-                      (UNSPEC_CMEQ "eq")
 
33765
-                     (UNSPEC_CMHS "hs") (UNSPEC_CMHI "hi")
 
33766
-                     (UNSPEC_CMTST "tst")])
 
33767
-
 
33768
 (define_int_attr offsetlr [(UNSPEC_SSLI        "1") (UNSPEC_USLI "1")
 
33769
                           (UNSPEC_SSRI "0") (UNSPEC_USRI "0")])
 
33770
 
 
33771
Index: gcc/config/rs6000/rs6000.c
 
33772
===================================================================
 
33773
--- a/src/gcc/config/rs6000/rs6000.c    (.../tags/gcc_4_8_2_release)
 
33774
+++ b/src/gcc/config/rs6000/rs6000.c    (.../branches/gcc-4_8-branch)
 
33775
@@ -5428,12 +5428,13 @@
 
33776
       break;
 
33777
 
 
33778
     case TFmode:
 
33779
-    case TDmode:
 
33780
-    case TImode:
 
33781
       if (TARGET_E500_DOUBLE)
 
33782
        return (SPE_CONST_OFFSET_OK (offset)
 
33783
                && SPE_CONST_OFFSET_OK (offset + 8));
 
33784
+      /* fall through */
 
33785
 
 
33786
+    case TDmode:
 
33787
+    case TImode:
 
33788
       extra = 8;
 
33789
       if (!worst_case)
 
33790
        break;
 
33791
Index: gcc/config/rs6000/rs6000.md
 
33792
===================================================================
 
33793
--- a/src/gcc/config/rs6000/rs6000.md   (.../tags/gcc_4_8_2_release)
 
33794
+++ b/src/gcc/config/rs6000/rs6000.md   (.../branches/gcc-4_8-branch)
 
33795
@@ -2412,7 +2412,7 @@
 
33796
                             (match_operand:SI 2 "gpc_reg_operand" "r,r"))
 
33797
                    (const_int 0)))
 
33798
    (clobber (match_scratch:SI 3 "=r,r"))]
 
33799
-  ""
 
33800
+  "TARGET_32BIT"
 
33801
   "@
 
33802
    mullw. %3,%1,%2
 
33803
    #"
 
33804
@@ -2425,7 +2425,7 @@
 
33805
                             (match_operand:SI 2 "gpc_reg_operand" ""))
 
33806
                    (const_int 0)))
 
33807
    (clobber (match_scratch:SI 3 ""))]
 
33808
-  "reload_completed"
 
33809
+  "TARGET_32BIT && reload_completed"
 
33810
   [(set (match_dup 3)
 
33811
        (mult:SI (match_dup 1) (match_dup 2)))
 
33812
    (set (match_dup 0)
 
33813
@@ -2440,7 +2440,7 @@
 
33814
                    (const_int 0)))
 
33815
    (set (match_operand:SI 0 "gpc_reg_operand" "=r,r")
 
33816
        (mult:SI (match_dup 1) (match_dup 2)))]
 
33817
-  ""
 
33818
+  "TARGET_32BIT"
 
33819
   "@
 
33820
    mullw. %0,%1,%2
 
33821
    #"
 
33822
@@ -2454,7 +2454,7 @@
 
33823
                    (const_int 0)))
 
33824
    (set (match_operand:SI 0 "gpc_reg_operand" "")
 
33825
        (mult:SI (match_dup 1) (match_dup 2)))]
 
33826
-  "reload_completed"
 
33827
+  "TARGET_32BIT && reload_completed"
 
33828
   [(set (match_dup 0)
 
33829
        (mult:SI (match_dup 1) (match_dup 2)))
 
33830
    (set (match_dup 3)
 
33831
Index: gcc/config/tilepro/tilepro-c.c
 
33832
===================================================================
 
33833
--- a/src/gcc/config/tilepro/tilepro-c.c        (.../tags/gcc_4_8_2_release)
 
33834
+++ b/src/gcc/config/tilepro/tilepro-c.c        (.../branches/gcc-4_8-branch)
 
33835
@@ -44,6 +44,11 @@
 
33836
   builtin_define ("__tile_chip__=1");
 
33837
   builtin_define ("__tile_chip_rev__=0");
 
33838
 
 
33839
+  builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
 
33840
+  builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
 
33841
+  builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4");
 
33842
+  builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8");
 
33843
+
 
33844
   TILEPRO_CPU_CPP_ENDIAN_BUILTINS ();
 
33845
   GNU_USER_TARGET_OS_CPP_BUILTINS ();
 
33846
 }
 
33847
Index: gcc/config/tilepro/tilepro.c
 
33848
===================================================================
 
33849
--- a/src/gcc/config/tilepro/tilepro.c  (.../tags/gcc_4_8_2_release)
 
33850
+++ b/src/gcc/config/tilepro/tilepro.c  (.../branches/gcc-4_8-branch)
 
33851
@@ -3167,6 +3167,12 @@
 
33852
     }
 
33853
   if (!pat)
 
33854
     return NULL_RTX;
 
33855
+
 
33856
+  /* If we are generating a prefetch, tell the scheduler not to move
 
33857
+     it around.  */
 
33858
+  if (GET_CODE (pat) == PREFETCH)
 
33859
+    PREFETCH_SCHEDULE_BARRIER_P (pat) = true;
 
33860
+
 
33861
   emit_insn (pat);
 
33862
 
 
33863
   if (nonvoid)
 
33864
Index: gcc/config/tilepro/tilepro.md
 
33865
===================================================================
 
33866
--- a/src/gcc/config/tilepro/tilepro.md (.../tags/gcc_4_8_2_release)
 
33867
+++ b/src/gcc/config/tilepro/tilepro.md (.../branches/gcc-4_8-branch)
 
33868
@@ -795,7 +795,7 @@
 
33869
 
 
33870
 (define_expand "ctzdi2"
 
33871
   [(set (match_operand:DI 0 "register_operand" "")
 
33872
-       (ctz:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
 
33873
+       (ctz:DI (match_operand:DI 1 "register_operand" "")))]
 
33874
   ""
 
33875
 {
 
33876
   rtx lo, hi, ctz_lo, ctz_hi, ctz_hi_plus_32, result;
 
33877
@@ -823,7 +823,7 @@
 
33878
 
 
33879
 (define_expand "clzdi2"
 
33880
   [(set (match_operand:DI 0 "register_operand" "")
 
33881
-       (clz:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
 
33882
+       (clz:DI (match_operand:DI 1 "register_operand" "")))]
 
33883
   ""
 
33884
 {
 
33885
   rtx lo, hi, clz_lo, clz_hi, clz_lo_plus_32, result;
 
33886
@@ -851,7 +851,7 @@
 
33887
 
 
33888
 (define_expand "ffsdi2"
 
33889
   [(set (match_operand:DI 0 "register_operand" "")
 
33890
-       (ffs:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
 
33891
+       (ffs:DI (match_operand:DI 1 "register_operand" "")))]
 
33892
   ""
 
33893
 {
 
33894
   rtx lo, hi, ctz_lo, ctz_hi, ctz_hi_plus_32, ctz, ctz_plus_1,ctz_cond;
 
33895
Index: gcc/config/arm/arm.c
 
33896
===================================================================
 
33897
--- a/src/gcc/config/arm/arm.c  (.../tags/gcc_4_8_2_release)
 
33898
+++ b/src/gcc/config/arm/arm.c  (.../branches/gcc-4_8-branch)
 
33899
@@ -5425,7 +5425,8 @@
 
33900
   if (!crtl->uses_pic_offset_table)
 
33901
     {
 
33902
       gcc_assert (can_create_pseudo_p ());
 
33903
-      if (arm_pic_register != INVALID_REGNUM)
 
33904
+      if (arm_pic_register != INVALID_REGNUM
 
33905
+         && !(TARGET_THUMB1 && arm_pic_register > LAST_LO_REGNUM))
 
33906
        {
 
33907
          if (!cfun->machine->pic_reg)
 
33908
            cfun->machine->pic_reg = gen_rtx_REG (Pmode, arm_pic_register);
 
33909
@@ -5451,7 +5452,12 @@
 
33910
              crtl->uses_pic_offset_table = 1;
 
33911
              start_sequence ();
 
33912
 
 
33913
-             arm_load_pic_register (0UL);
 
33914
+             if (TARGET_THUMB1 && arm_pic_register != INVALID_REGNUM
 
33915
+                 && arm_pic_register > LAST_LO_REGNUM)
 
33916
+               emit_move_insn (cfun->machine->pic_reg,
 
33917
+                               gen_rtx_REG (Pmode, arm_pic_register));
 
33918
+             else
 
33919
+               arm_load_pic_register (0UL);
 
33920
 
 
33921
              seq = get_insns ();
 
33922
              end_sequence ();
 
33923
@@ -5709,6 +5715,14 @@
 
33924
              emit_insn (gen_movsi (pic_offset_table_rtx, pic_tmp));
 
33925
              emit_insn (gen_pic_add_dot_plus_four (pic_reg, pic_reg, labelno));
 
33926
            }
 
33927
+         else if (arm_pic_register != INVALID_REGNUM
 
33928
+                  && arm_pic_register > LAST_LO_REGNUM
 
33929
+                  && REGNO (pic_reg) <= LAST_LO_REGNUM)
 
33930
+           {
 
33931
+             emit_insn (gen_pic_load_addr_unified (pic_reg, pic_rtx, labelno));
 
33932
+             emit_move_insn (gen_rtx_REG (Pmode, arm_pic_register), pic_reg);
 
33933
+             emit_use (gen_rtx_REG (Pmode, arm_pic_register));
 
33934
+           }
 
33935
          else
 
33936
            emit_insn (gen_pic_load_addr_unified (pic_reg, pic_rtx, labelno));
 
33937
        }
 
33938
@@ -21279,7 +21293,11 @@
 
33939
                                                    type_mode);
 
33940
             }
 
33941
 
 
33942
-          op[argc] = expand_normal (arg[argc]);
 
33943
+         /* Use EXPAND_MEMORY for NEON_ARG_MEMORY to ensure a MEM_P
 
33944
+            be returned.  */
 
33945
+         op[argc] = expand_expr (arg[argc], NULL_RTX, VOIDmode,
 
33946
+                                 (thisarg == NEON_ARG_MEMORY
 
33947
+                                  ? EXPAND_MEMORY : EXPAND_NORMAL));
 
33948
 
 
33949
           switch (thisarg)
 
33950
             {
 
33951
@@ -21298,6 +21316,9 @@
 
33952
               break;
 
33953
 
 
33954
             case NEON_ARG_MEMORY:
 
33955
+             /* Check if expand failed.  */
 
33956
+             if (op[argc] == const0_rtx)
 
33957
+               return 0;
 
33958
              gcc_assert (MEM_P (op[argc]));
 
33959
              PUT_MODE (op[argc], mode[argc]);
 
33960
              /* ??? arm_neon.h uses the same built-in functions for signed
 
33961
@@ -23555,6 +23576,7 @@
 
33962
   num_regs = bit_count (saved_regs_mask);
 
33963
   if ((offsets->outgoing_args != (1 + num_regs)) || cfun->calls_alloca)
 
33964
     {
 
33965
+      emit_insn (gen_blockage ());
 
33966
       /* Unwind the stack to just below the saved registers.  */
 
33967
       emit_insn (gen_addsi3 (stack_pointer_rtx,
 
33968
                              hard_frame_pointer_rtx,
 
33969
@@ -23583,8 +23605,8 @@
 
33970
 
 
33971
   if (crtl->calls_eh_return)
 
33972
     emit_insn (gen_addsi3 (stack_pointer_rtx,
 
33973
-               stack_pointer_rtx,
 
33974
-               GEN_INT (ARM_EH_STACKADJ_REGNUM)));
 
33975
+                          stack_pointer_rtx,
 
33976
+                          gen_rtx_REG (SImode, ARM_EH_STACKADJ_REGNUM)));
 
33977
 
 
33978
   if (IS_STACKALIGN (func_type))
 
33979
     /* Restore the original stack pointer.  Before prologue, the stack was
 
33980
Index: gcc/config/arm/arm.h
 
33981
===================================================================
 
33982
--- a/src/gcc/config/arm/arm.h  (.../tags/gcc_4_8_2_release)
 
33983
+++ b/src/gcc/config/arm/arm.h  (.../branches/gcc-4_8-branch)
 
33984
@@ -1213,11 +1213,15 @@
 
33985
    VFPv2.
 
33986
    In big-endian mode, modes greater than word size (i.e. DFmode) are stored in
 
33987
    VFP registers in little-endian order.  We can't describe that accurately to
 
33988
-   GCC, so avoid taking subregs of such values.  */
 
33989
-#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS)      \
 
33990
-  (TARGET_VFP && TARGET_BIG_END                                \
 
33991
-   && (GET_MODE_SIZE (FROM) > UNITS_PER_WORD           \
 
33992
-       || GET_MODE_SIZE (TO) > UNITS_PER_WORD)         \
 
33993
+   GCC, so avoid taking subregs of such values.
 
33994
+   The only exception is going from a 128-bit to a 64-bit type.  In that case
 
33995
+   the data layout happens to be consistent for big-endian, so we explicitly allow
 
33996
+   that case.  */
 
33997
+#define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS)              \
 
33998
+  (TARGET_VFP && TARGET_BIG_END                                        \
 
33999
+   && !(GET_MODE_SIZE (FROM) == 16 && GET_MODE_SIZE (TO) == 8) \
 
34000
+   && (GET_MODE_SIZE (FROM) > UNITS_PER_WORD                   \
 
34001
+       || GET_MODE_SIZE (TO) > UNITS_PER_WORD)                 \
 
34002
    && reg_classes_intersect_p (VFP_REGS, (CLASS)))
 
34003
 
 
34004
 /* The class value for index registers, and the one for base regs.  */
 
34005
Index: gcc/config/arm/vfp.md
 
34006
===================================================================
 
34007
--- a/src/gcc/config/arm/vfp.md (.../tags/gcc_4_8_2_release)
 
34008
+++ b/src/gcc/config/arm/vfp.md (.../branches/gcc-4_8-branch)
 
34009
@@ -1264,6 +1264,7 @@
 
34010
   "TARGET_HARD_FLOAT && TARGET_FPU_ARMV8 <vfp_double_cond>"
 
34011
   "vrint<vrint_variant>%?.<V_if_elem>\\t%<V_reg>0, %<V_reg>1"
 
34012
   [(set_attr "predicable" "<vrint_predicable>")
 
34013
+   (set_attr "conds" "<vrint_conds>")
 
34014
    (set_attr "type" "f_rint<vfp_type>")]
 
34015
 )
 
34016
 
 
34017
@@ -1280,7 +1281,8 @@
 
34018
                  (match_operand:SDF 2 "register_operand" "<F_constraint>")))]
 
34019
   "TARGET_HARD_FLOAT && TARGET_FPU_ARMV8 <vfp_double_cond>"
 
34020
   "vmaxnm.<V_if_elem>\\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
 
34021
-  [(set_attr "type" "f_minmax<vfp_type>")]
 
34022
+  [(set_attr "type" "f_minmax<vfp_type>")
 
34023
+   (set_attr "conds" "unconditional")]
 
34024
 )
 
34025
 
 
34026
 (define_insn "smin<mode>3"
 
34027
@@ -1289,7 +1291,8 @@
 
34028
                  (match_operand:SDF 2 "register_operand" "<F_constraint>")))]
 
34029
   "TARGET_HARD_FLOAT && TARGET_FPU_ARMV8 <vfp_double_cond>"
 
34030
   "vminnm.<V_if_elem>\\t%<V_reg>0, %<V_reg>1, %<V_reg>2"
 
34031
-  [(set_attr "type" "f_minmax<vfp_type>")]
 
34032
+  [(set_attr "type" "f_minmax<vfp_type>")
 
34033
+   (set_attr "conds" "unconditional")]
 
34034
 )
 
34035
 
 
34036
 ;; Unimplemented insns:
 
34037
Index: gcc/config/arm/ldmstm.md
 
34038
===================================================================
 
34039
--- a/src/gcc/config/arm/ldmstm.md      (.../tags/gcc_4_8_2_release)
 
34040
+++ b/src/gcc/config/arm/ldmstm.md      (.../branches/gcc-4_8-branch)
 
34041
@@ -23,15 +23,15 @@
 
34042
 
 
34043
 (define_insn "*ldm4_ia"
 
34044
   [(match_parallel 0 "load_multiple_operation"
 
34045
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34046
+    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
34047
           (mem:SI (match_operand:SI 5 "s_register_operand" "rk")))
 
34048
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34049
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
34050
           (mem:SI (plus:SI (match_dup 5)
 
34051
                   (const_int 4))))
 
34052
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
34053
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
34054
           (mem:SI (plus:SI (match_dup 5)
 
34055
                   (const_int 8))))
 
34056
-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
 
34057
+     (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
 
34058
           (mem:SI (plus:SI (match_dup 5)
 
34059
                   (const_int 12))))])]
 
34060
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
 
34061
@@ -41,15 +41,15 @@
 
34062
 
 
34063
 (define_insn "*thumb_ldm4_ia"
 
34064
   [(match_parallel 0 "load_multiple_operation"
 
34065
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34066
+    [(set (match_operand:SI 1 "low_register_operand" "")
 
34067
           (mem:SI (match_operand:SI 5 "s_register_operand" "l")))
 
34068
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34069
+     (set (match_operand:SI 2 "low_register_operand" "")
 
34070
           (mem:SI (plus:SI (match_dup 5)
 
34071
                   (const_int 4))))
 
34072
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
34073
+     (set (match_operand:SI 3 "low_register_operand" "")
 
34074
           (mem:SI (plus:SI (match_dup 5)
 
34075
                   (const_int 8))))
 
34076
-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
 
34077
+     (set (match_operand:SI 4 "low_register_operand" "")
 
34078
           (mem:SI (plus:SI (match_dup 5)
 
34079
                   (const_int 12))))])]
 
34080
   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 4"
 
34081
@@ -60,15 +60,15 @@
 
34082
   [(match_parallel 0 "load_multiple_operation"
 
34083
     [(set (match_operand:SI 5 "s_register_operand" "+&rk")
 
34084
           (plus:SI (match_dup 5) (const_int 16)))
 
34085
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34086
+     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
34087
           (mem:SI (match_dup 5)))
 
34088
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34089
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
34090
           (mem:SI (plus:SI (match_dup 5)
 
34091
                   (const_int 4))))
 
34092
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
34093
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
34094
           (mem:SI (plus:SI (match_dup 5)
 
34095
                   (const_int 8))))
 
34096
-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
 
34097
+     (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
 
34098
           (mem:SI (plus:SI (match_dup 5)
 
34099
                   (const_int 12))))])]
 
34100
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
 
34101
@@ -80,15 +80,15 @@
 
34102
   [(match_parallel 0 "load_multiple_operation"
 
34103
     [(set (match_operand:SI 5 "s_register_operand" "+&l")
 
34104
           (plus:SI (match_dup 5) (const_int 16)))
 
34105
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34106
+     (set (match_operand:SI 1 "low_register_operand" "")
 
34107
           (mem:SI (match_dup 5)))
 
34108
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34109
+     (set (match_operand:SI 2 "low_register_operand" "")
 
34110
           (mem:SI (plus:SI (match_dup 5)
 
34111
                   (const_int 4))))
 
34112
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
34113
+     (set (match_operand:SI 3 "low_register_operand" "")
 
34114
           (mem:SI (plus:SI (match_dup 5)
 
34115
                   (const_int 8))))
 
34116
-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
 
34117
+     (set (match_operand:SI 4 "low_register_operand" "")
 
34118
           (mem:SI (plus:SI (match_dup 5)
 
34119
                   (const_int 12))))])]
 
34120
   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 5"
 
34121
@@ -98,13 +98,13 @@
 
34122
 (define_insn "*stm4_ia"
 
34123
   [(match_parallel 0 "store_multiple_operation"
 
34124
     [(set (mem:SI (match_operand:SI 5 "s_register_operand" "rk"))
 
34125
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34126
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
34127
      (set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
 
34128
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
34129
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
34130
      (set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
 
34131
-          (match_operand:SI 3 "arm_hard_register_operand" ""))
 
34132
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))
 
34133
      (set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
 
34134
-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
 
34135
+          (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
 
34136
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
 
34137
   "stm%(ia%)\t%5, {%1, %2, %3, %4}"
 
34138
   [(set_attr "type" "store4")
 
34139
@@ -115,13 +115,13 @@
 
34140
     [(set (match_operand:SI 5 "s_register_operand" "+&rk")
 
34141
           (plus:SI (match_dup 5) (const_int 16)))
 
34142
      (set (mem:SI (match_dup 5))
 
34143
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34144
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
34145
      (set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
 
34146
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
34147
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
34148
      (set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
 
34149
-          (match_operand:SI 3 "arm_hard_register_operand" ""))
 
34150
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))
 
34151
      (set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
 
34152
-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
 
34153
+          (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
 
34154
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
 
34155
   "stm%(ia%)\t%5!, {%1, %2, %3, %4}"
 
34156
   [(set_attr "type" "store4")
 
34157
@@ -132,13 +132,13 @@
 
34158
     [(set (match_operand:SI 5 "s_register_operand" "+&l")
 
34159
           (plus:SI (match_dup 5) (const_int 16)))
 
34160
      (set (mem:SI (match_dup 5))
 
34161
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34162
+          (match_operand:SI 1 "low_register_operand" ""))
 
34163
      (set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
 
34164
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
34165
+          (match_operand:SI 2 "low_register_operand" ""))
 
34166
      (set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
 
34167
-          (match_operand:SI 3 "arm_hard_register_operand" ""))
 
34168
+          (match_operand:SI 3 "low_register_operand" ""))
 
34169
      (set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
 
34170
-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
 
34171
+          (match_operand:SI 4 "low_register_operand" ""))])]
 
34172
   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 5"
 
34173
   "stm%(ia%)\t%5!, {%1, %2, %3, %4}"
 
34174
   [(set_attr "type" "store4")])
 
34175
@@ -145,16 +145,16 @@
 
34176
 
 
34177
 (define_insn "*ldm4_ib"
 
34178
   [(match_parallel 0 "load_multiple_operation"
 
34179
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34180
+    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
34181
           (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk")
 
34182
                   (const_int 4))))
 
34183
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34184
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
34185
           (mem:SI (plus:SI (match_dup 5)
 
34186
                   (const_int 8))))
 
34187
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
34188
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
34189
           (mem:SI (plus:SI (match_dup 5)
 
34190
                   (const_int 12))))
 
34191
-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
 
34192
+     (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
 
34193
           (mem:SI (plus:SI (match_dup 5)
 
34194
                   (const_int 16))))])]
 
34195
   "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
 
34196
@@ -166,16 +166,16 @@
 
34197
   [(match_parallel 0 "load_multiple_operation"
 
34198
     [(set (match_operand:SI 5 "s_register_operand" "+&rk")
 
34199
           (plus:SI (match_dup 5) (const_int 16)))
 
34200
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34201
+     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
34202
           (mem:SI (plus:SI (match_dup 5)
 
34203
                   (const_int 4))))
 
34204
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34205
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
34206
           (mem:SI (plus:SI (match_dup 5)
 
34207
                   (const_int 8))))
 
34208
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
34209
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
34210
           (mem:SI (plus:SI (match_dup 5)
 
34211
                   (const_int 12))))
 
34212
-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
 
34213
+     (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
 
34214
           (mem:SI (plus:SI (match_dup 5)
 
34215
                   (const_int 16))))])]
 
34216
   "TARGET_ARM && XVECLEN (operands[0], 0) == 5"
 
34217
@@ -186,13 +186,13 @@
 
34218
 (define_insn "*stm4_ib"
 
34219
   [(match_parallel 0 "store_multiple_operation"
 
34220
     [(set (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk") (const_int 4)))
 
34221
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34222
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
34223
      (set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
 
34224
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
34225
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
34226
      (set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
 
34227
-          (match_operand:SI 3 "arm_hard_register_operand" ""))
 
34228
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))
 
34229
      (set (mem:SI (plus:SI (match_dup 5) (const_int 16)))
 
34230
-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
 
34231
+          (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
 
34232
   "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
 
34233
   "stm%(ib%)\t%5, {%1, %2, %3, %4}"
 
34234
   [(set_attr "type" "store4")
 
34235
@@ -203,13 +203,13 @@
 
34236
     [(set (match_operand:SI 5 "s_register_operand" "+&rk")
 
34237
           (plus:SI (match_dup 5) (const_int 16)))
 
34238
      (set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
 
34239
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34240
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
34241
      (set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
 
34242
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
34243
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
34244
      (set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
 
34245
-          (match_operand:SI 3 "arm_hard_register_operand" ""))
 
34246
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))
 
34247
      (set (mem:SI (plus:SI (match_dup 5) (const_int 16)))
 
34248
-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
 
34249
+          (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
 
34250
   "TARGET_ARM && XVECLEN (operands[0], 0) == 5"
 
34251
   "stm%(ib%)\t%5!, {%1, %2, %3, %4}"
 
34252
   [(set_attr "type" "store4")
 
34253
@@ -217,16 +217,16 @@
 
34254
 
 
34255
 (define_insn "*ldm4_da"
 
34256
   [(match_parallel 0 "load_multiple_operation"
 
34257
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34258
+    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
34259
           (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk")
 
34260
                   (const_int -12))))
 
34261
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34262
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
34263
           (mem:SI (plus:SI (match_dup 5)
 
34264
                   (const_int -8))))
 
34265
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
34266
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
34267
           (mem:SI (plus:SI (match_dup 5)
 
34268
                   (const_int -4))))
 
34269
-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
 
34270
+     (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
 
34271
           (mem:SI (match_dup 5)))])]
 
34272
   "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
 
34273
   "ldm%(da%)\t%5, {%1, %2, %3, %4}"
 
34274
@@ -237,16 +237,16 @@
 
34275
   [(match_parallel 0 "load_multiple_operation"
 
34276
     [(set (match_operand:SI 5 "s_register_operand" "+&rk")
 
34277
           (plus:SI (match_dup 5) (const_int -16)))
 
34278
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34279
+     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
34280
           (mem:SI (plus:SI (match_dup 5)
 
34281
                   (const_int -12))))
 
34282
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34283
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
34284
           (mem:SI (plus:SI (match_dup 5)
 
34285
                   (const_int -8))))
 
34286
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
34287
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
34288
           (mem:SI (plus:SI (match_dup 5)
 
34289
                   (const_int -4))))
 
34290
-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
 
34291
+     (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
 
34292
           (mem:SI (match_dup 5)))])]
 
34293
   "TARGET_ARM && XVECLEN (operands[0], 0) == 5"
 
34294
   "ldm%(da%)\t%5!, {%1, %2, %3, %4}"
 
34295
@@ -256,13 +256,13 @@
 
34296
 (define_insn "*stm4_da"
 
34297
   [(match_parallel 0 "store_multiple_operation"
 
34298
     [(set (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk") (const_int -12)))
 
34299
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34300
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
34301
      (set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
 
34302
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
34303
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
34304
      (set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
 
34305
-          (match_operand:SI 3 "arm_hard_register_operand" ""))
 
34306
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))
 
34307
      (set (mem:SI (match_dup 5))
 
34308
-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
 
34309
+          (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
 
34310
   "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
 
34311
   "stm%(da%)\t%5, {%1, %2, %3, %4}"
 
34312
   [(set_attr "type" "store4")
 
34313
@@ -273,13 +273,13 @@
 
34314
     [(set (match_operand:SI 5 "s_register_operand" "+&rk")
 
34315
           (plus:SI (match_dup 5) (const_int -16)))
 
34316
      (set (mem:SI (plus:SI (match_dup 5) (const_int -12)))
 
34317
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34318
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
34319
      (set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
 
34320
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
34321
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
34322
      (set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
 
34323
-          (match_operand:SI 3 "arm_hard_register_operand" ""))
 
34324
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))
 
34325
      (set (mem:SI (match_dup 5))
 
34326
-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
 
34327
+          (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
 
34328
   "TARGET_ARM && XVECLEN (operands[0], 0) == 5"
 
34329
   "stm%(da%)\t%5!, {%1, %2, %3, %4}"
 
34330
   [(set_attr "type" "store4")
 
34331
@@ -287,16 +287,16 @@
 
34332
 
 
34333
 (define_insn "*ldm4_db"
 
34334
   [(match_parallel 0 "load_multiple_operation"
 
34335
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34336
+    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
34337
           (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk")
 
34338
                   (const_int -16))))
 
34339
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34340
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
34341
           (mem:SI (plus:SI (match_dup 5)
 
34342
                   (const_int -12))))
 
34343
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
34344
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
34345
           (mem:SI (plus:SI (match_dup 5)
 
34346
                   (const_int -8))))
 
34347
-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
 
34348
+     (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
 
34349
           (mem:SI (plus:SI (match_dup 5)
 
34350
                   (const_int -4))))])]
 
34351
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
 
34352
@@ -308,16 +308,16 @@
 
34353
   [(match_parallel 0 "load_multiple_operation"
 
34354
     [(set (match_operand:SI 5 "s_register_operand" "+&rk")
 
34355
           (plus:SI (match_dup 5) (const_int -16)))
 
34356
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34357
+     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
34358
           (mem:SI (plus:SI (match_dup 5)
 
34359
                   (const_int -16))))
 
34360
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34361
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
34362
           (mem:SI (plus:SI (match_dup 5)
 
34363
                   (const_int -12))))
 
34364
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
34365
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
34366
           (mem:SI (plus:SI (match_dup 5)
 
34367
                   (const_int -8))))
 
34368
-     (set (match_operand:SI 4 "arm_hard_register_operand" "")
 
34369
+     (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
 
34370
           (mem:SI (plus:SI (match_dup 5)
 
34371
                   (const_int -4))))])]
 
34372
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
 
34373
@@ -328,13 +328,13 @@
 
34374
 (define_insn "*stm4_db"
 
34375
   [(match_parallel 0 "store_multiple_operation"
 
34376
     [(set (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk") (const_int -16)))
 
34377
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34378
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
34379
      (set (mem:SI (plus:SI (match_dup 5) (const_int -12)))
 
34380
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
34381
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
34382
      (set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
 
34383
-          (match_operand:SI 3 "arm_hard_register_operand" ""))
 
34384
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))
 
34385
      (set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
 
34386
-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
 
34387
+          (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
 
34388
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
 
34389
   "stm%(db%)\t%5, {%1, %2, %3, %4}"
 
34390
   [(set_attr "type" "store4")
 
34391
@@ -345,13 +345,13 @@
 
34392
     [(set (match_operand:SI 5 "s_register_operand" "+&rk")
 
34393
           (plus:SI (match_dup 5) (const_int -16)))
 
34394
      (set (mem:SI (plus:SI (match_dup 5) (const_int -16)))
 
34395
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34396
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
34397
      (set (mem:SI (plus:SI (match_dup 5) (const_int -12)))
 
34398
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
34399
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
34400
      (set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
 
34401
-          (match_operand:SI 3 "arm_hard_register_operand" ""))
 
34402
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))
 
34403
      (set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
 
34404
-          (match_operand:SI 4 "arm_hard_register_operand" ""))])]
 
34405
+          (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
 
34406
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
 
34407
   "stm%(db%)\t%5!, {%1, %2, %3, %4}"
 
34408
   [(set_attr "type" "store4")
 
34409
@@ -466,12 +466,12 @@
 
34410
 
 
34411
 (define_insn "*ldm3_ia"
 
34412
   [(match_parallel 0 "load_multiple_operation"
 
34413
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34414
+    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
34415
           (mem:SI (match_operand:SI 4 "s_register_operand" "rk")))
 
34416
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34417
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
34418
           (mem:SI (plus:SI (match_dup 4)
 
34419
                   (const_int 4))))
 
34420
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
34421
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
34422
           (mem:SI (plus:SI (match_dup 4)
 
34423
                   (const_int 8))))])]
 
34424
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
 
34425
@@ -481,12 +481,12 @@
 
34426
 
 
34427
 (define_insn "*thumb_ldm3_ia"
 
34428
   [(match_parallel 0 "load_multiple_operation"
 
34429
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34430
+    [(set (match_operand:SI 1 "low_register_operand" "")
 
34431
           (mem:SI (match_operand:SI 4 "s_register_operand" "l")))
 
34432
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34433
+     (set (match_operand:SI 2 "low_register_operand" "")
 
34434
           (mem:SI (plus:SI (match_dup 4)
 
34435
                   (const_int 4))))
 
34436
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
34437
+     (set (match_operand:SI 3 "low_register_operand" "")
 
34438
           (mem:SI (plus:SI (match_dup 4)
 
34439
                   (const_int 8))))])]
 
34440
   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 3"
 
34441
@@ -497,12 +497,12 @@
 
34442
   [(match_parallel 0 "load_multiple_operation"
 
34443
     [(set (match_operand:SI 4 "s_register_operand" "+&rk")
 
34444
           (plus:SI (match_dup 4) (const_int 12)))
 
34445
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34446
+     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
34447
           (mem:SI (match_dup 4)))
 
34448
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34449
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
34450
           (mem:SI (plus:SI (match_dup 4)
 
34451
                   (const_int 4))))
 
34452
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
34453
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
34454
           (mem:SI (plus:SI (match_dup 4)
 
34455
                   (const_int 8))))])]
 
34456
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
 
34457
@@ -514,12 +514,12 @@
 
34458
   [(match_parallel 0 "load_multiple_operation"
 
34459
     [(set (match_operand:SI 4 "s_register_operand" "+&l")
 
34460
           (plus:SI (match_dup 4) (const_int 12)))
 
34461
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34462
+     (set (match_operand:SI 1 "low_register_operand" "")
 
34463
           (mem:SI (match_dup 4)))
 
34464
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34465
+     (set (match_operand:SI 2 "low_register_operand" "")
 
34466
           (mem:SI (plus:SI (match_dup 4)
 
34467
                   (const_int 4))))
 
34468
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
34469
+     (set (match_operand:SI 3 "low_register_operand" "")
 
34470
           (mem:SI (plus:SI (match_dup 4)
 
34471
                   (const_int 8))))])]
 
34472
   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 4"
 
34473
@@ -529,11 +529,11 @@
 
34474
 (define_insn "*stm3_ia"
 
34475
   [(match_parallel 0 "store_multiple_operation"
 
34476
     [(set (mem:SI (match_operand:SI 4 "s_register_operand" "rk"))
 
34477
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34478
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
34479
      (set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
 
34480
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
34481
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
34482
      (set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
 
34483
-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
 
34484
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
 
34485
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
 
34486
   "stm%(ia%)\t%4, {%1, %2, %3}"
 
34487
   [(set_attr "type" "store3")
 
34488
@@ -544,11 +544,11 @@
 
34489
     [(set (match_operand:SI 4 "s_register_operand" "+&rk")
 
34490
           (plus:SI (match_dup 4) (const_int 12)))
 
34491
      (set (mem:SI (match_dup 4))
 
34492
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34493
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
34494
      (set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
 
34495
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
34496
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
34497
      (set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
 
34498
-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
 
34499
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
 
34500
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
 
34501
   "stm%(ia%)\t%4!, {%1, %2, %3}"
 
34502
   [(set_attr "type" "store3")
 
34503
@@ -559,11 +559,11 @@
 
34504
     [(set (match_operand:SI 4 "s_register_operand" "+&l")
 
34505
           (plus:SI (match_dup 4) (const_int 12)))
 
34506
      (set (mem:SI (match_dup 4))
 
34507
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34508
+          (match_operand:SI 1 "low_register_operand" ""))
 
34509
      (set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
 
34510
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
34511
+          (match_operand:SI 2 "low_register_operand" ""))
 
34512
      (set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
 
34513
-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
 
34514
+          (match_operand:SI 3 "low_register_operand" ""))])]
 
34515
   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 4"
 
34516
   "stm%(ia%)\t%4!, {%1, %2, %3}"
 
34517
   [(set_attr "type" "store3")])
 
34518
@@ -570,13 +570,13 @@
 
34519
 
 
34520
 (define_insn "*ldm3_ib"
 
34521
   [(match_parallel 0 "load_multiple_operation"
 
34522
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34523
+    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
34524
           (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk")
 
34525
                   (const_int 4))))
 
34526
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34527
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
34528
           (mem:SI (plus:SI (match_dup 4)
 
34529
                   (const_int 8))))
 
34530
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
34531
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
34532
           (mem:SI (plus:SI (match_dup 4)
 
34533
                   (const_int 12))))])]
 
34534
   "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
 
34535
@@ -588,13 +588,13 @@
 
34536
   [(match_parallel 0 "load_multiple_operation"
 
34537
     [(set (match_operand:SI 4 "s_register_operand" "+&rk")
 
34538
           (plus:SI (match_dup 4) (const_int 12)))
 
34539
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34540
+     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
34541
           (mem:SI (plus:SI (match_dup 4)
 
34542
                   (const_int 4))))
 
34543
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34544
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
34545
           (mem:SI (plus:SI (match_dup 4)
 
34546
                   (const_int 8))))
 
34547
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
34548
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
34549
           (mem:SI (plus:SI (match_dup 4)
 
34550
                   (const_int 12))))])]
 
34551
   "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
 
34552
@@ -605,11 +605,11 @@
 
34553
 (define_insn "*stm3_ib"
 
34554
   [(match_parallel 0 "store_multiple_operation"
 
34555
     [(set (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk") (const_int 4)))
 
34556
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34557
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
34558
      (set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
 
34559
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
34560
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
34561
      (set (mem:SI (plus:SI (match_dup 4) (const_int 12)))
 
34562
-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
 
34563
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
 
34564
   "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
 
34565
   "stm%(ib%)\t%4, {%1, %2, %3}"
 
34566
   [(set_attr "type" "store3")
 
34567
@@ -620,11 +620,11 @@
 
34568
     [(set (match_operand:SI 4 "s_register_operand" "+&rk")
 
34569
           (plus:SI (match_dup 4) (const_int 12)))
 
34570
      (set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
 
34571
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34572
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
34573
      (set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
 
34574
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
34575
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
34576
      (set (mem:SI (plus:SI (match_dup 4) (const_int 12)))
 
34577
-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
 
34578
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
 
34579
   "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
 
34580
   "stm%(ib%)\t%4!, {%1, %2, %3}"
 
34581
   [(set_attr "type" "store3")
 
34582
@@ -632,13 +632,13 @@
 
34583
 
 
34584
 (define_insn "*ldm3_da"
 
34585
   [(match_parallel 0 "load_multiple_operation"
 
34586
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34587
+    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
34588
           (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk")
 
34589
                   (const_int -8))))
 
34590
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34591
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
34592
           (mem:SI (plus:SI (match_dup 4)
 
34593
                   (const_int -4))))
 
34594
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
34595
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
34596
           (mem:SI (match_dup 4)))])]
 
34597
   "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
 
34598
   "ldm%(da%)\t%4, {%1, %2, %3}"
 
34599
@@ -649,13 +649,13 @@
 
34600
   [(match_parallel 0 "load_multiple_operation"
 
34601
     [(set (match_operand:SI 4 "s_register_operand" "+&rk")
 
34602
           (plus:SI (match_dup 4) (const_int -12)))
 
34603
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34604
+     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
34605
           (mem:SI (plus:SI (match_dup 4)
 
34606
                   (const_int -8))))
 
34607
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34608
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
34609
           (mem:SI (plus:SI (match_dup 4)
 
34610
                   (const_int -4))))
 
34611
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
34612
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
34613
           (mem:SI (match_dup 4)))])]
 
34614
   "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
 
34615
   "ldm%(da%)\t%4!, {%1, %2, %3}"
 
34616
@@ -665,11 +665,11 @@
 
34617
 (define_insn "*stm3_da"
 
34618
   [(match_parallel 0 "store_multiple_operation"
 
34619
     [(set (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk") (const_int -8)))
 
34620
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34621
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
34622
      (set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
 
34623
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
34624
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
34625
      (set (mem:SI (match_dup 4))
 
34626
-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
 
34627
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
 
34628
   "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
 
34629
   "stm%(da%)\t%4, {%1, %2, %3}"
 
34630
   [(set_attr "type" "store3")
 
34631
@@ -680,11 +680,11 @@
 
34632
     [(set (match_operand:SI 4 "s_register_operand" "+&rk")
 
34633
           (plus:SI (match_dup 4) (const_int -12)))
 
34634
      (set (mem:SI (plus:SI (match_dup 4) (const_int -8)))
 
34635
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34636
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
34637
      (set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
 
34638
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
34639
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
34640
      (set (mem:SI (match_dup 4))
 
34641
-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
 
34642
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
 
34643
   "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
 
34644
   "stm%(da%)\t%4!, {%1, %2, %3}"
 
34645
   [(set_attr "type" "store3")
 
34646
@@ -692,13 +692,13 @@
 
34647
 
 
34648
 (define_insn "*ldm3_db"
 
34649
   [(match_parallel 0 "load_multiple_operation"
 
34650
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34651
+    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
34652
           (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk")
 
34653
                   (const_int -12))))
 
34654
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34655
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
34656
           (mem:SI (plus:SI (match_dup 4)
 
34657
                   (const_int -8))))
 
34658
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
34659
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
34660
           (mem:SI (plus:SI (match_dup 4)
 
34661
                   (const_int -4))))])]
 
34662
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
 
34663
@@ -710,13 +710,13 @@
 
34664
   [(match_parallel 0 "load_multiple_operation"
 
34665
     [(set (match_operand:SI 4 "s_register_operand" "+&rk")
 
34666
           (plus:SI (match_dup 4) (const_int -12)))
 
34667
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34668
+     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
34669
           (mem:SI (plus:SI (match_dup 4)
 
34670
                   (const_int -12))))
 
34671
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34672
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
34673
           (mem:SI (plus:SI (match_dup 4)
 
34674
                   (const_int -8))))
 
34675
-     (set (match_operand:SI 3 "arm_hard_register_operand" "")
 
34676
+     (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
 
34677
           (mem:SI (plus:SI (match_dup 4)
 
34678
                   (const_int -4))))])]
 
34679
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
 
34680
@@ -727,11 +727,11 @@
 
34681
 (define_insn "*stm3_db"
 
34682
   [(match_parallel 0 "store_multiple_operation"
 
34683
     [(set (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk") (const_int -12)))
 
34684
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34685
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
34686
      (set (mem:SI (plus:SI (match_dup 4) (const_int -8)))
 
34687
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
34688
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
34689
      (set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
 
34690
-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
 
34691
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
 
34692
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
 
34693
   "stm%(db%)\t%4, {%1, %2, %3}"
 
34694
   [(set_attr "type" "store3")
 
34695
@@ -742,11 +742,11 @@
 
34696
     [(set (match_operand:SI 4 "s_register_operand" "+&rk")
 
34697
           (plus:SI (match_dup 4) (const_int -12)))
 
34698
      (set (mem:SI (plus:SI (match_dup 4) (const_int -12)))
 
34699
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34700
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
34701
      (set (mem:SI (plus:SI (match_dup 4) (const_int -8)))
 
34702
-          (match_operand:SI 2 "arm_hard_register_operand" ""))
 
34703
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))
 
34704
      (set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
 
34705
-          (match_operand:SI 3 "arm_hard_register_operand" ""))])]
 
34706
+          (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
 
34707
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
 
34708
   "stm%(db%)\t%4!, {%1, %2, %3}"
 
34709
   [(set_attr "type" "store3")
 
34710
@@ -847,9 +847,9 @@
 
34711
 
 
34712
 (define_insn "*ldm2_ia"
 
34713
   [(match_parallel 0 "load_multiple_operation"
 
34714
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34715
+    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
34716
           (mem:SI (match_operand:SI 3 "s_register_operand" "rk")))
 
34717
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34718
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
34719
           (mem:SI (plus:SI (match_dup 3)
 
34720
                   (const_int 4))))])]
 
34721
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
 
34722
@@ -859,9 +859,9 @@
 
34723
 
 
34724
 (define_insn "*thumb_ldm2_ia"
 
34725
   [(match_parallel 0 "load_multiple_operation"
 
34726
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34727
+    [(set (match_operand:SI 1 "low_register_operand" "")
 
34728
           (mem:SI (match_operand:SI 3 "s_register_operand" "l")))
 
34729
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34730
+     (set (match_operand:SI 2 "low_register_operand" "")
 
34731
           (mem:SI (plus:SI (match_dup 3)
 
34732
                   (const_int 4))))])]
 
34733
   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 2"
 
34734
@@ -872,9 +872,9 @@
 
34735
   [(match_parallel 0 "load_multiple_operation"
 
34736
     [(set (match_operand:SI 3 "s_register_operand" "+&rk")
 
34737
           (plus:SI (match_dup 3) (const_int 8)))
 
34738
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34739
+     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
34740
           (mem:SI (match_dup 3)))
 
34741
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34742
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
34743
           (mem:SI (plus:SI (match_dup 3)
 
34744
                   (const_int 4))))])]
 
34745
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
 
34746
@@ -886,9 +886,9 @@
 
34747
   [(match_parallel 0 "load_multiple_operation"
 
34748
     [(set (match_operand:SI 3 "s_register_operand" "+&l")
 
34749
           (plus:SI (match_dup 3) (const_int 8)))
 
34750
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34751
+     (set (match_operand:SI 1 "low_register_operand" "")
 
34752
           (mem:SI (match_dup 3)))
 
34753
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34754
+     (set (match_operand:SI 2 "low_register_operand" "")
 
34755
           (mem:SI (plus:SI (match_dup 3)
 
34756
                   (const_int 4))))])]
 
34757
   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 3"
 
34758
@@ -898,9 +898,9 @@
 
34759
 (define_insn "*stm2_ia"
 
34760
   [(match_parallel 0 "store_multiple_operation"
 
34761
     [(set (mem:SI (match_operand:SI 3 "s_register_operand" "rk"))
 
34762
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34763
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
34764
      (set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
 
34765
-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
 
34766
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
 
34767
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
 
34768
   "stm%(ia%)\t%3, {%1, %2}"
 
34769
   [(set_attr "type" "store2")
 
34770
@@ -911,9 +911,9 @@
 
34771
     [(set (match_operand:SI 3 "s_register_operand" "+&rk")
 
34772
           (plus:SI (match_dup 3) (const_int 8)))
 
34773
      (set (mem:SI (match_dup 3))
 
34774
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34775
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
34776
      (set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
 
34777
-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
 
34778
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
 
34779
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
 
34780
   "stm%(ia%)\t%3!, {%1, %2}"
 
34781
   [(set_attr "type" "store2")
 
34782
@@ -924,9 +924,9 @@
 
34783
     [(set (match_operand:SI 3 "s_register_operand" "+&l")
 
34784
           (plus:SI (match_dup 3) (const_int 8)))
 
34785
      (set (mem:SI (match_dup 3))
 
34786
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34787
+          (match_operand:SI 1 "low_register_operand" ""))
 
34788
      (set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
 
34789
-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
 
34790
+          (match_operand:SI 2 "low_register_operand" ""))])]
 
34791
   "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 3"
 
34792
   "stm%(ia%)\t%3!, {%1, %2}"
 
34793
   [(set_attr "type" "store2")])
 
34794
@@ -933,10 +933,10 @@
 
34795
 
 
34796
 (define_insn "*ldm2_ib"
 
34797
   [(match_parallel 0 "load_multiple_operation"
 
34798
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34799
+    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
34800
           (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk")
 
34801
                   (const_int 4))))
 
34802
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34803
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
34804
           (mem:SI (plus:SI (match_dup 3)
 
34805
                   (const_int 8))))])]
 
34806
   "TARGET_ARM && XVECLEN (operands[0], 0) == 2"
 
34807
@@ -948,10 +948,10 @@
 
34808
   [(match_parallel 0 "load_multiple_operation"
 
34809
     [(set (match_operand:SI 3 "s_register_operand" "+&rk")
 
34810
           (plus:SI (match_dup 3) (const_int 8)))
 
34811
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34812
+     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
34813
           (mem:SI (plus:SI (match_dup 3)
 
34814
                   (const_int 4))))
 
34815
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34816
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
34817
           (mem:SI (plus:SI (match_dup 3)
 
34818
                   (const_int 8))))])]
 
34819
   "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
 
34820
@@ -962,9 +962,9 @@
 
34821
 (define_insn "*stm2_ib"
 
34822
   [(match_parallel 0 "store_multiple_operation"
 
34823
     [(set (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk") (const_int 4)))
 
34824
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34825
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
34826
      (set (mem:SI (plus:SI (match_dup 3) (const_int 8)))
 
34827
-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
 
34828
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
 
34829
   "TARGET_ARM && XVECLEN (operands[0], 0) == 2"
 
34830
   "stm%(ib%)\t%3, {%1, %2}"
 
34831
   [(set_attr "type" "store2")
 
34832
@@ -975,9 +975,9 @@
 
34833
     [(set (match_operand:SI 3 "s_register_operand" "+&rk")
 
34834
           (plus:SI (match_dup 3) (const_int 8)))
 
34835
      (set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
 
34836
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34837
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
34838
      (set (mem:SI (plus:SI (match_dup 3) (const_int 8)))
 
34839
-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
 
34840
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
 
34841
   "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
 
34842
   "stm%(ib%)\t%3!, {%1, %2}"
 
34843
   [(set_attr "type" "store2")
 
34844
@@ -985,10 +985,10 @@
 
34845
 
 
34846
 (define_insn "*ldm2_da"
 
34847
   [(match_parallel 0 "load_multiple_operation"
 
34848
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34849
+    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
34850
           (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk")
 
34851
                   (const_int -4))))
 
34852
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34853
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
34854
           (mem:SI (match_dup 3)))])]
 
34855
   "TARGET_ARM && XVECLEN (operands[0], 0) == 2"
 
34856
   "ldm%(da%)\t%3, {%1, %2}"
 
34857
@@ -999,10 +999,10 @@
 
34858
   [(match_parallel 0 "load_multiple_operation"
 
34859
     [(set (match_operand:SI 3 "s_register_operand" "+&rk")
 
34860
           (plus:SI (match_dup 3) (const_int -8)))
 
34861
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34862
+     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
34863
           (mem:SI (plus:SI (match_dup 3)
 
34864
                   (const_int -4))))
 
34865
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34866
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
34867
           (mem:SI (match_dup 3)))])]
 
34868
   "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
 
34869
   "ldm%(da%)\t%3!, {%1, %2}"
 
34870
@@ -1012,9 +1012,9 @@
 
34871
 (define_insn "*stm2_da"
 
34872
   [(match_parallel 0 "store_multiple_operation"
 
34873
     [(set (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk") (const_int -4)))
 
34874
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34875
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
34876
      (set (mem:SI (match_dup 3))
 
34877
-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
 
34878
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
 
34879
   "TARGET_ARM && XVECLEN (operands[0], 0) == 2"
 
34880
   "stm%(da%)\t%3, {%1, %2}"
 
34881
   [(set_attr "type" "store2")
 
34882
@@ -1025,9 +1025,9 @@
 
34883
     [(set (match_operand:SI 3 "s_register_operand" "+&rk")
 
34884
           (plus:SI (match_dup 3) (const_int -8)))
 
34885
      (set (mem:SI (plus:SI (match_dup 3) (const_int -4)))
 
34886
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34887
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
34888
      (set (mem:SI (match_dup 3))
 
34889
-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
 
34890
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
 
34891
   "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
 
34892
   "stm%(da%)\t%3!, {%1, %2}"
 
34893
   [(set_attr "type" "store2")
 
34894
@@ -1035,10 +1035,10 @@
 
34895
 
 
34896
 (define_insn "*ldm2_db"
 
34897
   [(match_parallel 0 "load_multiple_operation"
 
34898
-    [(set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34899
+    [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
34900
           (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk")
 
34901
                   (const_int -8))))
 
34902
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34903
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
34904
           (mem:SI (plus:SI (match_dup 3)
 
34905
                   (const_int -4))))])]
 
34906
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
 
34907
@@ -1050,10 +1050,10 @@
 
34908
   [(match_parallel 0 "load_multiple_operation"
 
34909
     [(set (match_operand:SI 3 "s_register_operand" "+&rk")
 
34910
           (plus:SI (match_dup 3) (const_int -8)))
 
34911
-     (set (match_operand:SI 1 "arm_hard_register_operand" "")
 
34912
+     (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
 
34913
           (mem:SI (plus:SI (match_dup 3)
 
34914
                   (const_int -8))))
 
34915
-     (set (match_operand:SI 2 "arm_hard_register_operand" "")
 
34916
+     (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
 
34917
           (mem:SI (plus:SI (match_dup 3)
 
34918
                   (const_int -4))))])]
 
34919
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
 
34920
@@ -1064,9 +1064,9 @@
 
34921
 (define_insn "*stm2_db"
 
34922
   [(match_parallel 0 "store_multiple_operation"
 
34923
     [(set (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk") (const_int -8)))
 
34924
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34925
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
34926
      (set (mem:SI (plus:SI (match_dup 3) (const_int -4)))
 
34927
-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
 
34928
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
 
34929
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
 
34930
   "stm%(db%)\t%3, {%1, %2}"
 
34931
   [(set_attr "type" "store2")
 
34932
@@ -1077,9 +1077,9 @@
 
34933
     [(set (match_operand:SI 3 "s_register_operand" "+&rk")
 
34934
           (plus:SI (match_dup 3) (const_int -8)))
 
34935
      (set (mem:SI (plus:SI (match_dup 3) (const_int -8)))
 
34936
-          (match_operand:SI 1 "arm_hard_register_operand" ""))
 
34937
+          (match_operand:SI 1 "arm_hard_general_register_operand" ""))
 
34938
      (set (mem:SI (plus:SI (match_dup 3) (const_int -4)))
 
34939
-          (match_operand:SI 2 "arm_hard_register_operand" ""))])]
 
34940
+          (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
 
34941
   "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
 
34942
   "stm%(db%)\t%3!, {%1, %2}"
 
34943
   [(set_attr "type" "store2")
 
34944
Index: gcc/config/arm/predicates.md
 
34945
===================================================================
 
34946
--- a/src/gcc/config/arm/predicates.md  (.../tags/gcc_4_8_2_release)
 
34947
+++ b/src/gcc/config/arm/predicates.md  (.../branches/gcc-4_8-branch)
 
34948
@@ -31,11 +31,11 @@
 
34949
              || REGNO_REG_CLASS (REGNO (op)) != NO_REGS));
 
34950
 })
 
34951
 
 
34952
-;; Any hard register.
 
34953
-(define_predicate "arm_hard_register_operand"
 
34954
+;; Any general register.
 
34955
+(define_predicate "arm_hard_general_register_operand"
 
34956
   (match_code "reg")
 
34957
 {
 
34958
-  return REGNO (op) < FIRST_PSEUDO_REGISTER;
 
34959
+  return REGNO (op) <= LAST_ARM_REGNUM;
 
34960
 })
 
34961
 
 
34962
 ;; A low register.
 
34963
@@ -76,6 +76,12 @@
 
34964
                  && REGNO_REG_CLASS (REGNO (op)) == VFP_REGS)));
 
34965
 })
 
34966
 
 
34967
+(define_predicate "vfp_hard_register_operand"
 
34968
+  (match_code "reg")
 
34969
+{
 
34970
+  return (IS_VFP_REGNUM (REGNO (op)));
 
34971
+})
 
34972
+
 
34973
 (define_predicate "zero_operand"
 
34974
   (and (match_code "const_int,const_double,const_vector")
 
34975
        (match_test "op == CONST0_RTX (mode)")))
 
34976
Index: gcc/config/arm/arm-ldmstm.ml
 
34977
===================================================================
 
34978
--- a/src/gcc/config/arm/arm-ldmstm.ml  (.../tags/gcc_4_8_2_release)
 
34979
+++ b/src/gcc/config/arm/arm-ldmstm.ml  (.../branches/gcc-4_8-branch)
 
34980
@@ -67,10 +67,13 @@
 
34981
     Printf.sprintf ("(match_operand:SI %d \"s_register_operand\" \"%s%s\")")
 
34982
       (nregs + 1) (inout_constr op_type) (constr thumb)
 
34983
 
 
34984
+let reg_predicate thumb =
 
34985
+  if thumb then "low_register_operand" else "arm_hard_general_register_operand"
 
34986
+
 
34987
 let write_ldm_set thumb nregs offset opnr first =
 
34988
   let indent = "     " in
 
34989
   Printf.printf "%s" (if first then "    [" else indent);
 
34990
-  Printf.printf "(set (match_operand:SI %d \"arm_hard_register_operand\" \"\")\n" opnr;
 
34991
+  Printf.printf "(set (match_operand:SI %d \"%s\" \"\")\n" opnr (reg_predicate thumb);
 
34992
   Printf.printf "%s     (mem:SI " indent;
 
34993
   begin if offset != 0 then Printf.printf "(plus:SI " end;
 
34994
   Printf.printf "%s" (destreg nregs first IN thumb);
 
34995
@@ -84,7 +87,7 @@
 
34996
   begin if offset != 0 then Printf.printf "(plus:SI " end;
 
34997
   Printf.printf "%s" (destreg nregs first IN thumb);
 
34998
   begin if offset != 0 then Printf.printf " (const_int %d))" offset end;
 
34999
-  Printf.printf ")\n%s     (match_operand:SI %d \"arm_hard_register_operand\" \"\"))" indent opnr 
 
35000
+  Printf.printf ")\n%s     (match_operand:SI %d \"%s\" \"\"))" indent opnr (reg_predicate thumb)
 
35001
 
 
35002
 let write_ldm_peep_set extra_indent nregs opnr first =
 
35003
   let indent = "   " ^ extra_indent in
 
35004
Index: gcc/config/arm/iterators.md
 
35005
===================================================================
 
35006
--- a/src/gcc/config/arm/iterators.md   (.../tags/gcc_4_8_2_release)
 
35007
+++ b/src/gcc/config/arm/iterators.md   (.../branches/gcc-4_8-branch)
 
35008
@@ -493,6 +493,10 @@
 
35009
                                   (UNSPEC_VRINTA "no") (UNSPEC_VRINTM "no")
 
35010
                                   (UNSPEC_VRINTR "yes") (UNSPEC_VRINTX "yes")])
 
35011
 
 
35012
+(define_int_attr vrint_conds [(UNSPEC_VRINTZ "nocond") (UNSPEC_VRINTP "unconditional")
 
35013
+                              (UNSPEC_VRINTA "unconditional") (UNSPEC_VRINTM "unconditional")
 
35014
+                              (UNSPEC_VRINTR "nocond") (UNSPEC_VRINTX "nocond")])
 
35015
+
 
35016
 (define_int_attr nvrint_variant [(UNSPEC_NVRINTZ "z") (UNSPEC_NVRINTP "p")
 
35017
                                 (UNSPEC_NVRINTA "a") (UNSPEC_NVRINTM "m")
 
35018
                                 (UNSPEC_NVRINTX "x") (UNSPEC_NVRINTN "n")])
 
35019
Index: gcc/config/arm/arm.md
 
35020
===================================================================
 
35021
--- a/src/gcc/config/arm/arm.md (.../tags/gcc_4_8_2_release)
 
35022
+++ b/src/gcc/config/arm/arm.md (.../branches/gcc-4_8-branch)
 
35023
@@ -11036,7 +11036,7 @@
 
35024
     [(set (match_operand:SI 1 "s_register_operand" "+rk")
 
35025
           (plus:SI (match_dup 1)
 
35026
                    (match_operand:SI 2 "const_int_operand" "I")))
 
35027
-     (set (match_operand:DF 3 "arm_hard_register_operand" "")
 
35028
+     (set (match_operand:DF 3 "vfp_hard_register_operand" "")
 
35029
           (mem:DF (match_dup 1)))])]
 
35030
   "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP"
 
35031
   "*
 
35032
@@ -11270,7 +11270,9 @@
 
35033
             (match_operand:SI 1 "" "")
 
35034
             (match_operand:SI 2 "" ""))]
 
35035
   "TARGET_32BIT && arm_arch5e"
 
35036
-  "pld\\t%a0")
 
35037
+  "pld\\t%a0"
 
35038
+  [(set_attr "type" "load1")]
 
35039
+)
 
35040
 
 
35041
 ;; General predication pattern
 
35042
 
 
35043
Index: gcc/config/pa/pa.c
 
35044
===================================================================
 
35045
--- a/src/gcc/config/pa/pa.c    (.../tags/gcc_4_8_2_release)
 
35046
+++ b/src/gcc/config/pa/pa.c    (.../branches/gcc-4_8-branch)
 
35047
@@ -912,9 +912,12 @@
 
35048
 legitimize_tls_address (rtx addr)
 
35049
 {
 
35050
   rtx ret, insn, tmp, t1, t2, tp;
 
35051
-  enum tls_model model = SYMBOL_REF_TLS_MODEL (addr);
 
35052
 
 
35053
-  switch (model) 
 
35054
+  /* Currently, we can't handle anything but a SYMBOL_REF.  */
 
35055
+  if (GET_CODE (addr) != SYMBOL_REF)
 
35056
+    return addr;
 
35057
+
 
35058
+  switch (SYMBOL_REF_TLS_MODEL (addr)) 
 
35059
     {
 
35060
       case TLS_MODEL_GLOBAL_DYNAMIC:
 
35061
        tmp = gen_reg_rtx (Pmode);
 
35062
@@ -1035,7 +1038,7 @@
 
35063
       && !REG_POINTER (XEXP (x, 1)))
 
35064
     return gen_rtx_PLUS (Pmode, XEXP (x, 1), XEXP (x, 0));
 
35065
 
 
35066
-  if (PA_SYMBOL_REF_TLS_P (x))
 
35067
+  if (pa_tls_referenced_p (x))
 
35068
     return legitimize_tls_address (x);
 
35069
   else if (flag_pic)
 
35070
     return legitimize_pic_address (x, mode, gen_reg_rtx (Pmode));
 
35071
@@ -1916,9 +1919,10 @@
 
35072
      not consider them legitimate constants.  Loop optimizations can
 
35073
      call the emit_move_xxx with one as a source.  */
 
35074
   if ((GET_CODE (operand1) != HIGH && immediate_operand (operand1, mode))
 
35075
+      || (GET_CODE (operand1) == HIGH
 
35076
+         && symbolic_operand (XEXP (operand1, 0), mode))
 
35077
       || function_label_operand (operand1, VOIDmode)
 
35078
-      || (GET_CODE (operand1) == HIGH
 
35079
-         && symbolic_operand (XEXP (operand1, 0), mode)))
 
35080
+      || pa_tls_referenced_p (operand1))
 
35081
     {
 
35082
       int ishighonly = 0;
 
35083
 
 
35084
@@ -2625,7 +2629,7 @@
 
35085
   if (optype0 == REGOP)
 
35086
     latehalf[0] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1);
 
35087
   else if (optype0 == OFFSOP)
 
35088
-    latehalf[0] = adjust_address (operands[0], SImode, 4);
 
35089
+    latehalf[0] = adjust_address_nv (operands[0], SImode, 4);
 
35090
   else
 
35091
     latehalf[0] = operands[0];
 
35092
 
 
35093
@@ -2632,7 +2636,7 @@
 
35094
   if (optype1 == REGOP)
 
35095
     latehalf[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
 
35096
   else if (optype1 == OFFSOP)
 
35097
-    latehalf[1] = adjust_address (operands[1], SImode, 4);
 
35098
+    latehalf[1] = adjust_address_nv (operands[1], SImode, 4);
 
35099
   else if (optype1 == CNSTOP)
 
35100
     split_double (operands[1], &operands[1], &latehalf[1]);
 
35101
   else
 
35102
@@ -7539,7 +7543,7 @@
 
35103
       if (!TARGET_LONG_CALLS && distance < MAX_PCREL17F_OFFSET)
 
35104
        return 8;
 
35105
 
 
35106
-      if (TARGET_LONG_ABS_CALL && !flag_pic)
 
35107
+      if (!flag_pic)
 
35108
        return 12;
 
35109
 
 
35110
       return 24;
 
35111
@@ -8104,7 +8108,8 @@
 
35112
     return 12;
 
35113
 
 
35114
   if (TARGET_FAST_INDIRECT_CALLS
 
35115
-      || (!TARGET_PORTABLE_RUNTIME
 
35116
+      || (!TARGET_LONG_CALLS
 
35117
+         && !TARGET_PORTABLE_RUNTIME
 
35118
          && ((TARGET_PA_20 && !TARGET_SOM && distance < 7600000)
 
35119
              || distance < MAX_PCREL17F_OFFSET)))
 
35120
     return 8;
 
35121
@@ -10397,7 +10402,7 @@
 
35122
   /* TLS_MODEL_GLOBAL_DYNAMIC and TLS_MODEL_LOCAL_DYNAMIC are not
 
35123
      legitimate constants.  The other variants can't be handled by
 
35124
      the move patterns after reload starts.  */
 
35125
-  if (PA_SYMBOL_REF_TLS_P (x))
 
35126
+  if (pa_tls_referenced_p (x))
 
35127
     return false;
 
35128
 
 
35129
   if (TARGET_64BIT && GET_CODE (x) == CONST_DOUBLE)
 
35130
@@ -10522,13 +10527,13 @@
 
35131
 
 
35132
          /* When INT14_OK_STRICT is false, a secondary reload is needed
 
35133
             to adjust the displacement of SImode and DImode floating point
 
35134
-            instructions.  So, we return false when STRICT is true.  We
 
35135
+            instructions but this may fail when the register also needs
 
35136
+            reloading.  So, we return false when STRICT is true.  We
 
35137
             also reject long displacements for float mode addresses since
 
35138
             the majority of accesses will use floating point instructions
 
35139
             that don't support 14-bit offsets.  */
 
35140
          if (!INT14_OK_STRICT
 
35141
-             && reload_in_progress
 
35142
-             && strict
 
35143
+             && (strict || !(reload_in_progress || reload_completed))
 
35144
              && mode != QImode
 
35145
              && mode != HImode)
 
35146
            return false;
 
35147
@@ -10588,8 +10593,7 @@
 
35148
            return true;
 
35149
 
 
35150
          if (!INT14_OK_STRICT
 
35151
-             && reload_in_progress
 
35152
-             && strict
 
35153
+             && (strict || !(reload_in_progress || reload_completed))
 
35154
              && mode != QImode
 
35155
              && mode != HImode)
 
35156
            return false;
 
35157
Index: gcc/config/pa/pa.h
 
35158
===================================================================
 
35159
--- a/src/gcc/config/pa/pa.h    (.../tags/gcc_4_8_2_release)
 
35160
+++ b/src/gcc/config/pa/pa.h    (.../branches/gcc-4_8-branch)
 
35161
@@ -784,9 +784,9 @@
 
35162
 
 
35163
 #define MAX_REGS_PER_ADDRESS 2
 
35164
 
 
35165
-/* Non-TLS symbolic references.  */
 
35166
-#define PA_SYMBOL_REF_TLS_P(RTX) \
 
35167
-  (GET_CODE (RTX) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (RTX) != 0)
 
35168
+/* TLS symbolic reference.  */
 
35169
+#define PA_SYMBOL_REF_TLS_P(X) \
 
35170
+  (GET_CODE (X) == SYMBOL_REF && SYMBOL_REF_TLS_MODEL (X) != 0)
 
35171
 
 
35172
 /* Recognize any constant value that is a valid address except
 
35173
    for symbolic addresses.  We get better CSE by rejecting them
 
35174
@@ -796,7 +796,8 @@
 
35175
 #define CONSTANT_ADDRESS_P(X) \
 
35176
   ((GET_CODE (X) == LABEL_REF                                          \
 
35177
    || (GET_CODE (X) == SYMBOL_REF && !SYMBOL_REF_TLS_MODEL (X))                \
 
35178
-   || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST               \
 
35179
+   || GET_CODE (X) == CONST_INT                                                \
 
35180
+   || (GET_CODE (X) == CONST && !pa_tls_referenced_p (X))              \
 
35181
    || GET_CODE (X) == HIGH)                                            \
 
35182
    && (reload_in_progress || reload_completed                          \
 
35183
        || ! pa_symbolic_expression_p (X)))
 
35184
Index: gcc/config/mips/driver-native.c
 
35185
===================================================================
 
35186
--- a/src/gcc/config/mips/driver-native.c       (.../tags/gcc_4_8_2_release)
 
35187
+++ b/src/gcc/config/mips/driver-native.c       (.../branches/gcc-4_8-branch)
 
35188
@@ -58,11 +58,17 @@
 
35189
     if (strncmp (buf, "cpu model", sizeof ("cpu model") - 1) == 0)
 
35190
       {
 
35191
        if (strstr (buf, "Godson2 V0.2") != NULL
 
35192
-           || strstr (buf, "Loongson-2 V0.2") != NULL)
 
35193
+           || strstr (buf, "Loongson-2 V0.2") != NULL
 
35194
+           || strstr (buf, "Loongson-2E") != NULL)
 
35195
          cpu = "loongson2e";
 
35196
        else if (strstr (buf, "Godson2 V0.3") != NULL
 
35197
-                || strstr (buf, "Loongson-2 V0.3") != NULL)
 
35198
+                || strstr (buf, "Loongson-2 V0.3") != NULL
 
35199
+                || strstr (buf, "Loongson-2F") != NULL)
 
35200
          cpu = "loongson2f";
 
35201
+       else if (strstr (buf, "Godson3 V0.5") != NULL
 
35202
+                || strstr (buf, "Loongson-3 V0.5") != NULL
 
35203
+                || strstr (buf, "Loongson-3A") != NULL)
 
35204
+         cpu = "loongson3a";
 
35205
        else if (strstr (buf, "SiByte SB1") != NULL)
 
35206
          cpu = "sb1";
 
35207
        else if (strstr (buf, "R5000") != NULL)
 
35208
Index: gcc/config/mips/mips.md
 
35209
===================================================================
 
35210
--- a/src/gcc/config/mips/mips.md       (.../tags/gcc_4_8_2_release)
 
35211
+++ b/src/gcc/config/mips/mips.md       (.../branches/gcc-4_8-branch)
 
35212
@@ -73,6 +73,11 @@
 
35213
   UNSPEC_STORE_LEFT
 
35214
   UNSPEC_STORE_RIGHT
 
35215
 
 
35216
+  ;; Integer operations that are too cumbersome to describe directly.
 
35217
+  UNSPEC_WSBH
 
35218
+  UNSPEC_DSBH
 
35219
+  UNSPEC_DSHD
 
35220
+
 
35221
   ;; Floating-point moves.
 
35222
   UNSPEC_LOAD_LOW
 
35223
   UNSPEC_LOAD_HIGH
 
35224
@@ -1294,20 +1299,32 @@
 
35225
 
 
35226
 ;; Combiner patterns for unsigned byte-add.
 
35227
 
 
35228
-(define_insn "*baddu_si"
 
35229
+(define_insn "*baddu_si_eb"
 
35230
   [(set (match_operand:SI 0 "register_operand" "=d")
 
35231
         (zero_extend:SI
 
35232
-        (plus:QI (match_operand:QI 1 "register_operand" "d")
 
35233
-                 (match_operand:QI 2 "register_operand" "d"))))]
 
35234
-  "ISA_HAS_BADDU"
 
35235
+        (subreg:QI
 
35236
+         (plus:SI (match_operand:SI 1 "register_operand" "d")
 
35237
+                  (match_operand:SI 2 "register_operand" "d")) 3)))]
 
35238
+  "ISA_HAS_BADDU && BYTES_BIG_ENDIAN"
 
35239
   "baddu\\t%0,%1,%2"
 
35240
   [(set_attr "alu_type" "add")])
 
35241
 
 
35242
+(define_insn "*baddu_si_el"
 
35243
+  [(set (match_operand:SI 0 "register_operand" "=d")
 
35244
+        (zero_extend:SI
 
35245
+        (subreg:QI
 
35246
+         (plus:SI (match_operand:SI 1 "register_operand" "d")
 
35247
+                  (match_operand:SI 2 "register_operand" "d")) 0)))]
 
35248
+  "ISA_HAS_BADDU && !BYTES_BIG_ENDIAN"
 
35249
+  "baddu\\t%0,%1,%2"
 
35250
+  [(set_attr "alu_type" "add")])
 
35251
+
 
35252
 (define_insn "*baddu_di<mode>"
 
35253
   [(set (match_operand:GPR 0 "register_operand" "=d")
 
35254
         (zero_extend:GPR
 
35255
-        (plus:QI (truncate:QI (match_operand:DI 1 "register_operand" "d"))
 
35256
-                 (truncate:QI (match_operand:DI 2 "register_operand" "d")))))]
 
35257
+        (truncate:QI
 
35258
+         (plus:DI (match_operand:DI 1 "register_operand" "d")
 
35259
+                  (match_operand:DI 2 "register_operand" "d")))))]
 
35260
   "ISA_HAS_BADDU && TARGET_64BIT"
 
35261
   "baddu\\t%0,%1,%2"
 
35262
   [(set_attr "alu_type" "add")])
 
35263
@@ -5367,6 +5384,56 @@
 
35264
 }
 
35265
   [(set_attr "type" "shift")
 
35266
    (set_attr "mode" "<MODE>")])
 
35267
+
 
35268
+(define_insn "bswaphi2"
 
35269
+  [(set (match_operand:HI 0 "register_operand" "=d")
 
35270
+       (bswap:HI (match_operand:HI 1 "register_operand" "d")))]
 
35271
+  "ISA_HAS_WSBH"
 
35272
+  "wsbh\t%0,%1"
 
35273
+  [(set_attr "type" "shift")])
 
35274
+
 
35275
+(define_insn_and_split "bswapsi2"
 
35276
+  [(set (match_operand:SI 0 "register_operand" "=d")
 
35277
+       (bswap:SI (match_operand:SI 1 "register_operand" "d")))]
 
35278
+  "ISA_HAS_WSBH && ISA_HAS_ROR"
 
35279
+  "#"
 
35280
+  ""
 
35281
+  [(set (match_dup 0) (unspec:SI [(match_dup 1)] UNSPEC_WSBH))
 
35282
+   (set (match_dup 0) (rotatert:SI (match_dup 0) (const_int 16)))]
 
35283
+  ""
 
35284
+  [(set_attr "length" "8")])
 
35285
+
 
35286
+(define_insn_and_split "bswapdi2"
 
35287
+  [(set (match_operand:DI 0 "register_operand" "=d")
 
35288
+       (bswap:DI (match_operand:DI 1 "register_operand" "d")))]
 
35289
+  "TARGET_64BIT && ISA_HAS_WSBH"
 
35290
+  "#"
 
35291
+  ""
 
35292
+  [(set (match_dup 0) (unspec:DI [(match_dup 1)] UNSPEC_DSBH))
 
35293
+   (set (match_dup 0) (unspec:DI [(match_dup 0)] UNSPEC_DSHD))]
 
35294
+  ""
 
35295
+  [(set_attr "length" "8")])
 
35296
+
 
35297
+(define_insn "wsbh"
 
35298
+  [(set (match_operand:SI 0 "register_operand" "=d")
 
35299
+       (unspec:SI [(match_operand:SI 1 "register_operand" "d")] UNSPEC_WSBH))]
 
35300
+  "ISA_HAS_WSBH"
 
35301
+  "wsbh\t%0,%1"
 
35302
+  [(set_attr "type" "shift")])
 
35303
+
 
35304
+(define_insn "dsbh"
 
35305
+  [(set (match_operand:DI 0 "register_operand" "=d")
 
35306
+       (unspec:DI [(match_operand:DI 1 "register_operand" "d")] UNSPEC_DSBH))]
 
35307
+  "TARGET_64BIT && ISA_HAS_WSBH"
 
35308
+  "dsbh\t%0,%1"
 
35309
+  [(set_attr "type" "shift")])
 
35310
+
 
35311
+(define_insn "dshd"
 
35312
+  [(set (match_operand:DI 0 "register_operand" "=d")
 
35313
+       (unspec:DI [(match_operand:DI 1 "register_operand" "d")] UNSPEC_DSHD))]
 
35314
+  "TARGET_64BIT && ISA_HAS_WSBH"
 
35315
+  "dshd\t%0,%1"
 
35316
+  [(set_attr "type" "shift")])
 
35317
 
 
35318
 ;;
 
35319
 ;;  ....................
 
35320
Index: gcc/config/mips/mips.c
 
35321
===================================================================
 
35322
--- a/src/gcc/config/mips/mips.c        (.../tags/gcc_4_8_2_release)
 
35323
+++ b/src/gcc/config/mips/mips.c        (.../branches/gcc-4_8-branch)
 
35324
@@ -3560,17 +3560,6 @@
 
35325
     }
 
35326
 }
 
35327
 
 
35328
-/* Return the cost of an operand X that can be trucated for free.
 
35329
-   SPEED says whether we're optimizing for size or speed.  */
 
35330
-
 
35331
-static int
 
35332
-mips_truncated_op_cost (rtx x, bool speed)
 
35333
-{
 
35334
-  if (GET_CODE (x) == TRUNCATE)
 
35335
-    x = XEXP (x, 0);
 
35336
-  return set_src_cost (x, speed);
 
35337
-}
 
35338
-
 
35339
 /* Implement TARGET_RTX_COSTS.  */
 
35340
 
 
35341
 static bool
 
35342
@@ -3951,13 +3940,12 @@
 
35343
     case ZERO_EXTEND:
 
35344
       if (outer_code == SET
 
35345
          && ISA_HAS_BADDU
 
35346
+         && (GET_CODE (XEXP (x, 0)) == TRUNCATE
 
35347
+             || GET_CODE (XEXP (x, 0)) == SUBREG)
 
35348
          && GET_MODE (XEXP (x, 0)) == QImode
 
35349
-         && GET_CODE (XEXP (x, 0)) == PLUS)
 
35350
+         && GET_CODE (XEXP (XEXP (x, 0), 0)) == PLUS)
 
35351
        {
 
35352
-         rtx plus = XEXP (x, 0);
 
35353
-         *total = (COSTS_N_INSNS (1)
 
35354
-                   + mips_truncated_op_cost (XEXP (plus, 0), speed)
 
35355
-                   + mips_truncated_op_cost (XEXP (plus, 1), speed));
 
35356
+         *total = set_src_cost (XEXP (XEXP (x, 0), 0), speed);
 
35357
          return true;
 
35358
        }
 
35359
       *total = mips_zero_extend_cost (mode, XEXP (x, 0));
 
35360
@@ -8057,7 +8045,7 @@
 
35361
     case 't':
 
35362
       {
 
35363
        int truth = (code == NE) == (letter == 'T');
 
35364
-       fputc ("zfnt"[truth * 2 + (GET_MODE (op) == CCmode)], file);
 
35365
+       fputc ("zfnt"[truth * 2 + ST_REG_P (REGNO (XEXP (op, 0)))], file);
 
35366
       }
 
35367
       break;
 
35368
 
 
35369
Index: gcc/config/mips/mips.h
 
35370
===================================================================
 
35371
--- a/src/gcc/config/mips/mips.h        (.../tags/gcc_4_8_2_release)
 
35372
+++ b/src/gcc/config/mips/mips.h        (.../branches/gcc-4_8-branch)
 
35373
@@ -949,6 +949,11 @@
 
35374
                                  || TARGET_SMARTMIPS)                  \
 
35375
                                 && !TARGET_MIPS16)
 
35376
 
 
35377
+/* ISA has the WSBH (word swap bytes within halfwords) instruction.
 
35378
+   64-bit targets also provide DSBH and DSHD.  */
 
35379
+#define ISA_HAS_WSBH           ((ISA_MIPS32R2 || ISA_MIPS64R2)         \
 
35380
+                                && !TARGET_MIPS16)
 
35381
+
 
35382
 /* ISA has data prefetch instructions.  This controls use of 'pref'.  */
 
35383
 #define ISA_HAS_PREFETCH       ((ISA_MIPS4                             \
 
35384
                                  || TARGET_LOONGSON_2EF                \
 
35385
Index: gcc/params.def
 
35386
===================================================================
 
35387
--- a/src/gcc/params.def        (.../tags/gcc_4_8_2_release)
 
35388
+++ b/src/gcc/params.def        (.../branches/gcc-4_8-branch)
 
35389
@@ -1014,6 +1014,12 @@
 
35390
          "strength reduction",
 
35391
          50, 1, 999999)
 
35392
 
 
35393
+DEFPARAM (PARAM_UNINIT_CONTROL_DEP_ATTEMPTS,
 
35394
+         "uninit-control-dep-attempts",
 
35395
+         "Maximum number of nested calls to search for control dependencies "
 
35396
+         "during uninitialized variable analysis",
 
35397
+         1000, 1, 0)
 
35398
+
 
35399
 /*
 
35400
 Local variables:
 
35401
 mode:c
 
35402
Index: gcc/regcprop.c
 
35403
===================================================================
 
35404
--- a/src/gcc/regcprop.c        (.../tags/gcc_4_8_2_release)
 
35405
+++ b/src/gcc/regcprop.c        (.../branches/gcc-4_8-branch)
 
35406
@@ -747,6 +747,7 @@
 
35407
       int n_ops, i, alt, predicated;
 
35408
       bool is_asm, any_replacements;
 
35409
       rtx set;
 
35410
+      rtx link;
 
35411
       bool replaced[MAX_RECOG_OPERANDS];
 
35412
       bool changed = false;
 
35413
       struct kill_set_value_data ksvd;
 
35414
@@ -815,6 +816,23 @@
 
35415
        if (recog_op_alt[i][alt].earlyclobber)
 
35416
          kill_value (recog_data.operand[i], vd);
 
35417
 
 
35418
+      /* If we have dead sets in the insn, then we need to note these as we
 
35419
+        would clobbers.  */
 
35420
+      for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
 
35421
+       {
 
35422
+         if (REG_NOTE_KIND (link) == REG_UNUSED)
 
35423
+           {
 
35424
+             kill_value (XEXP (link, 0), vd);
 
35425
+             /* Furthermore, if the insn looked like a single-set,
 
35426
+                but the dead store kills the source value of that
 
35427
+                set, then we can no-longer use the plain move
 
35428
+                special case below.  */
 
35429
+             if (set
 
35430
+                 && reg_overlap_mentioned_p (XEXP (link, 0), SET_SRC (set)))
 
35431
+               set = NULL;
 
35432
+           }
 
35433
+       }
 
35434
+
 
35435
       /* Special-case plain move instructions, since we may well
 
35436
         be able to do the move from a different register class.  */
 
35437
       if (set && REG_P (SET_SRC (set)))
 
35438
Index: libgo/configure
 
35439
===================================================================
 
35440
--- a/src/libgo/configure       (.../tags/gcc_4_8_2_release)
 
35441
+++ b/src/libgo/configure       (.../branches/gcc-4_8-branch)
 
35442
@@ -14700,7 +14700,7 @@
 
35443
 fi
 
35444
 
 
35445
 
 
35446
-for ac_func in accept4 epoll_create1 faccessat fallocate fchmodat fchownat futimesat inotify_add_watch inotify_init inotify_init1 inotify_rm_watch mkdirat mknodat openat pipe2 renameat sync_file_range splice tee unlinkat unshare utimensat
 
35447
+for ac_func in accept4 dup3 epoll_create1 faccessat fallocate fchmodat fchownat futimesat getxattr inotify_add_watch inotify_init inotify_init1 inotify_rm_watch listxattr mkdirat mknodat openat pipe2 removexattr renameat setxattr sync_file_range splice tee unlinkat unshare utimensat
 
35448
 do :
 
35449
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 
35450
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
 
35451
Index: libgo/Makefile.in
 
35452
===================================================================
 
35453
--- a/src/libgo/Makefile.in     (.../tags/gcc_4_8_2_release)
 
35454
+++ b/src/libgo/Makefile.in     (.../branches/gcc-4_8-branch)
 
35455
@@ -195,7 +195,7 @@
 
35456
 @LIBGO_IS_LINUX_TRUE@am__objects_5 = getncpu-linux.lo
 
35457
 am__objects_6 = go-append.lo go-assert.lo go-assert-interface.lo \
 
35458
        go-byte-array-to-string.lo go-breakpoint.lo go-caller.lo \
 
35459
-       go-callers.lo go-can-convert-interface.lo go-cgo.lo \
 
35460
+       go-callers.lo go-can-convert-interface.lo go-cdiv.lo go-cgo.lo \
 
35461
        go-check-interface.lo go-construct-map.lo \
 
35462
        go-convert-interface.lo go-copy.lo go-defer.lo \
 
35463
        go-deferred-recover.lo go-eface-compare.lo \
 
35464
@@ -757,6 +757,7 @@
 
35465
        runtime/go-caller.c \
 
35466
        runtime/go-callers.c \
 
35467
        runtime/go-can-convert-interface.c \
 
35468
+       runtime/go-cdiv.c \
 
35469
        runtime/go-cgo.c \
 
35470
        runtime/go-check-interface.c \
 
35471
        runtime/go-construct-map.c \
 
35472
@@ -1446,7 +1447,7 @@
 
35473
        go/go/build/build.go \
 
35474
        go/go/build/doc.go \
 
35475
        go/go/build/read.go \
 
35476
-       syslist.go
 
35477
+       go/go/build/syslist.go
 
35478
 
 
35479
 go_go_doc_files = \
 
35480
        go/go/doc/comment.go \
 
35481
@@ -2368,6 +2369,7 @@
 
35482
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-caller.Plo@am__quote@
 
35483
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-callers.Plo@am__quote@
 
35484
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-can-convert-interface.Plo@am__quote@
 
35485
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-cdiv.Plo@am__quote@
 
35486
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-cgo.Plo@am__quote@
 
35487
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-check-interface.Plo@am__quote@
 
35488
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/go-construct-map.Plo@am__quote@
 
35489
@@ -2554,6 +2556,13 @@
 
35490
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 
35491
 @am__fastdepCC_FALSE@  $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o go-can-convert-interface.lo `test -f 'runtime/go-can-convert-interface.c' || echo '$(srcdir)/'`runtime/go-can-convert-interface.c
 
35492
 
 
35493
+go-cdiv.lo: runtime/go-cdiv.c
 
35494
+@am__fastdepCC_TRUE@   $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT go-cdiv.lo -MD -MP -MF $(DEPDIR)/go-cdiv.Tpo -c -o go-cdiv.lo `test -f 'runtime/go-cdiv.c' || echo '$(srcdir)/'`runtime/go-cdiv.c
 
35495
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/go-cdiv.Tpo $(DEPDIR)/go-cdiv.Plo
 
35496
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='runtime/go-cdiv.c' object='go-cdiv.lo' libtool=yes @AMDEPBACKSLASH@
 
35497
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 
35498
+@am__fastdepCC_FALSE@  $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o go-cdiv.lo `test -f 'runtime/go-cdiv.c' || echo '$(srcdir)/'`runtime/go-cdiv.c
 
35499
+
 
35500
 go-cgo.lo: runtime/go-cgo.c
 
35501
 @am__fastdepCC_TRUE@   $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT go-cgo.lo -MD -MP -MF $(DEPDIR)/go-cgo.Tpo -c -o go-cgo.lo `test -f 'runtime/go-cgo.c' || echo '$(srcdir)/'`runtime/go-cgo.c
 
35502
 @am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/go-cgo.Tpo $(DEPDIR)/go-cgo.Plo
 
35503
@@ -5062,15 +5071,6 @@
 
35504
        @$(CHECK)
 
35505
 .PHONY: go/build/check
 
35506
 
 
35507
-syslist.go: s-syslist; @true
 
35508
-s-syslist: Makefile
 
35509
-       echo '// Generated automatically by make.' >syslist.go.tmp
 
35510
-       echo 'package build' >>syslist.go.tmp
 
35511
-       echo 'const goosList = "$(GOOS)"' >>syslist.go.tmp
 
35512
-       echo 'const goarchList = "$(GOARCH)"' >>syslist.go.tmp
 
35513
-       $(SHELL) $(srcdir)/../move-if-change syslist.go.tmp syslist.go
 
35514
-       $(STAMP) $@
 
35515
-
 
35516
 @go_include@ go/doc.lo.dep
 
35517
 go/doc.lo.dep: $(go_go_doc_files)
 
35518
        $(BUILDDEPS)
 
35519
Index: libgo/runtime/go-defer.c
 
35520
===================================================================
 
35521
--- a/src/libgo/runtime/go-defer.c      (.../tags/gcc_4_8_2_release)
 
35522
+++ b/src/libgo/runtime/go-defer.c      (.../branches/gcc-4_8-branch)
 
35523
@@ -27,6 +27,7 @@
 
35524
   n->__pfn = pfn;
 
35525
   n->__arg = arg;
 
35526
   n->__retaddr = NULL;
 
35527
+  n->__makefunc_can_recover = 0;
 
35528
   g->defer = n;
 
35529
 }
 
35530
 
 
35531
Index: libgo/runtime/go-defer.h
 
35532
===================================================================
 
35533
--- a/src/libgo/runtime/go-defer.h      (.../tags/gcc_4_8_2_release)
 
35534
+++ b/src/libgo/runtime/go-defer.h      (.../branches/gcc-4_8-branch)
 
35535
@@ -34,4 +34,10 @@
 
35536
      set by __go_set_defer_retaddr which is called by the thunks
 
35537
      created by defer statements.  */
 
35538
   const void *__retaddr;
 
35539
+
 
35540
+  /* Set to true if a function created by reflect.MakeFunc is
 
35541
+     permitted to recover.  The return address of such a function
 
35542
+     function will be somewhere in libffi, so __retaddr is not
 
35543
+     useful.  */
 
35544
+  _Bool __makefunc_can_recover;
 
35545
 };
 
35546
Index: libgo/runtime/go-int-array-to-string.c
 
35547
===================================================================
 
35548
--- a/src/libgo/runtime/go-int-array-to-string.c        (.../tags/gcc_4_8_2_release)
 
35549
+++ b/src/libgo/runtime/go-int-array-to-string.c        (.../branches/gcc-4_8-branch)
 
35550
@@ -30,6 +30,8 @@
 
35551
 
 
35552
       if (v < 0 || v > 0x10ffff)
 
35553
        v = 0xfffd;
 
35554
+      else if (0xd800 <= v && v <= 0xdfff)
 
35555
+       v = 0xfffd;
 
35556
 
 
35557
       if (v <= 0x7f)
 
35558
        slen += 1;
 
35559
@@ -56,6 +58,8 @@
 
35560
         character.  */
 
35561
       if (v < 0 || v > 0x10ffff)
 
35562
        v = 0xfffd;
 
35563
+      else if (0xd800 <= v && v <= 0xdfff)
 
35564
+       v = 0xfffd;
 
35565
 
 
35566
       if (v <= 0x7f)
 
35567
        *s++ = v;
 
35568
Index: libgo/runtime/go-nosys.c
 
35569
===================================================================
 
35570
--- a/src/libgo/runtime/go-nosys.c      (.../tags/gcc_4_8_2_release)
 
35571
+++ b/src/libgo/runtime/go-nosys.c      (.../branches/gcc-4_8-branch)
 
35572
@@ -43,6 +43,17 @@
 
35573
 }
 
35574
 #endif
 
35575
 
 
35576
+#ifndef HAVE_DUP3
 
35577
+int
 
35578
+dup3 (int oldfd __attribute__ ((unused)),
 
35579
+      int newfd __attribute__ ((unused)),
 
35580
+      int flags __attribute__ ((unused)))
 
35581
+{
 
35582
+  errno = ENOSYS;
 
35583
+  return -1;
 
35584
+}
 
35585
+#endif
 
35586
+
 
35587
 #ifndef HAVE_EPOLL_CREATE1
 
35588
 int
 
35589
 epoll_create1 (int flags __attribute__ ((unused)))
 
35590
@@ -112,6 +123,18 @@
 
35591
 }
 
35592
 #endif
 
35593
 
 
35594
+#ifndef HAVE_GETXATTR
 
35595
+ssize_t
 
35596
+getxattr (const char *path __attribute__ ((unused)),
 
35597
+         const char *name __attribute__ ((unused)),
 
35598
+         void *value __attribute__ ((unused)),
 
35599
+         size_t size __attribute__ ((unused)))
 
35600
+{
 
35601
+  errno = ENOSYS;
 
35602
+  return -1;
 
35603
+}
 
35604
+#endif
 
35605
+
 
35606
 #ifndef HAVE_INOTIFY_ADD_WATCH
 
35607
 int
 
35608
 inotify_add_watch (int fd __attribute__ ((unused)),
 
35609
@@ -151,6 +174,17 @@
 
35610
 }
 
35611
 #endif
 
35612
 
 
35613
+#ifndef HAVE_LISTXATTR
 
35614
+ssize_t
 
35615
+listxattr (const char *path __attribute__ ((unused)),
 
35616
+          char *list __attribute__ ((unused)),
 
35617
+          size_t size __attribute__ ((unused)))
 
35618
+{
 
35619
+  errno = ENOSYS;
 
35620
+  return -1;
 
35621
+}
 
35622
+#endif
 
35623
+
 
35624
 #ifndef HAVE_MKDIRAT
 
35625
 int
 
35626
 mkdirat (int dirfd __attribute__ ((unused)),
 
35627
@@ -196,6 +230,16 @@
 
35628
 }
 
35629
 #endif
 
35630
 
 
35631
+#ifndef HAVE_REMOVEXATTR
 
35632
+int
 
35633
+removexattr (const char *path __attribute__ ((unused)),
 
35634
+            const char *name __attribute__ ((unused)))
 
35635
+{
 
35636
+  errno = ENOSYS;
 
35637
+  return -1;
 
35638
+}
 
35639
+#endif
 
35640
+
 
35641
 #ifndef HAVE_RENAMEAT
 
35642
 int
 
35643
 renameat (int olddirfd __attribute__ ((unused)),
 
35644
@@ -208,6 +252,19 @@
 
35645
 }
 
35646
 #endif
 
35647
 
 
35648
+#ifndef HAVE_SETXATTR
 
35649
+int
 
35650
+setxattr (const char *path __attribute__ ((unused)),
 
35651
+         const char *name __attribute__ ((unused)),
 
35652
+         const void *value __attribute__ ((unused)),
 
35653
+         size_t size __attribute__ ((unused)),
 
35654
+         int flags __attribute__ ((unused)))
 
35655
+{
 
35656
+  errno = ENOSYS;
 
35657
+  return -1;
 
35658
+}
 
35659
+#endif
 
35660
+
 
35661
 #ifndef HAVE_SPLICE
 
35662
 int
 
35663
 splice (int fd __attribute__ ((unused)),
 
35664
Index: libgo/runtime/runtime.h
 
35665
===================================================================
 
35666
--- a/src/libgo/runtime/runtime.h       (.../tags/gcc_4_8_2_release)
 
35667
+++ b/src/libgo/runtime/runtime.h       (.../branches/gcc-4_8-branch)
 
35668
@@ -440,7 +440,7 @@
 
35669
 };
 
35670
 void   runtime_hashinit(void);
 
35671
 
 
35672
-void   runtime_traceback();
 
35673
+void   runtime_traceback(void);
 
35674
 void   runtime_tracebackothers(G*);
 
35675
 
 
35676
 /*
 
35677
@@ -756,6 +756,7 @@
 
35678
 extern _Bool __go_file_line(uintptr, String*, String*, intgo *);
 
35679
 extern byte* runtime_progname();
 
35680
 extern void runtime_main(void*);
 
35681
+extern uint32 runtime_in_callers;
 
35682
 
 
35683
 int32 getproccount(void);
 
35684
 
 
35685
Index: libgo/runtime/proc.c
 
35686
===================================================================
 
35687
--- a/src/libgo/runtime/proc.c  (.../tags/gcc_4_8_2_release)
 
35688
+++ b/src/libgo/runtime/proc.c  (.../branches/gcc-4_8-branch)
 
35689
@@ -1716,10 +1716,30 @@
 
35690
 // entersyscall is going to return immediately after.
 
35691
 
 
35692
 void runtime_entersyscall(void) __attribute__ ((no_split_stack));
 
35693
+static void doentersyscall(void) __attribute__ ((no_split_stack, noinline));
 
35694
 
 
35695
 void
 
35696
 runtime_entersyscall()
 
35697
 {
 
35698
+       // Save the registers in the g structure so that any pointers
 
35699
+       // held in registers will be seen by the garbage collector.
 
35700
+       getcontext(&g->gcregs);
 
35701
+
 
35702
+       // Do the work in a separate function, so that this function
 
35703
+       // doesn't save any registers on its own stack.  If this
 
35704
+       // function does save any registers, we might store the wrong
 
35705
+       // value in the call to getcontext.
 
35706
+       //
 
35707
+       // FIXME: This assumes that we do not need to save any
 
35708
+       // callee-saved registers to access the TLS variable g.  We
 
35709
+       // don't want to put the ucontext_t on the stack because it is
 
35710
+       // large and we can not split the stack here.
 
35711
+       doentersyscall();
 
35712
+}
 
35713
+
 
35714
+static void
 
35715
+doentersyscall()
 
35716
+{
 
35717
        if(m->profilehz > 0)
 
35718
                runtime_setprof(false);
 
35719
 
 
35720
@@ -1736,10 +1756,6 @@
 
35721
        }
 
35722
 #endif
 
35723
 
 
35724
-       // Save the registers in the g structure so that any pointers
 
35725
-       // held in registers will be seen by the garbage collector.
 
35726
-       getcontext(&g->gcregs);
 
35727
-
 
35728
        g->status = Gsyscall;
 
35729
 
 
35730
        if(runtime_atomicload(&runtime_sched.sysmonwait)) {  // TODO: fast atomic
 
35731
@@ -2239,6 +2255,14 @@
 
35732
        if(prof.fn == nil || prof.hz == 0)
 
35733
                return;
 
35734
 
 
35735
+       if(runtime_atomicload(&runtime_in_callers) > 0) {
 
35736
+               // If SIGPROF arrived while already fetching runtime
 
35737
+               // callers we can have trouble on older systems
 
35738
+               // because the unwind library calls dl_iterate_phdr
 
35739
+               // which was not recursive in the past.
 
35740
+               return;
 
35741
+       }
 
35742
+
 
35743
        runtime_lock(&prof);
 
35744
        if(prof.fn == nil) {
 
35745
                runtime_unlock(&prof);
 
35746
Index: libgo/runtime/mgc0.c
 
35747
===================================================================
 
35748
--- a/src/libgo/runtime/mgc0.c  (.../tags/gcc_4_8_2_release)
 
35749
+++ b/src/libgo/runtime/mgc0.c  (.../branches/gcc-4_8-branch)
 
35750
@@ -174,7 +174,7 @@
 
35751
        Obj     *roots;
 
35752
        uint32  nroot;
 
35753
        uint32  rootcap;
 
35754
-} work;
 
35755
+} work __attribute__((aligned(8)));
 
35756
 
 
35757
 enum {
 
35758
        GC_DEFAULT_PTR = GC_NUM_INSTR,
 
35759
@@ -239,8 +239,7 @@
 
35760
        // (Manually inlined copy of MHeap_LookupMaybe.)
 
35761
        k = (uintptr)obj>>PageShift;
 
35762
        x = k;
 
35763
-       if(sizeof(void*) == 8)
 
35764
-               x -= (uintptr)runtime_mheap->arena_start>>PageShift;
 
35765
+       x -= (uintptr)runtime_mheap->arena_start>>PageShift;
 
35766
        s = runtime_mheap->map[x];
 
35767
        if(s == nil || k < s->start || k - s->start >= s->npages || s->state != MSpanInUse)
 
35768
                return false;
 
35769
@@ -418,8 +417,7 @@
 
35770
                        // (Manually inlined copy of MHeap_LookupMaybe.)
 
35771
                        k = (uintptr)obj>>PageShift;
 
35772
                        x = k;
 
35773
-                       if(sizeof(void*) == 8)
 
35774
-                               x -= (uintptr)arena_start>>PageShift;
 
35775
+                       x -= (uintptr)arena_start>>PageShift;
 
35776
                        s = runtime_mheap->map[x];
 
35777
                        if(s == nil || k < s->start || k - s->start >= s->npages || s->state != MSpanInUse)
 
35778
                                continue;
 
35779
@@ -466,8 +464,7 @@
 
35780
                        // Ask span about size class.
 
35781
                        // (Manually inlined copy of MHeap_Lookup.)
 
35782
                        x = (uintptr)obj >> PageShift;
 
35783
-                       if(sizeof(void*) == 8)
 
35784
-                               x -= (uintptr)arena_start>>PageShift;
 
35785
+                       x -= (uintptr)arena_start>>PageShift;
 
35786
                        s = runtime_mheap->map[x];
 
35787
 
 
35788
                        PREFETCH(obj);
 
35789
@@ -585,8 +582,7 @@
 
35790
        if(t == nil)
 
35791
                return;
 
35792
        x = (uintptr)obj >> PageShift;
 
35793
-       if(sizeof(void*) == 8)
 
35794
-               x -= (uintptr)(runtime_mheap->arena_start)>>PageShift;
 
35795
+       x -= (uintptr)(runtime_mheap->arena_start)>>PageShift;
 
35796
        s = runtime_mheap->map[x];
 
35797
        objstart = (byte*)((uintptr)s->start<<PageShift);
 
35798
        if(s->sizeclass != 0) {
 
35799
Index: libgo/runtime/go-signal.c
 
35800
===================================================================
 
35801
--- a/src/libgo/runtime/go-signal.c     (.../tags/gcc_4_8_2_release)
 
35802
+++ b/src/libgo/runtime/go-signal.c     (.../branches/gcc-4_8-branch)
 
35803
@@ -234,7 +234,7 @@
 
35804
          G *g;
 
35805
 
 
35806
          g = runtime_g ();
 
35807
-         runtime_traceback (g);
 
35808
+         runtime_traceback ();
 
35809
          runtime_tracebackothers (g);
 
35810
 
 
35811
          /* The gc library calls runtime_dumpregs here, and provides
 
35812
@@ -399,6 +399,9 @@
 
35813
 {
 
35814
   G *gp;
 
35815
   M *mp;
 
35816
+#ifdef USING_SPLIT_STACK
 
35817
+  void *stack_context[10];
 
35818
+#endif
 
35819
 
 
35820
   /* We are now running on the stack registered via sigaltstack.
 
35821
      (Actually there is a small span of time between runtime_siginit
 
35822
@@ -409,7 +412,7 @@
 
35823
   if (gp != NULL)
 
35824
     {
 
35825
 #ifdef USING_SPLIT_STACK
 
35826
-      __splitstack_getcontext (&gp->stack_context[0]);
 
35827
+      __splitstack_getcontext (&stack_context[0]);
 
35828
 #endif
 
35829
     }
 
35830
 
 
35831
@@ -432,7 +435,7 @@
 
35832
   if (gp != NULL)
 
35833
     {
 
35834
 #ifdef USING_SPLIT_STACK
 
35835
-      __splitstack_setcontext (&gp->stack_context[0]);
 
35836
+      __splitstack_setcontext (&stack_context[0]);
 
35837
 #endif
 
35838
     }
 
35839
 }
 
35840
Index: libgo/runtime/go-callers.c
 
35841
===================================================================
 
35842
--- a/src/libgo/runtime/go-callers.c    (.../tags/gcc_4_8_2_release)
 
35843
+++ b/src/libgo/runtime/go-callers.c    (.../branches/gcc-4_8-branch)
 
35844
@@ -11,6 +11,13 @@
 
35845
 #include "runtime.h"
 
35846
 #include "array.h"
 
35847
 
 
35848
+/* This is set to non-zero when calling backtrace_full.  This is used
 
35849
+   to avoid getting hanging on a recursive lock in dl_iterate_phdr on
 
35850
+   older versions of glibc when a SIGPROF signal arrives while
 
35851
+   collecting a backtrace.  */
 
35852
+
 
35853
+uint32 runtime_in_callers;
 
35854
+
 
35855
 /* Argument passed to callback function.  */
 
35856
 
 
35857
 struct callers_data
 
35858
@@ -111,8 +118,10 @@
 
35859
   data.skip = skip + 1;
 
35860
   data.index = 0;
 
35861
   data.max = m;
 
35862
+  runtime_xadd (&runtime_in_callers, 1);
 
35863
   backtrace_full (__go_get_backtrace_state (), 0, callback, error_callback,
 
35864
                  &data);
 
35865
+  runtime_xadd (&runtime_in_callers, -1);
 
35866
   return data.index;
 
35867
 }
 
35868
 
 
35869
Index: libgo/runtime/go-cdiv.c
 
35870
===================================================================
 
35871
--- a/src/libgo/runtime/go-cdiv.c       (.../tags/gcc_4_8_2_release)
 
35872
+++ b/src/libgo/runtime/go-cdiv.c       (.../branches/gcc-4_8-branch)
 
35873
@@ -0,0 +1,46 @@
 
35874
+/* go-cdiv.c -- complex division routines
 
35875
+
 
35876
+   Copyright 2013 The Go Authors. All rights reserved.
 
35877
+   Use of this source code is governed by a BSD-style
 
35878
+   license that can be found in the LICENSE file.  */
 
35879
+
 
35880
+/* Calls to these functions are generated by the Go frontend for
 
35881
+   division of complex64 or complex128.  We use these because Go's
 
35882
+   complex division expects slightly different results from the GCC
 
35883
+   default.  When dividing NaN+1.0i / 0+0i, Go expects NaN+NaNi but
 
35884
+   GCC generates NaN+Infi.  NaN+Infi seems wrong seems the rules of
 
35885
+   C99 Annex G specify that if either side of a complex number is Inf,
 
35886
+   the the whole number is Inf, but an operation involving NaN ought
 
35887
+   to result in NaN, not Inf.  */
 
35888
+
 
35889
+__complex float
 
35890
+__go_complex64_div (__complex float a, __complex float b)
 
35891
+{
 
35892
+  if (__builtin_expect (b == 0+0i, 0))
 
35893
+    {
 
35894
+      if (!__builtin_isinff (__real__ a)
 
35895
+         && !__builtin_isinff (__imag__ a)
 
35896
+         && (__builtin_isnanf (__real__ a) || __builtin_isnanf (__imag__ a)))
 
35897
+       {
 
35898
+         /* Pass "1" to nanf to match math/bits.go.  */
 
35899
+         return __builtin_nanf("1") + __builtin_nanf("1")*1i;
 
35900
+       }
 
35901
+    }
 
35902
+  return a / b;
 
35903
+}
 
35904
+
 
35905
+__complex double
 
35906
+__go_complex128_div (__complex double a, __complex double b)
 
35907
+{
 
35908
+  if (__builtin_expect (b == 0+0i, 0))
 
35909
+    {
 
35910
+      if (!__builtin_isinf (__real__ a)
 
35911
+         && !__builtin_isinf (__imag__ a)
 
35912
+         && (__builtin_isnan (__real__ a) || __builtin_isnan (__imag__ a)))
 
35913
+       {
 
35914
+         /* Pass "1" to nan to match math/bits.go.  */
 
35915
+         return __builtin_nan("1") + __builtin_nan("1")*1i;
 
35916
+       }
 
35917
+    }
 
35918
+  return a / b;
 
35919
+}
 
35920
Index: libgo/runtime/go-reflect-call.c
 
35921
===================================================================
 
35922
--- a/src/libgo/runtime/go-reflect-call.c       (.../tags/gcc_4_8_2_release)
 
35923
+++ b/src/libgo/runtime/go-reflect-call.c       (.../branches/gcc-4_8-branch)
 
35924
@@ -98,9 +98,12 @@
 
35925
   const struct __go_struct_field *fields;
 
35926
   int i;
 
35927
 
 
35928
+  field_count = descriptor->__fields.__count;
 
35929
+  if (field_count == 0) {
 
35930
+    return &ffi_type_void;
 
35931
+  }
 
35932
   ret = (ffi_type *) __go_alloc (sizeof (ffi_type));
 
35933
   ret->type = FFI_TYPE_STRUCT;
 
35934
-  field_count = descriptor->__fields.__count;
 
35935
   fields = (const struct __go_struct_field *) descriptor->__fields.__values;
 
35936
   ret->elements = (ffi_type **) __go_alloc ((field_count + 1)
 
35937
                                            * sizeof (ffi_type *));
 
35938
Index: libgo/runtime/go-recover.c
 
35939
===================================================================
 
35940
--- a/src/libgo/runtime/go-recover.c    (.../tags/gcc_4_8_2_release)
 
35941
+++ b/src/libgo/runtime/go-recover.c    (.../branches/gcc-4_8-branch)
 
35942
@@ -16,12 +16,14 @@
 
35943
    __go_can_recover--this is, the thunk.  */
 
35944
 
 
35945
 _Bool
 
35946
-__go_can_recover (const void* retaddr)
 
35947
+__go_can_recover (const void *retaddr)
 
35948
 {
 
35949
   G *g;
 
35950
   struct __go_defer_stack *d;
 
35951
   const char* ret;
 
35952
   const char* dret;
 
35953
+  Location loc;
 
35954
+  const byte *name;
 
35955
 
 
35956
   g = runtime_g ();
 
35957
 
 
35958
@@ -52,9 +54,80 @@
 
35959
 #endif
 
35960
 
 
35961
   dret = (const char *) d->__retaddr;
 
35962
-  return ret <= dret && ret + 16 >= dret;
 
35963
+  if (ret <= dret && ret + 16 >= dret)
 
35964
+    return 1;
 
35965
+
 
35966
+  /* If the function calling recover was created by reflect.MakeFunc,
 
35967
+     then RETADDR will be somewhere in libffi.  Our caller is
 
35968
+     permitted to recover if it was called from libffi.  */
 
35969
+  if (!d->__makefunc_can_recover)
 
35970
+    return 0;
 
35971
+
 
35972
+  if (runtime_callers (2, &loc, 1) < 1)
 
35973
+    return 0;
 
35974
+
 
35975
+  /* If we have no function name, then we weren't called by Go code.
 
35976
+     Guess that we were called by libffi.  */
 
35977
+  if (loc.function.len == 0)
 
35978
+    return 1;
 
35979
+
 
35980
+  if (loc.function.len < 4)
 
35981
+    return 0;
 
35982
+  name = loc.function.str;
 
35983
+  if (*name == '_')
 
35984
+    {
 
35985
+      if (loc.function.len < 5)
 
35986
+       return 0;
 
35987
+      ++name;
 
35988
+    }
 
35989
+
 
35990
+  if (name[0] == 'f' && name[1] == 'f' && name[2] == 'i' && name[3] == '_')
 
35991
+    return 1;
 
35992
+
 
35993
+  /* We may also be called by reflect.makeFuncImpl.call, for a
 
35994
+     function created by reflect.MakeFunc.  */
 
35995
+  if (__builtin_strstr ((const char *) name, "makeFuncImpl") != NULL)
 
35996
+    return 1;
 
35997
+
 
35998
+  return 0;
 
35999
 }
 
36000
 
 
36001
+/* This function is called when code is about to enter a function
 
36002
+   created by reflect.MakeFunc.  It is called by the function stub
 
36003
+   used by MakeFunc.  If the stub is permitted to call recover, then a
 
36004
+   real MakeFunc function is permitted to call recover.  */
 
36005
+
 
36006
+void
 
36007
+__go_makefunc_can_recover (const void *retaddr)
 
36008
+{
 
36009
+  struct __go_defer_stack *d;
 
36010
+
 
36011
+  d = runtime_g ()->defer;
 
36012
+  if (d != NULL
 
36013
+      && !d->__makefunc_can_recover
 
36014
+      && __go_can_recover (retaddr))
 
36015
+    d->__makefunc_can_recover = 1;
 
36016
+}
 
36017
+
 
36018
+/* This function is called when code is about to exit a function
 
36019
+   created by reflect.MakeFunc.  It is called by the function stub
 
36020
+   used by MakeFunc.  It clears the __makefunc_can_recover field.
 
36021
+   It's OK to always clear this field, because __go_can_recover will
 
36022
+   only be called by a stub created for a function that calls recover.
 
36023
+   That stub will not call a function created by reflect.MakeFunc, so
 
36024
+   by the time we get here any caller higher up on the call stack no
 
36025
+   longer needs the information.  */
 
36026
+
 
36027
+void
 
36028
+__go_makefunc_returning (void)
 
36029
+{
 
36030
+  struct __go_defer_stack *d;
 
36031
+
 
36032
+  d = runtime_g ()->defer;
 
36033
+  if (d != NULL)
 
36034
+    d->__makefunc_can_recover = 0;
 
36035
+}
 
36036
+
 
36037
 /* This is only called when it is valid for the caller to recover the
 
36038
    value on top of the panic stack, if there is one.  */
 
36039
 
 
36040
Index: libgo/runtime/malloc.goc
 
36041
===================================================================
 
36042
--- a/src/libgo/runtime/malloc.goc      (.../tags/gcc_4_8_2_release)
 
36043
+++ b/src/libgo/runtime/malloc.goc      (.../branches/gcc-4_8-branch)
 
36044
@@ -541,8 +541,7 @@
 
36045
 
 
36046
                // (Manually inlined copy of runtime_MHeap_Lookup)
 
36047
                p = (uintptr)v>>PageShift;
 
36048
-               if(sizeof(void*) == 8)
 
36049
-                       p -= (uintptr)runtime_mheap->arena_start >> PageShift;
 
36050
+               p -= (uintptr)runtime_mheap->arena_start >> PageShift;
 
36051
                s = runtime_mheap->map[p];
 
36052
 
 
36053
                if(s->sizeclass == 0) {
 
36054
Index: libgo/runtime/go-make-slice.c
 
36055
===================================================================
 
36056
--- a/src/libgo/runtime/go-make-slice.c (.../tags/gcc_4_8_2_release)
 
36057
+++ b/src/libgo/runtime/go-make-slice.c (.../branches/gcc-4_8-branch)
 
36058
@@ -34,7 +34,10 @@
 
36059
   std = (const struct __go_slice_type *) td;
 
36060
 
 
36061
   ilen = (intgo) len;
 
36062
-  if (ilen < 0 || (uintptr_t) ilen != len)
 
36063
+  if (ilen < 0
 
36064
+      || (uintptr_t) ilen != len
 
36065
+      || (std->__element_type->__size > 0
 
36066
+         && len > MaxMem / std->__element_type->__size))
 
36067
     runtime_panicstring ("makeslice: len out of range");
 
36068
 
 
36069
   icap = (intgo) cap;
 
36070
Index: libgo/runtime/mheap.c
 
36071
===================================================================
 
36072
--- a/src/libgo/runtime/mheap.c (.../tags/gcc_4_8_2_release)
 
36073
+++ b/src/libgo/runtime/mheap.c (.../branches/gcc-4_8-branch)
 
36074
@@ -150,8 +150,7 @@
 
36075
                runtime_MSpan_Init(t, s->start + npage, s->npages - npage);
 
36076
                s->npages = npage;
 
36077
                p = t->start;
 
36078
-               if(sizeof(void*) == 8)
 
36079
-                       p -= ((uintptr)h->arena_start>>PageShift);
 
36080
+               p -= ((uintptr)h->arena_start>>PageShift);
 
36081
                if(p > 0)
 
36082
                        h->map[p-1] = s;
 
36083
                h->map[p] = t;
 
36084
@@ -169,8 +168,7 @@
 
36085
        s->elemsize = (sizeclass==0 ? s->npages<<PageShift : (uintptr)runtime_class_to_size[sizeclass]);
 
36086
        s->types.compression = MTypes_Empty;
 
36087
        p = s->start;
 
36088
-       if(sizeof(void*) == 8)
 
36089
-               p -= ((uintptr)h->arena_start>>PageShift);
 
36090
+       p -= ((uintptr)h->arena_start>>PageShift);
 
36091
        for(n=0; n<npage; n++)
 
36092
                h->map[p+n] = s;
 
36093
        return s;
 
36094
@@ -241,8 +239,7 @@
 
36095
        mstats.mspan_sys = h->spanalloc.sys;
 
36096
        runtime_MSpan_Init(s, (uintptr)v>>PageShift, ask>>PageShift);
 
36097
        p = s->start;
 
36098
-       if(sizeof(void*) == 8)
 
36099
-               p -= ((uintptr)h->arena_start>>PageShift);
 
36100
+       p -= ((uintptr)h->arena_start>>PageShift);
 
36101
        h->map[p] = s;
 
36102
        h->map[p + s->npages - 1] = s;
 
36103
        s->state = MSpanInUse;
 
36104
@@ -259,8 +256,7 @@
 
36105
        uintptr p;
 
36106
        
 
36107
        p = (uintptr)v;
 
36108
-       if(sizeof(void*) == 8)
 
36109
-               p -= (uintptr)h->arena_start;
 
36110
+       p -= (uintptr)h->arena_start;
 
36111
        return h->map[p >> PageShift];
 
36112
 }
 
36113
 
 
36114
@@ -281,8 +277,7 @@
 
36115
                return nil;
 
36116
        p = (uintptr)v>>PageShift;
 
36117
        q = p;
 
36118
-       if(sizeof(void*) == 8)
 
36119
-               q -= (uintptr)h->arena_start >> PageShift;
 
36120
+       q -= (uintptr)h->arena_start >> PageShift;
 
36121
        s = h->map[q];
 
36122
        if(s == nil || p < s->start || p - s->start >= s->npages)
 
36123
                return nil;
 
36124
@@ -332,8 +327,7 @@
 
36125
 
 
36126
        // Coalesce with earlier, later spans.
 
36127
        p = s->start;
 
36128
-       if(sizeof(void*) == 8)
 
36129
-               p -= (uintptr)h->arena_start >> PageShift;
 
36130
+       p -= (uintptr)h->arena_start >> PageShift;
 
36131
        if(p > 0 && (t = h->map[p-1]) != nil && t->state != MSpanInUse) {
 
36132
                tp = (uintptr*)(t->start<<PageShift);
 
36133
                *tp |= *sp;     // propagate "needs zeroing" mark
 
36134
Index: libgo/mksysinfo.sh
 
36135
===================================================================
 
36136
--- a/src/libgo/mksysinfo.sh    (.../tags/gcc_4_8_2_release)
 
36137
+++ b/src/libgo/mksysinfo.sh    (.../branches/gcc-4_8-branch)
 
36138
@@ -1035,6 +1035,10 @@
 
36139
 grep '^const _LOCK_' gen-sysinfo.go |
 
36140
     sed -e 's/^\(const \)_\(LOCK_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
 
36141
 
 
36142
+# The PRIO constants.
 
36143
+grep '^const _PRIO_' gen-sysinfo.go | \
 
36144
+  sed -e 's/^\(const \)_\(PRIO_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
 
36145
+
 
36146
 # The GNU/Linux LINUX_REBOOT flags.
 
36147
 grep '^const _LINUX_REBOOT_' gen-sysinfo.go |
 
36148
     sed -e 's/^\(const \)_\(LINUX_REBOOT_[^= ]*\)\(.*\)$/\1\2 = _\2/' >> ${OUT}
 
36149
Index: libgo/config.h.in
 
36150
===================================================================
 
36151
--- a/src/libgo/config.h.in     (.../tags/gcc_4_8_2_release)
 
36152
+++ b/src/libgo/config.h.in     (.../branches/gcc-4_8-branch)
 
36153
@@ -39,6 +39,9 @@
 
36154
 /* Define to 1 if you have the `dl_iterate_phdr' function. */
 
36155
 #undef HAVE_DL_ITERATE_PHDR
 
36156
 
 
36157
+/* Define to 1 if you have the `dup3' function. */
 
36158
+#undef HAVE_DUP3
 
36159
+
 
36160
 /* Define to 1 if you have the `epoll_create1' function. */
 
36161
 #undef HAVE_EPOLL_CREATE1
 
36162
 
 
36163
@@ -66,6 +69,9 @@
 
36164
 /* Define if _Unwind_GetIPInfo is available. */
 
36165
 #undef HAVE_GETIPINFO
 
36166
 
 
36167
+/* Define to 1 if you have the `getxattr' function. */
 
36168
+#undef HAVE_GETXATTR
 
36169
+
 
36170
 /* Define to 1 if you have the `inotify_add_watch' function. */
 
36171
 #undef HAVE_INOTIFY_ADD_WATCH
 
36172
 
 
36173
@@ -111,6 +117,9 @@
 
36174
 /* Define to 1 if you have the <linux/rtnetlink.h> header file. */
 
36175
 #undef HAVE_LINUX_RTNETLINK_H
 
36176
 
 
36177
+/* Define to 1 if you have the `listxattr' function. */
 
36178
+#undef HAVE_LISTXATTR
 
36179
+
 
36180
 /* Define to 1 if the system has the type `loff_t'. */
 
36181
 #undef HAVE_LOFF_T
 
36182
 
 
36183
@@ -171,6 +180,9 @@
 
36184
 /* Define to 1 if you have the `pipe2' function. */
 
36185
 #undef HAVE_PIPE2
 
36186
 
 
36187
+/* Define to 1 if you have the `removexattr' function. */
 
36188
+#undef HAVE_REMOVEXATTR
 
36189
+
 
36190
 /* Define to 1 if you have the `renameat' function. */
 
36191
 #undef HAVE_RENAMEAT
 
36192
 
 
36193
@@ -180,6 +192,9 @@
 
36194
 /* Define to 1 if you have the `setenv' function. */
 
36195
 #undef HAVE_SETENV
 
36196
 
 
36197
+/* Define to 1 if you have the `setxattr' function. */
 
36198
+#undef HAVE_SETXATTR
 
36199
+
 
36200
 /* Define to 1 if you have the `sinl' function. */
 
36201
 #undef HAVE_SINL
 
36202
 
 
36203
Index: libgo/configure.ac
 
36204
===================================================================
 
36205
--- a/src/libgo/configure.ac    (.../tags/gcc_4_8_2_release)
 
36206
+++ b/src/libgo/configure.ac    (.../branches/gcc-4_8-branch)
 
36207
@@ -503,7 +503,7 @@
 
36208
 AM_CONDITIONAL(HAVE_STRERROR_R, test "$ac_cv_func_strerror_r" = yes)
 
36209
 AM_CONDITIONAL(HAVE_WAIT4, test "$ac_cv_func_wait4" = yes)
 
36210
 
 
36211
-AC_CHECK_FUNCS(accept4 epoll_create1 faccessat fallocate fchmodat fchownat futimesat inotify_add_watch inotify_init inotify_init1 inotify_rm_watch mkdirat mknodat openat pipe2 renameat sync_file_range splice tee unlinkat unshare utimensat)
 
36212
+AC_CHECK_FUNCS(accept4 dup3 epoll_create1 faccessat fallocate fchmodat fchownat futimesat getxattr inotify_add_watch inotify_init inotify_init1 inotify_rm_watch listxattr mkdirat mknodat openat pipe2 removexattr renameat setxattr sync_file_range splice tee unlinkat unshare utimensat)
 
36213
 AC_TYPE_OFF_T
 
36214
 AC_CHECK_TYPES([loff_t])
 
36215
 
 
36216
Index: libgo/go/reflect/value.go
 
36217
===================================================================
 
36218
--- a/src/libgo/go/reflect/value.go     (.../tags/gcc_4_8_2_release)
 
36219
+++ b/src/libgo/go/reflect/value.go     (.../branches/gcc-4_8-branch)
 
36220
@@ -98,6 +98,7 @@
 
36221
        flagIndir
 
36222
        flagAddr
 
36223
        flagMethod
 
36224
+       flagMethodFn         // gccgo: first fn parameter is always pointer
 
36225
        flagKindShift        = iota
 
36226
        flagKindWidth        = 5 // there are 27 kinds
 
36227
        flagKindMask    flag = 1<<flagKindWidth - 1
 
36228
@@ -433,7 +434,7 @@
 
36229
        if v.flag&flagMethod != 0 {
 
36230
                nin++
 
36231
        }
 
36232
-       firstPointer := len(in) > 0 && t.In(0).Kind() != Ptr && v.flag&flagMethod == 0 && isMethod(v.typ)
 
36233
+       firstPointer := len(in) > 0 && t.In(0).Kind() != Ptr && v.flag&flagMethodFn != 0
 
36234
        params := make([]unsafe.Pointer, nin)
 
36235
        off := 0
 
36236
        if v.flag&flagMethod != 0 {
 
36237
@@ -484,33 +485,6 @@
 
36238
        return ret
 
36239
 }
 
36240
 
 
36241
-// gccgo specific test to see if typ is a method.  We can tell by
 
36242
-// looking at the string to see if there is a receiver.  We need this
 
36243
-// because for gccgo all methods take pointer receivers.
 
36244
-func isMethod(t *rtype) bool {
 
36245
-       if Kind(t.kind) != Func {
 
36246
-               return false
 
36247
-       }
 
36248
-       s := *t.string
 
36249
-       parens := 0
 
36250
-       params := 0
 
36251
-       sawRet := false
 
36252
-       for i, c := range s {
 
36253
-               if c == '(' {
 
36254
-                       if parens == 0 {
 
36255
-                               params++
 
36256
-                       }
 
36257
-                       parens++
 
36258
-               } else if c == ')' {
 
36259
-                       parens--
 
36260
-               } else if parens == 0 && c == ' ' && s[i+1] != '(' && !sawRet {
 
36261
-                       params++
 
36262
-                       sawRet = true
 
36263
-               }
 
36264
-       }
 
36265
-       return params > 2
 
36266
-}
 
36267
-
 
36268
 // methodReceiver returns information about the receiver
 
36269
 // described by v. The Value v may or may not have the
 
36270
 // flagMethod bit set, so the kind cached in v.flag should
 
36271
@@ -917,6 +891,16 @@
 
36272
                v = makeMethodValue("Interface", v)
 
36273
        }
 
36274
 
 
36275
+       if v.flag&flagMethodFn != 0 {
 
36276
+               if v.typ.Kind() != Func {
 
36277
+                       panic("reflect: MethodFn of non-Func")
 
36278
+               }
 
36279
+               ft := (*funcType)(unsafe.Pointer(v.typ))
 
36280
+               if ft.in[0].Kind() != Ptr {
 
36281
+                       v = makeValueMethod(v)
 
36282
+               }
 
36283
+       }
 
36284
+
 
36285
        k := v.kind()
 
36286
        if k == Interface {
 
36287
                // Special case: return the element inside the interface.
 
36288
@@ -1230,8 +1214,7 @@
 
36289
                        // created via reflect have the same underlying code pointer,
 
36290
                        // so their Pointers are equal. The function used here must
 
36291
                        // match the one used in makeMethodValue.
 
36292
-                       // This is not properly implemented for gccgo.
 
36293
-                       f := Zero
 
36294
+                       f := makeFuncStub
 
36295
                        return **(**uintptr)(unsafe.Pointer(&f))
 
36296
                }
 
36297
                p := v.val
 
36298
Index: libgo/go/reflect/makefuncgo_386.go
 
36299
===================================================================
 
36300
--- a/src/libgo/go/reflect/makefuncgo_386.go    (.../tags/gcc_4_8_2_release)
 
36301
+++ b/src/libgo/go/reflect/makefuncgo_386.go    (.../branches/gcc-4_8-branch)
 
36302
@@ -14,8 +14,10 @@
 
36303
 // registers that might hold result values.
 
36304
 type i386Regs struct {
 
36305
        esp uint32
 
36306
-       eax uint32 // Value to return in %eax.
 
36307
-       st0 uint64 // Value to return in %st(0).
 
36308
+       eax uint32  // Value to return in %eax.
 
36309
+       st0 float64 // Value to return in %st(0).
 
36310
+       sr  bool    // Set to true if hidden struct pointer.
 
36311
+       sf  bool    // Set to true if returning float
 
36312
 }
 
36313
 
 
36314
 // MakeFuncStubGo implements the 386 calling convention for MakeFunc.
 
36315
@@ -56,10 +58,13 @@
 
36316
        in := make([]Value, 0, len(ftyp.in))
 
36317
        ap := uintptr(regs.esp)
 
36318
 
 
36319
+       regs.sr = false
 
36320
+       regs.sf = false
 
36321
        var retPtr unsafe.Pointer
 
36322
        if retStruct {
 
36323
                retPtr = *(*unsafe.Pointer)(unsafe.Pointer(ap))
 
36324
                ap += ptrSize
 
36325
+               regs.sr = true
 
36326
        }
 
36327
 
 
36328
        for _, rt := range ftyp.in {
 
36329
@@ -77,7 +82,7 @@
 
36330
 
 
36331
        // Call the real function.
 
36332
 
 
36333
-       out := c.fn(in)
 
36334
+       out := c.call(in)
 
36335
 
 
36336
        if len(out) != len(ftyp.out) {
 
36337
                panic("reflect: wrong return count from function created by MakeFunc")
 
36338
@@ -123,13 +128,16 @@
 
36339
 
 
36340
        v := out[0]
 
36341
        w := v.iword()
 
36342
-       if v.Kind() != Ptr && v.Kind() != UnsafePointer {
 
36343
-               w = loadIword(unsafe.Pointer(w), v.typ.size)
 
36344
-       }
 
36345
        switch v.Kind() {
 
36346
-       case Float32, Float64:
 
36347
-               regs.st0 = uint64(uintptr(w))
 
36348
+       case Ptr, UnsafePointer:
 
36349
+               regs.eax = uint32(uintptr(w))
 
36350
+       case Float32:
 
36351
+               regs.st0 = float64(*(*float32)(unsafe.Pointer(w)))
 
36352
+               regs.sf = true
 
36353
+       case Float64:
 
36354
+               regs.st0 = *(*float64)(unsafe.Pointer(w))
 
36355
+               regs.sf = true
 
36356
        default:
 
36357
-               regs.eax = uint32(uintptr(w))
 
36358
+               regs.eax = uint32(uintptr(loadIword(unsafe.Pointer(w), v.typ.size)))
 
36359
        }
 
36360
 }
 
36361
Index: libgo/go/reflect/makefunc_amd64.S
 
36362
===================================================================
 
36363
--- a/src/libgo/go/reflect/makefunc_amd64.S     (.../tags/gcc_4_8_2_release)
 
36364
+++ b/src/libgo/go/reflect/makefunc_amd64.S     (.../branches/gcc-4_8-branch)
 
36365
@@ -61,6 +61,14 @@
 
36366
        movdqa  %xmm6, 0xa0(%rsp)
 
36367
        movdqa  %xmm7, 0xb0(%rsp)
 
36368
 
 
36369
+       /* For MakeFunc functions that call recover.  */
 
36370
+       movq    8(%rbp), %rdi
 
36371
+#ifdef __PIC__
 
36372
+       call    __go_makefunc_can_recover@PLT
 
36373
+#else
 
36374
+       call    __go_makefunc_can_recover
 
36375
+#endif
 
36376
+
 
36377
        # Get function type.
 
36378
 #ifdef __PIC__
 
36379
        call    __go_get_closure@PLT
 
36380
@@ -77,6 +85,13 @@
 
36381
        call    reflect.MakeFuncStubGo
 
36382
 #endif
 
36383
 
 
36384
+       /* MakeFunc functions can no longer call recover.  */
 
36385
+#ifdef __PIC__
 
36386
+       call __go_makefunc_returning@PLT
 
36387
+#else
 
36388
+       call __go_makefunc_returning
 
36389
+#endif
 
36390
+
 
36391
        # The structure will be updated with any return values.  Load
 
36392
        # all possible return registers before returning to the caller.
 
36393
 
 
36394
Index: libgo/go/reflect/type.go
 
36395
===================================================================
 
36396
--- a/src/libgo/go/reflect/type.go      (.../tags/gcc_4_8_2_release)
 
36397
+++ b/src/libgo/go/reflect/type.go      (.../branches/gcc-4_8-branch)
 
36398
@@ -508,7 +508,7 @@
 
36399
        m.Type = toType(mt)
 
36400
        x := new(unsafe.Pointer)
 
36401
        *x = unsafe.Pointer(&p.tfn)
 
36402
-       m.Func = Value{mt, unsafe.Pointer(x), fl | flagIndir}
 
36403
+       m.Func = Value{mt, unsafe.Pointer(x), fl | flagIndir | flagMethodFn}
 
36404
        m.Index = i
 
36405
        return
 
36406
 }
 
36407
Index: libgo/go/reflect/makefunc_386.S
 
36408
===================================================================
 
36409
--- a/src/libgo/go/reflect/makefunc_386.S       (.../tags/gcc_4_8_2_release)
 
36410
+++ b/src/libgo/go/reflect/makefunc_386.S       (.../branches/gcc-4_8-branch)
 
36411
@@ -25,9 +25,13 @@
 
36412
           struct {
 
36413
             esp uint32         // 0x0
 
36414
             eax uint32         // 0x4
 
36415
-            st0 uint64         // 0x8
 
36416
+            st0 float64        // 0x8
 
36417
+            sr  bool           // 0x10
 
36418
+            sf  bool           // 0x11
 
36419
           }
 
36420
-       */
 
36421
+          The sr field is set by the function to a non-zero value if
 
36422
+          the function takes a struct hidden pointer that must be
 
36423
+          popped off the stack.  */
 
36424
 
 
36425
        pushl   %ebp
 
36426
 .LCFI0:
 
36427
@@ -45,7 +49,16 @@
 
36428
        leal    8(%ebp), %eax   /* Set esp field in struct.  */
 
36429
        movl    %eax, -24(%ebp)
 
36430
 
 
36431
+       /* For MakeFunc functions that call recover.  */
 
36432
+       movl    4(%ebp), %eax
 
36433
+       movl    %eax, (%esp)
 
36434
 #ifdef __PIC__
 
36435
+       call    __go_makefunc_can_recover@PLT
 
36436
+#else
 
36437
+       call    __go_makefunc_can_recover
 
36438
+#endif
 
36439
+
 
36440
+#ifdef __PIC__
 
36441
        call    __go_get_closure@PLT
 
36442
 #else
 
36443
        call    __go_get_closure
 
36444
@@ -62,9 +75,20 @@
 
36445
        call    reflect.MakeFuncStubGo
 
36446
 #endif
 
36447
 
 
36448
+       /* MakeFunc functions can no longer call recover.  */
 
36449
+#ifdef __PIC__
 
36450
+       call __go_makefunc_returning@PLT
 
36451
+#else
 
36452
+       call __go_makefunc_returning
 
36453
+#endif
 
36454
+
 
36455
        /* Set return registers.  */
 
36456
 
 
36457
        movl    -20(%ebp), %eax
 
36458
+
 
36459
+       cmpb    $0, -7(%ebp)
 
36460
+       je      2f
 
36461
+
 
36462
        fldl    -16(%ebp)
 
36463
 
 
36464
 #ifdef __SSE2__
 
36465
@@ -73,12 +97,20 @@
 
36466
        movsd   -16(%ebp), %xmm0
 
36467
 #endif
 
36468
 
 
36469
+2:
 
36470
+       movb    -8(%ebp), %dl
 
36471
+
 
36472
        addl    $36, %esp
 
36473
        popl    %ebx
 
36474
 .LCFI3:
 
36475
        popl    %ebp
 
36476
 .LCFI4:
 
36477
+
 
36478
+       testb   %dl,%dl
 
36479
+       jne     1f
 
36480
        ret
 
36481
+1:
 
36482
+       ret     $4
 
36483
 .LFE1:
 
36484
 #ifdef __ELF__
 
36485
        .size   reflect.makeFuncStub, . - reflect.makeFuncStub
 
36486
Index: libgo/go/reflect/all_test.go
 
36487
===================================================================
 
36488
--- a/src/libgo/go/reflect/all_test.go  (.../tags/gcc_4_8_2_release)
 
36489
+++ b/src/libgo/go/reflect/all_test.go  (.../branches/gcc-4_8-branch)
 
36490
@@ -1430,6 +1430,46 @@
 
36491
        }
 
36492
 }
 
36493
 
 
36494
+type emptyStruct struct{}
 
36495
+
 
36496
+type nonEmptyStruct struct {
 
36497
+       member int
 
36498
+}
 
36499
+
 
36500
+func returnEmpty() emptyStruct {
 
36501
+       return emptyStruct{}
 
36502
+}
 
36503
+
 
36504
+func takesEmpty(e emptyStruct) {
 
36505
+}
 
36506
+
 
36507
+func returnNonEmpty(i int) nonEmptyStruct {
 
36508
+       return nonEmptyStruct{member: i}
 
36509
+}
 
36510
+
 
36511
+func takesNonEmpty(n nonEmptyStruct) int {
 
36512
+       return n.member
 
36513
+}
 
36514
+
 
36515
+func TestCallWithStruct(t *testing.T) {
 
36516
+       r := ValueOf(returnEmpty).Call([]Value{})
 
36517
+       if len(r) != 1 || r[0].Type() != TypeOf(emptyStruct{}) {
 
36518
+               t.Errorf("returning empty struct returned %s instead", r)
 
36519
+       }
 
36520
+       r = ValueOf(takesEmpty).Call([]Value{ValueOf(emptyStruct{})})
 
36521
+       if len(r) != 0 {
 
36522
+               t.Errorf("takesEmpty returned values: %s", r)
 
36523
+       }
 
36524
+       r = ValueOf(returnNonEmpty).Call([]Value{ValueOf(42)})
 
36525
+       if len(r) != 1 || r[0].Type() != TypeOf(nonEmptyStruct{}) || r[0].Field(0).Int() != 42 {
 
36526
+               t.Errorf("returnNonEmpty returned %s", r)
 
36527
+       }
 
36528
+       r = ValueOf(takesNonEmpty).Call([]Value{ValueOf(nonEmptyStruct{member: 42})})
 
36529
+       if len(r) != 1 || r[0].Type() != TypeOf(1) || r[0].Int() != 42 {
 
36530
+               t.Errorf("takesNonEmpty returned %s", r)
 
36531
+       }
 
36532
+}
 
36533
+
 
36534
 func TestMakeFunc(t *testing.T) {
 
36535
        switch runtime.GOARCH {
 
36536
        case "amd64", "386":
 
36537
@@ -1587,9 +1627,13 @@
 
36538
        }
 
36539
 }
 
36540
 
 
36541
-/* Not yet implemented for gccgo
 
36542
+func TestMethodValue(t *testing.T) {
 
36543
+       switch runtime.GOARCH {
 
36544
+       case "amd64", "386":
 
36545
+       default:
 
36546
+               t.Skip("reflect method values not implemented for " + runtime.GOARCH)
 
36547
+       }
 
36548
 
 
36549
-func TestMethodValue(t *testing.T) {
 
36550
        p := Point{3, 4}
 
36551
        var i int64
 
36552
 
 
36553
@@ -1658,8 +1702,6 @@
 
36554
        }
 
36555
 }
 
36556
 
 
36557
-*/
 
36558
-
 
36559
 // Reflect version of $GOROOT/test/method5.go
 
36560
 
 
36561
 // Concrete types implementing M method.
 
36562
@@ -1744,7 +1786,12 @@
 
36563
 func (t4 Tm4) M(x int, b byte) (byte, int) { return b, x + 40 }
 
36564
 
 
36565
 func TestMethod5(t *testing.T) {
 
36566
-       /* Not yet used for gccgo
 
36567
+       switch runtime.GOARCH {
 
36568
+       case "amd64", "386":
 
36569
+       default:
 
36570
+               t.Skip("reflect method values not implemented for " + runtime.GOARCH)
 
36571
+       }
 
36572
+
 
36573
        CheckF := func(name string, f func(int, byte) (byte, int), inc int) {
 
36574
                b, x := f(1000, 99)
 
36575
                if b != 99 || x != 1000+inc {
 
36576
@@ -1751,7 +1798,6 @@
 
36577
                        t.Errorf("%s(1000, 99) = %v, %v, want 99, %v", name, b, x, 1000+inc)
 
36578
                }
 
36579
        }
 
36580
-       */
 
36581
 
 
36582
        CheckV := func(name string, i Value, inc int) {
 
36583
                bx := i.Method(0).Call([]Value{ValueOf(1000), ValueOf(byte(99))})
 
36584
@@ -1761,9 +1807,7 @@
 
36585
                        t.Errorf("direct %s.M(1000, 99) = %v, %v, want 99, %v", name, b, x, 1000+inc)
 
36586
                }
 
36587
 
 
36588
-               /* Not yet implemented for gccgo
 
36589
                CheckF(name+".M", i.Method(0).Interface().(func(int, byte) (byte, int)), inc)
 
36590
-               */
 
36591
        }
 
36592
 
 
36593
        var TinterType = TypeOf(new(Tinter)).Elem()
 
36594
Index: libgo/go/reflect/makefunc.go
 
36595
===================================================================
 
36596
--- a/src/libgo/go/reflect/makefunc.go  (.../tags/gcc_4_8_2_release)
 
36597
+++ b/src/libgo/go/reflect/makefunc.go  (.../branches/gcc-4_8-branch)
 
36598
@@ -17,6 +17,11 @@
 
36599
        code uintptr
 
36600
        typ  *funcType
 
36601
        fn   func([]Value) []Value
 
36602
+
 
36603
+       // For gccgo we use the same entry point for functions and for
 
36604
+       // method values.
 
36605
+       method int
 
36606
+       rcvr   Value
 
36607
 }
 
36608
 
 
36609
 // MakeFunc returns a new function of the given Type
 
36610
@@ -61,7 +66,7 @@
 
36611
        dummy := makeFuncStub
 
36612
        code := **(**uintptr)(unsafe.Pointer(&dummy))
 
36613
 
 
36614
-       impl := &makeFuncImpl{code: code, typ: ftyp, fn: fn}
 
36615
+       impl := &makeFuncImpl{code: code, typ: ftyp, fn: fn, method: -1}
 
36616
 
 
36617
        return Value{t, unsafe.Pointer(&impl), flag(Func<<flagKindShift) | flagIndir}
 
36618
 }
 
36619
@@ -85,15 +90,94 @@
 
36620
                panic("reflect: internal error: invalid use of makePartialFunc")
 
36621
        }
 
36622
 
 
36623
+       switch runtime.GOARCH {
 
36624
+       case "amd64", "386":
 
36625
+       default:
 
36626
+               panic("reflect.makeMethodValue not implemented for " + runtime.GOARCH)
 
36627
+       }
 
36628
+
 
36629
        // Ignoring the flagMethod bit, v describes the receiver, not the method type.
 
36630
        fl := v.flag & (flagRO | flagAddr | flagIndir)
 
36631
        fl |= flag(v.typ.Kind()) << flagKindShift
 
36632
        rcvr := Value{v.typ, v.val, fl}
 
36633
 
 
36634
+       // v.Type returns the actual type of the method value.
 
36635
+       ft := v.Type().(*rtype)
 
36636
+
 
36637
+       // Indirect Go func value (dummy) to obtain
 
36638
+       // actual code address. (A Go func value is a pointer
 
36639
+       // to a C function pointer. http://golang.org/s/go11func.)
 
36640
+       dummy := makeFuncStub
 
36641
+       code := **(**uintptr)(unsafe.Pointer(&dummy))
 
36642
+
 
36643
        // Cause panic if method is not appropriate.
 
36644
        // The panic would still happen during the call if we omit this,
 
36645
        // but we want Interface() and other operations to fail early.
 
36646
-       methodReceiver(op, rcvr, int(v.flag)>>flagMethodShift)
 
36647
+       t, _, _ := methodReceiver(op, rcvr, int(v.flag)>>flagMethodShift)
 
36648
 
 
36649
-       panic("reflect makeMethodValue not implemented")
 
36650
+       fv := &makeFuncImpl{
 
36651
+               code:   code,
 
36652
+               typ:    (*funcType)(unsafe.Pointer(t)),
 
36653
+               method: int(v.flag) >> flagMethodShift,
 
36654
+               rcvr:   rcvr,
 
36655
+       }
 
36656
+
 
36657
+       return Value{ft, unsafe.Pointer(&fv), v.flag&flagRO | flag(Func)<<flagKindShift | flagIndir}
 
36658
 }
 
36659
+
 
36660
+// makeValueMethod takes a method function and returns a function that
 
36661
+// takes a value receiver and calls the real method with a pointer to
 
36662
+// it.
 
36663
+func makeValueMethod(v Value) Value {
 
36664
+       typ := v.typ
 
36665
+       if typ.Kind() != Func {
 
36666
+               panic("reflect: call of makeValueMethod with non-Func type")
 
36667
+       }
 
36668
+       if v.flag&flagMethodFn == 0 {
 
36669
+               panic("reflect: call of makeValueMethod with non-MethodFn")
 
36670
+       }
 
36671
+
 
36672
+       switch runtime.GOARCH {
 
36673
+       case "amd64", "386":
 
36674
+       default:
 
36675
+               panic("reflect.makeValueMethod not implemented for " + runtime.GOARCH)
 
36676
+       }
 
36677
+
 
36678
+       t := typ.common()
 
36679
+       ftyp := (*funcType)(unsafe.Pointer(t))
 
36680
+
 
36681
+       // Indirect Go func value (dummy) to obtain
 
36682
+       // actual code address. (A Go func value is a pointer
 
36683
+       // to a C function pointer. http://golang.org/s/go11func.)
 
36684
+       dummy := makeFuncStub
 
36685
+       code := **(**uintptr)(unsafe.Pointer(&dummy))
 
36686
+
 
36687
+       impl := &makeFuncImpl{
 
36688
+               code:   code,
 
36689
+               typ:    ftyp,
 
36690
+               method: -2,
 
36691
+               rcvr:   v,
 
36692
+       }
 
36693
+
 
36694
+       return Value{t, unsafe.Pointer(&impl), flag(Func<<flagKindShift) | flagIndir}
 
36695
+}
 
36696
+
 
36697
+// Call the function represented by a makeFuncImpl.
 
36698
+func (c *makeFuncImpl) call(in []Value) []Value {
 
36699
+       if c.method == -1 {
 
36700
+               return c.fn(in)
 
36701
+       } else if c.method == -2 {
 
36702
+               if c.typ.IsVariadic() {
 
36703
+                       return c.rcvr.CallSlice(in)
 
36704
+               } else {
 
36705
+                       return c.rcvr.Call(in)
 
36706
+               }
 
36707
+       } else {
 
36708
+               m := c.rcvr.Method(c.method)
 
36709
+               if c.typ.IsVariadic() {
 
36710
+                       return m.CallSlice(in)
 
36711
+               } else {
 
36712
+                       return m.Call(in)
 
36713
+               }
 
36714
+       }
 
36715
+}
 
36716
Index: libgo/go/reflect/makefuncgo_amd64.go
 
36717
===================================================================
 
36718
--- a/src/libgo/go/reflect/makefuncgo_amd64.go  (.../tags/gcc_4_8_2_release)
 
36719
+++ b/src/libgo/go/reflect/makefuncgo_amd64.go  (.../branches/gcc-4_8-branch)
 
36720
@@ -319,7 +319,7 @@
 
36721
        // All the real arguments have been found and turned into
 
36722
        // Value's.  Call the real function.
 
36723
 
 
36724
-       out := c.fn(in)
 
36725
+       out := c.call(in)
 
36726
 
 
36727
        if len(out) != len(ftyp.out) {
 
36728
                panic("reflect: wrong return count from function created by MakeFunc")
 
36729
Index: libgo/go/net/fd_unix.go
 
36730
===================================================================
 
36731
--- a/src/libgo/go/net/fd_unix.go       (.../tags/gcc_4_8_2_release)
 
36732
+++ b/src/libgo/go/net/fd_unix.go       (.../branches/gcc-4_8-branch)
 
36733
@@ -9,6 +9,7 @@
 
36734
 import (
 
36735
        "io"
 
36736
        "os"
 
36737
+       "runtime"
 
36738
        "sync"
 
36739
        "syscall"
 
36740
        "time"
 
36741
@@ -90,6 +91,16 @@
 
36742
                if err == nil || err == syscall.EISCONN {
 
36743
                        break
 
36744
                }
 
36745
+
 
36746
+               // On Solaris we can see EINVAL if the socket has
 
36747
+               // already been accepted and closed by the server.
 
36748
+               // Treat this as a successful connection--writes to
 
36749
+               // the socket will see EOF.  For details and a test
 
36750
+               // case in C see http://golang.org/issue/6828.
 
36751
+               if runtime.GOOS == "solaris" && err == syscall.EINVAL {
 
36752
+                       break
 
36753
+               }
 
36754
+
 
36755
                if err != syscall.EINPROGRESS && err != syscall.EALREADY && err != syscall.EINTR {
 
36756
                        return err
 
36757
                }
 
36758
Index: libgo/go/go/build/build.go
 
36759
===================================================================
 
36760
--- a/src/libgo/go/go/build/build.go    (.../tags/gcc_4_8_2_release)
 
36761
+++ b/src/libgo/go/go/build/build.go    (.../branches/gcc-4_8-branch)
 
36762
@@ -429,7 +429,7 @@
 
36763
        switch ctxt.Compiler {
 
36764
        case "gccgo":
 
36765
                dir, elem := pathpkg.Split(p.ImportPath)
 
36766
-               pkga = "pkg/gccgo/" + dir + "lib" + elem + ".a"
 
36767
+               pkga = "pkg/gccgo_" + ctxt.GOOS + "_" + ctxt.GOARCH + "/" + dir + "lib" + elem + ".a"
 
36768
        case "gc":
 
36769
                suffix := ""
 
36770
                if ctxt.InstallSuffix != "" {
 
36771
Index: libgo/go/go/build/syslist.go
 
36772
===================================================================
 
36773
--- a/src/libgo/go/go/build/syslist.go  (.../tags/gcc_4_8_2_release)
 
36774
+++ b/src/libgo/go/go/build/syslist.go  (.../branches/gcc-4_8-branch)
 
36775
@@ -0,0 +1,8 @@
 
36776
+// Copyright 2011 The Go Authors.  All rights reserved.
 
36777
+// Use of this source code is governed by a BSD-style
 
36778
+// license that can be found in the LICENSE file.
 
36779
+
 
36780
+package build
 
36781
+
 
36782
+const goosList = "darwin dragonfly freebsd linux netbsd openbsd plan9 windows solaris "
 
36783
+const goarchList = "386 amd64 arm alpha m68k mipso32 mipsn32 mipsn64 mipso64 ppc ppc64 sparc sparc64 "
 
36784
Index: libgo/go/syscall/libcall_linux.go
 
36785
===================================================================
 
36786
--- a/src/libgo/go/syscall/libcall_linux.go     (.../tags/gcc_4_8_2_release)
 
36787
+++ b/src/libgo/go/syscall/libcall_linux.go     (.../branches/gcc-4_8-branch)
 
36788
@@ -190,6 +190,9 @@
 
36789
 //sys  Adjtimex(buf *Timex) (state int, err error)
 
36790
 //adjtimex(buf *Timex) _C_int
 
36791
 
 
36792
+//sysnb        Dup3(oldfd int, newfd int, flags int) (err error)
 
36793
+//dup3(oldfd _C_int, newfd _C_int, flags _C_int) _C_int
 
36794
+
 
36795
 //sys  Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
 
36796
 //faccessat(dirfd _C_int, pathname *byte, mode _C_int, flags _C_int) _C_int
 
36797
 
 
36798
@@ -268,6 +271,9 @@
 
36799
        return origlen - len(buf), count, names
 
36800
 }
 
36801
 
 
36802
+//sys  Getxattr(path string, attr string, dest []byte) (sz int, err error)
 
36803
+//getxattr(path *byte, attr *byte, buf *byte, count Size_t) Ssize_t
 
36804
+
 
36805
 //sys  InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error)
 
36806
 //inotify_add_watch(fd _C_int, pathname *byte, mask uint32) _C_int
 
36807
 
 
36808
@@ -283,6 +289,9 @@
 
36809
 //sys  Klogctl(typ int, buf []byte) (n int, err error)
 
36810
 //klogctl(typ _C_int, bufp *byte, len _C_int) _C_int
 
36811
 
 
36812
+//sys  Listxattr(path string, dest []byte) (sz int, err error)
 
36813
+//listxattr(path *byte, list *byte, size Size_t) Ssize_t
 
36814
+
 
36815
 //sys  Mkdirat(dirfd int, path string, mode uint32) (err error)
 
36816
 //mkdirat(dirfd _C_int, path *byte, mode Mode_t) _C_int
 
36817
 
 
36818
@@ -305,6 +314,9 @@
 
36819
 //sys  PivotRoot(newroot string, putold string) (err error)
 
36820
 //pivot_root(newroot *byte, putold *byte) _C_int
 
36821
 
 
36822
+//sys  Removexattr(path string, attr string) (err error)
 
36823
+//removexattr(path *byte, name *byte) _C_int
 
36824
+
 
36825
 //sys  Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error)
 
36826
 //renameat(olddirfd _C_int, oldpath *byte, newdirfd _C_int, newpath *byte) _C_int
 
36827
 
 
36828
@@ -338,6 +350,9 @@
 
36829
 //sysnb        Setresuid(ruid int, eguid int, suid int) (err error)
 
36830
 //setresuid(ruid Uid_t, euid Uid_t, suid Uid_t) _C_int
 
36831
 
 
36832
+//sys  Setxattr(path string, attr string, data []byte, flags int) (err error)
 
36833
+//setxattr(path *byte, name *byte, value *byte, size Size_t, flags _C_int) _C_int
 
36834
+
 
36835
 //sys  splice(rfd int, roff *_loff_t, wfd int, woff *_loff_t, len int, flags int) (n int64, err error)
 
36836
 //splice(rfd _C_int, roff *_loff_t, wfd _C_int, woff *_loff_t, len Size_t, flags _C_uint) Ssize_t
 
36837
 func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) {
 
36838
Index: libgo/go/syscall/socket.go
 
36839
===================================================================
 
36840
--- a/src/libgo/go/syscall/socket.go    (.../tags/gcc_4_8_2_release)
 
36841
+++ b/src/libgo/go/syscall/socket.go    (.../branches/gcc-4_8-branch)
 
36842
@@ -25,7 +25,7 @@
 
36843
        Pad  [96]int8
 
36844
 }
 
36845
 
 
36846
-const SizeofSockaddrAny = 0x1c
 
36847
+const SizeofSockaddrAny = 0x6c
 
36848
 
 
36849
 type SockaddrInet4 struct {
 
36850
        Port int
 
36851
Index: libgo/go/syscall/libcall_posix.go
 
36852
===================================================================
 
36853
--- a/src/libgo/go/syscall/libcall_posix.go     (.../tags/gcc_4_8_2_release)
 
36854
+++ b/src/libgo/go/syscall/libcall_posix.go     (.../branches/gcc-4_8-branch)
 
36855
@@ -238,6 +238,9 @@
 
36856
 //sysnb        Getppid() (ppid int)
 
36857
 //getppid() Pid_t
 
36858
 
 
36859
+//sys Getpriority(which int, who int) (prio int, err error)
 
36860
+//getpriority(which _C_int, who _C_int) _C_int
 
36861
+
 
36862
 //sysnb        Getrlimit(resource int, rlim *Rlimit) (err error)
 
36863
 //getrlimit(resource _C_int, rlim *Rlimit) _C_int
 
36864
 
 
36865
@@ -307,6 +310,9 @@
 
36866
 //sysnb        Setpgid(pid int, pgid int) (err error)
 
36867
 //setpgid(pid Pid_t, pgid Pid_t) _C_int
 
36868
 
 
36869
+//sys Setpriority(which int, who int, prio int) (err error)
 
36870
+//setpriority(which _C_int, who _C_int, prio _C_int) _C_int
 
36871
+
 
36872
 //sysnb        Setreuid(ruid int, euid int) (err error)
 
36873
 //setreuid(ruid Uid_t, euid Uid_t) _C_int
 
36874
 
 
36875
Index: libgo/Makefile.am
 
36876
===================================================================
 
36877
--- a/src/libgo/Makefile.am     (.../tags/gcc_4_8_2_release)
 
36878
+++ b/src/libgo/Makefile.am     (.../branches/gcc-4_8-branch)
 
36879
@@ -424,6 +424,7 @@
 
36880
        runtime/go-caller.c \
 
36881
        runtime/go-callers.c \
 
36882
        runtime/go-can-convert-interface.c \
 
36883
+       runtime/go-cdiv.c \
 
36884
        runtime/go-cgo.c \
 
36885
        runtime/go-check-interface.c \
 
36886
        runtime/go-construct-map.c \
 
36887
@@ -1254,7 +1255,7 @@
 
36888
        go/go/build/build.go \
 
36889
        go/go/build/doc.go \
 
36890
        go/go/build/read.go \
 
36891
-       syslist.go
 
36892
+       go/go/build/syslist.go
 
36893
 go_go_doc_files = \
 
36894
        go/go/doc/comment.go \
 
36895
        go/go/doc/doc.go \
 
36896
@@ -2712,15 +2713,6 @@
 
36897
        @$(CHECK)
 
36898
 .PHONY: go/build/check
 
36899
 
 
36900
-syslist.go: s-syslist; @true
 
36901
-s-syslist: Makefile
 
36902
-       echo '// Generated automatically by make.' >syslist.go.tmp
 
36903
-       echo 'package build' >>syslist.go.tmp
 
36904
-       echo 'const goosList = "$(GOOS)"' >>syslist.go.tmp
 
36905
-       echo 'const goarchList = "$(GOARCH)"' >>syslist.go.tmp
 
36906
-       $(SHELL) $(srcdir)/../move-if-change syslist.go.tmp syslist.go
 
36907
-       $(STAMP) $@
 
36908
-
 
36909
 @go_include@ go/doc.lo.dep
 
36910
 go/doc.lo.dep: $(go_go_doc_files)
 
36911
        $(BUILDDEPS)
 
36912
Index: libgfortran/ChangeLog
 
36913
===================================================================
 
36914
--- a/src/libgfortran/ChangeLog (.../tags/gcc_4_8_2_release)
 
36915
+++ b/src/libgfortran/ChangeLog (.../branches/gcc-4_8-branch)
 
36916
@@ -1,3 +1,56 @@
 
36917
+2014-03-15  Dominique d'Humieres  <dominiq@lps.ens.fr>
 
36918
+
 
36919
+       Backport from mainline
 
36920
+       PR libgfortran/60128
 
36921
+       * io/write_float.def (output_float): Remove unused variable
 
36922
+       nzero_real. Replace a double space with a single one.
 
36923
+       (determine_en_precision): Fix wrong handling of the EN format.
 
36924
+
 
36925
+2014-03-15  Jerry DeLisle  <jvdelisle@gcc.gnu>
 
36926
+
 
36927
+       Backport from mainline
 
36928
+       PR libfortran/58324
 
36929
+       PR libfortran/38199
 
36930
+       * io/list_read.c (finish_list_read): Read one character to check
 
36931
+       for the end of the file.  If it is the end, then issue the file
 
36932
+       end error message.  If not, use eat_line to reach the end
 
36933
+       without giving error.  The next attempt to read will then
 
36934
+       issue the error as described above.
 
36935
+       * io/read.c (read_decimal): Quickly skip spaces to avoid calls
 
36936
+       to next_char.
 
36937
+       * io/unit.c (is_trim_ok): New helper function to check various
 
36938
+       conditions to see if its OK to trim the internal unit string.
 
36939
+       (get_internal_unit): Use LEN_TRIM to shorten selected internal
 
36940
+       unit strings for optimizing READ. Enable this optimization for
 
36941
+       formatted READ.
 
36942
+
 
36943
+2014-02-21  Jerry DeLisle  <jvdelisle@gcc.gnu>
 
36944
+           Dominique d'Humieres  <dominiq@lps.ens.fr>
 
36945
+           Steven G. Kargl  <kargl@gcc.gnu.org>
 
36946
+
 
36947
+       Backport from mainline
 
36948
+       PR libfortran/59700
 
36949
+       PR libfortran/59764
 
36950
+       * io/io.h (struct st_parameter_dt): Assign expanded_read flag to
 
36951
+       unused bit. Define new variable line_buffer_pos.
 
36952
+       * io/list_read.c (free_saved, next_char, l_push_char,
 
36953
+       read_logical, read_real): Replace use of item_count with
 
36954
+       line_buffer_pos for line_buffer look ahead.
 
36955
+       (read_logical, read_integer, parse_real, read_real, check_type):
 
36956
+       Adjust location of free_line to after generating error messages
 
36957
+       to retain the correct item count for the message. 
 
36958
+
 
36959
+2014-02-15  Jerry DeLisle  <jvdelisle@gcc.gnu>
 
36960
+           Dominique d'Humieres  <dominiq@lps.ens.fr>
 
36961
+
 
36962
+       Backport from mainline
 
36963
+       PR libfortran/59771
 
36964
+       PR libfortran/59774
 
36965
+       PR libfortran/59836
 
36966
+       * io/write_float.def (output_float): Fix wrong handling of the
 
36967
+       Fw.0 format.
 
36968
+       (output_float_FMT_G_): Fixes rounding issues with -m32.
 
36969
+
 
36970
 2013-10-16  Release Manager
 
36971
 
 
36972
        * GCC 4.8.2 released.
 
36973
Index: libgfortran/io/list_read.c
 
36974
===================================================================
 
36975
--- a/src/libgfortran/io/list_read.c    (.../tags/gcc_4_8_2_release)
 
36976
+++ b/src/libgfortran/io/list_read.c    (.../branches/gcc-4_8-branch)
 
36977
@@ -118,7 +118,7 @@
 
36978
 static void
 
36979
 free_line (st_parameter_dt *dtp)
 
36980
 {
 
36981
-  dtp->u.p.item_count = 0;
 
36982
+  dtp->u.p.line_buffer_pos = 0;
 
36983
   dtp->u.p.line_buffer_enabled = 0;
 
36984
 
 
36985
   if (dtp->u.p.line_buffer == NULL)
 
36986
@@ -150,15 +150,15 @@
 
36987
     {
 
36988
       dtp->u.p.at_eol = 0;
 
36989
 
 
36990
-      c = dtp->u.p.line_buffer[dtp->u.p.item_count];
 
36991
-      if (c != '\0' && dtp->u.p.item_count < 64)
 
36992
+      c = dtp->u.p.line_buffer[dtp->u.p.line_buffer_pos];
 
36993
+      if (c != '\0' && dtp->u.p.line_buffer_pos < 64)
 
36994
        {
 
36995
-         dtp->u.p.line_buffer[dtp->u.p.item_count] = '\0';
 
36996
-         dtp->u.p.item_count++;
 
36997
+         dtp->u.p.line_buffer[dtp->u.p.line_buffer_pos] = '\0';
 
36998
+         dtp->u.p.line_buffer_pos++;
 
36999
          goto done;
 
37000
        }
 
37001
 
 
37002
-      dtp->u.p.item_count = 0;
 
37003
+      dtp->u.p.line_buffer_pos = 0;
 
37004
       dtp->u.p.line_buffer_enabled = 0;
 
37005
     }    
 
37006
 
 
37007
@@ -640,7 +640,7 @@
 
37008
   if (dtp->u.p.line_buffer == NULL)
 
37009
     dtp->u.p.line_buffer = xcalloc (SCRATCH_SIZE, 1);
 
37010
 
 
37011
-  dtp->u.p.line_buffer[dtp->u.p.item_count++] = c;
 
37012
+  dtp->u.p.line_buffer[dtp->u.p.line_buffer_pos++] = c;
 
37013
 }
 
37014
 
 
37015
 
 
37016
@@ -750,7 +750,7 @@
 
37017
        {
 
37018
          dtp->u.p.nml_read_error = 1;
 
37019
          dtp->u.p.line_buffer_enabled = 1;
 
37020
-         dtp->u.p.item_count = 0;
 
37021
+         dtp->u.p.line_buffer_pos = 0;
 
37022
          return;
 
37023
        }
 
37024
       
 
37025
@@ -758,14 +758,17 @@
 
37026
 
 
37027
  bad_logical:
 
37028
 
 
37029
-  free_line (dtp);
 
37030
-
 
37031
   if (nml_bad_return (dtp, c))
 
37032
-    return;
 
37033
+    {
 
37034
+      free_line (dtp);
 
37035
+      return;
 
37036
+    }
 
37037
 
 
37038
+
 
37039
   free_saved (dtp);
 
37040
   if (c == EOF)
 
37041
     {
 
37042
+      free_line (dtp);
 
37043
       hit_eof (dtp);
 
37044
       return;
 
37045
     }
 
37046
@@ -773,6 +776,7 @@
 
37047
     eat_line (dtp);
 
37048
   snprintf (message, MSGLEN, "Bad logical value while reading item %d",
 
37049
              dtp->u.p.item_count);
 
37050
+  free_line (dtp);
 
37051
   generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
 
37052
   return;
 
37053
 
 
37054
@@ -913,9 +917,9 @@
 
37055
   else if (c != '\n')
 
37056
     eat_line (dtp);
 
37057
 
 
37058
-  free_line (dtp);
 
37059
   snprintf (message, MSGLEN, "Bad integer for item %d in list input",
 
37060
              dtp->u.p.item_count);
 
37061
+  free_line (dtp);
 
37062
   generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
 
37063
 
 
37064
   return;
 
37065
@@ -1298,9 +1302,9 @@
 
37066
   else if (c != '\n')
 
37067
     eat_line (dtp);
 
37068
 
 
37069
-  free_line (dtp);
 
37070
   snprintf (message, MSGLEN, "Bad floating point number for item %d",
 
37071
              dtp->u.p.item_count);
 
37072
+  free_line (dtp);
 
37073
   generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
 
37074
 
 
37075
   return 1;
 
37076
@@ -1406,9 +1410,9 @@
 
37077
   else if (c != '\n')   
 
37078
     eat_line (dtp);
 
37079
 
 
37080
-  free_line (dtp);
 
37081
   snprintf (message, MSGLEN, "Bad complex value in item %d of list input",
 
37082
              dtp->u.p.item_count);
 
37083
+  free_line (dtp);
 
37084
   generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
 
37085
 }
 
37086
 
 
37087
@@ -1770,7 +1774,7 @@
 
37088
     {
 
37089
       dtp->u.p.nml_read_error = 1;
 
37090
       dtp->u.p.line_buffer_enabled = 1;
 
37091
-      dtp->u.p.item_count = 0;
 
37092
+      dtp->u.p.line_buffer_pos = 0;
 
37093
       return;
 
37094
     }
 
37095
 
 
37096
@@ -1789,9 +1793,9 @@
 
37097
   else if (c != '\n')
 
37098
     eat_line (dtp);
 
37099
 
 
37100
-  free_line (dtp);
 
37101
   snprintf (message, MSGLEN, "Bad real number in item %d of list input",
 
37102
              dtp->u.p.item_count);
 
37103
+  free_line (dtp);
 
37104
   generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
 
37105
 }
 
37106
 
 
37107
@@ -1806,11 +1810,10 @@
 
37108
 
 
37109
   if (dtp->u.p.saved_type != BT_UNKNOWN && dtp->u.p.saved_type != type)
 
37110
     {
 
37111
-      free_line (dtp);
 
37112
       snprintf (message, MSGLEN, "Read type %s where %s was expected for item %d",
 
37113
                  type_name (dtp->u.p.saved_type), type_name (type),
 
37114
                  dtp->u.p.item_count);
 
37115
-
 
37116
+      free_line (dtp);
 
37117
       generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
 
37118
       return 1;
 
37119
     }
 
37120
@@ -1820,12 +1823,12 @@
 
37121
 
 
37122
   if (dtp->u.p.saved_length != len)
 
37123
     {
 
37124
-      free_line (dtp);
 
37125
       snprintf (message, MSGLEN,
 
37126
                  "Read kind %d %s where kind %d is required for item %d",
 
37127
                  dtp->u.p.saved_length, type_name (dtp->u.p.saved_type), len,
 
37128
                  dtp->u.p.item_count);
 
37129
       generate_error (&dtp->common, LIBERROR_READ_VALUE, message);
 
37130
+      free_line (dtp);
 
37131
       return 1;
 
37132
     }
 
37133
 
 
37134
@@ -2031,8 +2034,6 @@
 
37135
 void
 
37136
 finish_list_read (st_parameter_dt *dtp)
 
37137
 {
 
37138
-  int err;
 
37139
-
 
37140
   free_saved (dtp);
 
37141
 
 
37142
   fbuf_flush (dtp->u.p.current_unit, dtp->u.p.mode);
 
37143
@@ -2043,12 +2044,22 @@
 
37144
       return;
 
37145
     }
 
37146
 
 
37147
-  err = eat_line (dtp);
 
37148
-  if (err == LIBERROR_END)
 
37149
+  if (!is_internal_unit (dtp))
 
37150
     {
 
37151
-      free_line (dtp);
 
37152
-      hit_eof (dtp);
 
37153
+      int c;
 
37154
+      c = next_char (dtp);
 
37155
+      if (c == EOF)
 
37156
+       {
 
37157
+         free_line (dtp);
 
37158
+         hit_eof (dtp);
 
37159
+         return;
 
37160
+       }
 
37161
+      if (c != '\n')
 
37162
+       eat_line (dtp);
 
37163
     }
 
37164
+
 
37165
+  free_line (dtp);
 
37166
+
 
37167
 }
 
37168
 
 
37169
 /*                     NAMELIST INPUT
 
37170
Index: libgfortran/io/read.c
 
37171
===================================================================
 
37172
--- a/src/libgfortran/io/read.c (.../tags/gcc_4_8_2_release)
 
37173
+++ b/src/libgfortran/io/read.c (.../branches/gcc-4_8-branch)
 
37174
@@ -655,7 +655,13 @@
 
37175
        
 
37176
       if (c == ' ')
 
37177
         {
 
37178
-         if (dtp->u.p.blank_status == BLANK_NULL) continue;
 
37179
+         if (dtp->u.p.blank_status == BLANK_NULL)
 
37180
+           {
 
37181
+             /* Skip spaces.  */
 
37182
+             for ( ; w > 0; p++, w--)
 
37183
+               if (*p != ' ') break; 
 
37184
+             continue;
 
37185
+           }
 
37186
          if (dtp->u.p.blank_status == BLANK_ZERO) c = '0';
 
37187
         }
 
37188
         
 
37189
Index: libgfortran/io/io.h
 
37190
===================================================================
 
37191
--- a/src/libgfortran/io/io.h   (.../tags/gcc_4_8_2_release)
 
37192
+++ b/src/libgfortran/io/io.h   (.../branches/gcc-4_8-branch)
 
37193
@@ -424,7 +424,10 @@
 
37194
          unsigned g0_no_blanks : 1;
 
37195
          /* Used to signal use of free_format_data.  */
 
37196
          unsigned format_not_saved : 1;
 
37197
-         /* 14 unused bits.  */
 
37198
+         /* A flag used to identify when a non-standard expanded namelist read
 
37199
+            has occurred.  */
 
37200
+         unsigned expanded_read : 1;
 
37201
+         /* 13 unused bits.  */
 
37202
 
 
37203
          /* Used for ungetc() style functionality. Possible values
 
37204
             are an unsigned char, EOF, or EOF - 1 used to mark the
 
37205
@@ -441,9 +444,8 @@
 
37206
          char *line_buffer;
 
37207
          struct format_data *fmt;
 
37208
          namelist_info *ionml;
 
37209
-         /* A flag used to identify when a non-standard expanded namelist read
 
37210
-            has occurred.  */
 
37211
-         int expanded_read;
 
37212
+         /* Current position within the look-ahead line buffer.  */
 
37213
+         int line_buffer_pos;
 
37214
          /* Storage area for values except for strings.  Must be
 
37215
             large enough to hold a complex value (two reals) of the
 
37216
             largest kind.  */
 
37217
Index: libgfortran/io/unit.c
 
37218
===================================================================
 
37219
--- a/src/libgfortran/io/unit.c (.../tags/gcc_4_8_2_release)
 
37220
+++ b/src/libgfortran/io/unit.c (.../branches/gcc-4_8-branch)
 
37221
@@ -29,6 +29,7 @@
 
37222
 #include "unix.h"
 
37223
 #include <stdlib.h>
 
37224
 #include <string.h>
 
37225
+#include <stdbool.h>
 
37226
 
 
37227
 
 
37228
 /* IO locking rules:
 
37229
@@ -375,6 +376,38 @@
 
37230
 }
 
37231
 
 
37232
 
 
37233
+/* Helper function to check rank, stride, format string, and namelist.
 
37234
+   This is used for optimization. You can't trim out blanks or shorten
 
37235
+   the string if trailing spaces are significant.  */
 
37236
+static bool
 
37237
+is_trim_ok (st_parameter_dt *dtp)
 
37238
+{
 
37239
+  /* Check rank and stride.  */
 
37240
+  if (dtp->internal_unit_desc
 
37241
+      && (GFC_DESCRIPTOR_RANK (dtp->internal_unit_desc) > 1
 
37242
+         || GFC_DESCRIPTOR_STRIDE(dtp->internal_unit_desc, 0) != 1))
 
37243
+    return false;
 
37244
+  /* Format strings can not have 'BZ' or '/'.  */
 
37245
+  if (dtp->common.flags & IOPARM_DT_HAS_FORMAT)
 
37246
+    {
 
37247
+      char *p = dtp->format;
 
37248
+      off_t i;
 
37249
+      if (dtp->common.flags & IOPARM_DT_HAS_BLANK)
 
37250
+       return false;
 
37251
+      for (i = 0; i < dtp->format_len; i++)
 
37252
+       {
 
37253
+         if (p[i] == '/') return false;
 
37254
+         if (p[i] == 'b' || p[i] == 'B')
 
37255
+           if (p[i+1] == 'z' || p[i+1] == 'Z')
 
37256
+             return false;
 
37257
+       }
 
37258
+    }
 
37259
+  if (dtp->u.p.ionml) /* A namelist.  */
 
37260
+    return false;
 
37261
+  return true;
 
37262
+}
 
37263
+
 
37264
+
 
37265
 gfc_unit *
 
37266
 get_internal_unit (st_parameter_dt *dtp)
 
37267
 {
 
37268
@@ -402,6 +435,22 @@
 
37269
      some other file I/O unit.  */
 
37270
   iunit->unit_number = -1;
 
37271
 
 
37272
+  /* As an optimization, adjust the unit record length to not
 
37273
+     include trailing blanks. This will not work under certain conditions
 
37274
+     where trailing blanks have significance.  */
 
37275
+  if (dtp->u.p.mode == READING && is_trim_ok (dtp))
 
37276
+    {
 
37277
+      int len;
 
37278
+      if (dtp->common.unit == 0)
 
37279
+         len = string_len_trim (dtp->internal_unit_len,
 
37280
+                                                  dtp->internal_unit);
 
37281
+      else
 
37282
+         len = string_len_trim_char4 (dtp->internal_unit_len,
 
37283
+                             (const gfc_char4_t*) dtp->internal_unit);
 
37284
+      dtp->internal_unit_len = len; 
 
37285
+      iunit->recl = dtp->internal_unit_len;
 
37286
+    }
 
37287
+
 
37288
   /* Set up the looping specification from the array descriptor, if any.  */
 
37289
 
 
37290
   if (is_array_io (dtp))
 
37291
@@ -414,27 +463,6 @@
 
37292
 
 
37293
       start_record *= iunit->recl;
 
37294
     }
 
37295
-  else
 
37296
-    {
 
37297
-      /* If we are not processing an array, adjust the unit record length not
 
37298
-        to include trailing blanks for list-formatted reads.  */
 
37299
-      if (dtp->u.p.mode == READING && !(dtp->common.flags & IOPARM_DT_HAS_FORMAT))
 
37300
-       {
 
37301
-         if (dtp->common.unit == 0)
 
37302
-           {
 
37303
-             dtp->internal_unit_len =
 
37304
-               string_len_trim (dtp->internal_unit_len, dtp->internal_unit);
 
37305
-             iunit->recl = dtp->internal_unit_len;
 
37306
-           }
 
37307
-         else
 
37308
-           {
 
37309
-             dtp->internal_unit_len =
 
37310
-               string_len_trim_char4 (dtp->internal_unit_len,
 
37311
-                                      (const gfc_char4_t*) dtp->internal_unit);
 
37312
-             iunit->recl = dtp->internal_unit_len;
 
37313
-           }
 
37314
-       }
 
37315
-    }
 
37316
 
 
37317
   /* Set initial values for unit parameters.  */
 
37318
   if (dtp->common.unit)
 
37319
Index: libgfortran/io/write_float.def
 
37320
===================================================================
 
37321
--- a/src/libgfortran/io/write_float.def        (.../tags/gcc_4_8_2_release)
 
37322
+++ b/src/libgfortran/io/write_float.def        (.../branches/gcc-4_8-branch)
 
37323
@@ -125,8 +125,6 @@
 
37324
   int nzero;
 
37325
   /* Number of digits after the decimal point.  */
 
37326
   int nafter;
 
37327
-  /* Number of zeros after the decimal point, whatever the precision.  */
 
37328
-  int nzero_real;
 
37329
   int leadzero;
 
37330
   int nblanks;
 
37331
   int ndigits, edigits;
 
37332
@@ -138,7 +136,6 @@
 
37333
   p = dtp->u.p.scale_factor;
 
37334
 
 
37335
   rchar = '5';
 
37336
-  nzero_real = -1;
 
37337
 
 
37338
   /* We should always know the field width and precision.  */
 
37339
   if (d < 0)
 
37340
@@ -191,7 +188,7 @@
 
37341
              if (nafter < 0)
 
37342
                nafter = 0;
 
37343
              nafter = d;
 
37344
-             nzero = nzero_real = 0;
 
37345
+             nzero = 0;
 
37346
            }
 
37347
          else /* p < 0  */
 
37348
            {
 
37349
@@ -211,7 +208,6 @@
 
37350
                  nafter = d + nbefore;
 
37351
                  nbefore = 0;
 
37352
                }
 
37353
-             nzero_real = nzero;
 
37354
              if (nzero > d)
 
37355
                nzero = d;
 
37356
            }
 
37357
@@ -218,7 +214,7 @@
 
37358
        }
 
37359
       else
 
37360
        {
 
37361
-         nzero = nzero_real = 0;
 
37362
+         nzero = 0;
 
37363
          nafter = d;
 
37364
        }
 
37365
 
 
37366
@@ -373,7 +369,7 @@
 
37367
   updown:
 
37368
 
 
37369
   rchar = '0';
 
37370
-  if (w > 0 && d == 0 && p == 0)
 
37371
+  if (ft != FMT_F && w > 0 && d == 0 && p == 0)
 
37372
     nbefore = 1;
 
37373
   /* Scan for trailing zeros to see if we really need to round it.  */
 
37374
   for(i = nbefore + nafter; i < ndigits; i++)
 
37375
@@ -386,13 +382,14 @@
 
37376
   do_rnd:
 
37377
  
 
37378
   if (nbefore + nafter == 0)
 
37379
+    /* Handle the case Fw.0 and value < 1.0 */
 
37380
     {
 
37381
       ndigits = 0;
 
37382
-      if (nzero_real == d && digits[0] >= rchar)
 
37383
+      if (digits[0] >= rchar)
 
37384
        {
 
37385
          /* We rounded to zero but shouldn't have */
 
37386
-         nzero--;
 
37387
-         nafter = 1;
 
37388
+         nbefore = 1;
 
37389
+         digits--;
 
37390
          digits[0] = '1';
 
37391
          ndigits = 1;
 
37392
        }
 
37393
@@ -990,7 +987,7 @@
 
37394
   int d = f->u.real.d;\
 
37395
   int w = f->u.real.w;\
 
37396
   fnode newf;\
 
37397
-  GFC_REAL_ ## x rexp_d, r = 0.5;\
 
37398
+  GFC_REAL_ ## x exp_d, r = 0.5, r_sc;\
 
37399
   int low, high, mid;\
 
37400
   int ubound, lbound;\
 
37401
   char *p, pad = ' ';\
 
37402
@@ -997,6 +994,7 @@
 
37403
   int save_scale_factor, nb = 0;\
 
37404
   try result;\
 
37405
   int nprinted, precision;\
 
37406
+  volatile GFC_REAL_ ## x temp;\
 
37407
 \
 
37408
   save_scale_factor = dtp->u.p.scale_factor;\
 
37409
 \
 
37410
@@ -1015,10 +1013,13 @@
 
37411
        break;\
 
37412
     }\
 
37413
 \
 
37414
-  rexp_d = calculate_exp_ ## x (-d);\
 
37415
-  if ((m > 0.0 && ((m < 0.1 - 0.1 * r * rexp_d) || (rexp_d * (m + r) >= 1.0)))\
 
37416
+  exp_d = calculate_exp_ ## x (d);\
 
37417
+  r_sc = (1 - r / exp_d);\
 
37418
+  temp = 0.1 * r_sc;\
 
37419
+  if ((m > 0.0 && ((m < temp) || (r >= (exp_d - m))))\
 
37420
       || ((m == 0.0) && !(compile_options.allow_std\
 
37421
-                         & (GFC_STD_F2003 | GFC_STD_F2008))))\
 
37422
+                         & (GFC_STD_F2003 | GFC_STD_F2008)))\
 
37423
+      ||  d == 0)\
 
37424
     { \
 
37425
       newf.format = FMT_E;\
 
37426
       newf.u.real.w = w;\
 
37427
@@ -1038,10 +1039,9 @@
 
37428
 \
 
37429
   while (low <= high)\
 
37430
     { \
 
37431
-      volatile GFC_REAL_ ## x temp;\
 
37432
       mid = (low + high) / 2;\
 
37433
 \
 
37434
-      temp = (calculate_exp_ ## x (mid - 1) * (1 - r * rexp_d));\
 
37435
+      temp = (calculate_exp_ ## x (mid - 1) * r_sc);\
 
37436
 \
 
37437
       if (m < temp)\
 
37438
         { \
 
37439
@@ -1121,14 +1121,36 @@
 
37440
 /* EN format is tricky since the number of significant digits depends
 
37441
    on the magnitude.  Solve it by first printing a temporary value and
 
37442
    figure out the number of significant digits from the printed
 
37443
-   exponent.  */
 
37444
+   exponent.  Values y, 0.95*10.0**e <= y <10.0**e, are rounded to
 
37445
+   10.0**e even when the final result will not be rounded to 10.0**e.
 
37446
+   For these values the exponent returned by atoi has to be decremented
 
37447
+   by one. The values y in the ranges
 
37448
+       (1000.0-0.5*10.0**(-d))*10.0**(3*n) <= y < 10.0*(3*(n+1))  
 
37449
+        (100.0-0.5*10.0**(-d))*10.0**(3*n) <= y < 10.0*(3*n+2)
 
37450
+         (10.0-0.5*10.0**(-d))*10.0**(3*n) <= y < 10.0*(3*n+1)
 
37451
+   are correctly rounded respectively to 1.0...0*10.0*(3*(n+1)),
 
37452
+   100.0...0*10.0*(3*n), and 10.0...0*10.0*(3*n), where 0...0
 
37453
+   represents d zeroes, by the lines 279 to 297. */
 
37454
 
 
37455
 #define EN_PREC(x,y)\
 
37456
 {\
 
37457
-    GFC_REAL_ ## x tmp;                                \
 
37458
-    tmp = * (GFC_REAL_ ## x *)source;                          \
 
37459
+    volatile GFC_REAL_ ## x tmp, one = 1.0;\
 
37460
+    tmp = * (GFC_REAL_ ## x *)source;\
 
37461
     if (isfinite (tmp))                                                \
 
37462
-      nprinted = DTOA(y,0,tmp);                                        \
 
37463
+      {\
 
37464
+       nprinted = DTOA(y,0,tmp);\
 
37465
+       int e = atoi (&buffer[4]);\
 
37466
+       if (buffer[1] == '1')\
 
37467
+         {\
 
37468
+           tmp = (calculate_exp_ ## x (-e)) * tmp;\
 
37469
+           tmp = one - (tmp < 0 ? -tmp : tmp); \
 
37470
+           if (tmp > 0)\
 
37471
+             e = e - 1;\
 
37472
+         }\
 
37473
+       nbefore = e%3;\
 
37474
+       if (nbefore < 0)\
 
37475
+         nbefore = 3 + nbefore;\
 
37476
+      }\
 
37477
     else\
 
37478
       nprinted = -1;\
 
37479
 }\
 
37480
@@ -1140,6 +1162,7 @@
 
37481
   int nprinted;
 
37482
   char buffer[10];
 
37483
   const size_t size = 10;
 
37484
+  int nbefore; /* digits before decimal point - 1.  */
 
37485
 
 
37486
   switch (len)
 
37487
     {
 
37488
@@ -1172,16 +1195,6 @@
 
37489
   if (nprinted == -1)
 
37490
     return -1;
 
37491
 
 
37492
-  int e = atoi (&buffer[5]);
 
37493
-  int nbefore; /* digits before decimal point - 1.  */
 
37494
-  if (e >= 0)
 
37495
-    nbefore = e % 3;
 
37496
-  else
 
37497
-    {
 
37498
-      nbefore = (-e) % 3;
 
37499
-      if (nbefore != 0)
 
37500
-       nbefore = 3 - nbefore;
 
37501
-    }
 
37502
   int prec = f->u.real.d + nbefore;
 
37503
   if (dtp->u.p.current_unit->round_status != ROUND_UNSPECIFIED
 
37504
       && dtp->u.p.current_unit->round_status != ROUND_PROCDEFINED)
 
37505
Index: libcpp/macro.c
 
37506
===================================================================
 
37507
--- a/src/libcpp/macro.c        (.../tags/gcc_4_8_2_release)
 
37508
+++ b/src/libcpp/macro.c        (.../branches/gcc-4_8-branch)
 
37509
@@ -1108,21 +1108,22 @@
 
37510
 
 
37511
       if (macro->paramc == 0)
 
37512
        {
 
37513
+         unsigned tokens_count = macro_real_token_count (macro);
 
37514
          if (CPP_OPTION (pfile, track_macro_expansion))
 
37515
            {
 
37516
-             unsigned int i, count = macro->count;
 
37517
+             unsigned int i;
 
37518
              const cpp_token *src = macro->exp.tokens;
 
37519
              const struct line_map *map;
 
37520
              source_location *virt_locs = NULL;
 
37521
-             _cpp_buff *macro_tokens =
 
37522
-               tokens_buff_new (pfile, count, &virt_locs);
 
37523
+             _cpp_buff *macro_tokens
 
37524
+               = tokens_buff_new (pfile, tokens_count, &virt_locs);
 
37525
 
 
37526
              /* Create a macro map to record the locations of the
 
37527
                 tokens that are involved in the expansion. LOCATION
 
37528
                 is the location of the macro expansion point.  */
 
37529
-             map  = linemap_enter_macro (pfile->line_table,
 
37530
-                                         node, location, count);
 
37531
-             for (i = 0; i < count; ++i)
 
37532
+             map = linemap_enter_macro (pfile->line_table,
 
37533
+                                        node, location, tokens_count);
 
37534
+             for (i = 0; i < tokens_count; ++i)
 
37535
                {
 
37536
                  tokens_buff_add_token (macro_tokens, virt_locs,
 
37537
                                         src, src->src_loc,
 
37538
@@ -1134,16 +1135,12 @@
 
37539
                                            virt_locs,
 
37540
                                            (const cpp_token **)
 
37541
                                            macro_tokens->base,
 
37542
-                                           count);
 
37543
-             num_macro_tokens_counter += count;
 
37544
+                                           tokens_count);
 
37545
            }
 
37546
          else
 
37547
-           {
 
37548
-             unsigned tokens_count = macro_real_token_count (macro);
 
37549
-             _cpp_push_token_context (pfile, node, macro->exp.tokens,
 
37550
-                                      tokens_count);
 
37551
-             num_macro_tokens_counter += tokens_count;
 
37552
-           }
 
37553
+           _cpp_push_token_context (pfile, node, macro->exp.tokens,
 
37554
+                                    tokens_count);
 
37555
+         num_macro_tokens_counter += tokens_count;
 
37556
        }
 
37557
 
 
37558
       if (pragma_buff)
 
37559
Index: libcpp/line-map.c
 
37560
===================================================================
 
37561
--- a/src/libcpp/line-map.c     (.../tags/gcc_4_8_2_release)
 
37562
+++ b/src/libcpp/line-map.c     (.../branches/gcc-4_8-branch)
 
37563
@@ -1024,6 +1024,11 @@
 
37564
   bool pre_virtual_p, post_virtual_p;
 
37565
   source_location l0 = pre, l1 = post;
 
37566
 
 
37567
+  if (IS_ADHOC_LOC (l0))
 
37568
+    l0 = set->location_adhoc_data_map.data[l0 & MAX_SOURCE_LOCATION].locus;
 
37569
+  if (IS_ADHOC_LOC (l1))
 
37570
+    l1 = set->location_adhoc_data_map.data[l1 & MAX_SOURCE_LOCATION].locus;
 
37571
+
 
37572
   if (l0 == l1)
 
37573
     return 0;
 
37574
 
 
37575
Index: libcpp/files.c
 
37576
===================================================================
 
37577
--- a/src/libcpp/files.c        (.../tags/gcc_4_8_2_release)
 
37578
+++ b/src/libcpp/files.c        (.../branches/gcc-4_8-branch)
 
37579
@@ -983,6 +983,7 @@
 
37580
 {
 
37581
   struct cpp_dir *dir;
 
37582
   _cpp_file *file;
 
37583
+  bool stacked;
 
37584
 
 
37585
   dir = search_path_head (pfile, fname, angle_brackets, type);
 
37586
   if (!dir)
 
37587
@@ -993,19 +994,26 @@
 
37588
   if (type == IT_DEFAULT && file == NULL)
 
37589
     return false;
 
37590
 
 
37591
-  /* Compensate for the increment in linemap_add that occurs in
 
37592
-     _cpp_stack_file.  In the case of a normal #include, we're
 
37593
-     currently at the start of the line *following* the #include.  A
 
37594
-     separate source_location for this location makes no sense (until
 
37595
-     we do the LC_LEAVE), and complicates LAST_SOURCE_LINE_LOCATION.
 
37596
-     This does not apply if we found a PCH file (in which case
 
37597
-     linemap_add is not called) or we were included from the
 
37598
-     command-line.  */
 
37599
+  /* Compensate for the increment in linemap_add that occurs if
 
37600
+      _cpp_stack_file actually stacks the file.  In the case of a
 
37601
+     normal #include, we're currently at the start of the line
 
37602
+     *following* the #include.  A separate source_location for this
 
37603
+     location makes no sense (until we do the LC_LEAVE), and
 
37604
+     complicates LAST_SOURCE_LINE_LOCATION.  This does not apply if we
 
37605
+     found a PCH file (in which case linemap_add is not called) or we
 
37606
+     were included from the command-line.  */
 
37607
   if (file->pchname == NULL && file->err_no == 0
 
37608
       && type != IT_CMDLINE && type != IT_DEFAULT)
 
37609
     pfile->line_table->highest_location--;
 
37610
 
 
37611
-  return _cpp_stack_file (pfile, file, type == IT_IMPORT);
 
37612
+  stacked = _cpp_stack_file (pfile, file, type == IT_IMPORT);
 
37613
+
 
37614
+  if (!stacked)
 
37615
+    /* _cpp_stack_file didn't stack the file, so let's rollback the
 
37616
+       compensation dance we performed above.  */
 
37617
+    pfile->line_table->highest_location++;
 
37618
+
 
37619
+  return stacked;
 
37620
 }
 
37621
 
 
37622
 /* Could not open FILE.  The complication is dependency output.  */
 
37623
Index: libcpp/ChangeLog
 
37624
===================================================================
 
37625
--- a/src/libcpp/ChangeLog      (.../tags/gcc_4_8_2_release)
 
37626
+++ b/src/libcpp/ChangeLog      (.../branches/gcc-4_8-branch)
 
37627
@@ -1,3 +1,29 @@
 
37628
+2014-03-06  Jakub Jelinek  <jakub@redhat.com>
 
37629
+
 
37630
+       Backport from mainline
 
37631
+       2014-02-19  Jakub Jelinek  <jakub@redhat.com>
 
37632
+
 
37633
+       PR preprocessor/58844
 
37634
+       * macro.c (enter_macro_context): Only push
 
37635
+       macro_real_token_count (macro) tokens rather than
 
37636
+       macro->count tokens, regardless of
 
37637
+       CPP_OPTION (pfile, track-macro-expansion).
 
37638
+
 
37639
+       2014-02-07  Jakub Jelinek  <jakub@redhat.com>
 
37640
+
 
37641
+       PR preprocessor/56824
 
37642
+       * line-map.c (linemap_compare_locations): Look through adhoc locations
 
37643
+       for both l0 and l1.
 
37644
+
 
37645
+2014-03-06  Jakub Jelinek  <jakub@redhat.com>
 
37646
+
 
37647
+       PR preprocessor/60400
 
37648
+       Backport from mainline
 
37649
+       2013-06-24  Dehao Chen  <dehao@google.com>
 
37650
+
 
37651
+       * files.c (_cpp_stack_include): Fix the highest_location when header
 
37652
+       file is guarded by #ifndef and is included twice.
 
37653
+
 
37654
 2013-10-16  Release Manager
 
37655
 
 
37656
        * GCC 4.8.2 released.
 
37657
Index: libcpp/po/pt_BR.po
 
37658
===================================================================
 
37659
--- a/src/libcpp/po/pt_BR.po    (.../tags/gcc_4_8_2_release)
 
37660
+++ b/src/libcpp/po/pt_BR.po    (.../branches/gcc-4_8-branch)
 
37661
@@ -0,0 +1,908 @@
 
37662
+# Brazilian Portuguese translation for cpplib
 
37663
+# Copyright (C) 2013 Free Software Foundation, Inc.
 
37664
+# This file is distributed under the same license as the gcc package.
 
37665
+# Rafael Ferreira <rafael.f.f1@gmail.com>, 2013.
 
37666
+#
 
37667
+msgid ""
 
37668
+msgstr ""
 
37669
+"Project-Id-Version: cpplib 4.8.0\n"
 
37670
+"Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
 
37671
+"POT-Creation-Date: 2013-03-15 17:42+0000\n"
 
37672
+"PO-Revision-Date: 2013-12-18 03:12-0300\n"
 
37673
+"Last-Translator: Rafael Ferreira <rafael.f.f1@gmail.com>\n"
 
37674
+"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge.net>\n"
 
37675
+"Language: pt_BR\n"
 
37676
+"MIME-Version: 1.0\n"
 
37677
+"Content-Type: text/plain; charset=UTF-8\n"
 
37678
+"Content-Transfer-Encoding: 8bit\n"
 
37679
+"X-Generator: Poedit 1.5.7\n"
 
37680
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
 
37681
+
 
37682
+#: charset.c:673
 
37683
+#, c-format
 
37684
+msgid "conversion from %s to %s not supported by iconv"
 
37685
+msgstr "sem suporte a conversão de %s para %s por iconv"
 
37686
+
 
37687
+#: charset.c:676
 
37688
+msgid "iconv_open"
 
37689
+msgstr "iconv_open"
 
37690
+
 
37691
+#: charset.c:684
 
37692
+#, c-format
 
37693
+msgid "no iconv implementation, cannot convert from %s to %s"
 
37694
+msgstr "nenhuma implementação iconv, não foi possível converter de %s para %s"
 
37695
+
 
37696
+#: charset.c:780
 
37697
+#, c-format
 
37698
+msgid "character 0x%lx is not in the basic source character set\n"
 
37699
+msgstr "caractere 0x%lx não está no conjunto de caracteres fonte básico\n"
 
37700
+
 
37701
+#: charset.c:797 charset.c:1443
 
37702
+msgid "converting to execution character set"
 
37703
+msgstr "convertendo para conjunto de caracteres da execução"
 
37704
+
 
37705
+#: charset.c:803
 
37706
+#, c-format
 
37707
+msgid "character 0x%lx is not unibyte in execution character set"
 
37708
+msgstr "caractere 0x%lx não é unibyte no conjunto de caracteres de execução"
 
37709
+
 
37710
+#: charset.c:927
 
37711
+#, c-format
 
37712
+msgid "Character %x might not be NFKC"
 
37713
+msgstr "Caractere %x pode não ser NFKC"
 
37714
+
 
37715
+#: charset.c:993
 
37716
+msgid "universal character names are only valid in C++ and C99"
 
37717
+msgstr "nomes de caractere universais são válidos apenas em C++ e C99"
 
37718
+
 
37719
+#: charset.c:996
 
37720
+#, c-format
 
37721
+msgid "the meaning of '\\%c' is different in traditional C"
 
37722
+msgstr "o significado de \"\\%c\" é diferente em C tradicional"
 
37723
+
 
37724
+#: charset.c:1005
 
37725
+msgid "In _cpp_valid_ucn but not a UCN"
 
37726
+msgstr "Em _cpp_valid_ucn, mas não é um UCN"
 
37727
+
 
37728
+#: charset.c:1030
 
37729
+#, c-format
 
37730
+msgid "incomplete universal character name %.*s"
 
37731
+msgstr "nome de caractere universal incompleto %.*s"
 
37732
+
 
37733
+#: charset.c:1045
 
37734
+#, c-format
 
37735
+msgid "%.*s is not a valid universal character"
 
37736
+msgstr "%.*s não é um caractere universal válido"
 
37737
+
 
37738
+#: charset.c:1055 lex.c:1117
 
37739
+msgid "'$' in identifier or number"
 
37740
+msgstr "\"$\" em identificador ou número"
 
37741
+
 
37742
+#: charset.c:1065
 
37743
+#, c-format
 
37744
+msgid "universal character %.*s is not valid in an identifier"
 
37745
+msgstr "caractere universal %.*s não é válido em um identificador"
 
37746
+
 
37747
+#: charset.c:1069
 
37748
+#, c-format
 
37749
+msgid "universal character %.*s is not valid at the start of an identifier"
 
37750
+msgstr "caractere universal %.*s não é válido no começo de um identificador"
 
37751
+
 
37752
+#: charset.c:1101 charset.c:1673
 
37753
+msgid "converting UCN to source character set"
 
37754
+msgstr "convertendo UCN para conjunto de caracteres fonte"
 
37755
+
 
37756
+#: charset.c:1105
 
37757
+msgid "converting UCN to execution character set"
 
37758
+msgstr "convertendo UCN para conjunto de caracteres de execução"
 
37759
+
 
37760
+#: charset.c:1177
 
37761
+msgid "the meaning of '\\x' is different in traditional C"
 
37762
+msgstr "o significado de \"\\x\" é diferente em C tradicional"
 
37763
+
 
37764
+#: charset.c:1194
 
37765
+msgid "\\x used with no following hex digits"
 
37766
+msgstr "\\x usado com nenhum dígito hexa"
 
37767
+
 
37768
+#: charset.c:1201
 
37769
+msgid "hex escape sequence out of range"
 
37770
+msgstr "sequência de escape hexa fora de alcance"
 
37771
+
 
37772
+#: charset.c:1239
 
37773
+msgid "octal escape sequence out of range"
 
37774
+msgstr "sequência de escape octal fora de alcance"
 
37775
+
 
37776
+#: charset.c:1305
 
37777
+msgid "the meaning of '\\a' is different in traditional C"
 
37778
+msgstr "o significado de \"\\a\" é diferente em C tradicional"
 
37779
+
 
37780
+#: charset.c:1312
 
37781
+#, c-format
 
37782
+msgid "non-ISO-standard escape sequence, '\\%c'"
 
37783
+msgstr "sequência de escape não padrão ISO, \"\\%c\""
 
37784
+
 
37785
+#: charset.c:1320
 
37786
+#, c-format
 
37787
+msgid "unknown escape sequence: '\\%c'"
 
37788
+msgstr "sequência de escape desconhecida: \"\\%c\""
 
37789
+
 
37790
+#: charset.c:1328
 
37791
+#, c-format
 
37792
+msgid "unknown escape sequence: '\\%s'"
 
37793
+msgstr "sequência de escape desconhecida: \"\\%s\""
 
37794
+
 
37795
+#: charset.c:1335
 
37796
+msgid "converting escape sequence to execution character set"
 
37797
+msgstr "convertendo sequência de escape para conjunto de caracteres de execução"
 
37798
+
 
37799
+#: charset.c:1508 charset.c:1572
 
37800
+msgid "character constant too long for its type"
 
37801
+msgstr "constante caractere muito longa para seu tipo"
 
37802
+
 
37803
+#: charset.c:1511
 
37804
+msgid "multi-character character constant"
 
37805
+msgstr "constante de caractere multi-caractere"
 
37806
+
 
37807
+#: charset.c:1611
 
37808
+msgid "empty character constant"
 
37809
+msgstr "constante caractere vazia"
 
37810
+
 
37811
+#: charset.c:1720
 
37812
+#, c-format
 
37813
+msgid "failure to convert %s to %s"
 
37814
+msgstr "falha ao converter %s para %s"
 
37815
+
 
37816
+#: directives.c:224 directives.c:250
 
37817
+#, c-format
 
37818
+msgid "extra tokens at end of #%s directive"
 
37819
+msgstr "tokens extras ao final da diretiva %#s"
 
37820
+
 
37821
+#: directives.c:357
 
37822
+#, c-format
 
37823
+msgid "#%s is a GCC extension"
 
37824
+msgstr "#%s é uma extensão GCC"
 
37825
+
 
37826
+#: directives.c:362
 
37827
+#, c-format
 
37828
+msgid "#%s is a deprecated GCC extension"
 
37829
+msgstr "#%s é uma extensão GCC obsoleta"
 
37830
+
 
37831
+#: directives.c:375
 
37832
+msgid "suggest not using #elif in traditional C"
 
37833
+msgstr "sugere-se não usar #elif em C tradicional"
 
37834
+
 
37835
+#: directives.c:378
 
37836
+#, c-format
 
37837
+msgid "traditional C ignores #%s with the # indented"
 
37838
+msgstr "C tradicional ignora #%s com o # com recuo"
 
37839
+
 
37840
+#: directives.c:382
 
37841
+#, c-format
 
37842
+msgid "suggest hiding #%s from traditional C with an indented #"
 
37843
+msgstr "sugere-se ocultar #%s do C tradicional com um # com recuo"
 
37844
+
 
37845
+#: directives.c:408
 
37846
+msgid "embedding a directive within macro arguments is not portable"
 
37847
+msgstr "embutir uma diretiva dentro de argumentos macro não é portátil"
 
37848
+
 
37849
+#: directives.c:428
 
37850
+msgid "style of line directive is a GCC extension"
 
37851
+msgstr "estilo de diretiva de linha é uma extensão GCC"
 
37852
+
 
37853
+#: directives.c:483
 
37854
+#, c-format
 
37855
+msgid "invalid preprocessing directive #%s"
 
37856
+msgstr "diretiva de preprocessamento inválida #%s"
 
37857
+
 
37858
+#: directives.c:551
 
37859
+msgid "\"defined\" cannot be used as a macro name"
 
37860
+msgstr "\"defined\" não pode ser usado como um nome de macro"
 
37861
+
 
37862
+#: directives.c:557
 
37863
+#, c-format
 
37864
+msgid "\"%s\" cannot be used as a macro name as it is an operator in C++"
 
37865
+msgstr "\"%s\" não pode ser usado como um nome de macro, pois é um operador em C++"
 
37866
+
 
37867
+#: directives.c:560
 
37868
+#, c-format
 
37869
+msgid "no macro name given in #%s directive"
 
37870
+msgstr "nenhum nome de macro fornecido na diretiva #%s"
 
37871
+
 
37872
+#: directives.c:563
 
37873
+msgid "macro names must be identifiers"
 
37874
+msgstr "nomes de macro devem ser identificadores"
 
37875
+
 
37876
+#: directives.c:612
 
37877
+#, c-format
 
37878
+msgid "undefining \"%s\""
 
37879
+msgstr "removendo definição de \"%s\""
 
37880
+
 
37881
+#: directives.c:667
 
37882
+msgid "missing terminating > character"
 
37883
+msgstr "faltando caractere terminador >"
 
37884
+
 
37885
+#: directives.c:726
 
37886
+#, c-format
 
37887
+msgid "#%s expects \"FILENAME\" or <FILENAME>"
 
37888
+msgstr "#%s espera \"NOME DE ARQUIVO\" OU <NOME DE ARQUIVO>"
 
37889
+
 
37890
+#: directives.c:772
 
37891
+#, c-format
 
37892
+msgid "empty filename in #%s"
 
37893
+msgstr "nome de arquivo vazio em #%s"
 
37894
+
 
37895
+#: directives.c:782
 
37896
+msgid "#include nested too deeply"
 
37897
+msgstr "#include aninhado profundo demais"
 
37898
+
 
37899
+#: directives.c:823
 
37900
+msgid "#include_next in primary source file"
 
37901
+msgstr "#include_next no arquivo fonte primário"
 
37902
+
 
37903
+#: directives.c:849
 
37904
+#, c-format
 
37905
+msgid "invalid flag \"%s\" in line directive"
 
37906
+msgstr "opção inválida \"%s\" na diretiva line"
 
37907
+
 
37908
+#: directives.c:909
 
37909
+msgid "unexpected end of file after #line"
 
37910
+msgstr "fim de arquivo inesperado após #line"
 
37911
+
 
37912
+#: directives.c:912
 
37913
+#, c-format
 
37914
+msgid "\"%s\" after #line is not a positive integer"
 
37915
+msgstr "\"%s\" após #line não é um inteiro positivo"
 
37916
+
 
37917
+#: directives.c:918 directives.c:920
 
37918
+msgid "line number out of range"
 
37919
+msgstr "número da linha fora de alcance"
 
37920
+
 
37921
+#: directives.c:933 directives.c:1013
 
37922
+#, c-format
 
37923
+msgid "\"%s\" is not a valid filename"
 
37924
+msgstr "\"%s\" não é um nome de arquivo válido"
 
37925
+
 
37926
+#: directives.c:973
 
37927
+#, c-format
 
37928
+msgid "\"%s\" after # is not a positive integer"
 
37929
+msgstr "\"%s\" após # não é um inteiro positivo"
 
37930
+
 
37931
+#: directives.c:1068 directives.c:1070 directives.c:1072 directives.c:1658
 
37932
+#, c-format
 
37933
+msgid "%s"
 
37934
+msgstr "%s"
 
37935
+
 
37936
+#: directives.c:1096
 
37937
+#, c-format
 
37938
+msgid "invalid #%s directive"
 
37939
+msgstr "diretiva inválida #%s"
 
37940
+
 
37941
+#: directives.c:1159
 
37942
+#, c-format
 
37943
+msgid "registering pragmas in namespace \"%s\" with mismatched name expansion"
 
37944
+msgstr "registrando pragmas em espaço de nomes \"%s\" com expansão de nome incompatível"
 
37945
+
 
37946
+#: directives.c:1168
 
37947
+#, c-format
 
37948
+msgid "registering pragma \"%s\" with name expansion and no namespace"
 
37949
+msgstr "registrando pragma \"%s\" com expansão de nome e nenhum espaço de nomes"
 
37950
+
 
37951
+#: directives.c:1186
 
37952
+#, c-format
 
37953
+msgid "registering \"%s\" as both a pragma and a pragma namespace"
 
37954
+msgstr "registrando \"%s\" como tanto um pragma e um espaço de nomes de pragma"
 
37955
+
 
37956
+#: directives.c:1189
 
37957
+#, c-format
 
37958
+msgid "#pragma %s %s is already registered"
 
37959
+msgstr "#pragma %s %s já está registrado"
 
37960
+
 
37961
+#: directives.c:1192
 
37962
+#, c-format
 
37963
+msgid "#pragma %s is already registered"
 
37964
+msgstr "#pragma %s já está registrado"
 
37965
+
 
37966
+#: directives.c:1222
 
37967
+msgid "registering pragma with NULL handler"
 
37968
+msgstr "registrando pragma com manipulador NULO"
 
37969
+
 
37970
+#: directives.c:1439
 
37971
+msgid "#pragma once in main file"
 
37972
+msgstr "#pragma ocorre uma vez no arquivo principal"
 
37973
+
 
37974
+#: directives.c:1462
 
37975
+msgid "invalid #pragma push_macro directive"
 
37976
+msgstr "diretiva inválida #pragma push_macro"
 
37977
+
 
37978
+#: directives.c:1517
 
37979
+msgid "invalid #pragma pop_macro directive"
 
37980
+msgstr "diretiva inválida #pragma pop_macro"
 
37981
+
 
37982
+#: directives.c:1572
 
37983
+msgid "invalid #pragma GCC poison directive"
 
37984
+msgstr "diretiva inválida #pragma GCC poison"
 
37985
+
 
37986
+#: directives.c:1581
 
37987
+#, c-format
 
37988
+msgid "poisoning existing macro \"%s\""
 
37989
+msgstr "envenenando macro existente \"%s\""
 
37990
+
 
37991
+#: directives.c:1600
 
37992
+msgid "#pragma system_header ignored outside include file"
 
37993
+msgstr "#pragma system_header ignorado fora do arquivo include"
 
37994
+
 
37995
+#: directives.c:1625
 
37996
+#, c-format
 
37997
+msgid "cannot find source file %s"
 
37998
+msgstr "não foi possível localizar o arquivo fonte %s"
 
37999
+
 
38000
+#: directives.c:1629
 
38001
+#, c-format
 
38002
+msgid "current file is older than %s"
 
38003
+msgstr "arquivo atual é mais velho do que %s"
 
38004
+
 
38005
+#: directives.c:1653
 
38006
+#, c-format
 
38007
+msgid "invalid \"#pragma GCC %s\" directive"
 
38008
+msgstr "diretiva inválida \"#pragma GCC %s\""
 
38009
+
 
38010
+#: directives.c:1847
 
38011
+msgid "_Pragma takes a parenthesized string literal"
 
38012
+msgstr "_Pragma leva uma literal de string entre parenteses"
 
38013
+
 
38014
+#: directives.c:1968
 
38015
+msgid "#else without #if"
 
38016
+msgstr "#else sem #if"
 
38017
+
 
38018
+#: directives.c:1973
 
38019
+msgid "#else after #else"
 
38020
+msgstr "#else após #else"
 
38021
+
 
38022
+#: directives.c:1975 directives.c:2008
 
38023
+msgid "the conditional began here"
 
38024
+msgstr "a condicional começou aqui"
 
38025
+
 
38026
+#: directives.c:2001
 
38027
+msgid "#elif without #if"
 
38028
+msgstr "#elif sem #if"
 
38029
+
 
38030
+#: directives.c:2006
 
38031
+msgid "#elif after #else"
 
38032
+msgstr "#elif após #else"
 
38033
+
 
38034
+#: directives.c:2044
 
38035
+msgid "#endif without #if"
 
38036
+msgstr "#endif sem #if"
 
38037
+
 
38038
+#: directives.c:2124
 
38039
+msgid "missing '(' after predicate"
 
38040
+msgstr "faltando \"(\" após predicado"
 
38041
+
 
38042
+#: directives.c:2139
 
38043
+msgid "missing ')' to complete answer"
 
38044
+msgstr "faltando \")\" para uma resposta completa"
 
38045
+
 
38046
+#: directives.c:2159
 
38047
+msgid "predicate's answer is empty"
 
38048
+msgstr "resposta do predicado está vazia"
 
38049
+
 
38050
+#: directives.c:2186
 
38051
+msgid "assertion without predicate"
 
38052
+msgstr "asserção sem predicado"
 
38053
+
 
38054
+#: directives.c:2189
 
38055
+msgid "predicate must be an identifier"
 
38056
+msgstr "predicado deve ser um identificador"
 
38057
+
 
38058
+#: directives.c:2275
 
38059
+#, c-format
 
38060
+msgid "\"%s\" re-asserted"
 
38061
+msgstr "\"%s\" re-assertado"
 
38062
+
 
38063
+#: directives.c:2567
 
38064
+#, c-format
 
38065
+msgid "unterminated #%s"
 
38066
+msgstr "#%s não terminado"
 
38067
+
 
38068
+#: directives-only.c:221 lex.c:2234 traditional.c:162
 
38069
+msgid "unterminated comment"
 
38070
+msgstr "comentário não terminado"
 
38071
+
 
38072
+#: errors.c:234
 
38073
+msgid "stdout"
 
38074
+msgstr "saída padrão"
 
38075
+
 
38076
+#: errors.c:236
 
38077
+#, c-format
 
38078
+msgid "%s: %s"
 
38079
+msgstr "%s: %s"
 
38080
+
 
38081
+#: expr.c:479 expr.c:577
 
38082
+msgid "fixed-point constants are a GCC extension"
 
38083
+msgstr "constantes de ponto fixo (fixed-point constants) é uma extensão GCC"
 
38084
+
 
38085
+#: expr.c:504
 
38086
+msgid "invalid prefix \"0b\" for floating constant"
 
38087
+msgstr "prefixo inválido \"0b\" para constante flutuante"
 
38088
+
 
38089
+#: expr.c:514
 
38090
+msgid "use of C99 hexadecimal floating constant"
 
38091
+msgstr "uso de constante flutuante hexadecimal de C99"
 
38092
+
 
38093
+#: expr.c:545
 
38094
+#, c-format
 
38095
+msgid "invalid suffix \"%.*s\" on floating constant"
 
38096
+msgstr "sufixo inválido \"%.*s\" na constante flutuante"
 
38097
+
 
38098
+#: expr.c:556 expr.c:616
 
38099
+#, c-format
 
38100
+msgid "traditional C rejects the \"%.*s\" suffix"
 
38101
+msgstr "C tradicional rejeita o sufixo \"%.*s\""
 
38102
+
 
38103
+#: expr.c:564
 
38104
+msgid "suffix for double constant is a GCC extension"
 
38105
+msgstr "sufixo para constante dupla (suffix for double constant) é uma extensão GCC"
 
38106
+
 
38107
+#: expr.c:570
 
38108
+#, c-format
 
38109
+msgid "invalid suffix \"%.*s\" with hexadecimal floating constant"
 
38110
+msgstr "sufixo inválido \"%.*s\" com constante flutuante hexadecimal"
 
38111
+
 
38112
+#: expr.c:581
 
38113
+msgid "decimal float constants are a GCC extension"
 
38114
+msgstr "constantes flutuante decimais (decimal float constants) é uma extensão GCC"
 
38115
+
 
38116
+#: expr.c:599
 
38117
+#, c-format
 
38118
+msgid "invalid suffix \"%.*s\" on integer constant"
 
38119
+msgstr "sufixo inválido \"%.*s\" em constante inteiro"
 
38120
+
 
38121
+#: expr.c:624
 
38122
+msgid "use of C++0x long long integer constant"
 
38123
+msgstr "uso de constante longo longo inteiro de C++0x"
 
38124
+
 
38125
+#: expr.c:625
 
38126
+msgid "use of C99 long long integer constant"
 
38127
+msgstr "uso de constante longo longo inteiro de C99"
 
38128
+
 
38129
+#: expr.c:641
 
38130
+msgid "imaginary constants are a GCC extension"
 
38131
+msgstr "constantes imaginárias (imaginary constants) é uma extensão GCC"
 
38132
+
 
38133
+#: expr.c:644
 
38134
+msgid "binary constants are a GCC extension"
 
38135
+msgstr "constantes binárias (binary constants) é uma extensão GCC"
 
38136
+
 
38137
+#: expr.c:737
 
38138
+msgid "integer constant is too large for its type"
 
38139
+msgstr "constante inteira é muito grande para seu tipo"
 
38140
+
 
38141
+#: expr.c:768
 
38142
+msgid "integer constant is so large that it is unsigned"
 
38143
+msgstr "constante inteira é tão grande que não está assinada"
 
38144
+
 
38145
+#: expr.c:863
 
38146
+msgid "missing ')' after \"defined\""
 
38147
+msgstr "faltando \")\" após \"defined\""
 
38148
+
 
38149
+#: expr.c:870
 
38150
+msgid "operator \"defined\" requires an identifier"
 
38151
+msgstr "operador \"defined\" requer um identificador"
 
38152
+
 
38153
+#: expr.c:878
 
38154
+#, c-format
 
38155
+msgid "(\"%s\" is an alternative token for \"%s\" in C++)"
 
38156
+msgstr "(\"%s\" é um token alternativo para \"%s\" em C++)"
 
38157
+
 
38158
+#: expr.c:888
 
38159
+msgid "this use of \"defined\" may not be portable"
 
38160
+msgstr "esse uso de \"defined\" pode não ser portátil"
 
38161
+
 
38162
+#: expr.c:948
 
38163
+msgid "user-defined literal in preprocessor expression"
 
38164
+msgstr "literal definida pelo usuário em expressão do preprocessador"
 
38165
+
 
38166
+#: expr.c:953
 
38167
+msgid "floating constant in preprocessor expression"
 
38168
+msgstr "constante flutuante em expressão do preprocessador"
 
38169
+
 
38170
+#: expr.c:959
 
38171
+msgid "imaginary number in preprocessor expression"
 
38172
+msgstr "número imaginário em expressão do preprocessador"
 
38173
+
 
38174
+#: expr.c:1007
 
38175
+#, c-format
 
38176
+msgid "\"%s\" is not defined"
 
38177
+msgstr "\"%s\" não está definido"
 
38178
+
 
38179
+#: expr.c:1020
 
38180
+msgid "assertions are a GCC extension"
 
38181
+msgstr "asserções (assertions) é uma extensão GCC"
 
38182
+
 
38183
+#: expr.c:1023
 
38184
+msgid "assertions are a deprecated extension"
 
38185
+msgstr "asserções (assertions) é uma extensão obsoleta"
 
38186
+
 
38187
+#: expr.c:1268
 
38188
+#, c-format
 
38189
+msgid "unbalanced stack in %s"
 
38190
+msgstr "pilha não balanceada em %s"
 
38191
+
 
38192
+#: expr.c:1288
 
38193
+#, c-format
 
38194
+msgid "impossible operator '%u'"
 
38195
+msgstr "operador impossível \"%u\""
 
38196
+
 
38197
+#: expr.c:1389
 
38198
+msgid "missing ')' in expression"
 
38199
+msgstr "faltando \")\" na expressão"
 
38200
+
 
38201
+#: expr.c:1418
 
38202
+msgid "'?' without following ':'"
 
38203
+msgstr "\"?\" sem estar seguido por \":\""
 
38204
+
 
38205
+#: expr.c:1428
 
38206
+msgid "integer overflow in preprocessor expression"
 
38207
+msgstr "estouro de inteiro em expressão do preprocessador"
 
38208
+
 
38209
+#: expr.c:1433
 
38210
+msgid "missing '(' in expression"
 
38211
+msgstr "faltando \"(\" na expressão"
 
38212
+
 
38213
+#: expr.c:1465
 
38214
+#, c-format
 
38215
+msgid "the left operand of \"%s\" changes sign when promoted"
 
38216
+msgstr "o operador à esquerda de \"%s\" altera o sinal quando promovido"
 
38217
+
 
38218
+#: expr.c:1470
 
38219
+#, c-format
 
38220
+msgid "the right operand of \"%s\" changes sign when promoted"
 
38221
+msgstr "o operador à direita de \"%s\" altera o sinal quando promovido"
 
38222
+
 
38223
+#: expr.c:1729
 
38224
+msgid "traditional C rejects the unary plus operator"
 
38225
+msgstr "C tradicional rejeita o operador unário mais"
 
38226
+
 
38227
+#: expr.c:1812
 
38228
+msgid "comma operator in operand of #if"
 
38229
+msgstr "operador vírgula em operando de #if"
 
38230
+
 
38231
+#: expr.c:1948
 
38232
+msgid "division by zero in #if"
 
38233
+msgstr "divisão por zero em #if"
 
38234
+
 
38235
+#: files.c:505
 
38236
+msgid "NULL directory in find_file"
 
38237
+msgstr "diretório NULO em find_file"
 
38238
+
 
38239
+#: files.c:553
 
38240
+msgid "one or more PCH files were found, but they were invalid"
 
38241
+msgstr "um ou mais arquivos PCH foram encontrados, mas são inválidos"
 
38242
+
 
38243
+#: files.c:556
 
38244
+msgid "use -Winvalid-pch for more information"
 
38245
+msgstr "use -Winvalid-pch para mais informações"
 
38246
+
 
38247
+#: files.c:660
 
38248
+#, c-format
 
38249
+msgid "%s is a block device"
 
38250
+msgstr "%s é um dispositivo de bloco"
 
38251
+
 
38252
+#: files.c:677
 
38253
+#, c-format
 
38254
+msgid "%s is too large"
 
38255
+msgstr "%s é muito grande"
 
38256
+
 
38257
+#: files.c:717
 
38258
+#, c-format
 
38259
+msgid "%s is shorter than expected"
 
38260
+msgstr "%s é muito menor do que esperado"
 
38261
+
 
38262
+#: files.c:953
 
38263
+#, c-format
 
38264
+msgid "no include path in which to search for %s"
 
38265
+msgstr "não foi incluído nenhum caminho no qual se possa procurar por %s"
 
38266
+
 
38267
+#: files.c:1381
 
38268
+msgid "Multiple include guards may be useful for:\n"
 
38269
+msgstr "Múltiplos include guards podem ser úteis para:\n"
 
38270
+
 
38271
+#: init.c:524
 
38272
+msgid "cppchar_t must be an unsigned type"
 
38273
+msgstr "cppchar_t deve ser um tipo não assinado"
 
38274
+
 
38275
+#: init.c:528
 
38276
+#, c-format
 
38277
+msgid "preprocessor arithmetic has maximum precision of %lu bits; target requires %lu bits"
 
38278
+msgstr "aritmética do preprocessador possui uma precisão máxima de %lu bits; o alvo requer %lu bits"
 
38279
+
 
38280
+#: init.c:535
 
38281
+msgid "CPP arithmetic must be at least as precise as a target int"
 
38282
+msgstr "aritmética do CPP deve ser pelo menos tão precisa quanto um int alvo"
 
38283
+
 
38284
+#: init.c:538
 
38285
+msgid "target char is less than 8 bits wide"
 
38286
+msgstr "char alvo é menor do que 8 bits"
 
38287
+
 
38288
+#: init.c:542
 
38289
+msgid "target wchar_t is narrower than target char"
 
38290
+msgstr "wchar_t alvo é mais estreito do que o char alvo"
 
38291
+
 
38292
+#: init.c:546
 
38293
+msgid "target int is narrower than target char"
 
38294
+msgstr "int alvo é mais estreito do que o char alvo"
 
38295
+
 
38296
+#: init.c:551
 
38297
+msgid "CPP half-integer narrower than CPP character"
 
38298
+msgstr "meio-inteiro do CPP é mais estreito do que o caractere do CPP"
 
38299
+
 
38300
+#: init.c:555
 
38301
+#, c-format
 
38302
+msgid "CPP on this host cannot handle wide character constants over %lu bits, but the target requires %lu bits"
 
38303
+msgstr "CPP nesta máquina não consegue manipular constantes de wide character acima de %lu bits, mas o alvo requer %lu bits"
 
38304
+
 
38305
+#: lex.c:910
 
38306
+msgid "backslash and newline separated by space"
 
38307
+msgstr "barra invertida e nova linha separadas por espaço"
 
38308
+
 
38309
+#: lex.c:915
 
38310
+msgid "backslash-newline at end of file"
 
38311
+msgstr "barra invertida e nova linha no final do arquivo"
 
38312
+
 
38313
+#: lex.c:931
 
38314
+#, c-format
 
38315
+msgid "trigraph ??%c converted to %c"
 
38316
+msgstr "trígrafo ??%c convertido para %c"
 
38317
+
 
38318
+#: lex.c:939
 
38319
+#, c-format
 
38320
+msgid "trigraph ??%c ignored, use -trigraphs to enable"
 
38321
+msgstr "trígrafo ??%c ignorado, use -trigraphs para habilitá-lo"
 
38322
+
 
38323
+#: lex.c:988
 
38324
+msgid "\"/*\" within comment"
 
38325
+msgstr "\"/*\" dentro de comentário"
 
38326
+
 
38327
+#: lex.c:1046
 
38328
+#, c-format
 
38329
+msgid "%s in preprocessing directive"
 
38330
+msgstr "%s em diretiva de preprocessamento"
 
38331
+
 
38332
+#: lex.c:1055
 
38333
+msgid "null character(s) ignored"
 
38334
+msgstr "um ou mais caracteres nulos ignorados"
 
38335
+
 
38336
+#: lex.c:1092
 
38337
+#, c-format
 
38338
+msgid "`%.*s' is not in NFKC"
 
38339
+msgstr "\"%.*s\" não está em NFKC"
 
38340
+
 
38341
+#: lex.c:1095
 
38342
+#, c-format
 
38343
+msgid "`%.*s' is not in NFC"
 
38344
+msgstr "\"%.*s\" não está em NFC"
 
38345
+
 
38346
+#: lex.c:1164 lex.c:1241
 
38347
+#, c-format
 
38348
+msgid "attempt to use poisoned \"%s\""
 
38349
+msgstr "tentativa de usar \"%s\" envenenado"
 
38350
+
 
38351
+#: lex.c:1172 lex.c:1249
 
38352
+msgid "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro"
 
38353
+msgstr "__VA_ARGS__ pode aparecer apenas na expansão de uma macro variádica C99"
 
38354
+
 
38355
+#: lex.c:1178 lex.c:1255
 
38356
+#, c-format
 
38357
+msgid "identifier \"%s\" is a special operator name in C++"
 
38358
+msgstr "identificador \"%s\" é o nome de um operador especial em C++"
 
38359
+
 
38360
+#: lex.c:1399
 
38361
+msgid "raw string delimiter longer than 16 characters"
 
38362
+msgstr "delimitador de string não tratada (raw) maior do que 16 caracteres"
 
38363
+
 
38364
+#: lex.c:1402
 
38365
+#, c-format
 
38366
+msgid "invalid character '%c' in raw string delimiter"
 
38367
+msgstr "caractere inválido \"%c\" em delimitador de string não tratada (raw)"
 
38368
+
 
38369
+#: lex.c:1525 lex.c:1547
 
38370
+msgid "unterminated raw string"
 
38371
+msgstr "string não tratada (raw) não terminada"
 
38372
+
 
38373
+#: lex.c:1573 lex.c:1706
 
38374
+msgid "invalid suffix on literal; C++11 requires a space between literal and identifier"
 
38375
+msgstr "sufixo inválido em literal; C++11 requer um espaço entre literal e identificador"
 
38376
+
 
38377
+#: lex.c:1684
 
38378
+msgid "null character(s) preserved in literal"
 
38379
+msgstr "um ou mais caracteres nulos preservados em literal"
 
38380
+
 
38381
+#: lex.c:1687
 
38382
+#, c-format
 
38383
+msgid "missing terminating %c character"
 
38384
+msgstr "faltando o caractere de terminação %c"
 
38385
+
 
38386
+#: lex.c:2245
 
38387
+msgid "C++ style comments are not allowed in ISO C90"
 
38388
+msgstr "comentários no estilo C++ não são permitidos em ISO C90"
 
38389
+
 
38390
+#: lex.c:2247
 
38391
+msgid "(this will be reported only once per input file)"
 
38392
+msgstr "(isso será relatado apenas uma vez por arquivo de entrada)"
 
38393
+
 
38394
+#: lex.c:2252
 
38395
+msgid "multi-line comment"
 
38396
+msgstr "comentário multilinha"
 
38397
+
 
38398
+#: lex.c:2583
 
38399
+#, c-format
 
38400
+msgid "unspellable token %s"
 
38401
+msgstr "token %s impronunciável"
 
38402
+
 
38403
+#: macro.c:191
 
38404
+#, c-format
 
38405
+msgid "macro \"%s\" is not used"
 
38406
+msgstr "macro \"%s\" não é usada"
 
38407
+
 
38408
+#: macro.c:229 macro.c:426
 
38409
+#, c-format
 
38410
+msgid "invalid built-in macro \"%s\""
 
38411
+msgstr "macro interna inválida \"%s\""
 
38412
+
 
38413
+#: macro.c:263
 
38414
+msgid "could not determine file timestamp"
 
38415
+msgstr "não foi possível determinar o arquivo de marca de tempo"
 
38416
+
 
38417
+#: macro.c:361
 
38418
+msgid "could not determine date and time"
 
38419
+msgstr "não foi possível determinar a data e a hora"
 
38420
+
 
38421
+#: macro.c:377
 
38422
+msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
 
38423
+msgstr "__COUNTER__ expandido dentro diretiva com -fdirectives-only"
 
38424
+
 
38425
+#: macro.c:535
 
38426
+msgid "invalid string literal, ignoring final '\\'"
 
38427
+msgstr "literal de string inválida, ignorando final \"\\\""
 
38428
+
 
38429
+#: macro.c:597
 
38430
+#, c-format
 
38431
+msgid "pasting \"%s\" and \"%s\" does not give a valid preprocessing token"
 
38432
+msgstr "colar \"%s\" em \"%s\" não resulta em nenhum token de preprocessamento válido"
 
38433
+
 
38434
+#: macro.c:719
 
38435
+msgid "ISO C99 requires rest arguments to be used"
 
38436
+msgstr "ISO C99 requer que argumentos restantes sejam usados"
 
38437
+
 
38438
+#: macro.c:724
 
38439
+#, c-format
 
38440
+msgid "macro \"%s\" requires %u arguments, but only %u given"
 
38441
+msgstr "macro \"%s\" requer %u argumentos, mas apenas %u foram fornecidos"
 
38442
+
 
38443
+#: macro.c:729
 
38444
+#, c-format
 
38445
+msgid "macro \"%s\" passed %u arguments, but takes just %u"
 
38446
+msgstr "macro \"%s\" passou %u argumentos, mas usa apenas %u"
 
38447
+
 
38448
+#: macro.c:923 traditional.c:680
 
38449
+#, c-format
 
38450
+msgid "unterminated argument list invoking macro \"%s\""
 
38451
+msgstr "lista de argumentos interminável chamando macro \"%s\""
 
38452
+
 
38453
+#: macro.c:1074
 
38454
+#, c-format
 
38455
+msgid "function-like macro \"%s\" must be used with arguments in traditional C"
 
38456
+msgstr "macro \"%s\" do tipo função deve ser usada com argumento em C tradicional"
 
38457
+
 
38458
+# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33305
 
38459
+#: macro.c:1746
 
38460
+#, c-format
 
38461
+msgid "invoking macro %s argument %d: empty macro arguments are undefined in ISO C90 and ISO C++98"
 
38462
+msgstr "chamando macro %s argumento %d: argumentos de macro vazios estão indefinidos em ISO C90 e ISO C++98"
 
38463
+
 
38464
+#: macro.c:2708
 
38465
+#, c-format
 
38466
+msgid "duplicate macro parameter \"%s\""
 
38467
+msgstr "parâmetro de macro \"%s\" duplicado"
 
38468
+
 
38469
+#: macro.c:2754
 
38470
+#, c-format
 
38471
+msgid "\"%s\" may not appear in macro parameter list"
 
38472
+msgstr "\"%s\" não pode aparecer na lista de parâmetros de macro"
 
38473
+
 
38474
+#: macro.c:2762
 
38475
+msgid "macro parameters must be comma-separated"
 
38476
+msgstr "parâmetros de macro devem ser separados por vírgula"
 
38477
+
 
38478
+#: macro.c:2779
 
38479
+msgid "parameter name missing"
 
38480
+msgstr "faltando nome de parâmetro"
 
38481
+
 
38482
+#: macro.c:2797
 
38483
+msgid "anonymous variadic macros were introduced in C99"
 
38484
+msgstr "macros variádicas anônimas foram introduzidas em C99"
 
38485
+
 
38486
+#: macro.c:2802
 
38487
+msgid "ISO C does not permit named variadic macros"
 
38488
+msgstr "ISO C não permite macros variádicas nomeadas"
 
38489
+
 
38490
+#: macro.c:2811
 
38491
+msgid "missing ')' in macro parameter list"
 
38492
+msgstr "faltando \")\" na lista de parâmetros de macro"
 
38493
+
 
38494
+#: macro.c:2860
 
38495
+msgid "'##' cannot appear at either end of a macro expansion"
 
38496
+msgstr "\"##\" não pode aparecer no final da expansão de macro"
 
38497
+
 
38498
+#: macro.c:2895
 
38499
+msgid "ISO C99 requires whitespace after the macro name"
 
38500
+msgstr "ISO C99 requer espaço em branco após o nome de macro"
 
38501
+
 
38502
+#: macro.c:2919
 
38503
+msgid "missing whitespace after the macro name"
 
38504
+msgstr "faltando espaço em branco após o nome de macro"
 
38505
+
 
38506
+#: macro.c:2953
 
38507
+msgid "'#' is not followed by a macro parameter"
 
38508
+msgstr "\"#\" não está seguido por um parâmetro de macro"
 
38509
+
 
38510
+#: macro.c:3111
 
38511
+#, c-format
 
38512
+msgid "\"%s\" redefined"
 
38513
+msgstr "\"%s\" re-definido"
 
38514
+
 
38515
+#: macro.c:3117
 
38516
+msgid "this is the location of the previous definition"
 
38517
+msgstr "essa é a localização da definição anterior"
 
38518
+
 
38519
+#: macro.c:3178
 
38520
+#, c-format
 
38521
+msgid "macro argument \"%s\" would be stringified in traditional C"
 
38522
+msgstr "argumento de macro \"%s\" estaria em uma string no C tradicional"
 
38523
+
 
38524
+#: macro.c:3205
 
38525
+#, c-format
 
38526
+msgid "invalid hash type %d in cpp_macro_definition"
 
38527
+msgstr "tipo de hash inválido %d em cpp_macro_definition"
 
38528
+
 
38529
+#: pch.c:87 pch.c:345 pch.c:359 pch.c:377 pch.c:383 pch.c:392 pch.c:399
 
38530
+msgid "while writing precompiled header"
 
38531
+msgstr "enquanto realizava escrita de header pré-compilado"
 
38532
+
 
38533
+#: pch.c:619
 
38534
+#, c-format
 
38535
+msgid "%s: not used because `%.*s' is poisoned"
 
38536
+msgstr "%s: não usado porque \"%.*s\" está envenenado"
 
38537
+
 
38538
+#: pch.c:641
 
38539
+#, c-format
 
38540
+msgid "%s: not used because `%.*s' not defined"
 
38541
+msgstr "%s: não usado porque \"%.*s\" não está definido"
 
38542
+
 
38543
+#: pch.c:653
 
38544
+#, c-format
 
38545
+msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
 
38546
+msgstr "%s: não usado porque \"%.*s\" está definido como \"%s\", e não \"%.*s\""
 
38547
+
 
38548
+#: pch.c:694
 
38549
+#, c-format
 
38550
+msgid "%s: not used because `%s' is defined"
 
38551
+msgstr "%s: não usado porque \"%s\" está definido"
 
38552
+
 
38553
+#: pch.c:714
 
38554
+#, c-format
 
38555
+msgid "%s: not used because `__COUNTER__' is invalid"
 
38556
+msgstr "%s: não usado porque \"__COUNTER__\" é inválido"
 
38557
+
 
38558
+#: pch.c:723 pch.c:898
 
38559
+msgid "while reading precompiled header"
 
38560
+msgstr "enquanto realizava leitura de header pré-compilado"
 
38561
+
 
38562
+#: traditional.c:750
 
38563
+#, c-format
 
38564
+msgid "detected recursion whilst expanding macro \"%s\""
 
38565
+msgstr "detectada recursão enquanto expandia macro \"%s\""
 
38566
+
 
38567
+#: traditional.c:968
 
38568
+msgid "syntax error in macro parameter list"
 
38569
+msgstr "erro de sintaxe na lista de parâmetros de macro"
 
38570
Index: libcpp/po/ChangeLog
 
38571
===================================================================
 
38572
--- a/src/libcpp/po/ChangeLog   (.../tags/gcc_4_8_2_release)
 
38573
+++ b/src/libcpp/po/ChangeLog   (.../branches/gcc-4_8-branch)
 
38574
@@ -1,3 +1,11 @@
 
38575
+2013-12-18  Joseph Myers  <joseph@codesourcery.com>
 
38576
+
 
38577
+       * pt_BR.po: New.
 
38578
+
 
38579
+2013-11-01  Joseph Myers  <joseph@codesourcery.com>
 
38580
+
 
38581
+       * tr.po: Update.
 
38582
+
 
38583
 2013-10-16  Release Manager
 
38584
 
 
38585
        * GCC 4.8.2 released.
 
38586
Index: libcpp/po/tr.po
 
38587
===================================================================
 
38588
--- a/src/libcpp/po/tr.po       (.../tags/gcc_4_8_2_release)
 
38589
+++ b/src/libcpp/po/tr.po       (.../branches/gcc-4_8-branch)
 
38590
@@ -1,20 +1,22 @@
 
38591
 # Turkish translations for cpplib messages.
 
38592
 # Copyright (C) 2007 Free Software Foundation, Inc.
 
38593
+# This file is distributed under the same license as the gcc package.
 
38594
 #
 
38595
 # Nilgün Belma Bugüner <nilgun@buguner.name.tr>, 2001, ..., 2007.
 
38596
+# Volkan Gezer <vlkngzr@gmail.com>, 2013.
 
38597
 msgid ""
 
38598
 msgstr ""
 
38599
-"Project-Id-Version: cpplib 4.2.0\n"
 
38600
+"Project-Id-Version: cpplib 4.8.0\n"
 
38601
 "Report-Msgid-Bugs-To: http://gcc.gnu.org/bugs.html\n"
 
38602
-"POT-Creation-Date: 2013-02-24 01:05+0000\n"
 
38603
-"PO-Revision-Date: 2007-05-23 01:17+0300\n"
 
38604
-"Last-Translator: Nilgün Belma Bugüner <nilgun@buguner.name.tr>\n"
 
38605
+"POT-Creation-Date: 2013-03-15 17:42+0000\n"
 
38606
+"PO-Revision-Date: 2013-11-01 22:29+0100\n"
 
38607
+"Last-Translator: Volkan Gezer <vlkngzr@gmail.com>\n"
 
38608
 "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
 
38609
 "Language: tr\n"
 
38610
 "MIME-Version: 1.0\n"
 
38611
 "Content-Type: text/plain; charset=UTF-8\n"
 
38612
 "Content-Transfer-Encoding: 8bit\n"
 
38613
-"X-Generator: KBabel 1.11.4\n"
 
38614
+"X-Generator: Lokalize 1.5\n"
 
38615
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
38616
 
 
38617
 #: charset.c:673
 
38618
@@ -121,10 +123,9 @@
 
38619
 msgstr "ISO standardı olmayan önceleme dizgesi, '\\%c'"
 
38620
 
 
38621
 #: charset.c:1320
 
38622
-#, fuzzy, c-format
 
38623
-#| msgid "unknown escape sequence '\\%c'"
 
38624
+#, c-format
 
38625
 msgid "unknown escape sequence: '\\%c'"
 
38626
-msgstr "bilinmeyen önceleme dizgesi '\\%c'"
 
38627
+msgstr "bilinmeyen kaçış dizgesi: '\\%c'"
 
38628
 
 
38629
 #: charset.c:1328
 
38630
 #, c-format
 
38631
@@ -163,10 +164,9 @@
 
38632
 msgstr "#%s bir GCC uzantısıdır"
 
38633
 
 
38634
 #: directives.c:362
 
38635
-#, fuzzy, c-format
 
38636
-#| msgid "#%s is a GCC extension"
 
38637
+#, c-format
 
38638
 msgid "#%s is a deprecated GCC extension"
 
38639
-msgstr "#%s bir GCC uzantısıdır"
 
38640
+msgstr "#%s eskimiş bir GCC uzantısıdır"
 
38641
 
 
38642
 #: directives.c:375
 
38643
 msgid "suggest not using #elif in traditional C"
 
38644
@@ -247,7 +247,7 @@
 
38645
 
 
38646
 #: directives.c:909
 
38647
 msgid "unexpected end of file after #line"
 
38648
-msgstr ""
 
38649
+msgstr "#line satırından sonra beklenmeyen dosya sonu"
 
38650
 
 
38651
 #: directives.c:912
 
38652
 #, c-format
 
38653
@@ -271,7 +271,7 @@
 
38654
 #: directives.c:1068 directives.c:1070 directives.c:1072 directives.c:1658
 
38655
 #, c-format
 
38656
 msgid "%s"
 
38657
-msgstr ""
 
38658
+msgstr "%s"
 
38659
 
 
38660
 #: directives.c:1096
 
38661
 #, c-format
 
38662
@@ -312,16 +312,12 @@
 
38663
 msgstr "main dosyasında '#pragma once'"
 
38664
 
 
38665
 #: directives.c:1462
 
38666
-#, fuzzy
 
38667
-#| msgid "invalid #pragma GCC poison directive"
 
38668
 msgid "invalid #pragma push_macro directive"
 
38669
-msgstr "geçersiz #pragma GCC poison yönergesi"
 
38670
+msgstr "geçersiz #pragma güdümlü_makro yönergesi"
 
38671
 
 
38672
 #: directives.c:1517
 
38673
-#, fuzzy
 
38674
-#| msgid "invalid #pragma GCC poison directive"
 
38675
 msgid "invalid #pragma pop_macro directive"
 
38676
-msgstr "geçersiz #pragma GCC poison yönergesi"
 
38677
+msgstr "geçersiz #pragma güdümlü_makro yönergesi"
 
38678
 
 
38679
 #: directives.c:1572
 
38680
 msgid "invalid #pragma GCC poison directive"
 
38681
@@ -347,10 +343,9 @@
 
38682
 msgstr "mevcut dosya %s den daha eski"
 
38683
 
 
38684
 #: directives.c:1653
 
38685
-#, fuzzy, c-format
 
38686
-#| msgid "invalid #pragma GCC poison directive"
 
38687
+#, c-format
 
38688
 msgid "invalid \"#pragma GCC %s\" directive"
 
38689
-msgstr "geçersiz #pragma GCC poison yönergesi"
 
38690
+msgstr "geçersiz \"#pragma GCC %s\" yönergesi"
 
38691
 
 
38692
 #: directives.c:1847
 
38693
 msgid "_Pragma takes a parenthesized string literal"
 
38694
@@ -405,7 +400,7 @@
 
38695
 msgid "\"%s\" re-asserted"
 
38696
 msgstr "\"%s\" tekrar olumlanmış"
 
38697
 
 
38698
-#: directives.c:2566
 
38699
+#: directives.c:2567
 
38700
 #, c-format
 
38701
 msgid "unterminated #%s"
 
38702
 msgstr "sonlandırılmamış #%s"
 
38703
@@ -424,16 +419,12 @@
 
38704
 msgstr "%s: %s"
 
38705
 
 
38706
 #: expr.c:479 expr.c:577
 
38707
-#, fuzzy
 
38708
-#| msgid "imaginary constants are a GCC extension"
 
38709
 msgid "fixed-point constants are a GCC extension"
 
38710
-msgstr "sanal sabitler bir GCC genişletmesidir"
 
38711
+msgstr "sabit noktalı sabitler bir GCC uzantısıdır"
 
38712
 
 
38713
 #: expr.c:504
 
38714
-#, fuzzy
 
38715
-#| msgid "invalid suffix \"%.*s\" on floating constant"
 
38716
 msgid "invalid prefix \"0b\" for floating constant"
 
38717
-msgstr "gerçel sabitin \"%.*s\" soneki geçersiz"
 
38718
+msgstr "kayan nokta için geçerisz \"0b\" öntakısı"
 
38719
 
 
38720
 #: expr.c:514
 
38721
 msgid "use of C99 hexadecimal floating constant"
 
38722
@@ -450,10 +441,8 @@
 
38723
 msgstr "geleneksel C \"%.*s\" sonekini kullanmaz"
 
38724
 
 
38725
 #: expr.c:564
 
38726
-#, fuzzy
 
38727
-#| msgid "imaginary constants are a GCC extension"
 
38728
 msgid "suffix for double constant is a GCC extension"
 
38729
-msgstr "sanal sabitler bir GCC genişletmesidir"
 
38730
+msgstr "çift sabit için öntakı bir GCC uzantısıdır"
 
38731
 
 
38732
 #: expr.c:570
 
38733
 #, c-format
 
38734
@@ -461,10 +450,8 @@
 
38735
 msgstr "onaltılık kayan sabitli \"%.*s\" soneki geçersiz"
 
38736
 
 
38737
 #: expr.c:581
 
38738
-#, fuzzy
 
38739
-#| msgid "imaginary constants are a GCC extension"
 
38740
 msgid "decimal float constants are a GCC extension"
 
38741
-msgstr "sanal sabitler bir GCC genişletmesidir"
 
38742
+msgstr "onluk kayan sabitler bir GCC uzantısıdır"
 
38743
 
 
38744
 #: expr.c:599
 
38745
 #, c-format
 
38746
@@ -472,10 +459,8 @@
 
38747
 msgstr "tamsayı sabitte sonek \"%.*s\" soneki geçersiz"
 
38748
 
 
38749
 #: expr.c:624
 
38750
-#, fuzzy
 
38751
-#| msgid "use of C99 long long integer constant"
 
38752
 msgid "use of C++0x long long integer constant"
 
38753
-msgstr "ISO C99 long long tamsayı sabitleri yasaklar"
 
38754
+msgstr "ISO C++0x long long tamsayı sabitlerinin kullanımı"
 
38755
 
 
38756
 #: expr.c:625
 
38757
 msgid "use of C99 long long integer constant"
 
38758
@@ -486,10 +471,8 @@
 
38759
 msgstr "sanal sabitler bir GCC genişletmesidir"
 
38760
 
 
38761
 #: expr.c:644
 
38762
-#, fuzzy
 
38763
-#| msgid "imaginary constants are a GCC extension"
 
38764
 msgid "binary constants are a GCC extension"
 
38765
-msgstr "sanal sabitler bir GCC genişletmesidir"
 
38766
+msgstr "ikili sabitler bir GCC uzantısıdır"
 
38767
 
 
38768
 #: expr.c:737
 
38769
 msgid "integer constant is too large for its type"
 
38770
@@ -517,10 +500,8 @@
 
38771
 msgstr "\"defined\" bu kullanımıyla uyarlanabilir olmayabilir"
 
38772
 
 
38773
 #: expr.c:948
 
38774
-#, fuzzy
 
38775
-#| msgid "integer overflow in preprocessor expression"
 
38776
 msgid "user-defined literal in preprocessor expression"
 
38777
-msgstr "önişlemci ifadesinde tamsayı taşması"
 
38778
+msgstr "önişleyici ifadesinde kullanıcı tanımlı bağımlı"
 
38779
 
 
38780
 #: expr.c:953
 
38781
 msgid "floating constant in preprocessor expression"
 
38782
@@ -536,20 +517,17 @@
 
38783
 msgstr "\"%s\" tanımlı değil"
 
38784
 
 
38785
 #: expr.c:1020
 
38786
-#, fuzzy
 
38787
-#| msgid "#%s is a GCC extension"
 
38788
 msgid "assertions are a GCC extension"
 
38789
-msgstr "#%s bir GCC uzantısıdır"
 
38790
+msgstr "belirteçler bir GCC uzantısıdır"
 
38791
 
 
38792
 #: expr.c:1023
 
38793
 msgid "assertions are a deprecated extension"
 
38794
-msgstr ""
 
38795
+msgstr "belirteçler artık kullanılmayan bir ifadedir"
 
38796
 
 
38797
 #: expr.c:1268
 
38798
-#, fuzzy, c-format
 
38799
-#| msgid "unbalanced stack in #if"
 
38800
+#, c-format
 
38801
 msgid "unbalanced stack in %s"
 
38802
-msgstr "#if ifadesinde karşılıksız yığın"
 
38803
+msgstr "%s içinde dengelenmemiş yığın"
 
38804
 
 
38805
 #: expr.c:1288
 
38806
 #, c-format
 
38807
@@ -594,39 +572,39 @@
 
38808
 msgid "division by zero in #if"
 
38809
 msgstr "#if içinde sıfırla bölme"
 
38810
 
 
38811
-#: files.c:504
 
38812
+#: files.c:505
 
38813
 msgid "NULL directory in find_file"
 
38814
 msgstr "find_file içinde boş dizin"
 
38815
 
 
38816
-#: files.c:542
 
38817
+#: files.c:553
 
38818
 msgid "one or more PCH files were found, but they were invalid"
 
38819
 msgstr "bir veya daha fazla PCH dosyası bulundu ama bunlar geçersiz"
 
38820
 
 
38821
-#: files.c:545
 
38822
+#: files.c:556
 
38823
 msgid "use -Winvalid-pch for more information"
 
38824
 msgstr "daha fazla bilgi almak için -Winvalid-pch kullanın"
 
38825
 
 
38826
-#: files.c:643
 
38827
+#: files.c:660
 
38828
 #, c-format
 
38829
 msgid "%s is a block device"
 
38830
 msgstr "%s bir blok aygıtıdır"
 
38831
 
 
38832
-#: files.c:660
 
38833
+#: files.c:677
 
38834
 #, c-format
 
38835
 msgid "%s is too large"
 
38836
 msgstr "%s çok büyük"
 
38837
 
 
38838
-#: files.c:700
 
38839
+#: files.c:717
 
38840
 #, c-format
 
38841
 msgid "%s is shorter than expected"
 
38842
 msgstr "%s beklenenden daha kısa"
 
38843
 
 
38844
-#: files.c:935
 
38845
+#: files.c:953
 
38846
 #, c-format
 
38847
 msgid "no include path in which to search for %s"
 
38848
 msgstr "%s için aranacaklar içinde başlık dosyaları yolu yok"
 
38849
 
 
38850
-#: files.c:1363
 
38851
+#: files.c:1381
 
38852
 msgid "Multiple include guards may be useful for:\n"
 
38853
 msgstr "Çoklu include önlemleri aşağıdakiler için kullanışlı olabilir:\n"
 
38854
 
 
38855
@@ -717,27 +695,24 @@
 
38856
 #: lex.c:1178 lex.c:1255
 
38857
 #, c-format
 
38858
 msgid "identifier \"%s\" is a special operator name in C++"
 
38859
-msgstr ""
 
38860
+msgstr "\"%s\" belirteci, C++'da özel bir işleç adıdır"
 
38861
 
 
38862
 #: lex.c:1399
 
38863
 msgid "raw string delimiter longer than 16 characters"
 
38864
-msgstr ""
 
38865
+msgstr "ham dizge ayracı 16 karakterden uzun"
 
38866
 
 
38867
 #: lex.c:1402
 
38868
-#, fuzzy, c-format
 
38869
-#| msgid "universal character %.*s is not valid in an identifier"
 
38870
+#, c-format
 
38871
 msgid "invalid character '%c' in raw string delimiter"
 
38872
-msgstr "evrensel karakter %.*s bir belirteç içinde geçerli değil"
 
38873
+msgstr "ham dizge ayracında geçersiz karakter '%c'"
 
38874
 
 
38875
 #: lex.c:1525 lex.c:1547
 
38876
-#, fuzzy
 
38877
-#| msgid "unterminated #%s"
 
38878
 msgid "unterminated raw string"
 
38879
-msgstr "sonlandırılmamış #%s"
 
38880
+msgstr "bitirilmemiş ham dizge"
 
38881
 
 
38882
 #: lex.c:1573 lex.c:1706
 
38883
 msgid "invalid suffix on literal; C++11 requires a space between literal and identifier"
 
38884
-msgstr ""
 
38885
+msgstr "geçersiz ifade soneki; C++11 ifade ve tanımlayıcı arasında bir boşluk gerektirir"
 
38886
 
 
38887
 #: lex.c:1684
 
38888
 msgid "null character(s) preserved in literal"
 
38889
@@ -785,7 +760,7 @@
 
38890
 
 
38891
 #: macro.c:377
 
38892
 msgid "__COUNTER__ expanded inside directive with -fdirectives-only"
 
38893
-msgstr ""
 
38894
+msgstr "__COUNTER__ -fdirectives-only ile talimat içerisinde genişletildi"
 
38895
 
 
38896
 #: macro.c:535
 
38897
 msgid "invalid string literal, ignoring final '\\'"
 
38898
@@ -823,7 +798,7 @@
 
38899
 #: macro.c:1746
 
38900
 #, c-format
 
38901
 msgid "invoking macro %s argument %d: empty macro arguments are undefined in ISO C90 and ISO C++98"
 
38902
-msgstr ""
 
38903
+msgstr "%s makrosu %d argümanı uygulanıyor: ISO C90 ve ISO C++98 içerisinde boş makro argümanları tanımsızdır"
 
38904
 
 
38905
 #: macro.c:2708
 
38906
 #, c-format
 
38907
@@ -890,38 +865,36 @@
 
38908
 msgid "invalid hash type %d in cpp_macro_definition"
 
38909
 msgstr "cpp_macro_definition içindeki isimli yapı türü %d geçersiz"
 
38910
 
 
38911
-#: pch.c:87 pch.c:335 pch.c:347 pch.c:365 pch.c:371 pch.c:380 pch.c:387
 
38912
+#: pch.c:87 pch.c:345 pch.c:359 pch.c:377 pch.c:383 pch.c:392 pch.c:399
 
38913
 msgid "while writing precompiled header"
 
38914
 msgstr "önderlemeli başlık yazılırken"
 
38915
 
 
38916
-#: pch.c:607
 
38917
-#, fuzzy, c-format
 
38918
-#| msgid "%s: not used because `%s' is defined"
 
38919
+#: pch.c:619
 
38920
+#, c-format
 
38921
 msgid "%s: not used because `%.*s' is poisoned"
 
38922
-msgstr "%s: `%s' tanımlı olduğundan kullanılmadı"
 
38923
+msgstr "%s: `%.*s' zehirli olduğu için kullanılmadı"
 
38924
 
 
38925
-#: pch.c:629
 
38926
+#: pch.c:641
 
38927
 #, c-format
 
38928
 msgid "%s: not used because `%.*s' not defined"
 
38929
 msgstr "%s: `%.*s' tanımlı olmadığından kullanılmadı"
 
38930
 
 
38931
-#: pch.c:641
 
38932
+#: pch.c:653
 
38933
 #, c-format
 
38934
 msgid "%s: not used because `%.*s' defined as `%s' not `%.*s'"
 
38935
 msgstr "%s: `%.*s' kullanılmadı çünkü `%s' olarak tanımlı, `%.*s' değil"
 
38936
 
 
38937
-#: pch.c:682
 
38938
+#: pch.c:694
 
38939
 #, c-format
 
38940
 msgid "%s: not used because `%s' is defined"
 
38941
 msgstr "%s: `%s' tanımlı olduğundan kullanılmadı"
 
38942
 
 
38943
-#: pch.c:702
 
38944
-#, fuzzy, c-format
 
38945
-#| msgid "%s: not used because `%s' is defined"
 
38946
+#: pch.c:714
 
38947
+#, c-format
 
38948
 msgid "%s: not used because `__COUNTER__' is invalid"
 
38949
-msgstr "%s: `%s' tanımlı olduğundan kullanılmadı"
 
38950
+msgstr "%s: `__COUNTER__' geçersiz olduğundan kullanılmadı"
 
38951
 
 
38952
-#: pch.c:711 pch.c:886
 
38953
+#: pch.c:723 pch.c:898
 
38954
 msgid "while reading precompiled header"
 
38955
 msgstr "önderlemeli başlık okunurken"
 
38956
 
 
38957
Index: .
 
38958
===================================================================
 
38959
--- a/src/.     (.../tags/gcc_4_8_2_release)
 
38960
+++ b/src/.     (.../branches/gcc-4_8-branch)
 
38961
 
 
38962
Property changes on: .
 
38963
___________________________________________________________________
 
38964
Modified: svn:mergeinfo
 
38965
   Merged /trunk:r202766,204547,206123-206126,206395,206628,207387